summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-09-18 16:20:15 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-09-18 16:20:15 +0700
commitadbc9b985f1c5fb2b2f41f79c686b3a573003e62 (patch)
tree27ca97d7c6540ccaf3556efadb9c8b439ac2f2fb /indoteknik_custom/models/sale_order.py
parent0ace4356bdbe27c3acd75c33d5259ef950eecb24 (diff)
Update promotion program feature
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 8317e1fd..2510d9e5 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -78,6 +78,7 @@ class SaleOrder(models.Model):
amount_voucher_disc = fields.Float(string='Voucher Discount')
source_id = fields.Many2one('utm.source', 'Source', domain="[('id', 'in', [32, 59, 60, 61])]")
estimated_arrival_days = fields.Integer('Estimated Arrival Days', default=0)
+ picking_iu_id = fields.Many2one('stock.picking', 'Picking IU')
def _compute_purchase_total(self):
for order in self:
@@ -447,6 +448,59 @@ class SaleOrder(models.Model):
line.discount = line.initial_discount
line.initial_discount = False
+ def apply_promotion_program(self):
+ userdata = {
+ 'user_id': self.partner_id.user_id.id,
+ 'partner_id': self.partner_id.id
+ }
+
+ iu_items = []
+ for line in self.order_line:
+ promotion = line.program_line_id.format(user=userdata, qty=line.product_uom_qty)
+ if promotion['type']['value'] == 'merchandise':
+ iu_items += filter(lambda x: x['quantity'] > 0, promotion['items'])
+
+ if len(iu_items) > 0:
+ self._create_promotion_program_iu_docs(iu_items)
+
+ def _create_promotion_program_iu_docs(self, items):
+ default = {
+ 'picking_type_id': 33, # PT Indoteknik (Bandengan): Internal Transfers
+ 'location_id': 57, # BU/Stock
+ 'location_dest_id': 49, # Virtual Locations/Internal Use
+ 'account_id': 596, # Biaya awareness
+ 'product_uom': 1 # Unit
+ }
+
+ picking_type = self.env['stock.picking.type'].browse(default['picking_type_id'])
+ picking = self.env['stock.picking'].create({
+ 'name': picking_type.sequence_id.next_by_id(),
+ 'picking_type_id': default['picking_type_id'],
+ 'partner_id': self.partner_id.id,
+ 'real_shipping_id': self.real_shipping_id.id,
+ 'location_id': default['location_id'],
+ 'location_dest_id': default['location_dest_id'],
+ 'account_id': default['account_id'],
+ 'origin': self.display_name,
+ 'is_internal_use': True
+ })
+
+ product_model = self.env['product.product']
+ for item in items:
+ picking.move_ids_without_package.create({
+ 'product_id': item['product_id'],
+ 'name': product_model.browse(item['product_id']).display_name,
+ 'product_uom_qty': item['quantity'],
+ 'product_uom': default['product_uom'],
+ 'location_id': default['location_id'],
+ 'location_dest_id': default['location_dest_id'],
+ 'picking_id': picking.id
+ })
+
+ self.picking_iu_id = picking.id
+
+
+