diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-08-14 13:37:16 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-08-14 13:37:16 +0700 |
| commit | 72befb1e3401a4c31dbf2698963ec52c5baba8cd (patch) | |
| tree | 314c9219b47c02464fb2b62922a7b3150d308132 /indoteknik_custom/models/sale_order.py | |
| parent | 3c179deae0dbf618f6171003532dc86c48ada367 (diff) | |
| parent | ed089761d43b20ecc4190ca9d88a0bdb769d81f2 (diff) | |
Merge branch 'production' of bitbucket.org:altafixco/indoteknik-addons into production
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 96 |
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 |
