summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/sale_order_controller.py
blob: 741d4bf82aca7b2060a5559ea9efa7f8744e93a0 (plain)
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)