shopinvader/odoo-shopinvader-payment

View on GitHub
invader_sale_payment/models/payment_transaction.py

Summary

Maintainability
B
5 hrs
Test Coverage
# -*- coding: utf-8 -*-
# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

# TO REMOVE IN V12...  provided by sale addon

from odoo import _, api, fields, models


class PaymentTransaction(models.Model):

    _inherit = "payment.transaction"

    sale_order_ids = fields.Many2many(
        "sale.order",
        "sale_order_transaction_rel",
        "transaction_id",
        "sale_order_id",
        string="Sales Orders",
        copy=False,
        readonly=True,
    )

    sale_order_ids_nbr = fields.Integer(
        compute="_compute_sale_order_ids_nbr", string="# of Sales Orders"
    )

    @api.depends("sale_order_ids")
    def _compute_sale_order_ids_nbr(self):
        for trans in self:
            trans.sale_order_ids_nbr = len(trans.sale_order_ids)

    @api.model
    def _compute_reference_prefix(self, values):
        prefix = super(PaymentTransaction, self)._compute_reference_prefix(
            values
        )
        if not prefix and values and values.get("sale_order_ids"):
            many_list = self.resolve_2many_commands(
                "sale_order_ids", values["sale_order_ids"], fields=["name"]
            )
            return ",".join(dic["name"] for dic in many_list)
        return prefix

    @api.multi
    def _log_payment_transaction_sent(self):
        super(PaymentTransaction, self)._log_payment_transaction_sent()
        for trans in self:
            post_message = trans._get_payment_transaction_sent_message()
            for so in trans.sale_order_ids:
                so.message_post(body=post_message)

    @api.multi
    def _log_payment_transaction_received(self):
        super(PaymentTransaction, self)._log_payment_transaction_received()
        for trans in self.filtered(
            lambda t: t.provider not in ("manual", "transfer")
        ):
            post_message = trans._get_payment_transaction_received_message()
            for so in trans.sale_order_ids:
                so.message_post(body=post_message)

    @api.model
    def create(self, vals):
        if not vals.get("reference"):
            vals["reference"] = self._compute_reference(values=vals)
        return super(PaymentTransaction, self).create(vals)

    @api.multi
    def action_view_sales_orders(self):
        action = {
            "name": _("Sales Order(s)"),
            "type": "ir.actions.act_window",
            "res_model": "sale.order",
            "target": "current",
        }
        sale_order_ids = self.sale_order_ids.ids
        if len(sale_order_ids) == 1:
            action["res_id"] = sale_order_ids[0]
            action["view_mode"] = "form"
        else:
            action["view_mode"] = "tree,form"
            action["domain"] = [("id", "in", sale_order_ids)]
        return action