summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-07-26 21:02:52 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-07-26 21:02:52 +0700
commitaeb450314a0440806ceb300c71c5776d42289ad4 (patch)
treebefd9f6acd512f8426828350a8ad0671ca12bcc0
parent7cea5aa18bea9b80ace297bfc36eec8db1adef6e (diff)
<miqdad> push
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py31
-rw-r--r--indoteknik_custom/models/sale_order_line.py28
2 files changed, 28 insertions, 31 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index e1c643e5..fbf1dc15 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -470,28 +470,47 @@ class SaleOrder(controller.Controller):
source = params['value']['source']
carts = user_cart.get_product_by_user(user_id=user_id, selected=True, source=source)
+ excluded_pricelist_ids = [
+ int(config.get_param('product.pricelist.tier1_v2')),
+ int(config.get_param('product.pricelist.tier2_v2')),
+ int(config.get_param('product.pricelist.tier3_v2')),
+ int(config.get_param('product.pricelist.tier4_v2')),
+ ]
+
promotions = []
for cart in carts:
if cart['cart_type'] == 'product':
- order_line = request.env['sale.order.line'].create({
+ cart_pricelist_id = cart['price'].get('pricelist_id')
+
+ is_has_disc = False
+ if cart_pricelist_id and cart_pricelist_id not in excluded_pricelist_ids:
+ is_has_disc = True
+ elif params['value'].get('flash_sale'): # fallback jika pricelist_id tidak tersedia
+ is_has_disc = False
+
+ line_vals = {
'company_id': 1,
'order_id': sale_order.id,
'product_id': cart['id'],
'product_uom_qty': cart['quantity'],
- 'product_available_quantity': cart['available_quantity']
- })
+ 'product_available_quantity': cart['available_quantity'],
+ 'price_unit': cart['price']['price'],
+ 'discount': cart['price']['discount_percentage'],
+ 'is_has_disc': is_has_disc
+ }
+
+ order_line = request.env['sale.order.line'].create(line_vals)
order_line.product_id_change()
order_line.weight = order_line.product_id.weight
order_line.onchange_vendor_id()
- order_line.price_unit = cart['price']['price']
- order_line.discount = cart['price']['discount_percentage']
+
elif cart['cart_type'] == 'promotion':
promotions.append({
'order_id': sale_order.id,
'program_line_id': cart['id'],
'quantity': cart['quantity']
})
-
+
sale_order._compute_etrts_date()
request.env['sale.order.promotion'].create(promotions)
diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py
index bc1fcd09..ff2e9009 100644
--- a/indoteknik_custom/models/sale_order_line.py
+++ b/indoteknik_custom/models/sale_order_line.py
@@ -2,8 +2,9 @@ from odoo import fields, models, api, _
from odoo.exceptions import UserError
from datetime import datetime, timedelta
import logging
+from odoo.tools.float_utils import float_compare
-__logger = logging.getLogger(__name__)
+_logger = logging.getLogger(__name__)
class SaleOrderLine(models.Model):
@@ -52,31 +53,8 @@ class SaleOrderLine(models.Model):
qty_free_bu = fields.Float(string='Free BU', compute='_get_qty_free_bandengan')
desc_updatable = fields.Boolean(string='desc boolean', default=True, compute='_get_desc_updatable')
- is_has_disc = fields.Boolean('FlashSale Item', compute='_compute_is_has_disc', default=False)
+ is_has_disc = fields.Boolean('FlashSale Item', default=False)
- @api.depends('product_id', 'price_unit', 'order_id.source_id')
- def _compute_is_has_disc(self):
- website_source_id = 59
- excluded_pricelist_ids = [17022, 17027, 17026, 17025, 17024, 17023]
-
- for line in self:
- line.is_has_disc = False # default
-
- # Step 1: Bukan dari website? Skip
- if not line.order_id.source_id or line.order_id.source_id.id != website_source_id:
- continue
-
- # Step 2: Ambil semua pricelist item berdasarkan produk
- pricelist_items = self.env['product.pricelist.item'].search([
- ('product_id', '=', line.product_id.id),
- ('pricelist_id', 'not in', excluded_pricelist_ids),
- ])
-
- # Step 3: Jika ada pricelist_items, tandai sebagai flashsale
- if pricelist_items:
- line.is_has_disc = True
- elif not pricelist_items:
- line.is_has_disc = False
def _get_outgoing_incoming_moves(self):
outgoing_moves = self.env['stock.move']