From 1b6b4420d75e393a4b1186413e2771dc705e5ff9 Mon Sep 17 00:00:00 2001 From: "Jacky (trj)" Date: Fri, 7 Oct 2022 15:15:11 +0000 Subject: [PATCH] [FIX] loyalty, pos_loyalty: download, print, mail gift card MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Gift cards can now be sent alongside the receipt via mail in the Receipt Screen. - The gift card report no longer show n² gift cards - Properly download all PDF files for the gift cards when there are multiple gift card programs closes odoo/odoo#102910 X-original-commit: 5b269ebb3e725ff84c437e204874c14251ed1d78 Signed-off-by: Masereel Pierre Signed-off-by: Trinh Jacky (trj) --- .../report/loyalty_report_templates.xml | 58 +++++++++---------- addons/pos_loyalty/models/pos_config.py | 2 +- addons/pos_loyalty/models/pos_order.py | 28 +++++++++ .../static/src/js/PaymentScreen.js | 2 +- 4 files changed, 58 insertions(+), 32 deletions(-) diff --git a/addons/loyalty/report/loyalty_report_templates.xml b/addons/loyalty/report/loyalty_report_templates.xml index 27fc20dfa9c..f408e0066dd 100644 --- a/addons/loyalty/report/loyalty_report_templates.xml +++ b/addons/loyalty/report/loyalty_report_templates.xml @@ -75,36 +75,34 @@ diff --git a/addons/pos_loyalty/models/pos_config.py b/addons/pos_loyalty/models/pos_config.py index e4207ce34e6..f377a19e7c4 100644 --- a/addons/pos_loyalty/models/pos_config.py +++ b/addons/pos_loyalty/models/pos_config.py @@ -50,7 +50,7 @@ class PosConfig(models.Model): if invalid_reward_products_msg: prefix_error_msg = _("To continue, make the following reward products available in Point of Sale.") raise UserError(f"{prefix_error_msg}\n{invalid_reward_products_msg}") - if gift_card_programs: + if gift_card_programs: for gc_program in gift_card_programs: # Do not allow a gift card program with more than one rule or reward, and check that they make sense if len(gc_program.reward_ids) > 1: diff --git a/addons/pos_loyalty/models/pos_order.py b/addons/pos_loyalty/models/pos_order.py index e403351fb5d..432c105fd8f 100644 --- a/addons/pos_loyalty/models/pos_order.py +++ b/addons/pos_loyalty/models/pos_order.py @@ -3,6 +3,7 @@ from collections import defaultdict from odoo import _, models +import base64 class PosOrder(models.Model): _inherit = 'pos.order' @@ -146,3 +147,30 @@ class PosOrder(models.Model): fields = super(PosOrder, self)._get_fields_for_order_line() fields.extend(['is_reward_line', 'reward_id', 'coupon_id', 'reward_identifier_code', 'points_cost']) return fields + + def _add_mail_attachment(self, name, ticket): + attachment = super()._add_mail_attachment(name, ticket) + gift_card_programs = self.config_id._get_program_ids().filtered(lambda p: p.program_type == 'gift_card' and + p.pos_report_print_id) + if gift_card_programs: + gift_cards = self.env['loyalty.card'].search([('source_pos_order_id', '=', self.id), + ('program_id', 'in', gift_card_programs.mapped('id'))]) + if gift_cards: + for program in gift_card_programs: + filtered_gift_cards = gift_cards.filtered(lambda gc: gc.program_id == program) + if filtered_gift_cards: + action_report = program.pos_report_print_id + report = action_report._render_qweb_pdf(action_report.report_name, filtered_gift_cards.mapped('id')) + filename = name + '.pdf' + gift_card_pdf = self.env['ir.attachment'].create({ + 'name': filename, + 'type': 'binary', + 'datas': base64.b64encode(report[0]), + 'store_fname': filename, + 'res_model': 'pos.order', + 'res_id': self.ids[0], + 'mimetype': 'application/x-pdf' + }) + attachment += [(4, gift_card_pdf.id)] + + return attachment diff --git a/addons/pos_loyalty/static/src/js/PaymentScreen.js b/addons/pos_loyalty/static/src/js/PaymentScreen.js index 13779d5e101..1b21fd2c4ea 100644 --- a/addons/pos_loyalty/static/src/js/PaymentScreen.js +++ b/addons/pos_loyalty/static/src/js/PaymentScreen.js @@ -148,7 +148,7 @@ export const PosLoyaltyPaymentScreen = (PaymentScreen) => } if (payload.coupon_report) { for (const report_entry of Object.entries(payload.coupon_report)) { - this.env.legacyActionManager.do_action(report_entry[0], { + await this.env.legacyActionManager.do_action(report_entry[0], { additional_context: { active_ids: report_entry[1], }