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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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)
|