from .. import controller from odoo import http from odoo.http import request class Cart(controller.Controller): prefix = '/api/v1/' @http.route(prefix + 'cart', auth='public', methods=['GET']) def get_cart_by_user_id(self, **kw): if not self.authenticate(): return self.response(code=401, description='Unauthorized') user_id = int(kw.get('user_id', 0)) limit = int(kw.get('limit', 0)) offset = int(kw.get('offset', 0)) query = [('user_id', '=', user_id)] carts = request.env['website.user.cart'].search(query, limit=limit, offset=offset, order='create_date desc') data = { 'product_total': request.env['website.user.cart'].search_count(query), 'products': [] } for cart in carts: product = request.env['product.product'].api_single_response(cart.product_id) product['template_id'] = cart.product_id.product_tmpl_id.id product['quantity'] = cart.qty data['products'].append(product) return self.response(data) @http.route(prefix + 'cart/create-or-update', auth='public', methods=['POST'], csrf=False) def create_or_update_cart(self, **kw): if not self.authenticate(): return self.response(code=401, description='Unauthorized') user_id = int(kw.get('user_id', 0)) product_id = int(kw.get('product_id', 0)) qty = int(kw.get('qty', 0)) if not user_id or not product_id or not qty: return self.response(code=400, description='user_id, product_id and qty is required') query = [('user_id', '=', user_id), ('product_id', '=', product_id)] cart = request.env['website.user.cart'].search(query, limit=1) result = {} if cart: cart.write({'qty': qty}) result['id'] = cart.id else: create = request.env['website.user.cart'].create({ 'user_id': user_id, 'product_id': product_id, 'qty': qty }) result['id'] = create.id return self.response(result) @http.route(prefix + 'cart', auth='public', methods=['DELETE'], csrf=False) def delete_cart_by_user_id(self, **kw): if not self.authenticate(): return self.response(code=401, description='Unauthorized') user_id = int(kw.get('user_id', 0)) query = [('user_id', '=', user_id)] product_ids = kw.get('product_ids') if product_ids: query += [('product_id', 'in', [int(x) for x in product_ids.split(',')])] cart = request.env['website.user.cart'].search(query).unlink() return self.response(cart)