summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-08-14 13:37:16 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-08-14 13:37:16 +0700
commit72befb1e3401a4c31dbf2698963ec52c5baba8cd (patch)
tree314c9219b47c02464fb2b62922a7b3150d308132 /indoteknik_custom/models/sale_order.py
parent3c179deae0dbf618f6171003532dc86c48ada367 (diff)
parented089761d43b20ecc4190ca9d88a0bdb769d81f2 (diff)
Merge branch 'production' of bitbucket.org:altafixco/indoteknik-addons into production
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py96
1 files changed, 95 insertions, 1 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 14957b24..0b0a679f 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -108,6 +108,7 @@ class SaleOrder(models.Model):
date_driver_arrival = fields.Datetime(string='Arrival Date', compute='_compute_date_kirim', copy=False)
date_driver_departure = fields.Datetime(string='Departure Date', compute='_compute_date_kirim', copy=False)
note_website = fields.Char(string="Note Website")
+ use_button = fields.Boolean(string='Using Calculate Selling Price', copy=False)
def _compute_date_kirim(self):
for rec in self:
@@ -842,5 +843,98 @@ class SaleOrder(models.Model):
}
}
+ def calculate_selling_price(self):
+ # ongkos kirim, biaya pihak ketiga calculate @stephan
+ # TODO voucher @stephan
+ # vendor hilangin child di field SO Line @stephan
+ # button pindahin @stephan
+ # last so 1 tahun ke belakang @stephan
+ # pastikan harga beli 1 tahun ke belakang jg
+ # harga yg didapat dari semua kumpulan parent parner dan child nya
+ # counter di klik berapa banyak @stephan
+ for order_line in self.order_line:
+ if not order_line.product_id:
+ continue
+ current_time = datetime.now()
+ delta_time = current_time - timedelta(days=365)
+ delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S')
+
+ # Initialize partners list with parent_id or partner_id
+ partners = []
+ parent_id = self.partner_id.parent_id or self.partner_id
+
+ # Add all child_ids and the parent itself to partners as IDs
+ partners.extend(parent_id.child_ids.ids)
+ partners.append(parent_id.id)
+
+ rec_purchase_price, rec_taxes_id, rec_vendor_id = order_line._get_purchase_price(order_line.product_id)
+ state = ['sale', 'done']
+ last_so = self.env['sale.order.line'].search([
+ # ('order_id.partner_id.id', '=', order_line.order_id.partner_id.id),
+ ('order_id.partner_id', 'in', partners),
+ ('product_id.id', '=', order_line.product_id.id),
+ ('order_id.state', 'in', state),
+ ('id', '!=', order_line.id),
+ ('order_id.date_order', '>=', delta_time)
+ ], limit=1, order='create_date desc')
+
+ if rec_vendor_id != last_so.vendor_id.id:
+ last_so = self.env['sale.order.line'].search([
+ # ('order_id.partner_id.id', '=', order_line.order_id.partner_id.id),
+ ('order_id.partner_id', 'in', partners),
+ ('product_id.id', '=', order_line.product_id.id),
+ ('order_id.state', 'in', state),
+ ('vendor_id', '=', rec_vendor_id),
+ ('id', '!=', order_line.id),
+ ('order_id.date_order', '>=', delta_time)
+ ], limit=1, order='create_date desc')
+
+ if rec_purchase_price != last_so.purchase_price:
+ rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1)
+ if rec_taxes.price_include:
+ selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100))
+ else:
+ selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100))
+ tax_id = last_so.tax_id
+ for tax in tax_id:
+ if tax.price_include:
+ selling_price = selling_price + (selling_price*11/100)
+ else:
+ selling_price = selling_price
+ discount = 0
+ elif last_so:
+ selling_price = last_so.price_unit
+ tax_id = last_so.tax_id
+ discount = last_so.discount
+ else:
+ selling_price = order_line.price_unit
+ tax_id = order_line.tax_id
+ discount = order_line.discount
+
+ elif rec_vendor_id == order_line.vendor_id.id and rec_purchase_price != last_so.purchase_price:
+ rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1)
+ if rec_taxes.price_include:
+ selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100))
+ else:
+ selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100))
+ tax_id = last_so.tax_id
+ for tax in tax_id:
+ if tax.price_include:
+ selling_price = selling_price + (selling_price*11/100)
+ else:
+ selling_price = selling_price
+ discount = 0
+
+ elif last_so:
+ selling_price = last_so.price_unit
+ tax_id = last_so.tax_id
+ discount = last_so.discount
-
+ else:
+ selling_price = order_line.price_unit
+ tax_id = order_line.tax_id
+ discount = order_line.discount
+ order_line.price_unit = selling_price
+ order_line.tax_id = tax_id
+ order_line.discount = discount
+ order_line.order_id.use_button = True