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
|
from .. import controller
from odoo import http
from odoo.http import request
class StockPicking(controller.Controller):
prefix = '/api/v1/'
PREFIX_PARTNER = prefix + 'partner/<partner_id>/'
@http.route(PREFIX_PARTNER + 'stock-picking', auth='public', method=['GET', 'OPTIONS'])
@controller.Controller.must_authorized(private=True, private_key='partner_id')
def get_partner_stock_picking(self, **kw):
get_params = self.get_request_params(kw, {
'partner_id': ['number'],
'q': [],
'limit': ['default:0', 'number'],
'offset': ['default:0', 'number']
})
if not get_params['valid']:
return self.response(code=400, description=get_params)
params = get_params['value']
partner_id = params['partner_id']
limit = params['limit']
offset = params['offset']
child_ids = request.env['res.partner'].browse(partner_id).get_child_ids()
picking_model = request.env['stock.picking']
default_domain = [('partner_id', 'in', child_ids), ('sale_id', '!=', False), ('origin', 'ilike', 'SO%')]
domain = default_domain
if params['q']:
query_like = '%' + params['q'].replace(' ', '%') + '%'
domain += ['|', '|', ('name', 'ilike', query_like), ('sale_id.client_order_ref', 'ilike', query_like), ('delivery_tracking_no', 'ilike', query_like)]
stock_pickings = picking_model.search(domain, offset=offset, limit=limit)
res_pickings = []
for picking in stock_pickings:
res_pickings.append({
'id': picking.id,
'name': picking.name,
'date': self.time_to_str(picking.create_date, '%d/%m/%Y'),
'tracking_number': picking.delivery_tracking_no or '',
'sale_order': {
'id': picking.sale_id.id,
'name': picking.sale_id.name,
'client_order_ref': picking.sale_id.client_order_ref or ''
},
'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False,
'carrier_name': picking.carrier_id.name or ''
})
pending_count = picking_model.search_count(default_domain + [('driver_departure_date', '=', False), ('driver_arrival_date', '=', False)])
shipment_count = picking_model.search_count(default_domain + [('driver_departure_date', '!=', False), ('driver_arrival_date', '=', False)])
completed_count = picking_model.search_count(default_domain + [('driver_departure_date', '!=', False), ('driver_arrival_date', '!=', False)])
return self.response({
'summary': {
'pending_count': pending_count,
'shipment_count': shipment_count,
'completed_count': completed_count
},
'pickings': res_pickings
})
@http.route(PREFIX_PARTNER + 'stock-picking/<id>/tracking', auth='public', method=['GET', 'OPTIONS'])
@controller.Controller.must_authorized(private=True, private_key='partner_id')
def get_partner_stock_picking_detail_tracking(self, **kw):
id = int(kw.get('id', 0))
picking_model = request.env['stock.picking']
picking = picking_model.browse(id)
if not picking:
return self.response(None)
return self.response(picking.get_tracking_detail())
|