summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/promotion_program_line.py
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-05-31 17:14:34 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-05-31 17:14:34 +0700
commit06a4478d69975b8a6eb3d228fa88708448b40a0e (patch)
treed1bb5115c61b973ad77ea0d975da29ce24c59bc0 /indoteknik_custom/models/promotion_program_line.py
parent6cb1fc1a1cd0c8091c32dfcd19ebc58793873d25 (diff)
Promotion program feature
Diffstat (limited to 'indoteknik_custom/models/promotion_program_line.py')
-rw-r--r--indoteknik_custom/models/promotion_program_line.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/indoteknik_custom/models/promotion_program_line.py b/indoteknik_custom/models/promotion_program_line.py
new file mode 100644
index 00000000..3d314f76
--- /dev/null
+++ b/indoteknik_custom/models/promotion_program_line.py
@@ -0,0 +1,73 @@
+from odoo import fields, models, api
+
+
+class PromotionProgramLine(models.Model):
+ _name = "promotion.program.line"
+
+ name = fields.Char(string="Name")
+ image = fields.Binary(string="Image")
+ product_id = fields.Many2one(
+ comodel_name="product.product", string="Product Variant")
+ program_id = fields.Many2one(
+ comodel_name="promotion.program", string="Program")
+ discount_type = fields.Selection(selection=[
+ ("percentage", "Percentage"),
+ ("fixed_price", "Fixed Price"),
+ ], string="Discount Type")
+ discount_amount = fields.Float(string="Discount Amount")
+ promotion_type = fields.Selection(selection=[
+ ("specific_product", "Specific Product"),
+ ("bundling", "Bundling"),
+ ("discount_loading", "Discount Loading"),
+ ("merchandise", "Merchandise")
+ ], string="Promotion Type")
+ minimum_purchase_qty = fields.Integer(
+ string="Minimum Purchase Qty", help="Minimum Qty to applied discount loading")
+ applies_multiply = fields.Boolean(
+ string="Applies Multiply", help="Is applies multiply")
+ limit_qty = fields.Integer(
+ string="Limit Qty", help="Limit Qty product in promotion")
+ limit_qty_user = fields.Integer(
+ string="Limit Qty / User", help="Limit Qty per User")
+ limit_qty_transaction = fields.Integer(
+ string="Limit Qty / Transaction", help="Limit Qty per Transaction")
+ line_free_item = fields.One2many(
+ comodel_name="promotion.program.free_item", inverse_name="line_id", string="Line Free Item")
+ display_on_homepage = fields.Boolean(string="Display on Homepage")
+
+ @api.onchange('product_id')
+ def _onchange_product_id(self):
+ if self.product_id and not self.name:
+ self.name = self.product_id.display_name
+ self._discount_loading_auto()
+
+ @api.onchange('promotion_type')
+ def onchange_promotion_type(self):
+ self._discount_loading_auto()
+
+ def _discount_loading_auto(self):
+ program_line = self
+ product = program_line.product_id
+ promotion_type = program_line.promotion_type
+
+ if promotion_type != 'discount_loading' or not product:
+ return
+
+ line = self.browse(self.ids)
+ line.product_id = self.product_id.id
+ line.promotion_type = self.promotion_type
+
+ product_added = False
+ line_free_item = program_line.line_free_item
+ for line in line_free_item:
+ if line.product_id.id == product.id:
+ product_added = True
+ continue
+ line.unlink()
+ if not product_added:
+ data = {'product_id': product.id,
+ 'qty': 1, 'line_id': program_line.id}
+ line_free_item.create(data)
+
+ # TODO: Add show on homepage boolean untuk priority specific product
+ # TODO: Discount loading otomatis membuat line dengan product_id yang sama dengan parent