Exemplo n.º 1
0
def main():
    """
    Just main proc
    """

    dl_app.parser.add_argument('--ca_id',
                               type=int,
                               required=True,
                               help='id контрагента Деллин')
    dl_app.parser.add_argument('--address',
                               type=str,
                               required=True,
                               help='Произвольный адрес')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL address add')
    logging.info("args=%s", args)

    app.login(auth=True)
    app.db_login()

    curs = app.conn.cursor()

    #params = {}
    #params["counteragentID"] = args.ca_id
    #params["search"] = args.address
    #dl_res = app.dl.dl_address_add_v2(params)
    dl_res = app.dl.dl_address_add_v2(args.ca_id,
                                      args.address.replace('№', ''))

    logging.info('dl_address_add res=%s', dl_res)

    if dl_res['metadata']['status'] == 200:
        ret_address_id = dl_res['data']['addressID']
        logging.info('op status=%s, data.state=%s, addressID=%s',
                     dl_res['metadata']['status'], dl_res['data']['state'],
                     ret_address_id)
        print(ret_address_id, end='', flush=True)
        # add lastUpdate=now()
        loc_sql = curs.mogrify(
            u"INSERT INTO ext.dl_addresses(\
ca_id, id, address, is_terminal, type, status)\
VALUES(%s,%s,%s,%s,%s,%s)\
ON CONFLICT DO NOTHING;",
            (args.ca_id, ret_address_id, args.address, 'f', 'delivery', 1))
        logging.info(u"loc_sql=%s", loc_sql)
        curs.execute(loc_sql)
        app.conn.commit()
    else:
        err_str = json.dumps(dl_res["errors"], ensure_ascii=False)
        logging.error(err_str)
        print(err_str, file=sys.stderr, end='', flush=True)

    app.logout()
Exemplo n.º 2
0
#!/usr/bin/env python3
# -*- coding: utf8 -*-

import logging
import sys
import dl_app

dl_app.parser.add_argument('--ca_id', type=int, required=True, help='ca_id')
dl_app.parser.add_argument('--term_id',
                           type=int,
                           required=True,
                           help='DL terminal_id')
args = dl_app.parser.parse_args()

# TODO rename 'app' to 'app'
app = dl_app.DL_app(args=args, description='DL terminal as address add')
logging.info("args={}".format(args))

if app.login(auth=True):
    # Торговый Дом ЭнергоПрибор, ca_id=6619266
    dl_res = app.dl.dl_address_term_add(ca_id=args.ca_id, term_id=args.term_id)
    logging.info('dl_res={}'.format(dl_res))
    # OUTPUT: dl_res={'success': {'state': 'new', 'addressID': 89941747}}
    if 200 == app.dl.status_code:
        if 'success' in dl_res:
            ret_addr_id = dl_res['success']['addressID']
            logging.info('state={}, addressID={}'.format(
                dl_res['success']['state'], ret_addr_id))
            if 'new' == dl_res['success']['state'] or 'existing' == dl_res[
                    'success']['state']:
                print(ret_addr_id, end='', flush=True)
Exemplo n.º 3
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import logging
# import os
# import sys

import dl_app

dl_app.parser.add_argument('--url',
                           type=str,
                           required=True,
                           help='URL справочника на api.dellin.ru')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL directory download')
logging.info("args={}".format(args))

if app.login(auth=True):
    dl_res = app.dl.dl_any(args.url)
    if 200 == app.dl.status_code:
        logging.info("dl_res={}".format(dl_res))
        print(dl_res['hash'])
        print(dl_res['url'])
        #print(dl.text)
    app.logout()
Exemplo n.º 4
0
def main():
    """
    Just main proc
    """

    dl_app.parser.add_argument('--ca_id',
                               type=int,
                               required=True,
                               help='id контрагента Деллин')
    dl_app.parser.add_argument('--address',
                               type=str,
                               required=True,
                               help='Произвольный адрес')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL address add')
    logging.info("args=%s", args)

    app.login(auth=True)
    app.db_login()

    curs = app.conn.cursor()

    addr_sql = "select * from shp.dl_ca_addr_fields({}, '{}')"
    curs.execute(addr_sql.format(-1, args.address))
    (ret_flag, ret_addr_kladr_street, ret_addr_house, ret_addr_block,
     ret_addr_flat, ret_street, ret_street_type, ret_addr_city_code,
     ret_addr_city) = curs.fetchone()

    if ret_flag:
        logging.info('app.dl_address_add(ca_id={}, kladr_street={}, street={},\
 house={}, building={}, flat={});'.format(args.ca_id, ret_addr_kladr_street,
                                          ret_street, ret_addr_house,
                                          ret_addr_block, ret_addr_flat))

        # do not call dellin api
        if not ret_addr_house:
            err_params = []
            if ret_addr_house is None:
                err_params.append(ERR_REASON['house'])
            print(ca_params_error(err_params),
                  file=sys.stderr,
                  end='',
                  flush=True)
            return

        params = {}
        params["counteragentID"] = args.ca_id
        params["house"] = ret_addr_house[:5]
        params["building"] = ret_addr_block
        params["structure"] = None
        params["flat"] = ret_addr_flat
        if ret_addr_kladr_street:
            params["street"] = ret_addr_kladr_street
        else:
            custom_street = {}
            custom_street["code"] = ret_addr_city_code.ljust(25, '0')
            custom_street["street"] = ret_street_type or 'ул. Отсутствующая'
            params["customStreet"] = custom_street

        dl_res = app.dl.dl_any_address_add(params)

        logging.info('dl_address_add res=%s', dl_res)

        if app.dl.status_code == 200:
            if 'success' in dl_res:
                ret_address_id = dl_res['success']['addressID']
                logging.info('state=%s, addressID=%s',
                             dl_res['success']['state'], ret_address_id)
                print(ret_address_id, end='', flush=True)
                # add lastUpdate=now()
                loc_sql = curs.mogrify(
                    u"INSERT INTO ext.dl_addresses(\
 ca_id, id, address, code, street, house, is_terminal, type, status)\
 VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)\
 ON CONFLICT DO NOTHING;", (args.ca_id, ret_address_id, args.address,
                            ret_addr_kladr_street, ret_street, ret_addr_house,
                            'f', 'delivery', 1))
                logging.info(u"loc_sql=%s", loc_sql)
                curs.execute(loc_sql)
                app.conn.commit()
            else:
                err_str = 'ERROR={}'.format(dl_res)
                logging.error(err_str)
                print(err_str, file=sys.stderr, end='', flush=True)
        else:
            err_str = 'ERROR={}'.format(app.dl.err_msg)
            logging.error(err_str)
            print(err_str, file=sys.stderr, end='', flush=True)

    else:
        err_str = 'Ошибка разбора адреса: {}'.format(ret_addr_city)
        logging.error(err_str)
        print(err_str, file=sys.stderr, end='', flush=True)

    app.logout()
Exemplo n.º 5
0
def main():
    """
    Just main proc
    """
    dl_app.parser.add_argument('--shp_id', type=int, required=True,
                               help='shp_id')
    dl_app.parser.add_argument('--test', type=bool, required=False,
                               default=False, help='test mode')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL request v1')
    logging.info("args=%s", args)

    app.db_login()

    curs = app.conn.cursor()
    shp_id = args.shp_id
    logging.info("shp_id=%d", shp_id)
    curs.callproc('shp.dl_req_params', [shp_id])
    (sender_id, sender_address_id, receiver_id, receiver_address_id, boxes,
     wepay, pre_shipdate, delivery_type, is_terminal) = curs.fetchone()
    assert sender_id is not None, 'sender_id не определён'
    assert sender_address_id is not None, 'sender_address_id не определён'
    assert receiver_id is not None, 'receiver_id не определён'
    assert receiver_address_id is not None, 'receiver_address_id не определён'
    assert boxes is not None, 'boxes не определён'
    assert wepay is not None, 'wepay не определён'
    assert delivery_type in [1, 4, 6, 20, 21], 'delivery_type - недопустимое значение'
    assert is_terminal is not None, 'is_terminal не определён'

    curs.callproc('shp.dl_req_sender_contacts', [shp_id])
    sender_contact_ids = [r[0] for r in curs.fetchall()]
    logging.debug('sender_contacts=%s', sender_contact_ids)

    curs.callproc('shp.dl_req_sender_phones', [shp_id])
    sender_phone_ids = [r[0] for r in curs.fetchall()]
    logging.debug('sender_phones=%s', sender_phone_ids)

    curs.callproc('shp.dl_req_receiver_contacts', [shp_id])
    receiver_contact_ids = [r[0] for r in curs.fetchall()]
    logging.debug('receiver_contacts=%s', receiver_contact_ids)

    curs.callproc('shp.dl_req_receiver_phones', [shp_id])
    receiver_phone_ids = [r[0] for r in curs.fetchall()]
    logging.debug('receiver_phones=%s', receiver_phone_ids)

    sender = collections.OrderedDict()
    sender["counteragentID"] = sender_id
    sender["addressID"] = sender_address_id
    sender["contacts"] = sender_contact_ids
    sender["phones"] = sender_phone_ids
    sender["worktimeStart"] = "00:00"
    sender["worktimeEnd"] = "23:59"

    # Receiver
    receiver = collections.OrderedDict()
    receiver["counteragentID"] = receiver_id
    receiver["addressID"] = receiver_address_id
    receiver["contacts"] = receiver_contact_ids
    receiver["phones"] = receiver_phone_ids
    receiver["worktimeStart"] = "00:00"
    receiver["worktimeEnd"] = "23:59"

    # --------------------------------------------
    # TO DO set
    cargo_length = 0.3
    cargo_width = 0.3
    cargo_height = 0.3
    cargo_weight = 1
    cargo_total_volume = cargo_length * cargo_width * cargo_height
    cargo_total_weight = 1

    # Request
    request = collections.OrderedDict()
    request["sender"] = sender
    request["receiver"] = receiver
    request["day"] = pre_shipdate.day
    request["month"] = pre_shipdate.month
    request["year"] = pre_shipdate.year
    request["totalWeight"] = cargo_total_weight
    request["totalVolume"] = cargo_total_volume
    request["quantity"] = boxes
    request["maxLength"] = cargo_length
    request["maxWidth"] = cargo_width
    request["maxHeight"] = cargo_height
    request["maxWeight"] = cargo_weight
    request["statedValue"] = 0.0
    # 1 - отправитель, 2 -получатель
    if wepay:
        loc_payer = 1
    else:
        loc_payer = 2
    request["whoIsPayer"] = loc_payer
    request["primaryPayer"] = loc_payer
    request["paymentType"] = 1
    request["deliveryType"] = delivery_type
    request["freight_uid"] = "0xab117f72d9de97b843ba5fd18cc2e858"

    # additionalServices
    #curs.execute('SELECT is_terminal FROM shp.vw_dl_addresses WHERE id = {}'.format(\
#receiver_address_id))
    #is_terminal = curs.fetchone()[0]
    logging.info('is_terminal=%s', is_terminal)
    # доставка до двери	1
    if not is_terminal:
        request["additionalServices"] = [{'service': 1, 'payer': loc_payer}]

    if args.test:
        request["inOrder"] = 0
        loc_status = 2
    else:
        request["inOrder"] = 1
        loc_status = 1

    loc_auth = True

    if not app.login(auth=loc_auth):
        logging.error('login error: %s', app.dl.err_msg)
        print(app.dl.err_msg, file=sys.stderr)
        sys.exit(-1)

    dl_res = app.dl.dl_request_v1(request)
    logging.info('dl.text=%s', app.dl.text)
    logging.debug('dl_res=%s', dl_res)
    logging.info(json.dumps(dl_res, ensure_ascii=False, indent=4))
    now = datetime.datetime.strftime(datetime.datetime.now(),
                                     '%Y-%m-%d %H:%M:%S')
    dl_answer = dl_res["answer"]
    if dl_answer["state"] == 'success':
        upd_sql = curs.mogrify(u"""
UPDATE shp.dl_preorder_params SET sts_code=%s, upddate=%s, ret_code=%s,
ret_msg=NULL, req_id=%s, req_barcode=%s
WHERE shp_id=%s;""", (loc_status, now, app.dl.status_code, dl_answer["requestID"],
                      dl_answer["barcode"], shp_id))
        print('{}@{}'.format(dl_answer["requestID"],
                             dl_answer["barcode"]), end='', flush=True)
    else:
        upd_sql = curs.mogrify(u"""
UPDATE shp.dl_preorder_params SET sts_code=%s, upddate=%s, ret_code=%s,
ret_msg=%s
WHERE shp_id=%s;""", (9, now, app.dl.status_code,
                      json.dumps(dl_answer, ensure_ascii=False), shp_id))

    logging.info(u"upd_sql=%s", upd_sql)
    curs.execute(upd_sql)
    app.conn.commit()

    if app.dl.session_id:
        app.logout()
Exemplo n.º 6
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import logging
# import os
import sys

import dl_app

args = dl_app.parser.parse_args()
ret_code = -1 

app = dl_app.DL_app(args=args, description='DL counteragents in JSON download')
logging.info("args={}".format(args))

if app.login(auth=True):
    dl_res = app.dl.dl_book_counteragents()
    if 200 == app.dl.status_code:
        logging.info('res_count={}'.format(len(dl_res)))
        with open('res-counteragents.txt', 'w') as of:
            of.write(app.dl.text.replace('\n', '').replace('\\', '\\\\'))
        ret_code = 0
        """
        load into PG with copy-dl-counteragents.sql
        """
    else:
        err_str = 'ERROR={}'.format(app.dl.err_msg)
        logging.error(err_str)
        ret_code = 1

    app.logout()
Exemplo n.º 7
0
def main():
    """
    Just main proc
    """
    # dl_app.parser.add_argument('--addr_id', type=int, required=True, help='ca addr_id')
    # dl_app.parser.add_argument('--phone', type=str, required=True, help='phone number')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL req test')
    logging.info("args=%s", args)

    app.db_login()

    # --------------------------------------------
    # Sender
    sender_id = 6619266  # TODO set
    sender_address_id = 24109121  # TODO set
    sender_contact_id = [87652393]  # TODO set
    sender_phone_id = [92944190]  # TODO set
    sender = collections.OrderedDict()
    sender["counteragentID"] = sender_id
    sender["addressID"] = sender_address_id
    sender["contacts"] = sender_contact_id
    sender["phones"] = sender_phone_id
    sender["worktimeStart"] = "00:00"
    sender["worktimeEnd"] = "23:59"

    # Receiver
    receiver_id = 573899  # TODO set
    receiver_address_id = 24136692  # TODO set
    receiver_contact_id = [84253436]  # TODO set
    receiver_phone_id = [90121936]  # TODO set
    receiver = collections.OrderedDict()
    receiver["counteragentID"] = receiver_id
    receiver["addressID"] = receiver_address_id
    receiver["contacts"] = receiver_contact_id
    receiver["phones"] = receiver_phone_id
    receiver["worktimeStart"] = "00:00"
    receiver["worktimeEnd"] = "23:59"

    # --------------------------------------------
    # TODO set
    cargo_length = 0.01
    cargo_width = 0.01
    cargo_height = 0.01
    cargo_weight = 1
    cargo_total_volume = 0.001
    cargo_total_weight = 1

    # Request
    tomorrow_date = datetime.date.today() + datetime.timedelta(days=1)
    request = collections.OrderedDict()
    request["sender"] = sender
    request["receiver"] = receiver
    request["day"] = tomorrow_date.day
    request["month"] = tomorrow_date.month
    request["year"] = tomorrow_date.year
    request["totalWeight"] = cargo_total_weight
    request["totalVolume"] = cargo_total_volume
    request["quantity"] = 1
    request["maxLength"] = cargo_length
    request["maxWidth"] = cargo_width
    request["maxHeight"] = cargo_height
    request["maxWeight"] = cargo_weight
    request["statedValue"] = 0.0
    request["whoIsPayer"] = 2
    request["primaryPayer"] = 2
    request["paymentType"] = 1
    request["deliveryType"] = 6
    request["freight_uid"] = "0xab117f72d9de97b843ba5fd18cc2e858"
    request["inOrder"] = 0

    loc_auth = True

    app.login(auth=loc_auth)

    dl_res = app.dl.dl_request_v1(request)
    logging.info('dl.text={}'.format(app.dl.text))
    #logging.info('dl_res={}'.format(dl_res))
    print(json.dumps(dl_res, ensure_ascii=False, indent=4))

    if app.dl.session_id:
        app.logout()
Exemplo n.º 8
0
def main():
    """
    Just main proc
    """

    dl_app.parser.add_argument('--pdoc_id',
                               type=int,
                               required=True,
                               help='arc_energo.person_doc.pdoc_id')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL person add')
    logging.info("args=%s", args)

    app.login(auth=True)
    app.db_login()

    curs = app.conn.cursor()

    sql_doc = """
        SELECT doc_type, doc_prenum, doc_num, doc_issue::varchar, e."ФИО"
        FROM person_doc
        join "Работники" e on e."КодРаботника" = emp_code
        WHERE pdoc_id={};
        """.format(args.pdoc_id)
    curs.execute(sql_doc)
    (doc_type, doc_prenum, doc_num, doc_issue, person_name) = curs.fetchone()
    params = {}
    params["form"] = '0xAB91FEEA04F6D4AD48DF42161B6C2E7A'
    params["name"] = person_name
    doc = {}
    doc["type"] = PERSON_DOCS[doc_type]
    doc["serial"] = doc_prenum
    doc["number"] = doc_num
    doc["date"] = doc_issue
    params["document"] = doc

    logging.info(
        'dl_book_ca_update(doc_type=%s, doc_prenum=%s, doc_num=%s,\
                  doc_issue=%s, person_name=%s)', doc_type, doc_prenum,
        doc_num, doc_issue, person_name)

    # do not call dellin api
    if not check_params(person_name, doc_prenum, doc_num):
        return

    dl_res = app.dl.dl_book_ca_update(params)
    logging.info('dl_book_ca_update res=%s', dl_res)

    if app.dl.status_code == 200:
        if 'success' in dl_res:
            ret_ca_id = dl_res['success']['counteragentID']
            logging.info('state=%s, counteragentID=%s',
                         dl_res['success']['state'], ret_ca_id)
            print(ret_ca_id, end='', flush=True)
            loc_sql = curs.mogrify(
                u"INSERT INTO ext.dl_counteragents(id, type,\
 name, dl_doc_type, dl_doc_serial, dl_doc_number, status)\
 VALUES(%s,%s,%s,%s,%s,%s,%s) ON CONFLICT DO NOTHING;",
                (ret_ca_id, 'private', person_name, PERSON_DOCS[doc_type],
                 doc_prenum, doc_num, 1))
            logging.info(u"loc_sql=%s", loc_sql)
            curs.execute(loc_sql)
            app.conn.commit()
        else:
            err_str = 'ERROR={}'.format(dl_res)
            logging.error(err_str)
            print(err_str, file=sys.stderr, end='', flush=True)
    else:
        err_str = 'ERROR={}'.format(app.dl.err_msg)
        logging.error(err_str)
        print(err_str, file=sys.stderr, end='', flush=True)

    app.logout()
Exemplo n.º 9
0
                           type=int,
                           required=False,
                           help='ids list')
dl_app.parser.add_argument('--phones',
                           nargs='+',
                           type=int,
                           required=False,
                           help='ids list')
dl_app.parser.add_argument('--contacts',
                           nargs='+',
                           type=int,
                           required=False,
                           help='ids list')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL addr_book delete')
logging.info("args={}".format(args))

if app.login(auth=True):
    dl_res = app.dl.dl_book_delete(ca_list=args.cas,
                                   addr_list=args.addresses,
                                   phone_list=args.phones,
                                   contact_list=args.contacts)
    logging.info('dl_res={}'.format(dl_res))
    if 200 == app.dl.status_code:
        if 'deleted' in dl_res:
            logging.info('res={}'.format(dl_res["deleted"]))
        else:
            err_str = 'ERROR={}'.format(dl_res)
            logging.error(err_str)
            print(err_str, file=sys.stderr, end='', flush=True)
Exemplo n.º 10
0
#!/usr/bin/env python3
# -*- coding: utf8 -*-
"""
    test dellin v2/req
"""

import logging
import json
from datetime import date
import dl_app

# dl_app.parser.add_argument('--addr_id', type=int, required=True, help='ca addr_id')
# dl_app.parser.add_argument('--phone', type=str, required=True, help='phone number')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL req test')
logging.info("args={}".format(args))


def ca_id_to_counteragent(arg_id):
    """
        convert id to json structure
    """
    return arg_id


# def address_id_to_address(arg_id):
#    pass


def contact_id_to_contact(arg_id):
Exemplo n.º 11
0
#!/usr/bin/env python3
# -*- coding: utf8 -*-

import logging
import sys
import dl_app

dl_app.parser.add_argument('--addr_id', type=int, required=True, help='ca addr_id')
dl_app.parser.add_argument('--phone', type=str, required=True, help='phone number')
dl_app.parser.add_argument('--add_num', type=str, required=False, help='extention number')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL phone add')
logging.info("args={}".format(args))

if app.login(auth=True):
    # addr_id=20463457 : 194292, г. Санкт-Петербург 1-й Верхний пер, д. 12
    # Торговый Дом ЭнергоПрибор
    # dl_res = app.dl.dl_phone_add(args.addr_id, '+7(921)-917-65 97')
    dl_res = app.dl.dl_phone_add(args.addr_id, args.phone, args.add_num)
    logging.info('dl_res={}'.format(dl_res))
    # OUTPUT: dl_res={'success': {'state': 'new', 'phoneID': 89941747}}
    if 200 == app.dl.status_code:
        if 'success' in dl_res:
            ret_phone_id = dl_res['success']['phoneID']
            logging.info('state={}, phoneID={}'.format(
                dl_res['success']['state'],
                ret_phone_id))
            print(ret_phone_id, end='', flush=True)
            app.db_login()
            curs = app.conn.cursor()
Exemplo n.º 12
0
dl_app.parser.add_argument('--phone_id',
                           type=int,
                           required=True,
                           help='phone_id')
dl_app.parser.add_argument('--phone',
                           type=str,
                           required=True,
                           help='phone number')
dl_app.parser.add_argument('--add_num',
                           type=str,
                           required=False,
                           help='extention number')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL phone update')
logging.info("args={}".format(args))

if app.login(auth=True):
    dl_res = app.dl.dl_phone_update(args.phone_id, args.phone, args.add_num)

    logging.info('dl_res={}'.format(dl_res))
    # OUTPUT: dl_res={'success': ....
    if 200 == app.dl.status_code:
        if 'success' in dl_res:
            ret_phone_id = dl_res['success']['phoneID']
            logging.info('state={}, phoneID={}'.format(
                dl_res['success']['state'], ret_phone_id))
            print(ret_phone_id, end='', flush=True)
            app.db_login()
            curs = app.conn.cursor()
Exemplo n.º 13
0
def main():
    """
    Just main proc
    """

    dl_app.parser.add_argument('--code',
                               type=int,
                               required=True,
                               help='arc_energo.Предприятия.Код')
    dl_app.parser.add_argument('--address',
                               type=str,
                               required=False,
                               help='Произвольный адрес')
    dl_app.parser.add_argument('--name',
                               type=str,
                               required=False,
                               help='Название контрагента без ОПФ')
    dl_app.parser.add_argument('--form_name',
                               type=str,
                               required=False,
                               help='название ОПФ')
    dl_app.parser.add_argument('--country_id',
                               type=str,
                               required=False,
                               help='UID страны')
    dl_app.parser.add_argument('--juridical',
                               type=bool,
                               required=False,
                               help='флаг юрлицо')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL counteragent add')
    logging.info("args=%s", args)

    app.login(auth=True)
    app.db_login()

    curs = app.conn.cursor()

    if args.address:
        addr_sql = "select * from shp.dl_ca_addr_fields({}, '{}')"
        curs.execute(addr_sql.format(args.code, args.address))
    else:
        addr_sql = "select * from shp.dl_ca_addr_fields({})"
        curs.execute(addr_sql.format(args.code))
    (ret_flag, ret_addr_kladr_street, ret_addr_house, ret_addr_block,
     ret_addr_flat, ret_street, ret_street_type, ret_addr_city_code,
     ret_addr_city) = curs.fetchone()

    if not ret_flag:
        err_str = 'Ошибка при разборе адреса через dadata.ru: {}'.format(
            ret_addr_city)
        logging.error(err_str)
        print(err_str, file=sys.stderr, end='', flush=True)
    else:
        sql_ent = """SELECT "Предприятия".opf_dl as opf_dl, \
"Предприятия".opf as opf_name, \
trim(replace("Предприятие", coalesce("Предприятия".opf, ''), '')) as ent_name,\
"ЮрНазвание" as legal_name, \
"ИНН" as inn FROM "Предприятия" WHERE "Код"={};""".format(args.code)
        curs.execute(sql_ent)
        (opf_dl, opf_name, name, legal_name, inn) = curs.fetchone()

        logging.info('app.l_book_ca_update(name={}, opf_dl={},\
 opf_name={}, inn={},\
 city_kladr={}, kladr_street={}, street={}, street_type={},\
 house={}, building={},\
 flat={});'.format(name, opf_dl, opf_name, inn, ret_addr_city_code,
                   ret_addr_kladr_street, ret_street, ret_street_type,
                   ret_addr_house, ret_addr_block, ret_addr_flat))

        # if OK loc_status = 1
        # loc_status = int(bool(opf_dl and name and inn and ret_addr_house))
        loc_status = int(bool(name and inn and ret_addr_city_code))
        # and ret_addr_house))
        # and ret_addr_kladr_street and ret_addr_house))

        if not opf_dl:
            if args.form_name:
                custom_form = {}
                custom_form["formName"] = args.form_name
                name = args.name
                opf_name = args.form_name
                custom_form["countryUID"] = args.country_id
                custom_form["juridical"] = args.juridical
            else:
                loc_status = -1

        logging.info('dl_book_ca_update loc_status=%s', loc_status)

        ca_params_sql = curs.mogrify(
            u"INSERT INTO shp.dl_ca_params\
(arc_code, any_address,\
ca_name, legal_name, inn, opf_dl, opf_name, \
street_kladr, street, house, chk_result)\
VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);",
            (int(args.code), args.address, name, legal_name, inn, opf_dl,
             opf_name, ret_addr_kladr_street, ret_street, ret_addr_house,
             loc_status))
        curs.execute(ca_params_sql)
        app.conn.commit()

        # do not call dellin api
        if loc_status != 1:
            err_params = []
            if loc_status == -1:
                err_params.append(ERR_REASON['opf_none'])
            else:
                if name is None or name == '':
                    err_params.append(ERR_REASON['name'])
                if inn is None or inn == '':
                    err_params.append(ERR_REASON['inn'])
                if ret_addr_city_code is None or ret_addr_city_code == '':
                    err_params.append(ERR_REASON['city_code'])

            if err_params:
                print(ca_params_error(err_params),
                      file=sys.stderr,
                      end='',
                      flush=True)
            return

        params = {}
        params["name"] = name
        params["inn"] = inn
        if opf_dl:
            params["form"] = opf_dl
        else:
            params["customForm"] = custom_form

        jur_address = {}
        jur_address["building"] = ret_addr_block
        jur_address["structure"] = None
        jur_address["flat"] = ret_addr_flat

        # обработка улицы без кода КЛАДР
        if ret_addr_kladr_street is None or ret_addr_kladr_street == '':
            custom_street = {}
            custom_street["code"] = ret_addr_city_code.ljust(25, '0')
            custom_street["street"] = ret_street_type or 'ул. Отсутствующая'
            jur_address["customStreet"] = custom_street
        else:
            jur_address["street"] = ret_addr_kladr_street

        if ret_addr_house:
            jur_address["house"] = ret_addr_house[:5]
        else:
            jur_address["house"] = '1'

        params["juridicalAddress"] = jur_address
        logging.info('dl_book_ca_update params=%s', params)

        dl_res = app.dl.dl_book_ca_update(params)

        logging.info('dl_book_ca_update res=%s', dl_res)

        if app.dl.status_code == 200:
            if 'success' in dl_res:
                ret_ca_id = dl_res['success']['counteragentID']
                logging.info('state=%s, counteragentID=%s',
                             dl_res['success']['state'], ret_ca_id)
                print(ret_ca_id, end='', flush=True)
                # add lastUpdate=now()
                loc_sql = curs.mogrify(
                    u"""INSERT INTO
     ext.dl_counteragents(id, inn, status)
     VALUES(%s,%s,%s) ON CONFLICT DO NOTHING;""", (ret_ca_id, inn, 1))
                logging.info(u"loc_sql=%s", loc_sql)
                curs.execute(loc_sql)
                app.conn.commit()
            else:
                err_str = 'ERROR={}'.format(dl_res)
                logging.error(err_str)
                print(err_str, file=sys.stderr, end='', flush=True)
        else:
            err_str = 'ERROR={}'.format(app.dl.err_msg)
            logging.error(err_str)
            print(err_str, file=sys.stderr, end='', flush=True)

    app.logout()
Exemplo n.º 14
0
        msg = "Not a valid date: '{0}'.".format(date_str)
        raise argparse.ArgumentTypeError(msg)

dl_app.parser.add_argument('--start_date',
                           help="The Start Date - format YYYY-MM-DD",
                           required=False,
                           default=datetime.strftime(datetime.today(), '%Y-%m-%d'),
                           type=valid_date)
dl_app.parser.add_argument("--finish_date",
                           help="The Finish Date - format YYYY-MM-DD",
                           required=False,
                           type=valid_date)

args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL advanced tracking')
logging.info("args={}".format(args))

if app.login(auth=True):
    app.db_login()

    shp_cmd_template = """INSERT INTO shp.vs_dl_tracking(\
tracking_code,\
shp_id,\
shipment_dt,\
src_inn,\
dst_inn,\
sized_weight,\
sized_volume,\
shp_height,\
shp_width,\
Exemplo n.º 15
0
                    0, """Выявлены расхождения в отправке (shp_id={})
    между предзаказом {} и фактическим заказом Деллин {}:
    """.format(arg_shp_id, arg_doc_id, arg_tr_num))
                body = u'\r\n'.join(warns)
                subj = u'Расхождения между отправкой Деллин {tr_num} \
    и предзаказом {pre_order}'.format(tr_num=arg_tr_num, pre_order=arg_doc_id)
                logging.info('body=%s', body)
                to_addr = EMAIL_TO
                msg = """{_body}
    Почтовый робот 'АРК Энергосервис'"""
                send_email(to_addr, subj, msg.format(_body=body))


ARGS = dl_app.parser.parse_args()

APP = dl_app.DL_app(args=ARGS, description='DL tracking')
logging.info("ARGS=%s", ARGS)

if APP.login(auth=True):
    APP.db_login()

    CURS = APP.conn.cursor()
    CURS.execute("SELECT * FROM shp.dl_preorders();")
    ROWS = CURS.fetchall()
    #ROWS = [(16715, '2020-07-03', '20-00011304449')]
    #ROWS = [(16719, '2020-07-03', '18347033')]
    #ROWS = [(16799, '2020-07-06', '18378910')]
    # ROWS = [(16821, '2020-07-07', '18397474')] Москва Румянцево
    """
    ROWS = [(16807, '2020-07-10', '18388225'),
            (16792, '2020-07-07', '18385027'),
Exemplo n.º 16
0
def main():
    """
    Just main proc
    """

    dl_app.parser.add_argument('--code',
                               type=int,
                               required=True,
                               help='arc_energo.Предприятия.Код')
    dl_app.parser.add_argument('--address',
                               type=str,
                               required=False,
                               help='Произвольный адрес')
    dl_app.parser.add_argument('--name',
                               type=str,
                               required=False,
                               help='Название контрагента без ОПФ')
    dl_app.parser.add_argument('--form_name',
                               type=str,
                               required=False,
                               help='название ОПФ')
    dl_app.parser.add_argument('--country_id',
                               type=str,
                               required=False,
                               help='UID страны')
    dl_app.parser.add_argument('--juridical',
                               type=bool,
                               required=False,
                               help='флаг юрлицо')
    args = dl_app.parser.parse_args()

    app = dl_app.DL_app(args=args, description='DL counteragent add')
    logging.info("args=%s", args)

    app.login(auth=True)
    app.db_login()

    curs = app.conn.cursor()

    sql_ent = """SELECT "Предприятия".opf_dl as opf_dl, \
"Предприятия".opf as opf_name, \
trim(replace("Предприятие", coalesce("Предприятия".opf, ''), '')) as ent_name,\
"ЮрНазвание" as legal_name, \
"ЮрАдрес" as legal_addr, \
"ИНН" as inn FROM "Предприятия" WHERE "Код"={};""".format(args.code)
    curs.execute(sql_ent)
    (opf_dl, opf_name, name, legal_name, legal_addr, inn) = curs.fetchone()
    if args.address:
        legal_addr = args.address

    logging.info(
        'app.l_book_ca_update(name={}, opf_dl={}, opf_name={}, inn={},\
);'.format(name, opf_dl, opf_name, inn))

    # if OK loc_status = 1
    # loc_status = int(bool(opf_dl and name and inn and ret_addr_house))
    loc_status = int(bool(name and inn and legal_addr))

    if not opf_dl:
        if args.form_name:
            custom_form = {}
            custom_form["formName"] = args.form_name
            name = args.name
            opf_name = args.form_name
            custom_form["countryUID"] = args.country_id
            custom_form["juridical"] = args.juridical
        else:
            loc_status = -1

    logging.info('dl_book_ca_update loc_status=%s', loc_status)

    ca_params_sql = curs.mogrify(
        u"INSERT INTO shp.dl_ca_params\
(arc_code, any_address,\
ca_name, legal_name, inn, opf_dl, opf_name, \
street_kladr, street, house, chk_result)\
VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);",
        (int(args.code), args.address, name, legal_name, inn, opf_dl, opf_name,
         None, None, None, loc_status))
    curs.execute(ca_params_sql)
    app.conn.commit()

    # do not call dellin api
    if loc_status != 1:
        err_params = []
        if loc_status == -1:
            err_params.append(ERR_REASON['opf_none'])
        else:
            if name is None or name == '':
                err_params.append(ERR_REASON['name'])
            if inn is None or inn == '':
                err_params.append(ERR_REASON['inn'])
            if legal_addr is None or legal_addr == '':
                err_params.append(ERR_REASON['empty_addr'])

        if err_params:
            print(ca_params_error(err_params),
                  file=sys.stderr,
                  end='',
                  flush=True)
        return

    params = {}
    params["name"] = name.replace('"', '')
    params["inn"] = inn
    if opf_dl:
        params["form"] = opf_dl
    else:
        params["customForm"] = custom_form

    jur_address = {}
    jur_address["search"] = legal_addr

    params["juridicalAddress"] = jur_address
    logging.info('dl_book_ca_update params=%s', params)

    dl_res = app.dl.dl_book_ca_update_v2(params)

    logging.info('dl_book_ca_update res=%s', dl_res)

    if app.dl.status_code == 200:
        """
        dl_book_ca_update res={'metadata': {'generated_at': '2021-10-06 15:14:27', 'status': 200}, 'data': {'counteragentID': 13413740, 'juridicalAddressID': 47360949, 'state': 'new'}}
        ERROR={'metadata': {'generated_at': '2021-10-06 15:14:27', 'status': 200}, 'data': {'counteragentID': 13413740, 'juridicalAddressID': 47360949, 'state': 'new'}}
        """

        if dl_res['metadata']['status'] == 200:
            ret_ca_id = dl_res['data']['counteragentID']
            logging.info('state=%s, counteragentID=%s',
                         dl_res['metadata']['status'], ret_ca_id)
            print(ret_ca_id, end='', flush=True)
            # add lastUpdate=now()
            loc_sql = curs.mogrify(
                u"""INSERT INTO
 ext.dl_counteragents(id, inn, status)
 VALUES(%s,%s,%s) ON CONFLICT DO NOTHING;""", (ret_ca_id, inn, 1))
            logging.info(u"loc_sql=%s", loc_sql)
            curs.execute(loc_sql)
            app.conn.commit()
        else:
            err_str = 'ERROR={}'.format(dl_res)
            logging.error(err_str)
            print(err_str, file=sys.stderr, end='', flush=True)
    else:
        err_str = 'ERROR={}'.format(app.dl.err_msg)
        logging.error(err_str)
        print(err_str, file=sys.stderr, end='', flush=True)

    app.logout()
Exemplo n.º 17
0
import logging
import sys
import dl_app

dl_app.parser.add_argument('--addr_id',
                           type=int,
                           required=True,
                           help='ca addr_id')
dl_app.parser.add_argument('--contact',
                           type=str,
                           required=True,
                           help='contact name')
args = dl_app.parser.parse_args()

app = dl_app.DL_app(args=args, description='DL contact add')
logging.info("args={}".format(args))

if app.login(auth=True):
    # addr_id=20463457 : 194292, г. Санкт-Петербург 1-й Верхний пер, д. 12
    # Торговый Дом ЭнергоПрибор
    dl_res = app.dl.dl_contact_add(args.addr_id, args.contact)
    logging.info('dl_res={}'.format(dl_res))
    # OUTPUT: dl_res={'success': {'state': 'new', 'contactID': 89941747}}
    if 200 == app.dl.status_code:
        if 'success' in dl_res:
            ret_contact_id = dl_res['success']['personID']
            logging.info('state={}, personID={}'.format(
                dl_res['success']['state'], ret_contact_id))
            print(ret_contact_id, end='', flush=True)
            app.db_login()