add option pay multiples sales
This commit is contained in:
parent
29d350becd
commit
bbec65d9bc
|
@ -42,6 +42,7 @@ def register():
|
|||
sale.SaleMonthByShopStart,
|
||||
sale.MultiplePaymentSaleStart,
|
||||
sale.SelectMultiplePaymentSale,
|
||||
sale.SelectSalesAsk,
|
||||
# goal.SaleIndicator,
|
||||
# goal.SaleGoalLine,
|
||||
module='sale_shop', type_='model')
|
||||
|
@ -55,6 +56,7 @@ def register():
|
|||
sale.SaleMonthByShop,
|
||||
sale.WizardSalePayment,
|
||||
sale.MultiplePaymentSale,
|
||||
# sale.SelectLines,
|
||||
module='sale_shop', type_='wizard')
|
||||
Pool.register(
|
||||
sale.SaleBySupplier,
|
||||
|
|
71
sale.py
71
sale.py
|
@ -5,6 +5,7 @@ import logging
|
|||
from decimal import Decimal
|
||||
from datetime import date, timedelta
|
||||
import calendar
|
||||
from soupsieve import select
|
||||
from sql.aggregate import Sum
|
||||
from sql.functions import Extract
|
||||
from sql.conditionals import Case
|
||||
|
@ -1211,7 +1212,7 @@ class MultiplePaymentSaleStart(ModelView):
|
|||
|
||||
statement = fields.Many2One('account.statement', 'Statement',
|
||||
required=True, domain=[('state', '=', 'draft')])
|
||||
party = fields.Many2One('party.party', 'Party')
|
||||
party = fields.Many2One('party.party', 'Party', required=True)
|
||||
amount = fields.Numeric('Amount', digits=(16, 2))
|
||||
sales = fields.One2Many('select_multiple_payment_sale', 'line', 'Sales',
|
||||
context={'party': Eval('party')})
|
||||
|
@ -1227,12 +1228,25 @@ class MultiplePaymentSaleStart(ModelView):
|
|||
@staticmethod
|
||||
def default_company():
|
||||
return Transaction().context.get('company')
|
||||
|
||||
@staticmethod
|
||||
def default_amount():
|
||||
return Decimal(0)
|
||||
|
||||
@staticmethod
|
||||
def default_balance():
|
||||
return Decimal(0)
|
||||
|
||||
@fields.depends('sales','amount')
|
||||
def on_change_sales(self):
|
||||
if self.amount:
|
||||
self.balance = self.amount - sum(s.amount_to_pay for s in self.sales if s.amount_to_pay)
|
||||
|
||||
@fields.depends('sales','amount')
|
||||
def on_change_amount(self):
|
||||
if self.amount and self.sales:
|
||||
self.balance = self.amount - sum(s.amount_to_pay for s in self.sales if s.amount_to_pay)
|
||||
|
||||
|
||||
class SelectMultiplePaymentSale(ModelView):
|
||||
'Select Multiple Payment Sale'
|
||||
|
@ -1248,7 +1262,7 @@ class SelectMultiplePaymentSale(ModelView):
|
|||
help="Amount to pay must be less than balance")
|
||||
party = fields.Many2One('party.party', 'Party')
|
||||
company = fields.Many2One('company.company', 'Company', readonly=True)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def default_line():
|
||||
return 1
|
||||
|
@ -1266,11 +1280,11 @@ class SelectMultiplePaymentSale(ModelView):
|
|||
if self.sale:
|
||||
residual = self.sale.residual_amount
|
||||
self.residual_amount = residual
|
||||
self.amount_to_pay = residual if self.line.balance > residual else self.line.balance
|
||||
self.amount_to_pay = residual
|
||||
else:
|
||||
self.residual_amount = None
|
||||
self.amount_to_pay = None
|
||||
|
||||
|
||||
@fields.depends('amount_to_pay','line', 'residual_amount')
|
||||
def on_change_amount_to_pay(self):
|
||||
if self.amount_to_pay > self.line.balance or self.amount_to_pay > self.residual_amount:
|
||||
|
@ -1284,8 +1298,43 @@ class MultiplePaymentSale(Wizard):
|
|||
'sale_shop.multiple_payment_sale_view_form', [
|
||||
Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Create Moves', 'create_moves', 'tryton-ok', default=True),
|
||||
Button('Select Sales', 'sales_data_default'),
|
||||
])
|
||||
sales_data_default = StateTransition()
|
||||
|
||||
select_sales_ask = StateView('sale.shop.select_sales.ask',
|
||||
'sale_shop.select_sales_ask_view_form', [
|
||||
Button('Add', 'add_sales', 'tryton-ok', default=True),
|
||||
])
|
||||
|
||||
create_moves= StateTransition()
|
||||
add_sales = StateTransition()
|
||||
|
||||
def transition_sales_data_default(self):
|
||||
Start = self.start
|
||||
pool = Pool()
|
||||
Select = pool.get('sale.shop.select_sales.ask')
|
||||
sale_domain = [
|
||||
('state', 'in', ['confirmed', 'processing']),
|
||||
('party', '=', Start.party.id),
|
||||
]
|
||||
Select.sales.domain = sale_domain
|
||||
return 'select_sales_ask'
|
||||
|
||||
def default_select_sales_ask(self, fields):
|
||||
return {
|
||||
'party': self.start.party.id,
|
||||
'statement': self.start.statement.id }
|
||||
|
||||
def default_start(self, fields):
|
||||
default = {}
|
||||
if hasattr(self.select_sales_ask, 'party'):
|
||||
default.update({'party': self.select_sales_ask.party.id})
|
||||
if hasattr(self.select_sales_ask, 'statement'):
|
||||
default.update({'statement': self.select_sales_ask.statement.id})
|
||||
if hasattr(self.select_sales_ask, 'sales'):
|
||||
default.update({'sales': [{'sale': s.id, 'party': self.select_sales_ask.party.id} for s in self.select_sales_ask.sales]})
|
||||
return default
|
||||
|
||||
def transition_create_moves(self):
|
||||
pool = Pool()
|
||||
|
@ -1306,7 +1355,17 @@ class MultiplePaymentSale(Wizard):
|
|||
number=line.sale.number,
|
||||
)
|
||||
st_line.save()
|
||||
st_line.create_move()
|
||||
return 'end'
|
||||
# st_line.create_move()
|
||||
return 'end'
|
||||
|
||||
def transition_add_sales(self):
|
||||
return 'start'
|
||||
|
||||
|
||||
class SelectSalesAsk(ModelView):
|
||||
'Select Sales Ask'
|
||||
__name__ = 'sale.shop.select_sales.ask'
|
||||
sales = fields.Many2Many('sale.sale', None, None,
|
||||
'Sales')
|
||||
party = fields.Many2One('party.party', 'Party', readonly=True, states={'invisible': True})
|
||||
statement = fields.Many2One('account.statement', 'Statement', readonly=True, states={'invisible': True})
|
||||
|
|
12
sale.xml
12
sale.xml
|
@ -144,15 +144,23 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig
|
|||
<field name="name">Multiple Payment Sale</field>
|
||||
<field name="wiz_name">multiple_payment_sale</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="select_multiple_payment_sale_view_tree">
|
||||
<field name="model">select_multiple_payment_sale</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">select_multiple_payment_sale_tree</field>
|
||||
</record>
|
||||
|
||||
<menuitem parent="sale.menu_sale" id="menu_multiple_payment_sale"
|
||||
sequence="80" action="wizard_multiple_payment_sale"/>
|
||||
|
||||
<record model="ir.ui.view" id="select_sales_ask_view_form">
|
||||
<field name="model">sale.shop.select_sales.ask</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">select_sales_ask_form</field>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="wizard_select_sales_ask">
|
||||
<field name="name">Select Sales</field>
|
||||
<field name="wiz_name">sale.shop.select_sales</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
|
@ -12,6 +12,7 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="balance"/>
|
||||
<label name="description"/>
|
||||
<field name="description" colspan="3"/>
|
||||
<!-- <button name="select_sales_ask123" string="Select Sales"/> -->
|
||||
<field name="sales" colspan="4"
|
||||
view_ids="sale_shop.select_multiple_payment_sale_view_tree"/>
|
||||
</form>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- This file is part sale_shop module for Tryton.
|
||||
The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<field name="sales" colspan="4"/>
|
||||
<field name="party" />
|
||||
<field name="statement"/>
|
||||
</form>
|
Loading…
Reference in New Issue