From bbec65d9bc1fcffe78b3c686b3999877811772bb Mon Sep 17 00:00:00 2001 From: wilsongomez Date: Tue, 7 Jun 2022 10:51:22 -0500 Subject: [PATCH] add option pay multiples sales --- __init__.py | 2 + sale.py | 71 ++++++++++++++++++++++++++--- sale.xml | 12 ++++- view/multiple_payment_sale_form.xml | 1 + view/select_sales_ask_form.xml | 8 ++++ 5 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 view/select_sales_ask_form.xml diff --git a/__init__.py b/__init__.py index 293ae54..a8d75e0 100644 --- a/__init__.py +++ b/__init__.py @@ -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, diff --git a/sale.py b/sale.py index d141450..2c3fabc 100644 --- a/sale.py +++ b/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}) diff --git a/sale.xml b/sale.xml index 2a3f487..28bfbd9 100644 --- a/sale.xml +++ b/sale.xml @@ -144,15 +144,23 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig Multiple Payment Sale multiple_payment_sale - select_multiple_payment_sale tree select_multiple_payment_sale_tree - + + sale.shop.select_sales.ask + form + select_sales_ask_form + + + Select Sales + sale.shop.select_sales + + diff --git a/view/multiple_payment_sale_form.xml b/view/multiple_payment_sale_form.xml index 3216d82..d994a33 100644 --- a/view/multiple_payment_sale_form.xml +++ b/view/multiple_payment_sale_form.xml @@ -12,6 +12,7 @@ this repository contains the full copyright notices and license terms. -->