diff --git a/invoice.odt b/invoice.odt index 6e435bd09f..781ad13dbc 100644 Binary files a/invoice.odt and b/invoice.odt differ diff --git a/invoice.py b/invoice.py index 629380a401..069ab71f90 100644 --- a/invoice.py +++ b/invoice.py @@ -2,6 +2,7 @@ #this repository contains the full copyright notices and license terms. from decimal import Decimal import base64 +import itertools import operator from sql import Literal from sql.aggregate import Count, Sum @@ -137,6 +138,7 @@ class Invoice(Workflow, ModelSQL, ModelView): states=_STATES, depends=_DEPENDS, on_change=['lines', 'taxes', 'currency', 'party', 'type']) comment = fields.Text('Comment', states=_STATES, depends=_DEPENDS) + origins = fields.Function(fields.Char('Origins'), 'get_origins') untaxed_amount = fields.Function(fields.Numeric('Untaxed', digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), @@ -994,6 +996,15 @@ class Invoice(Workflow, ModelSQL, ModelView): return [('id', 'in', [i.id for i in invoices])] return [('party',) + clause[1:]] + @classmethod + def get_origins(cls, invoices, name): + origins = {} + with Transaction().set_user(0, set_context=True): + for invoice in cls.browse(invoices): + origins[invoice.id] = ', '.join(set(itertools.ifilter(None, + (l.origin_name for l in invoice.lines)))) + return origins + @classmethod def delete(cls, invoices): cls.check_modify(invoices) @@ -1681,6 +1692,10 @@ class InvoiceLine(ModelSQL, ModelView): else: return _ZERO + @property + def origin_name(self): + return self.origin.rec_name if self.origin else None + def get_invoice_taxes(self, name): pool = Pool() Tax = pool.get('account.tax')