summaryrefslogtreecommitdiff
path: root/indoteknik_custom/controllers/api/sale_order.py
blob: 4194bcb6666f3ba1cf118165ee218ae403a0ae60 (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
111
112
113
114
115
116
117
118
119
from .. import api_controller
from odoo import http
from odoo.http import request
import json


class SaleOrderApi(api_controller.ApiController):
    @http.route('/api/sale_order/invoiced', auth='public', methods=['GET'])
    def get_sale_order_invoiced_by_partner_id(self, partner_id=None, **kw):
        self.authenticate(kw)
        response = []
        if partner_id:
            # Get company member by partner_id
            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)]

            # Get sale order by company member and invoiced
            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
                        })

                response.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 json.dumps(response)

    # @http.route('/api/test', auth='public', methods=['GET'])
    # def test(self, **kw):
    #     self.authenticate(kw)
    #     response = []
    #     products = self.search_with_api_params('product.template', kw)
    #     for product in products:
    #         response.append({
    #             'id': product.id,
    #             'name': product.name
    #         })
    #     return json.dumps(response)

    @http.route('/api/sale_order/invoiced/detail', auth='public', methods=['GET'])
    def get_sale_order_invoiced_detail(self, id=None, partner_id=None, **kw):
        self.authenticate(kw)
        response = {}
        if id:
            default_domain = [
                ('id', '=', id),
                '|',
                ('invoice_status', '=', 'invoiced'),
                ('invoice_status', '=', 'to_invoice')
            ]
            if partner_id:
                # Get company member by partner_id
                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)

            if sale_order:
                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,
                    })

                response.update({
                    '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 json.dumps(response)

    @http.route('/api/sale_order', auth='public', methods=['POST'], csrf=False)
    def post_sale_order(self, **kw):
        return json.dumps(['a'])