From d97f7330e8019fbd77173c764172b6607201535b Mon Sep 17 00:00:00 2001 From: wilson gomez Date: Mon, 27 Sep 2021 10:33:14 -0500 Subject: [PATCH] minor fix report --- analytic_report.ods | Bin 18837 -> 18893 bytes purchase.py | 88 +++++++++++++++++++++++++++----------------- purchase.xml | 9 ++--- 3 files changed, 57 insertions(+), 40 deletions(-) diff --git a/analytic_report.ods b/analytic_report.ods index 5452a6d6acdc2909d9eab9c847f0d806c12753a6..4c272b419d56b65471eefa253964179234bc19da 100644 GIT binary patch literal 18893 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 diff --git a/purchase.py b/purchase.py index 54b8915..031e8ef 100644 --- a/purchase.py +++ b/purchase.py @@ -167,50 +167,70 @@ class PurchaseAnalyticReport(Report): @classmethod def compute_amount_tax(cls, line): Tax = Pool().get('account.tax') - tax_list = Tax.compute(line.taxes, - line.unit_price or Decimal('0.0'), - line.quantity or 0.0) + tax_list = Tax.compute(Tax.browse(line['taxes']), + line['unit_price'] or Decimal('0.0'), + line['quantity'] or 0.0) return sum([t['amount'] for t in tax_list], Decimal('0.0')) + @classmethod + def _get_rec(cls, line): + if line['analytic_accounts.']: + analytic_account = line['analytic_accounts.'][0]['account.'] + inv_unit_price = Decimal(0) + if line['invoice_lines.']: + inv_unit_price = line['invoice_lines.'][0]['unit_price'] + + value = { + 'reference': line['purchase.']['reference'], + 'purchase_date': line['purchase.']['purchase_date'], + 'state': line['purchase.']['state'], + 'shipment_state': line['purchase.']['shipment_state'], + 'invoice_state': line['purchase.']['invoice_state'], + 'id_number': line['purchase.']['party.']['id_number'], + 'name': line['purchase.']['party.']['name'], + 'description': line['description'], + 'unit_name': line['unit.']['name'], + 'quantity': line['quantity'], + 'unit_price': line['unit_price'], + 'analytic_account': analytic_account['code'] + ' ' + analytic_account['name'] if analytic_account else '', + 'taxes': list(line['taxes']), + 'qty_received': sum([r['quantity'] for r in line['moves.']]), + 'amount': line['amount'], + 'inv_unit_price': inv_unit_price + } + tax_amount = cls.compute_amount_tax(value) + full_amount = value['amount'] + tax_amount + value.update({ + 'tax_amount': tax_amount, + 'full_amount': full_amount, + }) + return value + @classmethod def get_context(cls, records, header, data): report_context = super().get_context(records, header, data) pool = Pool() Company = pool.get('company.company') - Purchase = pool.get('purchase.purchase') - purchases = Purchase.search([ - ('company', '=', data['company']), - ('purchase_date', '>=', data['start_date']), - ('purchase_date', '<=', data['end_date']), - ], order=[('purchase_date', 'ASC')]) + PurchaseLine = pool.get('purchase.line') + fields_names = ['purchase.reference', 'purchase.purchase_date', 'purchase.party.id_number', + 'purchase.party.name', 'description', 'unit.name', 'quantity', 'unit_price', + 'purchase.state', 'purchase.shipment_state', 'purchase.invoice_state', + 'analytic_accounts.account.name', 'analytic_accounts.account.code', 'taxes', + 'invoice_lines.unit_price', 'moves.quantity', 'amount' + ] + + lines = PurchaseLine.search_read([ + ('purchase.company', '=', data['company']), + ('purchase.purchase_date', '>=', data['start_date']), + ('purchase.purchase_date', '<=', data['end_date']), + ], fields_names=fields_names, order=[('purchase.purchase_date', 'ASC')]) records = [] - for purchase in purchases: - for line in purchase.lines: - analytic = None - qty_received = 0 - unit_price_inv_sup = None - if hasattr(line, 'analytic_accounts') and line.analytic_accounts: - for acc in line.analytic_accounts: - if acc.account: - code = acc.account.code or '' - name = acc.account.name - analytic = code + '-' + name - tax_amount = cls.compute_amount_tax(line) - setattr(line, 'analytic', analytic) - setattr(line, 'tax_amount', tax_amount) - setattr(line, 'full_amount', tax_amount + line.amount) - for shipment in purchase.shipments: - for move in shipment.incoming_moves: - if move.product.id == line.product.id: - qty_received += move.quantity - for inv_line in line.invoice_lines: - if inv_line.type == 'line': - unit_price_inv_sup = inv_line.unit_price - setattr(line, 'qty_received', qty_received) - setattr(line, 'unit_price_inv_sup', unit_price_inv_sup) - records.append(purchase) + records_append = records.append + get_rec = cls._get_rec + for line in lines: + records_append(get_rec(line)) report_context['records'] = records report_context['company'] = Company(data['company']) diff --git a/purchase.xml b/purchase.xml index c2311ce..b3a56e9 100644 --- a/purchase.xml +++ b/purchase.xml @@ -4,9 +4,6 @@ this repository contains the full copyright notices and license terms. --> - - Purchase Analytic Report @@ -22,9 +19,9 @@ this repository contains the full copyright notices and license terms. --> Wizard Purchase Analytic Report purchase_report.analytic - + + purchase.line