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/', 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/', 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)