summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/midtrans.py
blob: 6acbe5a7241a4b61082e732638dea52bfededd4e (plain)
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')