summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1/manufacture.py
blob: cbee253d920d17e170afe66cd88315fa2598291c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from .. import controller
from odoo import http
from odoo.http import request
import ast


class Manufacture(controller.Controller):
    prefix = '/api/v1/'
    
    @http.route(prefix + 'manufacture', auth='public', methods=['GET', 'OPTIONS'])
    @controller.Controller.must_authorized()
    def get_manufacture(self, **kw):
        query = []
        
        name = kw.get('name')
        level = kw.get('level')
        limit = int(kw.get('limit', 0))
        offset = int(kw.get('offset', 0))
        order = 'sequence ASC'
        
        if name:
            name = '%' + name.replace(' ', '%') + '%' if '%' not in name else name
            query.append(('x_name', '=ilike', name))
        
        if level:
            if level not in ['prioritas', 'gold', 'silver']:
                return self.response(code=400, description='level possible value is prioritas, gold, silver')
            query.append(('x_manufacture_level', '=', level))
        
        manufactures = request.env['x_manufactures'].search(query, order=order, limit=limit, offset=offset)
        data = {
            'manufacture_total': request.env['x_manufactures'].search_count(query),
            'manufactures': [request.env['x_manufactures'].api_single_response(x) for x in manufactures]
        }
        
        return self.response(data, headers=[('Cache-Control', 'max-age=3600, public')])
    
    @http.route(prefix + 'manufacture/<id>', auth='public', methods=['GET', 'OPTIONS'])
    @controller.Controller.must_authorized()
    def get_manufacture_by_id(self, **kw):
        id = kw.get('id')
        manufacture = request.env['x_manufactures'].search([('id', '=', id)], limit=1)
        data = {}
        if manufacture:
            data = request.env['x_manufactures'].api_single_response(manufacture, with_detail=True)
        return self.response(data)
    
    @http.route(prefix + 'manufacture/page/<page>', auth='public', methods=['GET'])
    @controller.Controller.must_authorized()
    def get_manufacture_by_page(self, **kw):
        manufacture_ids = []
        page = kw.get('page')
        if page == 'flash-sale':
            active_flash_sale = request.env['product.pricelist'].get_active_flash_sale()
            if active_flash_sale:
                manufacture_ids = [x.product_id.x_manufacture.id for x in active_flash_sale.item_ids]
        elif page == 'ready-stock':
            product_templates = request.env['product.template'].search([('virtual_qty', '>', 0)])
            if product_templates:
                manufacture_ids = [x.x_manufacture.id for x in product_templates]
        elif page == 'category':
            category_id = kw.get('category_id')
            if not category_id:
                return self.response(code=400, description='category_id is required')
            product_variants = request.env['product.product'].search([('public_categ_ids', '=', int(category_id))])
            manufacture_ids = [x.x_manufacture.id for x in product_variants]
        elif page == 'promotion':
            promotion_id = kw.get('promotion_id')
            if not promotion_id:
                return self.response(code=400, description='promotion_id is required')
            coupon_program = request.env['coupon.program'].search([('id', '=', promotion_id)])
            product_variants = request.env['product.product'].search(ast.literal_eval(coupon_program.rule_products_domain))
            manufacture_ids = [x.x_manufacture.id for x in product_variants]
        else:
            return self.response(code=400, description='page possible value is flash-sale, ready-stock, category, promotion')
        
        manufactures = request.env['x_manufactures'].search([('id', 'in', manufacture_ids)])
        data = [request.env['x_manufactures'].api_single_response(x) for x in manufactures]
        
        return self.response(data)