summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_api/controllers/api_v1/midtrans.py19
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py36
-rw-r--r--indoteknik_api/models/account_move.py3
-rw-r--r--indoteknik_api/models/sale_order.py29
-rw-r--r--indoteknik_custom/models/midtrans.py25
-rwxr-xr-xindoteknik_custom/models/sale_order.py2
6 files changed, 99 insertions, 15 deletions
diff --git a/indoteknik_api/controllers/api_v1/midtrans.py b/indoteknik_api/controllers/api_v1/midtrans.py
index fdc801d3..d5c91cb4 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
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/models/account_move.py b/indoteknik_api/models/account_move.py
index 5c31f010..9bbe8c94 100644
--- a/indoteknik_api/models/account_move.py
+++ b/indoteknik_api/models/account_move.py
@@ -15,7 +15,7 @@ class AccountMove(models.Model):
'sales': account_move.invoice_user_id.name,
'amount_total': account_move.amount_total,
'amount_residual': account_move.amount_residual,
- 'invoice_date': '',
+ 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '',
'efaktur': True if account_move.efaktur_document else False,
}
if isinstance(object, datetime.date):
@@ -31,7 +31,6 @@ class AccountMove(models.Model):
'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': [],
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index c3f3dccb..66ef27fa 100644
--- a/indoteknik_api/models/sale_order.py
+++ b/indoteknik_api/models/sale_order.py
@@ -24,9 +24,19 @@ class SaleOrder(models.Model):
data['status'] = 'waiting'
if sale_order.state == 'sale':
data['status'] = 'sale'
+ picking_count = {
+ 'assigned': 0,
+ 'done': 0,
+ }
for picking in sale_order.picking_ids:
- if picking.state == 'assigned':
- data['status'] = 'shipping'
+ if picking.state in ['confirmed', 'assigned']:
+ picking_count['assigned'] += 1
+ if picking.state == 'done':
+ picking_count['done'] += 1
+ if picking_count['assigned'] > 0:
+ data['status'] = 'shipping'
+ if picking_count['done'] > 0:
+ data['status'] = 'partial_shipping'
if sale_order.state == 'done':
data['status'] = 'done'
@@ -53,3 +63,18 @@ class SaleOrder(models.Model):
data_with_detail['invoices'].append(self.env['account.move'].api_v1_single_response(invoice))
data.update(data_with_detail)
return data
+
+
+class SaleOrderLine(models.Model):
+ _inherit = 'sale.order.line'
+
+ def api_single_response(self, sale_order_line, context=False):
+ data = {
+ 'image': self.env['ir.attachment'].api_image('product.template', 'image_128', sale_order_line.product_id.product_tmpl_id.id),
+ 'item_code': sale_order_line.product_id.default_code,
+ 'product_name': sale_order_line.product_id.name,
+ 'price_before_discount': sale_order_line.price_unit * sale_order_line.product_uom_qty,
+ 'price_after_discount': sale_order_line.price_total,
+ 'tax': sale_order_line.price_tax
+ }
+ return data
diff --git a/indoteknik_custom/models/midtrans.py b/indoteknik_custom/models/midtrans.py
index 76dee447..11b10292 100644
--- a/indoteknik_custom/models/midtrans.py
+++ b/indoteknik_custom/models/midtrans.py
@@ -1,5 +1,6 @@
from odoo import fields, models, api
import logging
+import json
_logger = logging.getLogger(__name__)
@@ -25,6 +26,30 @@ class MidtransNotification(models.Model):
], string='Payment Status',
help='Payment Gateway Status / Midtrans / Web, https://docs.midtrans.com/en/after-payment/status-cycle')
+ def _parse_notification(self):
+ query = [
+ ('payment_status', '=', False)
+ ]
+ notifications = self.env['midtrans.notification'].search(query, order='id')
+ for notif in notifications:
+ payment_status = json.loads(notif.json_raw)['transaction_status']
+ payment_type = json.loads(notif.json_raw)['payment_type']
+ gross_amount = json.loads(notif.json_raw)['gross_amount']
+ order_id = json.loads(notif.json_raw)['order_id']
+
+ orders = order_id.split('_')
+ order = orders[0]
+ sale_order = self.env['sale.order'].search([('name', '=', order)], limit=1)
+
+ notif.payment_status = payment_status
+ notif.sale_order_id = sale_order.id
+
+ sale_order.payment_type = payment_type
+ sale_order.gross_amount = gross_amount
+ sale_order.payment_status = payment_status
+
+ _logger.info('Success Parsing Midtrans Notification %s' % notif.id)
+
class MidtransRecurring(models.Model):
_name = 'midtrans.recurring'
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 519e55ce..35f1af8e 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -67,6 +67,8 @@ class SaleOrder(models.Model):
('authorize', 'Authorize'),
], string='Payment Status', help='Payment Gateway Status / Midtrans / Web, https://docs.midtrans.com/en/after-payment/status-cycle')
date_doc_kirim = fields.Datetime(string='Tanggal Kirim di SJ', help="Tanggal Kirim di cetakan SJ yang terakhir, tidak berpengaruh ke Accounting")
+ payment_type = fields.Char(string='Payment Type', help='Jenis pembayaran dengan Midtrans')
+ gross_amount = fields.Float(string='Gross Amount', help='Jumlah pembayaran yang dilakukan dengan Midtrans')
def calculate_line_no(self):
line_no = 0