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], }