from .. import controller from odoo import http from odoo.http import request import json class Sales(controller.Controller): _name = 'sale.order' prefix = '/api/v1/' @http.route(prefix + 'sale/', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def get_sale_order(self, **kw): sale_id = int(kw.get('id', '0')) ref = str(kw.get('ref', '0')) if sale_id == 0 and ref == '0': return self.response(code=500, description='Internal Server Error') if sale_id > 0: query = [('id', '=', sale_id)] else: query = [('client_order_ref', '=', ref)] sale_order = request.env['sale.order'].search(query) data = [] for sale in sale_order: data.append({ 'id': sale.id, 'name': sale.name, 'partner_id': sale.partner_id.id, 'partner_name': sale.partner_id.name, 'date_order': str(sale.date_order), 'ref': sale.client_order_ref, 'details': [request.env['sale.order.line'].api_single_response(x) for x in sale.order_line] }) return self.response(data) @http.route(prefix + 'sale/confirm', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def confirm_sale_order(self, **kw): sale_id = int(kw.get('id', '0')) ref = str(kw.get('ref', '0')) if sale_id == 0 and ref == '0': return self.response(code=500, description='Internal Server Error') if sale_id > 0: query = [('id', '=', sale_id)] else: query = [('client_order_ref', '=', ref)] sales = request.env['sale.order'].search(query) data = [] for sale in sales: sale.action_confirm() data.append({ 'id': sale.id, 'name': sale.name, 'state': sale.state }) return self.response(data) @http.route(prefix + 'sale/update_shipper', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def update_shipper_sale_order(self, **kw): sale_id = int(kw.get('id', '0')) ref = str(kw.get('ref', '0')) shipper = str(kw.get('shipper', '0')) if sale_id == 0 and ref == '0': return self.response(code=500, description='Internal Server Error') if shipper == '0': return self.response(code=500, description='Internal Server Error') if sale_id > 0: query = [('id', '=', sale_id)] else: query = [('client_order_ref', '=', ref)] sales = request.env['sale.order'].search(query) carrier = request.env['delivery.carrier'].search([('name', '=', shipper)]) if not carrier: return self.response(code=500, description='Internal Server Error') data = [] for sale in sales: sale.carrier_id = carrier.id data.append({ 'id': sale.id, 'name': sale.name, 'shipper': carrier.name }) return self.response(data) @http.route(prefix + 'sale/create', type='json', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def create_sale_order(self, **kw): data = request.jsonrequest ginee_shop_id = data['ginee_shop_id'] ref = data['ref'] discount = data['discount'] lines = data['lines'] if ginee_shop_id == '0': return {'status': 'error', 'message': 'partner not found'} partner = request.env['res.partner'].search([('ginee_shop_id', '=', ginee_shop_id)]) if not partner: return {'status': 'error', 'message': 'partner not found'} partner_id = partner.id params = { 'partner_id': partner_id, 'partner_shipping_id': partner_id, 'partner_invoice_id': partner_id, 'client_order_ref': ref, 'company_id': 4, # Fixco Karya Nusantara 'currency_id': 12, # IDR 'user_id': 8, # Web Service it@fixcomart.co.id 'team_id': 6, # Marketplace 'warehouse_id': 4, # Bandengan Tengah 'state': 'draft', 'picking_policy': 'direct' } sale_order = request.env['sale.order'].create(params) param_line = [] for line in lines: item_code = line['item_code'] product = request.env['product.product'].search([('default_code', '=', item_code)]) if not product: return {'status': 'error', 'message': 'product not found'} param_line.append({ 'order_id': sale_order.id, 'product_id': product.id, 'name': product.display_name, 'product_uom_qty': line['qty'], 'price_unit': line['price'], 'tax_id': [13] #tax include }) request.env['sale.order.line'].create(param_line) # create sales discount here if discount > 0: param_line = [{ 'order_id': sale_order.id, 'product_id': 55, # diskon penjualan 'name': 'Diskon Penjualan', 'product_uom_qty': -1, 'price_unit': discount }] request.env['sale.order.line'].create(param_line) return { 'status': 'success', 'message': sale_order.name } @http.route(prefix + 'do/confirm', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def complete_delivery_order(self, **kw): # stock_picking.action_assign sale_id = int(kw.get('id', '0')) ref = str(kw.get('ref', '0')) if sale_id == 0 and ref == '0': return self.response(code=500, description='Internal Server Error') if sale_id > 0: query = [('id', '=', sale_id)] else: query = [('client_order_ref', '=', ref)] sales = request.env['sale.order'].search(query) data = [] for sale in sales: picking_ids = sale.picking_ids reserved = validated = False for picking in picking_ids: reserved = picking.action_assign() if reserved == True: for line in picking.move_line_ids_without_package: line.qty_done = line.product_uom_qty validated = picking.button_validate() data.append({ 'id': sale.id, 'name': sale.name, 'ref': sale.client_order_ref, 'reserved': reserved, 'validated': str(validated) }) test = data print(test) return self.response(data)