summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/sale_order_controller.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_api/controllers/sale_order_controller.py')
-rw-r--r--indoteknik_api/controllers/sale_order_controller.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/indoteknik_api/controllers/sale_order_controller.py b/indoteknik_api/controllers/sale_order_controller.py
new file mode 100644
index 00000000..741d4bf8
--- /dev/null
+++ b/indoteknik_api/controllers/sale_order_controller.py
@@ -0,0 +1,110 @@
+from . import controller
+from odoo import http
+from odoo.http import request
+
+
+class SaleOrderController(controller.Controller):
+ @http.route('/api/sale_order/invoiced', auth='public', methods=['GET'])
+ def get_sale_order_invoiced_by_partner_id(self, **kw):
+ self.authenticate(kw)
+ partner_id = kw.get('partner_id')
+ if not partner_id:
+ return self.response(code=400, description='Field partner_id is required')
+
+ partner_id = int(partner_id)
+ # Get company member by partner_id
+ parent_partner_id = request.env['res.partner'].search([('id', '=', partner_id)], limit=1).parent_id.id
+ partner_childs = request.env['res.partner'].search([('parent_id', '=', int(parent_partner_id))])
+ partner_child_ids = [v['id'] for v in partner_childs] + [partner_id]
+
+ # Get sale order by company member and invoiced
+ data = []
+ default_domain = [
+ ('partner_id', 'in', partner_child_ids),
+ '|',
+ ('invoice_status', '=', 'invoiced'),
+ ('invoice_status', '=', 'to_invoice')
+ ]
+ sale_orders = self.search_with_api_params('sale.order', kw, default_domain)
+ for sale_order in sale_orders:
+ pickings = []
+ for picking in sale_order.picking_ids:
+ if picking.state in ['confirmed', 'assigned', 'done']:
+ pickings.append({
+ 'id': picking.id,
+ 'name': picking.name,
+ 'delivery_address': picking.partner_id.street,
+ 'delivery_tracking_no': picking.delivery_tracking_no,
+ 'delivery_status': picking.delivery_status
+ })
+
+ data.append({
+ 'id': sale_order.id,
+ 'name': sale_order.name,
+ 'amount_total': sale_order.amount_total,
+ 'salesperson': sale_order.user_id.name,
+ 'date_order': self.time_to_str(sale_order.date_order, '%d/%m/%Y'),
+ 'pickings': pickings,
+ 'access_token': sale_order.access_token
+ })
+ return self.response(data)
+
+ @http.route('/api/sale_order/invoiced/detail', auth='public', methods=['GET'])
+ def get_sale_order_invoiced_detail_by_partner(self, **kw):
+ self.authenticate(kw)
+
+ id = kw.get('id')
+ partner_id = kw.get('partner_id')
+ if not id:
+ return self.response(code=400, description='Field id is required')
+ if not partner_id:
+ return self.response(code=400, description='Field partner_id is required')
+
+ default_domain = [
+ ('id', '=', id),
+ '|',
+ ('invoice_status', '=', 'invoiced'),
+ ('invoice_status', '=', 'to_invoice')
+ ]
+ parent_partner_id = request.env['res.partner'].search([('id', '=', int(partner_id))], limit=1).parent_id.id
+ partner_childs = request.env['res.partner'].search([('parent_id', '=', int(parent_partner_id))])
+ partner_child_ids = [v['id'] for v in partner_childs] + [int(partner_id)]
+ default_domain.append(('partner_id', 'in', partner_child_ids))
+
+ sale_order = self.search_with_api_params('sale.order', kw, default_domain)
+ orders = []
+ for order in sale_order.order_line:
+ orders.append({
+ 'name': order.name,
+ 'product_qty': order.product_qty,
+ 'price_unit': order.price_unit,
+ 'price_tax': order.price_tax,
+ 'price_total': order.price_total,
+ 'price_subtotal': order.price_subtotal,
+ 'tax': order.tax_id.name,
+ 'discount': order.discount,
+ })
+
+ data = {
+ 'id': sale_order.id,
+ 'name': sale_order.name,
+ 'carrier': sale_order.carrier_id.name,
+ 'partner': {
+ 'id': sale_order.partner_id.id,
+ 'name': sale_order.partner_id.name,
+ 'mobile': sale_order.partner_id.mobile,
+ 'email': sale_order.partner_id.email
+ },
+ 'delivery_address': sale_order.partner_shipping_id.street,
+ 'delivery_method': sale_order.carrier_id.name,
+ 'payment_term': sale_order.payment_term_id.name,
+ 'salesperson': sale_order.user_id.name,
+ 'date_order': self.time_to_str(sale_order.date_order, '%d/%m/%Y %H:%M:%S'),
+ 'note': sale_order.note,
+ 'amount_untaxed': sale_order.amount_untaxed,
+ 'amount_tax': sale_order.amount_tax,
+ 'amount_total': sale_order.amount_total,
+ 'orders': orders
+ }
+
+ return self.response(data)