summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-02-25 11:53:29 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-02-25 11:53:29 +0700
commit13c90b5a95391d797b89c39b90c1430400ed29b7 (patch)
tree1df668fee68e72a76cbcc5255e5d533b3721d190 /indoteknik_api/controllers/api_v1
parent0f7f7fa273295fadde403c4ff9333b3bbe14489a (diff)
parent029e8fce907060de2a2514b5abc731f4cd9da96e (diff)
Merge branch 'staging' into release
Diffstat (limited to 'indoteknik_api/controllers/api_v1')
-rw-r--r--indoteknik_api/controllers/api_v1/midtrans.py25
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py61
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py36
-rw-r--r--indoteknik_api/controllers/api_v1/user.py32
4 files changed, 137 insertions, 17 deletions
diff --git a/indoteknik_api/controllers/api_v1/midtrans.py b/indoteknik_api/controllers/api_v1/midtrans.py
index fdc801d3..49ebce0f 100644
--- a/indoteknik_api/controllers/api_v1/midtrans.py
+++ b/indoteknik_api/controllers/api_v1/midtrans.py
@@ -8,19 +8,20 @@ class Midtrans(controller.Controller):
prefix = '/api/v1/'
@http.route(prefix + 'midtrans/notification', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
- def notification(self, **kw):
+ def midtrans_notification(self, **kw):
json_raw = json.loads(request.httprequest.data)
- trx_status = json.loads(request.httprequest.data)['transaction_status']
- order_no = json.loads(request.httprequest.data)['order_id']
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
+ # trx_status = json.loads(request.httprequest.data)['transaction_status']
+ # order_no = json.loads(request.httprequest.data)['order_id']
- query = [('name', '=', order_no)]
- order = request.env['sale.order'].sudo().search(query, limit=1)
- order.payment_status = trx_status
+ # query = [('name', '=', order_no)]
+ # order = request.env['sale.order'].sudo().search(query, limit=1)
+ # order.payment_status = trx_status
request.env['midtrans.notification'].create([{
- 'sale_order_id': order.id,
- 'json_raw': json_raw,
- 'payment_status': trx_status,
+ # 'sale_order_id': order.id,
+ 'json_raw': json_dump,
+ # 'payment_status': trx_status,
}])
return
@@ -28,15 +29,17 @@ class Midtrans(controller.Controller):
@http.route(prefix + 'midtrans/recurring', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
def recurring(self, **kw):
json_raw = json.loads(request.httprequest.data)
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
request.env['midtrans.recurring'].create([{
- 'json_raw': json_raw,
+ 'json_raw': json_dump,
}])
return
@http.route(prefix + 'midtrans/payaccount', auth='none', type='json', csrf=False, cors='*', methods=['POST', 'OPTIONS'])
def payaccount(self, **kw):
json_raw = json.loads(request.httprequest.data)
+ json_dump = json.dumps(json_raw, indent=4, sort_keys=True)
request.env['midtrans.account'].create([{
- 'json_raw': json_raw,
+ 'json_raw': json_dump,
}])
return \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index 09b3caa0..ba59a1ce 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -81,3 +81,64 @@ class Partner(controller.Controller):
'id': partner.id,
})
+ @http.route(prefix + 'partner/<id>', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ def write_partner_by_id(self, **kw):
+ user_token = self.authenticate()
+ if not user_token:
+ return self.unauthorized_response()
+
+ params = self.get_request_params(kw, {
+ 'id': ['required', 'number'],
+ 'name': [],
+ 'company_type_id': ['number'],
+ 'industry_id': ['number'],
+ 'tax_name': ['alias:nama_wajib_pajak'],
+ 'npwp': [],
+ })
+
+ if not params['valid']:
+ return self.response(code=400, description=params)
+
+ partner = request.env[self._name].search([('id', '=', params['value']['id'])], limit=1)
+ if not partner:
+ return self.response(code=404, description='User not found')
+
+ if user_token['partner_id'] not in self.get_partner_child_ids(partner.id):
+ return self.unauthorized_response()
+
+ partner.write(params['value'])
+
+ return self.response({
+ 'id': partner.id
+ })
+
+ @http.route(prefix + 'partner/industry', auth='public', methods=['GET', 'OPTIONS'])
+ def get_partner_industry(self):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ partner_industry = request.env['res.partner.industry'].search([])
+ data = []
+ for industry in partner_industry:
+ data.append({
+ 'id': industry.id,
+ 'name': industry.name
+ })
+
+ return self.response(data)
+
+ @http.route(prefix + 'partner/company_type', auth='public', methods=['GET', 'OPTIONS'])
+ def get_partner_company_type(self):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ partner_company_type = request.env['res.partner.company_type'].search([])
+ data = []
+ for company_type in partner_company_type:
+ data.append({
+ 'id': company_type.id,
+ 'name': company_type.name
+ })
+
+ 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 1c67d6c5..15dcf0ba 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -36,10 +36,14 @@ class SaleOrder(controller.Controller):
data.append({
'id': sale.id,
'name': sale.name,
- 'amount_total': sale.amount_total,
+ 'date_order': self.time_to_str(sale.date_order, '%d/%m/%Y %H:%M:%S'),
'state': sale.state,
+ 'amount_untaxed': sale.amount_untaxed,
+ 'amount_tax': sale.amount_tax,
+ 'amount_total': sale.amount_total,
'product_name': product_name,
'product_not_in_id': product_not_in_id,
+ 'details': [request.env['sale.order.line'].api_single_response(x, context='with_detail') for x in sale.order_line]
})
return self.response(data)
@@ -106,6 +110,34 @@ class SaleOrder(controller.Controller):
return self.response(data)
+ @http.route(PREFIX_PARTNER + 'sale_order/<id>/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False)
+ def partner_checkout_sale_order_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 = [
+ ('id', '=', params['value']['id']),
+ ('partner_id', 'in', partner_child_ids)
+ ]
+ data = {}
+ sale_order = request.env['sale.order'].search(domain)
+ if sale_order:
+ sale_order.approval_status = 'pengajuan1'
+ data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail')
+
+ return self.response(data)
+
@http.route(PREFIX_PARTNER + 'sale_order/<id>/upload_po', auth='public', method=['POST', 'OPTIONS'], csrf=False)
def partner_upload_po_sale_order(self, **kw):
user_token = self.authenticate()
@@ -187,7 +219,7 @@ class SaleOrder(controller.Controller):
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)
+ return self.response(code=400, description=params)
partner_child_ids = self.get_partner_child_ids(params['value']['partner_id'])
domain = [
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index 17bc931e..800f6bf1 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -3,6 +3,7 @@ from odoo import http
from odoo.http import request
from odoo.tools.config import config
import random, string
+from difflib import SequenceMatcher
class User(controller.Controller):
@@ -62,20 +63,43 @@ class User(controller.Controller):
return self.response(code=400, description='email, name and password is required')
user = self.get_user_by_email(email)
-
if user:
return self.response({
'register': False,
'reason': 'EMAIL_USED'
})
-
- user = request.env['res.users'].create({
+
+ user_data = {
'name': name,
'login': email,
'password': password,
'active': False,
'sel_groups_1_9_10': 9
- })
+ }
+
+ user = request.env['res.users'].create(user_data)
+
+ company = kw.get('company', False)
+ if company:
+ parameter = [
+ ('company_type', '=', 'company'),
+ ('name', 'ilike', company)
+ ]
+ match_company = request.env['res.partner'].search(parameter, limit=1)
+ match_ratio = 0
+ if match_company:
+ match_ratio = SequenceMatcher(None, match_company.name, company).ratio()
+ if match_ratio > 0.7:
+ request.env['user.company.request'].create({
+ 'user_id': user.partner_id.id,
+ 'user_company_id': match_company.id,
+ 'user_input': company
+ })
+ else:
+ new_company = request.env['res.partner'].create({
+ 'name': company
+ })
+ user.parent_id = new_company.id
return self.response({'register': True})