add option pay multiples sales

This commit is contained in:
wilsongomez 2022-06-07 10:51:22 -05:00
parent 29d350becd
commit bbec65d9bc
5 changed files with 86 additions and 8 deletions

View File

@ -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
View File

@ -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})

View File

@ -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>

View File

@ -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>

View File

@ -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>