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