shopinvader/odoo-shopinvader-payment

View on GitHub
invader_sale_payment/models/sale_order.py

Summary

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

from odoo import api, fields, models


class SaleOrder(models.Model):

    _name = "sale.order"
    _inherit = "sale.order"

    transaction_ids = fields.Many2many(
        "payment.transaction",
        "sale_order_transaction_rel",
        "sale_order_id",
        "transaction_id",
        string="Transactions",
        copy=False,
        readonly=True,
    )
    authorized_transaction_ids = fields.Many2many(
        "payment.transaction",
        compute="_compute_authorized_transaction_ids",
        string="Authorized Transactions",
        copy=False,
        readonly=True,
    )
    payment_transaction_count = fields.Integer(
        string="Number of payment transactions",
        compute="_compute_payment_transaction_count",
    )

    @api.depends("transaction_ids")
    def _compute_authorized_transaction_ids(self):
        for rec in self:
            rec.authorized_transaction_ids = rec.transaction_ids.filtered(
                lambda t: t.state == "authorized"
            )

    @api.depends("transaction_ids")
    def _compute_payment_transaction_count(self):
        for rec in self:
            rec.payment_transaction_count = len(rec.transaction_ids)

    @api.multi
    def action_view_transaction(self):
        action = {
            "type": "ir.actions.act_window",
            "name": "Payment Transactions",
            "res_model": "payment.transaction",
        }
        if self.payment_transaction_count == 1:
            action.update(
                {"res_id": self.transaction_ids.id, "view_mode": "form"}
            )
        else:
            action.update(
                {
                    "view_mode": "tree,form",
                    "domain": [("id", "in", self.transaction_ids.ids)],
                }
            )
        return action