76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
from odoo import _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = "sale.order"
|
|
|
|
balance = fields.Monetary(compute="_compute_balance")
|
|
updated_balance = fields.Monetary(compute="_compute_updated_balance")
|
|
|
|
def _compute_balance(self):
|
|
for order in self:
|
|
order.balance = -order.partner_id.commercial_partner_id.credit
|
|
|
|
@api.depends("amount_total")
|
|
def _compute_updated_balance(self):
|
|
for order in self:
|
|
order.updated_balance = order.balance - (
|
|
order.amount_total / order.currency_rate
|
|
)
|
|
|
|
@api.constrains("amount_total")
|
|
def _check_amount_total(self):
|
|
for order in self:
|
|
if order.state != "draft" or not order.website_id:
|
|
continue
|
|
if order.website_id.avoid_depts and order.updated_balance < 0:
|
|
raise ValidationError(_("You don't have enough credit."))
|
|
|
|
def _prepare_order_line_values(
|
|
self,
|
|
product_id,
|
|
quantity,
|
|
linked_line_id=False,
|
|
no_variant_attribute_values=None,
|
|
product_custom_attribute_values=None,
|
|
**kwargs
|
|
):
|
|
values = super()._prepare_order_line_values(
|
|
product_id,
|
|
quantity,
|
|
linked_line_id=linked_line_id,
|
|
no_variant_attribute_values=no_variant_attribute_values,
|
|
product_custom_attribute_values=product_custom_attribute_values,
|
|
**kwargs
|
|
)
|
|
max_qty = float(kwargs.get("max_qty")) if kwargs.get("max_qty") else quantity
|
|
values.update(
|
|
{
|
|
"product_uom_ordered_qty": quantity,
|
|
"product_uom_max_qty": max_qty,
|
|
}
|
|
)
|
|
return values
|
|
|
|
def _prepare_order_line_update_values(
|
|
self, order_line, quantity, linked_line_id=False, **kwargs
|
|
):
|
|
values = super()._prepare_order_line_update_values(
|
|
order_line, quantity, linked_line_id=linked_line_id, **kwargs
|
|
)
|
|
max_qty = kwargs.get("max_qty", quantity)
|
|
if quantity != order_line.product_uom_ordered_qty:
|
|
values["product_uom_ordered_qty"] = quantity
|
|
if max_qty and max_qty != order_line.product_uom_max_qty:
|
|
values["product_uom_max_qty"] = max_qty
|
|
|
|
return values
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
orders = super().create(vals_list)
|
|
for order in orders:
|
|
if order.website_id:
|
|
order.action_add_to_batch()
|
|
return orders
|