This commit is contained in:
gsinghpal
2026-03-09 15:21:22 -04:00
parent a3e85a23ef
commit acd3fc455e
243 changed files with 20459 additions and 4197 deletions

View File

@@ -1,5 +1,9 @@
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -16,11 +20,10 @@ class SaleOrderLine(models.Model):
help="The rental product line this deposit is associated with.",
)
@api.model_create_multi
def create(self, vals_list):
lines = super().create(vals_list)
def _ensure_deposit_lines(self):
"""Check rental lines and create missing security deposit lines."""
deposit_vals = []
for line in lines:
for line in self:
if not line.is_rental or line.is_security_deposit:
continue
if not line.order_id.is_rental_order:
@@ -29,9 +32,9 @@ class SaleOrderLine(models.Model):
if deposit_amount <= 0:
continue
existing = line.order_id.order_line.filtered(
lambda l: (
lambda l, src=line: (
l.is_security_deposit
and l.rental_deposit_source_line_id == line
and l.rental_deposit_source_line_id == src
)
)
if existing:
@@ -41,16 +44,36 @@ class SaleOrderLine(models.Model):
'order_id': line.order_id.id,
'product_id': deposit_product.id,
'product_uom_id': deposit_product.uom_id.id,
'name': f"SECURITY DEPOSIT - REFUNDABLE - {line.product_id.display_name}",
'name': (
"SECURITY DEPOSIT - REFUNDABLE UPON RETURN IN "
f"GOOD & CLEAN CONDITION - {line.product_id.display_name}"
),
'product_uom_qty': 1,
'price_unit': deposit_amount,
'is_security_deposit': True,
'rental_deposit_source_line_id': line.id,
})
if deposit_vals:
super().create(deposit_vals)
self.env['sale.order.line'].with_context(
skip_deposit_check=True,
).create(deposit_vals)
return bool(deposit_vals)
@api.model_create_multi
def create(self, vals_list):
lines = super().create(vals_list)
if not self.env.context.get('skip_deposit_check'):
lines._ensure_deposit_lines()
return lines
def write(self, vals):
res = super().write(vals)
if self.env.context.get('skip_deposit_check'):
return res
if 'is_rental' in vals or 'product_id' in vals:
self._ensure_deposit_lines()
return res
def unlink(self):
deposit_lines = self.env['sale.order.line']
for line in self: