cron_payment_callback_pemda.py.bak 2.95 KB
import sys
import os
import json
import requests
from sqlalchemy import create_engine
from sqlalchemy.sql import text
from datetime import date, datetime, timedelta
from pyramid.paster import (
    setup_logging,
    get_appsettings,
)
from sqlalchemy import func, and_, case
from sqlalchemy import create_engine, func, engine_from_config
from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    relationship,
    backref
)
from sqlalchemy.ext.declarative import declarative_base
from esipkd.models.isipkd import (ARInvoice, ARSspd)

## python cron_payment_callback_pemda.py [/config.ini] [tahun]
        
if len(sys.argv) < 2:
    raise Exception('CONFIG .ini Not Found.')

datenow = date.today()
configpath = sys.argv[1] # CONFIG .ini
tahunargs = (len(sys.argv) < 3) and datenow.year or sys.argv[2] # CONFIG tahun_id

settings = get_appsettings(configpath)
engine = engine_from_config(settings, 'sqlalchemy.')
engine.echo = False
DBSession = scoped_session(sessionmaker())
DBSession.configure(bind=engine)
Base = declarative_base()
        
def get_listkdbayar():
    getdata = DBSession.query(ARInvoice.kode).select_from(ARSspd)\
        .join(ARInvoice,ARInvoice.id==ARSspd.arinvoice_id)\
        .filter(ARSspd.tahun_id == tahunargs,
               ARSspd.ntb.notin_(['BJBQRIS','BJBVA']),
               ARSspd.tgl_bayar >= datenow,
               ARSspd.posted_pemda == 0).all()
    list_kd_bayar = [d.kode for d in getdata]
    return list_kd_bayar
    
def update_flagging(kd_bayar):
    id_inv = DBSession.query(ARInvoice.id).select_from(ARSspd)\
        .join(ARInvoice,ARInvoice.id==ARSspd.arinvoice_id)\
        .filter(ARInvoice.kode == kd_bayar).scalar()
    DBSession.query(ARSspd).filter(ARSspd.arinvoice_id==id_inv).\
             update({ARSspd.posted_pemda: 1}, synchronize_session='fetch')
        
def sendrpc(kd_bayar):
    print('STARTING RPC CALLBACK PEMDA')
    headers = {'Content-Type':'application/json'}
    if not 'pemdaqris_url' in settings and not settings['pemdaqris_url']:
        print('pemdaqris_url belum ada di settings')
        raise Exception('pemdaqris_url belum ada di settings')
        
    url = settings['pemdaqris_url']
    try:
        resp = requests.post(url=url,
                        data=json.dumps(dict(kd_bayar=kd_bayar)), 
                        headers=headers,
                    verify=False)
        print('KD BAYAR : {}'.format(kd_bayar))
        print('Response RPC CALLBACK PEMDA : {}'.format(resp.content))
        try:
            jsonr = json.loads(resp.content)
            if jsonr.get('success')==False:
                raise Exception(jsonr.get('message'))
        except Exception as err:
            print(err)
            raise Exception(err)
        update_flagging(kd_bayar)
        return True
    except requests.exceptions.RequestException as err:
        print('Error send BJBQRIS to pemda : {}'.format(err))
        raise Exception(err)
        
def main():
    for k in get_listkdbayar():
        sendrpc(k)
    
main()