summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authortrisusilo48 <tri.susilo@altama.co.id>2025-04-14 16:50:07 +0700
committertrisusilo48 <tri.susilo@altama.co.id>2025-04-14 16:50:07 +0700
commitb3e915fa8d2f280d76ca1afb19e729804aeed6e6 (patch)
tree3f728dfafc5ebbc597d42714faa5fcfaff8781d7 /indoteknik_custom/models/sale_order.py
parent6eb0b48ad5c418f565efdf1a60d221a10465b0b8 (diff)
parent3e22bea62b4c57268ce777d34ec6d19aede8b0c1 (diff)
Merge branch 'odoo-backup' into feature/feedback_bitehisp
# Conflicts: # indoteknik_custom/security/ir.model.access.csv
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py27
1 files changed, 23 insertions, 4 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index c7fcabbb..c83ffd61 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -67,12 +67,14 @@ class ShippingOption(models.Model):
class SaleOrder(models.Model):
_inherit = "sale.order"
+ koli_lines = fields.One2many('sales.order.koli', 'sale_order_id', string='Sales Order Koli', auto_join=True)
fulfillment_line_v2 = fields.One2many('sales.order.fulfillment.v2', 'sale_order_id', string='Fullfillment2')
fullfillment_line = fields.One2many('sales.order.fullfillment', 'sales_order_id', string='Fullfillment')
reject_line = fields.One2many('sales.order.reject', 'sale_order_id', string='Reject Lines')
order_sales_match_line = fields.One2many('sales.order.purchase.match', 'sales_order_id', string='Purchase Match Lines', states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}, copy=True)
total_margin = fields.Float('Total Margin', compute='_compute_total_margin', help="Total Margin in Sales Order Header")
total_percent_margin = fields.Float('Total Percent Margin', compute='_compute_total_percent_margin', help="Total % Margin in Sales Order Header")
+ total_margin_excl_third_party = fields.Float('Before Margin', help="Before Margin in Sales Order Header")
approval_status = fields.Selection([
('pengajuan1', 'Approval Manager'),
('pengajuan2', 'Approval Pimpinan'),
@@ -104,6 +106,7 @@ class SaleOrder(models.Model):
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",
help="Dipakai untuk alamat tempel", tracking=True)
fee_third_party = fields.Float('Fee Pihak Ketiga')
+ biaya_lain_lain = fields.Float('Biaya Lain Lain')
so_status = fields.Selection([
('terproses', 'Terproses'),
('sebagian', 'Sebagian Diproses'),
@@ -234,6 +237,18 @@ class SaleOrder(models.Model):
nomor_so_pengganti = fields.Char(string='Nomor SO Pengganti', copy=False, tracking=3)
shipping_option_id = fields.Many2one("shipping.option", string="Selected Shipping Option", domain="['|', ('sale_order_id', '=', False), ('sale_order_id', '=', id)]")
+ @api.constrains('fee_third_party', 'delivery_amt', 'biaya_lain_lain')
+ def _check_total_margin_excl_third_party(self):
+ for rec in self:
+ if rec.fee_third_party == 0 and rec.total_margin_excl_third_party != rec.total_percent_margin:
+ # Gunakan direct SQL atau flag context untuk menghindari rekursi
+ self.env.cr.execute("""
+ UPDATE sale_order
+ SET total_margin_excl_third_party = %s
+ WHERE id = %s
+ """, (rec.total_percent_margin, rec.id))
+ self.invalidate_cache()
+
@api.constrains('shipping_option_id')
def _check_shipping_option(self):
for rec in self:
@@ -453,7 +468,7 @@ class SaleOrder(models.Model):
delivery_amt = order.delivery_amt
else:
delivery_amt = 0
- order.percent_margin_after_delivery_purchase = round((order.margin_after_delivery_purchase / (order.amount_untaxed-delivery_amt-order.fee_third_party)) * 100, 2)
+ order.percent_margin_after_delivery_purchase = round((order.margin_after_delivery_purchase / (order.amount_untaxed-delivery_amt-order.fee_third_party-order.biaya_lain_lain)) * 100, 2)
def _compute_date_kirim(self):
for rec in self:
@@ -654,9 +669,10 @@ class SaleOrder(models.Model):
if self.email and not re.match(pattern, self.email):
raise UserError('Email yang anda input kurang valid')
+ # @api.constrains('delivery_amt', 'carrier_id', 'shipping_cost_covered')
def _validate_delivery_amt(self):
if self.delivery_amt < 1:
- if(self.carrier_id.id == 1 or self.shipping_cost_covered == 'indoteknik'):
+ if(self.carrier_id.id == 1 or self.shipping_cost_covered == 'indoteknik') and not self.env.context.get('active_id', []):
if(self.carrier_id.id == 1):
raise UserError('Untuk Kurir Indoteknik Delivery, Estimasi Ongkos Kirim Harus di isi')
else:
@@ -1427,7 +1443,7 @@ class SaleOrder(models.Model):
delivery_amt = 0
# order.total_percent_margin = round((order.total_margin / (order.amount_untaxed-delivery_amt-order.fee_third_party)) * 100, 2)
- order.total_percent_margin = round((order.total_margin / (order.amount_untaxed-order.fee_third_party)) * 100, 2)
+ order.total_percent_margin = round((order.total_margin / (order.amount_untaxed-order.fee_third_party-order.biaya_lain_lain)) * 100, 2)
# order.total_percent_margin = round((order.total_margin / (order.amount_untaxed)) * 100, 2)
@api.onchange('sales_tax_id')
@@ -1684,6 +1700,7 @@ class SaleOrder(models.Model):
order._compute_etrts_date()
order._validate_expected_ready_ship_date()
order._validate_delivery_amt()
+ # order._check_total_margin_excl_third_party()
# order._update_partner_details()
return order
@@ -1726,7 +1743,9 @@ class SaleOrder(models.Model):
"SO tidak dapat ditambahkan produk baru karena SO sudah menjadi sale order.")
res = super(SaleOrder, self).write(vals)
- self._validate_delivery_amt()
+ # self._check_total_margin_excl_third_party()
+ if any(fields in vals for fields in ['delivery_amt', 'carrier_id', 'shipping_cost_covered']):
+ self._validate_delivery_amt()
if any(field in vals for field in ["order_line", "client_order_ref"]):
self._calculate_etrts_date()
return res \ No newline at end of file