From 4ae553d74dc68e08b4b2226fd5ad2da43ed94d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Thu, 19 Sep 2013 17:33:27 +0200 Subject: [PATCH] Replace reference copying by relate review932002 --- invoice.odt | Bin 12446 -> 12131 bytes invoice.py | 15 +++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/invoice.odt b/invoice.odt index 6e435bd09fb36cf2b831fdd38272fd6d7bd34f0f..781ad13dbc71893b7428491abf3d59f35e6cb4e4 100644 GIT binary patch literal 12131 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 literal 12446 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 H{O*4MVj->L 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')