diff --git a/invoice.py b/invoice.py index 0ad8fe3..76074aa 100644 --- a/invoice.py +++ b/invoice.py @@ -11,23 +11,23 @@ STATES = { class Invoice(metaclass=PoolMeta): __name__ = 'account.invoice' - boxes = fields.Function(fields.Float('Boxes', digits=(6, 2)), - 'get_lines_totals') - packing_qty = fields.Function(fields.Float('Pieces', digits=(6, 2)), - 'get_lines_totals') - quantity = fields.Function(fields.Float('Quantity', digits=(6, 2)), - 'get_lines_totals') - unit_qty = fields.Function(fields.Float('Stems', digits=(6, 2)), - 'get_lines_totals') + boxes = fields.Float('Boxes', digits=(6, 2)) + packing_qty = fields.Float('Pieces', digits=(6, 2)) + quantity = fields.Float('Quantity', digits=(6, 2)) + unit_qty = fields.Float('Stems', digits=(6, 2)) + # 'get_lines_totals') - def get_lines_totals(self, name=None): - res = [] - append_ = res.append + @fields.depends('unit_qty', 'quantity', 'packing_qty', 'boxes', 'lines') + def on_change_lines(self): if self.type == 'out': - for line in self.lines: - if line.origin and hasattr(line.origin, name): - append_(getattr(line.origin, name) or 0) - return round(sum(res), 2) + for name in ('unit_qty', 'quantity', 'packing_qty'): + values = [] + for line in self.lines: + if line.origin and hasattr(line.origin, name): + values.append(getattr(line.origin, name) or 0) + res = round(sum(values), 2) + print(name, res) + setattr(self, name, res) class InvoiceLine(metaclass=PoolMeta): diff --git a/portfolio_detailed.fods b/portfolio_detailed.fods index 9543eba..411f89f 100644 Binary files a/portfolio_detailed.fods and b/portfolio_detailed.fods differ diff --git a/sale.py b/sale.py index a01aa61..06d9dc4 100644 --- a/sale.py +++ b/sale.py @@ -1,6 +1,6 @@ # This file is part of Tryton. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. -from datetime import timedelta +from datetime import timedelta, date from itertools import chain from sql import Table @@ -38,6 +38,7 @@ class Sale(metaclass=PoolMeta): 'get_lines_totals') quantity = fields.Function(fields.Float('Quantity', digits=(6, 0)), 'get_lines_totals') + aged = fields.Function(fields.Integer('Aged'), 'get_aged') @classmethod def __setup__(cls): @@ -183,6 +184,11 @@ class Sale(metaclass=PoolMeta): pruduction, = Production.create([data]) return pruduction.id + def get_aged(self, name=None): + if self.sale_date: + aged = (date.today() - self.sale_date).days + return aged + def get_lines_totals(self, name=None): return sum(getattr(line, name) or 0 for line in self.lines) @@ -471,7 +477,7 @@ class PortfolioDetailed(Wizard): 'Portfolio Detailed' __name__ = 'farming.portfolio_detailed' start = StateView('farming.portfolio_detailed.start', - 'farming.print_portfolio_detailed_start_view_form', [ + 'farming.print_sale_portfolio_detailed_start_view_form', [ Button('Cancel', 'end', 'tryton-cancel'), Button('Print', 'print_', 'tryton-ok', default=True), ]) @@ -492,14 +498,11 @@ class PortfolioDetailed(Wizard): class PortfolioDetailedReport(Report): - __name__ = 'party.portfolio_detailed.report' + __name__ = 'farming.portfolio_detailed.report' @classmethod def get_domain_inv(cls, dom_sales, data): states = ['done'] - # if data['to_date']: - # states.append('paid') - # ('state', '!=', ['done']) dom_sales.append([ ('company', '=', data['company']), ]) @@ -532,17 +535,15 @@ class PortfolioDetailedReport(Report): if data['to_date']: move_lines_paid = [] for line in sale.payments: - if line.move.date <= data['to_date']: - pay_to_date.append(line.debit - line.credit) - move_lines_paid.append(line.id) + if line.date <= data['to_date']: + pay_to_date.append(line.amount) amount = sum(pay_to_date) if amount >= sale.total_amount: continue amount_to_pay = sale.total_amount - amount - sale.amount_to_pay = amount_to_pay else: - amount_to_pay = sale.amount_to_pay + amount_to_pay = sale.residual_amount if 'field_salesman' in data.keys() and data['field_salesman'] and sale.salesman: if sale.salesman.id not in salesmans.keys(): @@ -564,8 +565,8 @@ class PortfolioDetailedReport(Report): salesman = 'without_seller' else: salesman = 'without_seller' - if invoice.party.id not in salesmans[salesman]['parties'].keys(): - salesmans[salesman]['parties'][invoice.party.id] = { + if sale.party.id not in salesmans[salesman]['parties'].keys(): + salesmans[salesman]['parties'][sale.party.id] = { 'party': sale.party, 'invoices': [], 'total_invoices': [], diff --git a/sale.xml b/sale.xml index 8227743..b8d0d21 100644 --- a/sale.xml +++ b/sale.xml @@ -71,5 +71,26 @@ this repository contains the full copyright notices and license terms. --> sale.sale,-1 + + + farming.portfolio_detailed.start + form + sale_portfolio_detailed_start_form + + + Sale Portfolio Detailed + farming.portfolio_detailed + + + Sale Portfolio Detailed + party.party + farming.portfolio_detailed.report + farming/portfolio_detailed.fods + ods + False + + + diff --git a/view/sale_portfolio_detailed_start_form.xml b/view/sale_portfolio_detailed_start_form.xml new file mode 100644 index 0000000..3121fe9 --- /dev/null +++ b/view/sale_portfolio_detailed_start_form.xml @@ -0,0 +1,13 @@ + + +
+