notify.py 3.09 KB
from ..vendor import sha256

import logging

from agratek.api.merchant.views.notify_vendor import purchase_notify, update_harga
from opensipkd.base import get_settings
from opensipkd.base.models import Partner, flush_row
from opensipkd.pasar.models import H2hArInvoiceDet

log = logging.getLogger(__name__)


def proses(data):
    print('masuk odeo notify >>')
    settings = get_settings()
    mid = 'odeo_mid' in settings and settings["odeo_mid"] or None
    key = 'odeo_key' in settings and settings["odeo_key"] or None
    partner = Partner.query_kode("ODEO").first()
    status = str(data["status"])
    if status == "BROADCAST_NEW_PRICE":
        signature = sha256("{mid}{key}{status}".format(
            mid=mid, key=key, status=status))

        if signature != data["signature"]:
            log.info("Signature Vendor Different")
            log.info("local %s, vendor %s" % (signature, data["signature"]))
            return dict(error="Signature different")

        new_price = data["new_prices"]
        for k in new_price:
            v = new_price[k]
            update_harga(partner, k, v)
        return dict(success=True)

    else:
        order_id = str(data["order_id"])
        sg = "{order_id}{mid}{key}{status}".format(
                order_id=order_id, mid=mid, key=key, status=status)
        log.info(sg)
        signature = sha256(sg)
        if signature != data["signature"]:
            log.info("Signature Vendor Different {} {}".format(data["signature"],
                signature))
            log.info("local %s, vendor %s" % (signature, data["signature"]))
            return dict(error="Signature Different")

        print('odeo notify partner.id >>')
        print(partner.id)
        print('odeo notify order_id >>')
        print(order_id)
        
        order = H2hArInvoiceDet.query() \
            .filter(H2hArInvoiceDet.vendor_id == partner.id,
                    H2hArInvoiceDet.vend_inv_no == str(order_id)).first()

        print('purchase_notify data >>')
        print(data)
        print('purchase_notify order >>')
        print(order)
        if order:
            print(order.h2h_ar_invoice.cust_inv_no)
            if status == "COMPLETED":
                order.status = 1
            else:
                order.status = -3
            order.notify = dict(postdata=data)
            if "sn" in data and data["sn"]:
                order.serial_number = data["sn"]
            else:
                message = 'message' in data and data["message"] or ""
                if message:
                    loc = message.find("SN: ")
                    if loc>-1:
                        sn = message[loc+4:loc+28]
                        order.serial_number=sn
            log.info("Notify Save: POST={}".format(data)) 
            flush_row(order)
            # todo: add to customer notify table
            # todo: create cron for notify
            # proses jika status 1 notify ada isinya tapi belum ada field result
            # todo: create cron to recurring order to other vendor
            # jika status = -2 proses vendor yang lain
            purchase_notify(order)
            return order