summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-06-12 08:22:10 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-06-12 08:22:10 +0700
commit1f2995a85428ac4335123bd33d48ae17d3c9f36f (patch)
tree42d8558ac317fcb3b158b52fe01205c35b885c64
parentdb7481a490b87e3a1768112395bf096b93969562 (diff)
Update promotion program feature
-rw-r--r--indoteknik_api/controllers/api_v1/promotion.py52
-rw-r--r--indoteknik_custom/models/ir_attachment.py5
-rw-r--r--indoteknik_custom/models/promotion_program_line.py2
-rw-r--r--indoteknik_custom/views/promotion_program_line.xml6
4 files changed, 51 insertions, 14 deletions
diff --git a/indoteknik_api/controllers/api_v1/promotion.py b/indoteknik_api/controllers/api_v1/promotion.py
index 5ee2acb1..991a3eb9 100644
--- a/indoteknik_api/controllers/api_v1/promotion.py
+++ b/indoteknik_api/controllers/api_v1/promotion.py
@@ -6,7 +6,8 @@ from datetime import datetime
class Promotion(controller.Controller):
prefix = '/api/v1/'
-
+
+
@http.route(prefix + 'promotion/<id>', auth='public', methods=['GET'])
@controller.Controller.must_authorized()
def get_promotion_by_id(self, **kw):
@@ -14,19 +15,21 @@ class Promotion(controller.Controller):
id = kw.get('id')
if not id:
return self.response(code=400, description='id is required')
-
+
data = {}
id = int(id)
- coupon_program = request.env['coupon.program'].search([('id', '=', id)])
+ coupon_program = request.env['coupon.program'].search(
+ [('id', '=', id)])
if coupon_program:
data = {
'banner': base_url + 'api/image/coupon.program/x_studio_banner_promo/' + str(coupon_program.id) if coupon_program.x_studio_banner_promo else '',
'image': base_url + 'api/image/coupon.program/x_studio_image_promo/' + str(coupon_program.id) if coupon_program.x_studio_image_promo else '',
'name': coupon_program.name,
}
-
+
return self.response(data)
-
+
+
@http.route(prefix + 'promotion/home', auth='public', methods=['GET', 'OPTIONS'])
@controller.Controller.must_authorized()
def v1_get_promotion_home(self):
@@ -49,13 +52,14 @@ class Promotion(controller.Controller):
data.append(data_program)
return self.response(data)
-
+
+
@http.route(prefix + 'promotion/home/<id>', auth='public', methods=['GET', 'OPTIONS'])
@controller.Controller.must_authorized()
def v1_get_promotion_home_detail(self, id):
program_lines = request.env['promotion.program.line'].search([
('display_on_homepage', '=', True),
- ('promotion_type', '=', 'specific_product'),
+ ('promotion_type', '=', 'special_price'),
('program_id', '=', int(id))
])
pricelist = self.user_pricelist()
@@ -82,10 +86,38 @@ class Promotion(controller.Controller):
product['lowest_price']['price_discount'] = price - (price * line.discount_amount / 100)
if line.discount_type == 'fixed_price':
product['lowest_price']['price_discount'] = line.discount_amount
- product['lowest_price']['discount_percentage'] = (price - line.discount_amount) / price * 100
-
+ product['lowest_price']['discount_percentage'] = round((price - line.discount_amount) / price * 100)
+
product.pop('parent', None)
product.pop('price', None)
product.pop('stock', None)
data.append(product)
- return self.response(data) \ No newline at end of file
+ return self.response(data)
+
+
+ @http.route(prefix + 'promotion/product/<id>', auth='public', methods=['GET', 'OPTIONS'])
+ def v1_get_promotion_by_product_id(self, id):
+ id = int(id)
+ current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ product = request.env['product.template'].search([('id', '=', id)])
+ variant_ids = [variant.id for variant in product.product_variant_ids]
+ program_lines = request.env['promotion.program.line'].search([
+ ('program_id.start_time', '<=', current_time),
+ ('program_id.end_time', '>=', current_time),
+ ('product_id.id', 'in', variant_ids)
+ ])
+
+ data = []
+ ir_attachment = request.env['ir.attachment']
+ for line in program_lines:
+ data.append({
+ 'name': line.name,
+ 'image': ir_attachment.api_image('promotion.program.line', 'image', line.id),
+ 'type': line.promotion_type,
+ 'minimum_purchase_qty': line.minimum_purchase_qty,
+ 'applies_multiply': line.applies_multiply,
+ 'limit_qty': line.limit_qty,
+ 'limit_qty_user': line.limit_qty_user,
+ 'limit_qty_transaction': line.limit_qty_transaction,
+ })
+ return self.response(data)
diff --git a/indoteknik_custom/models/ir_attachment.py b/indoteknik_custom/models/ir_attachment.py
index fd86ab1b..6417fa3f 100644
--- a/indoteknik_custom/models/ir_attachment.py
+++ b/indoteknik_custom/models/ir_attachment.py
@@ -22,4 +22,9 @@ class Attachment(models.Model):
def api_image(self, model, field, id):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
is_found = self.is_found(model, field, id)
+ return base_url + 'api/image/' + model + '/' + field + '/' + str(id) if is_found else ''
+
+ def api_image_local(self, model, field, id):
+ base_url = self.env['ir.config_parameter'].get_param('web.base.local_url')
+ is_found = self.is_found(model, field, id)
return base_url + 'api/image/' + model + '/' + field + '/' + str(id) if is_found else '' \ No newline at end of file
diff --git a/indoteknik_custom/models/promotion_program_line.py b/indoteknik_custom/models/promotion_program_line.py
index a8ee2c43..b6c9a532 100644
--- a/indoteknik_custom/models/promotion_program_line.py
+++ b/indoteknik_custom/models/promotion_program_line.py
@@ -16,7 +16,7 @@ class PromotionProgramLine(models.Model):
], string="Discount Type")
discount_amount = fields.Float(string="Discount Amount")
promotion_type = fields.Selection(selection=[
- ("specific_product", "Specific Product"),
+ ("special_price", "Special Price"),
("bundling", "Bundling"),
("discount_loading", "Discount Loading"),
("merchandise", "Merchandise")
diff --git a/indoteknik_custom/views/promotion_program_line.xml b/indoteknik_custom/views/promotion_program_line.xml
index bb625a8f..e15bb0d7 100644
--- a/indoteknik_custom/views/promotion_program_line.xml
+++ b/indoteknik_custom/views/promotion_program_line.xml
@@ -34,11 +34,11 @@
<field name="limit_qty_transaction" />
<field
name="discount_type"
- attrs="{'invisible': [('promotion_type', '!=', 'specific_product')]}"
+ attrs="{'invisible': [('promotion_type', '!=', 'special_price')]}"
/>
<field
name="discount_amount"
- attrs="{'invisible': [('promotion_type', '!=', 'specific_product')]}"
+ attrs="{'invisible': [('promotion_type', '!=', 'special_price')]}"
/>
<field
name="minimum_purchase_qty"
@@ -50,7 +50,7 @@
/>
<field
name="display_on_homepage"
- attrs="{'invisible': [('promotion_type', '!=', 'specific_product')]}"
+ attrs="{'invisible': [('promotion_type', '!=', 'special_price')]}"
/>
</group>
</group>