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
|
from odoo import fields, models, api
import logging
import json
_logger = logging.getLogger(__name__)
class MidtransNotification(models.Model):
_name = 'midtrans.notification'
json_raw = fields.Char(string='JSON Raw Text')
sale_order_id = fields.Many2one('sale.order', string='Sales Order')
payment_status = fields.Selection([
('pending', 'Pending'),
('capture', 'Capture'),
('settlement', 'Settlement'),
('deny', 'Deny'),
('cancel', 'Cancel'),
('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 _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].replace('-', '/')
if 'cpl' in order_id:
order = order.replace('/cpl', '')
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'
json_raw = fields.Char(string='JSON Raw Text')
class MidtransAccount(models.Model):
_name = 'midtrans.account'
json_raw = fields.Char(string='JSON Raw Text')
|