available_invoice.py 2.76 KB
import sys
from configparser import ConfigParser
from argparse import ArgumentParser
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import sismiop.services.base


def get_option(argv):
    default_count = 10
    help_count = 'default {}'.format(default_count)
    pars = ArgumentParser()
    pars.add_argument('conf')
    pars.add_argument('--tahun')
    pars.add_argument('--min-nominal', type=int)
    pars.add_argument('--max-nominal', type=int)
    pars.add_argument(
        '--count', type=int, default=default_count, help=help_count)
    return pars.parse_args(argv)


def main(argv=sys.argv):
    option = get_option(argv[1:])
    count = int(option.count)
    conf_file = option.conf
    conf = ConfigParser()
    conf.read(conf_file)
    module_name = conf.get('main', 'module')
    module = __import__('sismiop.services.' + module_name)
    sub_module = getattr(module.services, module_name)
    AvailableInvoice = sub_module.AvailableInvoice
    db_url = conf.get('main', 'db_url')
    persen_denda = conf.getfloat('main', 'persen_denda')
    engine = create_engine(db_url)
    session_factory = sessionmaker(bind=engine)
    sismiop.services.base.DBSession = session_factory()
    a = AvailableInvoice(persen_denda, option)
    a.show()


def str2bool(v):
    if isinstance(v, bool):
        return v
    if v.lower() in ('ya', 'yes', 'true', 't', 'y', '1'):
        return True
    elif v.lower() in ('tidak', 'no', 'false', 'f', 'n', '0'):
        return False
    raise argparse.ArgumentTypeError('Boolean value expected.')


def get_option_tangsel(argv):
    default_count = 10
    help_count = 'default {}'.format(default_count)
    pars = ArgumentParser()
    pars.add_argument('conf')
    pars.add_argument('--tahun')
    pars.add_argument('--discount-penuh', action='store_true')
    pars.add_argument(
        '--faktor-pengurang', type=str2bool, nargs='?', const=True,
        default=None)
    pars.add_argument('--min-nominal', type=int)
    pars.add_argument('--max-nominal', type=int)
    pars.add_argument(
        '--count', type=int, default=default_count, help=help_count)
    return pars.parse_args(argv)


def tangsel(argv=sys.argv):
    option = get_option_tangsel(argv[1:])
    conf_file = option.conf
    conf = ConfigParser()
    conf.read(conf_file)
    module_name = conf.get('main', 'module')
    module = __import__('sismiop.services.' + module_name)
    sub_module = getattr(module.services, module_name)
    AvailableInvoice = sub_module.AvailableInvoiceTangsel
    db_url = conf.get('main', 'db_url')
    persen_denda = conf.getfloat('main', 'persen_denda')
    engine = create_engine(db_url)
    session_factory = sessionmaker(bind=engine)
    sismiop.services.base.DBSession = session_factory()
    a = AvailableInvoice(persen_denda, option)
    a.show()