summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Christianus <stephanchrst@gmail.com>2023-01-27 02:29:27 +0000
committerStephan Christianus <stephanchrst@gmail.com>2023-01-27 02:29:27 +0000
commit0377b1d5150171a9907b0f5bb06f970d4cf0959d (patch)
tree52dde3389ad2e8e6cd262d8a96bb05b11c114319
parentd9431f5ff267f05af08955ce16543b31535527dd (diff)
parentcbc41d6fc6126ba630dcfedda55694af3e5b23bc (diff)
Merged in staging (pull request #28)
Staging
-rw-r--r--indoteknik_api/controllers/api_v1/__init__.py1
-rw-r--r--indoteknik_api/controllers/api_v1/invoice.py89
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py15
-rw-r--r--indoteknik_api/controllers/controller.py3
-rw-r--r--indoteknik_api/models/__init__.py1
-rw-r--r--indoteknik_api/models/account_move.py20
-rw-r--r--indoteknik_api/models/blog_post.py3
-rwxr-xr-xindoteknik_custom/models/sale_order.py14
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']