tools.py 5.8 KB
from tangsel.pbb.esppt import SPPT_CLASS
from tangsel.tools import *
from tangsel.base.tools import *
from tangsel.base.tools.api import config_pars_rpc_url
from tangsel.tools.pbb import *
from tangsel.base.tools.report import *
# from tangsel.tools.db import *
# from tangsel.tools.captcha import *
from tangsel.tools.api import send_rpc


def convert_to_pdf(filename, typ, password=None, remove=True):
    log.info("Start Export {}".format(filename))
    settings = get_settings()
    import getpass
    username = getpass.getuser()
    odt_file = '.'.join([filename, 'odt'])
    out_dir = os.path.dirname(filename)
    out_file = '.'.join([filename, typ])
    if 'unoconv_py' in settings and settings['unoconv_py']:
        log.info("Unoconv PY {}".format(filename))
        unoconv_py = settings['unoconv_py']
        if 'unoconv_bin' in settings and settings['unoconv_bin']:
            unoconv_bin = settings['unoconv_bin']
        else:
            unoconv_bin = ''

        params = [unoconv_py, unoconv_bin, '-f', 'pdf']
        # if password:
        # params.extend(['-e', 'EncryptFile=True',
        # '-e', 'DocumentOpenPassword=' + password])

        params.append(odt_file)
        log.info("DEBUG EXPORT>>{}".format(' '.join(params)))
        subprocess.call(params)

    else:
        log.info("Unoconv BIN {}".format(filename))
        if 'unoconv_bin' in settings and settings['unoconv_bin']:
            unoconv_bin = settings['unoconv_bin']
            params = [unoconv_bin,
                      '-env:UserInstallation=file:///tmp/' + username,
                      '--headless', '--convert-to', 'pdf']
            params.extend(['--outdir', out_dir, 'pdf', odt_file])
            log.info("DEBUG EXPORT>>{}".format(' '.join(params)))
            subprocess.call(params)
    # if 'unoconv_bin' in settings and settings['unoconv_bin']:
        # unoconv_bin = settings['unoconv_bin']
        # params = [unoconv_bin,
            # '--format=pdf']
        # if password:
            # params.append(f"--password={password}")
        # params.extend(['-o', out_file, odt_file])
        # log.debug("DEBUG EXPORT>>{}".format(' '.join(params)))
        # subprocess.call(params)

    if not os.path.isfile(odt_file):
        log.info("ODT FILE NOTFOUND")
        return dict(error=dict(code=-1,
                               message='File  %s tidak ditemukan ' % odt_file))
    else:
        if not os.path.isfile(out_file):
            return dict(error=dict(code=-1,
                                   message='File  %s tidak ditemukan ' % out_file))
        if remove:
            os.remove(odt_file)
    return dict(filename=out_file)


def get_data(method, data):
    auth = config_pars_rpc_url("rpc_pbb_mirror.url", method)
    resp = send_rpc(auth, data)
    if resp and "result" in resp:
        log.info('Method: {}'.format(method))
        log.info(resp["result"].get("data", ''))
        return "data" in resp["result"] and resp["result"]["data"] or True
    if resp and "error" in resp:
        log.debug("Error get data method: %s", method)
    else:
        log.debug("No result from server")
    return False


def get_paging(data=None, value=None):
    if value:
        if 'page' in value and value['page']:
            if value['page'] == 0:
                data['page'] = 1
            else:
                data['page'] = value['page']

        if "page_size" in value and value['page_size']:
            data['page_size'] = value['page_size']
    return data


def get_sppts(nop=None, tahun=None, page=None):
    data = {
        "order": [
            "kd_propinsi", "kd_dati2", "kd_kecamatan", "kd_kelurahan",
            "kd_blok",
            "no_urut", "kd_jns_op"
        ],
        "where": []}
    if nop:
        data['where'].append(
            dict(
                key="nop",
                val=nop
            ))
    if tahun:
        data['where'].append(
            dict(
                key="thn_pajak_sppt",
                val=tahun
            ))
    data = get_paging(data, {"page": page})
    return get_data("get_sppt", data)


def get_sppt(nop, tahun):
    if not SPPT_CLASS.mirror_url:
        from tangsel.pbb.models import Sppt, SpptOpBersama, DatObjekPajak
        sppt = Sppt.get_by_nop(nop).filter_by(thn_pajak_sppt=tahun).first()
        if not sppt:
            return False
        dsppt = dict(sppt.__dict__)
        dsppt.pop("_sa_instance_state", None)
        return dsppt
    
            
    data = {'where': [
        dict(
            key="nop",
            val=nop
        ),
        dict(
            key="thn_pajak_sppt",
            val=tahun
        )
    ]}
    resp = get_data("get_sppt", data)
    return resp and "record" in resp and resp["record"][0] or False


def get_nop(nop):
    data = {'where': [
        dict(
            key="nop",
            val=nop
        )
    ]}
    resp = get_data("get_nop", data)
    return resp and "record" in resp and resp["record"][0] or False


def get_nops_by_subjek(subjek_pajak_id, page=None, page_size=None):
    data = {
        'where': [
            dict(
                key="subjek_pajak_id",
                val=subjek_pajak_id
            )
        ],
        "order": [
            "kd_propinsi", "kd_dati2", "kd_kecamatan", "kd_kelurahan",
            "kd_blok",
            "no_urut", "kd_jns_op"
        ]
    }
    value = {}
    if page:
        value["page"] = page
    if page_size:
        value["page_sige"] = page_size

    data = get_paging(data, {"page": page})
    return get_data("get_nop", data)


def get_sppt_bersama(nop, tahun):
    data = {'where': [
        dict(
            key="nop",
            val=nop
        ),
        dict(
            key="thn_pajak_sppt",
            val=tahun
        )
    ]}
    resp = get_data("get_sppt_bersama", data)
    return resp and "record" in resp and resp["record"] or False


def get_pbb(values):
    return get_paging(values)