diff options
| author | Stephan Christianus <stephanchrst@gmail.com> | 2023-01-27 02:29:27 +0000 |
|---|---|---|
| committer | Stephan Christianus <stephanchrst@gmail.com> | 2023-01-27 02:29:27 +0000 |
| commit | 0377b1d5150171a9907b0f5bb06f970d4cf0959d (patch) | |
| tree | 52dde3389ad2e8e6cd262d8a96bb05b11c114319 | |
| parent | d9431f5ff267f05af08955ce16543b31535527dd (diff) | |
| parent | cbc41d6fc6126ba630dcfedda55694af3e5b23bc (diff) | |
Merged in staging (pull request #28)
Staging
| -rw-r--r-- | indoteknik_api/controllers/api_v1/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/invoice.py | 89 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 15 | ||||
| -rw-r--r-- | indoteknik_api/controllers/controller.py | 3 | ||||
| -rw-r--r-- | indoteknik_api/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_api/models/account_move.py | 20 | ||||
| -rw-r--r-- | indoteknik_api/models/blog_post.py | 3 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 14 |
8 files changed, 141 insertions, 5 deletions
diff --git a/indoteknik_api/controllers/api_v1/__init__.py b/indoteknik_api/controllers/api_v1/__init__.py index e09b8f7b..a4776503 100644 --- a/indoteknik_api/controllers/api_v1/__init__.py +++ b/indoteknik_api/controllers/api_v1/__init__.py @@ -5,6 +5,7 @@ from . import category from . import city from . import district from . import flash_sale +from . import invoice from . import manufacture from . import partner from . import product_variant diff --git a/indoteknik_api/controllers/api_v1/invoice.py b/indoteknik_api/controllers/api_v1/invoice.py new file mode 100644 index 00000000..5a6e8316 --- /dev/null +++ b/indoteknik_api/controllers/api_v1/invoice.py @@ -0,0 +1,89 @@ +from .. import controller +from odoo import http +from odoo.http import request + + +class Invoice(controller.Controller): + PREFIX = '/api/v1/' + PREFIX_PARTNER = PREFIX + 'partner/<partner_id>/' + + @http.route(PREFIX_PARTNER + 'invoice', auth='public', method=['GET', 'OPTIONS']) + def get_partner_invoice(self, **kw): + user_token = self.authenticate() + if not user_token: + return self.unauthorized_response() + + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'name': [], + 'limit': ['default:0', 'number'], + 'offset': ['default:0', 'number'], + }) + limit = params['value']['limit'] + offset = params['value']['offset'] + if not user_token['partner_id'] == params['value']['partner_id']: + return self.unauthorized_response() + if not params['valid']: + return self.response(code=400, description=params) + + partner_child_ids = self.get_partner_child_ids(params['value']['partner_id']) + domain = [ + ('move_type', '=', 'out_invoice'), + ('state', '=', 'posted'), + ('partner_id', 'in', partner_child_ids) + ] + if params['value']['name']: + name = params['value']['name'].replace(' ', '%') + domain.append(('name', 'ilike', '%'+ name +'%')) + invoices = request.env['account.move'].search(domain, offset=offset, limit=limit) + data = { + 'invoice_total': request.env['account.move'].search_count(domain), + 'invoices': [request.env['account.move'].api_v1_single_response(x) for x in invoices] + } + return self.response(data) + + @http.route(PREFIX_PARTNER + 'invoice/<id>', auth='public', method=['GET', 'OPTIONS']) + def get_partner_invoice_by_id(self, **kw): + user_token = self.authenticate() + if not user_token: + return self.unauthorized_response() + + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'id': ['number'] + }) + if not user_token['partner_id'] == params['value']['partner_id']: + return self.unauthorized_response() + if not params['valid']: + return self.response(code=400, description=params) + + partner_child_ids = self.get_partner_child_ids(params['value']['partner_id']) + domain = [ + ('move_type', '=', 'out_invoice'), + ('state', '=', 'posted'), + ('id', '=', params['value']['id']), + ('partner_id', 'in', partner_child_ids) + ] + data = {} + account_move = request.env['account.move'].search(domain) + if account_move: + res_users = request.env['res.users'] + data = { + 'id': account_move.id, + 'name': account_move.name, + 'purchase_order_name': account_move.ref or '', + 'payment_term': account_move.invoice_payment_term_id.name or '', + 'sales': account_move.invoice_user_id.name, + 'amount_total': account_move.amount_total, + 'amount_residual': account_move.amount_residual, + 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '', + 'invoice_date_due': account_move.invoice_date_due.strftime('%d/%m/%Y') or '', + 'customer': res_users.api_address_response(account_move.partner_id), + 'products': [], + } + for line in account_move.invoice_line_ids: + product = request.env['product.product'].api_single_response(line.product_id) + product['quantity'] = line.quantity + data['products'].append(product) + + return self.response(data) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 90dee56c..f2ec8dfe 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -7,6 +7,21 @@ class SaleOrder(controller.Controller): prefix = '/api/v1/' PREFIX_PARTNER = prefix + 'partner/<partner_id>/' + @http.route(prefix + "sale_order_number", auth='public', method=['GET', 'OPTIONS']) + def get_number_sale_order(self, **kw): + user_token = self.authenticate() + if not user_token: + return self.unauthorized_response() + + sale_order_id = int(kw.get('sale_order_id', '0')) + sale_number = str(kw.get('sale_number', '')) + if sale_order_id > 0: + sales = request.env['sale.order'].search_read([('id', '=', sale_order_id)], fields=['id', 'name', 'amount_total', 'state']) + else: + sales = request.env['sale.order'].search_read([('name', '=', sale_number)], fields=['id', 'name', 'amount_total', 'state']) + + return self.response(sales) + @http.route(PREFIX_PARTNER + 'sale_order', auth='public', method=['GET', 'OPTIONS']) def get_partner_sale_order(self, **kw): user_token = self.authenticate() diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 4a7a8fb6..a1a81e37 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -138,7 +138,8 @@ class Controller(http.Controller): return False def get_partner_child_ids(self, partner_id): - parent_partner_id = request.env['res.partner'].search([('id', '=', partner_id)], limit=1).parent_id.id + parent_partner_id = request.env['res.partner'].search([('id', '=', partner_id)], limit=1) + parent_partner_id = parent_partner_id.parent_id.id or parent_partner_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] return partner_child_ids diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py index d484500a..9af9f36e 100644 --- a/indoteknik_api/models/__init__.py +++ b/indoteknik_api/models/__init__.py @@ -1,3 +1,4 @@ +from . import account_move from . import blog_post from . import product_pricelist from . import product_product diff --git a/indoteknik_api/models/account_move.py b/indoteknik_api/models/account_move.py new file mode 100644 index 00000000..9fd6fb18 --- /dev/null +++ b/indoteknik_api/models/account_move.py @@ -0,0 +1,20 @@ +import datetime +from odoo import models +from pytz import timezone + + +class AccountMove(models.Model): + _inherit = 'account.move' + + def api_v1_single_response(self, account_move): + data = { + 'id': account_move.id, + 'name': account_move.name, + 'purchase_order_name': account_move.ref or '', + 'payment_term': account_move.invoice_payment_term_id.name or '', + 'sales': account_move.invoice_user_id.name, + 'amount_total': account_move.amount_total, + 'amount_residual': account_move.amount_residual, + 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '' + } + return data diff --git a/indoteknik_api/models/blog_post.py b/indoteknik_api/models/blog_post.py index 2a82c23c..079181e2 100644 --- a/indoteknik_api/models/blog_post.py +++ b/indoteknik_api/models/blog_post.py @@ -9,7 +9,8 @@ class BlogPost(models.Model): base_url = self.env['ir.config_parameter'].get_param('web.base.url') data = { 'id': blog.id, - 'thumbnail': base_url + 'api/image/blog.post/thumbnail/' + str(blog.id) if blog.thumbnail else '', + # 'thumbnail': base_url + 'api/image/blog.post/thumbnail/' + str(blog.id) if blog.thumbnail else '', + 'thumbnail': self.env['ir.attachment'].api_image('blog.post', 'thumbnail', blog.id), 'title': blog.name, 'category': {}, 'author': {}, diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 0b9d1f44..b88d9ad0 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -53,11 +53,19 @@ class SaleOrder(models.Model): partner_purchase_order_description = fields.Text(string='Keterangan PO Customer', copy=False, help="Keterangan purchase order customer, diisi oleh customer melalui website.", tracking=3) partner_purchase_order_file = fields.Binary(string='File PO Customer', copy=False, help="File purchase order customer, diisi oleh customer melalui website.") payment_status = fields.Selection([ - ('confirm', 'Menunggu Konfirmasi'), ('pending', 'Pending'), - ('lunas', 'Lunas'), + ('capture', 'Capture'), + ('settlement', 'Settlement'), + ('deny', 'Deny'), ('cancel', 'Cancel'), - ], string='Payment Status', help='Payment Gateway Status / Midtrans / Web') + ('expire', 'Expire'), + ('failure', 'Failure'), + ('refund', 'Refund'), + ('chargeback', 'Chargeback'), + ('partial_refund', 'Partial Refund'), + ('partial_chargeback', 'Partial Chargeback'), + ('authorize', 'Authorize'), + ], string='Payment Status', help='Payment Gateway Status / Midtrans / Web, https://docs.midtrans.com/en/after-payment/status-cycle') def calculate_so_status_beginning(self): so_state = ['sale'] |
