Files
odoo-usability/sale_confirm_wizard/wizard/sale_confirm.py
2021-11-26 18:57:02 +03:00

83 lines
3.1 KiB
Python

# Copyright 2017-2021 Akretion France (http://www.akretion.com/)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
from odoo.addons.base.models.res_partner import WARNING_MESSAGE
class SaleConfirm(models.TransientModel):
_name = "sale.confirm"
_description = "Wizard to confirm a sale order"
sale_id = fields.Many2one("sale.order", string="Sale Order", readonly=True)
client_order_ref = fields.Char(string="Customer PO Number")
payment_term_id = fields.Many2one("account.payment.term", string="Payment Terms")
partner_invoice_id = fields.Many2one(
"res.partner", "Invoice Address", required=True
)
show_partner_invoice_id = fields.Many2one(
related="partner_invoice_id", string="Detailed Invoice Address"
)
partner_shipping_id = fields.Many2one(
"res.partner", "Delivery Address", required=True
)
show_partner_shipping_id = fields.Many2one(
related="partner_shipping_id", string="Detailed Delivery Address"
)
sale_warn = fields.Selection(WARNING_MESSAGE, "Sale Warning Type", readonly=True)
sale_warn_msg = fields.Text(string="Sale Warning Message", readonly=True)
@api.model
def _prepare_default_get(self, order):
partner = order.partner_id.commercial_partner_id
default = {
"sale_id": order.id,
"client_order_ref": order.client_order_ref,
"payment_term_id": order.payment_term_id.id or False,
"partner_invoice_id": order.partner_invoice_id.id,
"partner_shipping_id": order.partner_shipping_id.id,
"sale_warn_msg": partner.sale_warn_msg,
"sale_warn": partner.sale_warn,
}
return default
@api.model
def default_get(self, fields):
res = super().default_get(fields)
assert (
self._context.get("active_model") == "sale.order"
), "active_model should be sale.order"
order = self.env["sale.order"].browse(self._context.get("active_id"))
default = self._prepare_default_get(order)
res.update(default)
return res
def _prepare_update_so(self):
self.ensure_one()
return {
"client_order_ref": self.client_order_ref,
"payment_term_id": self.payment_term_id.id or False,
"partner_invoice_id": self.partner_invoice_id.id,
"partner_shipping_id": self.partner_shipping_id.id,
}
def confirm(self):
self.ensure_one()
partner = self.sale_id.partner_id.commercial_partner_id
if partner.sale_warn == "block":
raise UserError(
_(
"You cannot confirm this quotation because "
"customer '%s' has a blocker sale warning:\n\n%s"
)
% (partner.display_name, partner.sale_warn_msg)
)
vals = self._prepare_update_so()
self.sale_id.write(vals)
# confirm sale order
self.sale_id.action_confirm()
return True