diff --git a/app.py b/app.py index 899c14f..737c356 100644 --- a/app.py +++ b/app.py @@ -8,7 +8,7 @@ import json def db_init(): - server = '172.27.31.195:1433' + server = '172.16.1.150:1433' user = 'sa' password = '159357' dbname = 'fz54' @@ -26,8 +26,8 @@ def main(): return models, details -def sell(fz, fzd): - res = Sell(fz, fzd) +def sell(fz, fzd, timestp): + res = Sell(fz, fzd, timestp) dicts = res.make() return dicts @@ -54,10 +54,15 @@ def connection_db(models): return Session() -def sell_items(sell_base_models, models, token): +def sell_items(sell_base_models, models): +# supp_list = connection_db(models).execute( +# 'SELECT DISTINCT LOWER(external_id) FROM items where supplier_info IS NOT NULL').fetchall() for sell_base_model in sell_base_models: sbm = clear_dict(sell_base_model.dict()) - ext_id = sbm.get('external_id') + ext_id = sbm.get('external_id') +# if ext_id in list(supp_list): +# continue + token = connection_db(models).execute('SELECT token FROM dbo.vAtolToken').fetchone() session1 = Atol(token) sss = connection_db(models) try: @@ -118,10 +123,7 @@ def get_receipt(uuid, ext_id, models, atol_session): session.add(doc) session.add(err) session.commit() - print(doc_dict) except Exception as e: - print(e) - print(doc_dict) error = sell.get('error') error['external_id'] = ext_id err = ErrorTable(**error) @@ -141,10 +143,13 @@ def remove_tuple(lst): if __name__ == "__main__": + year = 2021 + month = 6 + day = 11 starttime = datetime.now() models, details = main() - token = models.get_token() - sell_models = sell(models, details) + timestamp = datetime(year, month, day, 0, 0, 0) + sell_models = sell(models, details, timestamp) sell_base_models = SellBaseModel().parse(db_dict_list=sell_models) inst_list_query = 'SELECT external_id FROM sell WHERE external_id NOT IN(\ SELECT external_id FROM atol_receipt )\ @@ -152,16 +157,18 @@ if __name__ == "__main__": inst_list = connection_db(models).execute(inst_list_query).fetchall() sell_base_models = [model for model in sell_base_models if model.dict().get( 'external_id') in remove_tuple(inst_list)] - sell_items(sell_base_models, models, token.get('token')) + sell_items(sell_base_models, models) endfirsttime = datetime.now() deltatime = starttime - endfirsttime print(f'прошло {deltatime.seconds}') receipt_list = connection_db(models).execute( "SELECT external_id, uuid FROM atol_receipt WHERE external_id not in (select external_id FROM docs)") for rec in list(receipt_list): - sleep(2) + sleep(0.05) ext_id, uuid = rec - get_receipt(uuid, ext_id, models, Atol(token.get('token'))) + token = connection_db(models).execute('SELECT token FROM dbo.vAtolToken').fetchone() + done = get_receipt(uuid, ext_id, models, Atol(token)) + sleep(0.05) donetime = datetime.now() deltaendtime = starttime - donetime print(f'прошло {deltaendtime.seconds}') diff --git a/basemodels.py b/basemodels.py index 8a532db..c3f7481 100644 --- a/basemodels.py +++ b/basemodels.py @@ -37,6 +37,8 @@ class PayingAgent(BaseModel): class SupplierInfo(BaseModel): phones: Optional[List[PhoneNumber]] = None + name: Optional[str] = None + inn: Optional[str] = None class ReceivePaymentsOperator(BaseModel): @@ -183,21 +185,23 @@ class SellBaseModel(BaseModel): def parse(self, db_dict_list): sell_list = [] for db_dict in db_dict_list: - receipt = db_dict['reciept'] - sell = db_dict['sell'] - vats = db_dict['vats'] - payments = db_dict['payments'] - items = db_dict['items'] - company = db_dict['company'] - client = db_dict['client'] - items_model = [Item(**item) for item in items] + receipt = db_dict.get('reciept') + sell = db_dict.get('sell') + vats = db_dict.get('vats') + payments = db_dict.get('payments') + items = db_dict.get('items') + company = db_dict.get('company') + client = db_dict.get('client') payments_model = [Payment(**payment) for payment in payments] - vats_model = [Vat(**vat) for vat in vats] + items_model = [Item(**item) for item in items] + #vats_model = [Vat(**vat) for vat in vats] receipt['client'] = ClientItem( **client if client.get('phone') != None else {'email': 'test@test.ru'}) - receipt['vats'] = vats_model + #receipt['vats'] = vats_model if len(vats_model) > 0 else None + receipt['items'] = items_model + receipt['vats'] = None receipt['payments'] = payments_model receipt['company'] = Company(**company) receipt_model = Receipt(**receipt) diff --git a/dbmodels.py b/dbmodels.py index 1b3712d..186c9fd 100644 --- a/dbmodels.py +++ b/dbmodels.py @@ -79,6 +79,7 @@ class FZ54: 'providers_to_kvar': ('kod_postav', 'id_provider'), 'services': ('id_service', 'all'), 'units': ('id_unit', 'sname'), + 'atol_receipt': ('external_id', 'external_id'), } self.datas = {tablename: DBModel( self.db, tablename).data for tablename in tables.keys()} @@ -278,22 +279,34 @@ class SellTable(Base): class Sell: - def __init__(self, FZ54, FZ54Details): - self.fz = FZ54 - self.fzd = FZ54Details + def __init__(self, fz: FZ54, details: FZ54Details, sell_date: datetime): + self.fz = fz + self.fzd = details + self.timestamp = sell_date self.Session = sessionmaker(bind=self.fz.db.engine) + self.data_details = self.get_grouped_details() + + def get_grouped_details(self): + ids = self.fzd.datas['payment_details'] + cur_month = self.timestamp.month + + added = [id.get('external_id') for id in self.fz.datas['atol_receipt'] if ( + datetime.datetime.strptime(id['timestamp'], '%d.%m.%Y %H:%M:%S') > datetime.datetime(self.timestamp.year, cur_month, 1, 0, 0))] + ids_filtered = [id for id in ids if ( + id['month'] == (cur_month - 1) and id['year'] == self.timestamp.year and id['external_id'].lower() not in added)] + + dd = self.fzd.get_group(ids_filtered) + print(len(dd)) + return dd def make(self): - ids = self.fzd.datas['payment_details'] - ids_filtered = [id for id in ids if id['month'] == 3] - dd = self.fzd.get_group(ids_filtered) - timestamp = datetime.datetime(2021, 3, 10, 0, 0, 0) res = [] - for ext_id, value in dd.items(): + timestamp = self.timestamp + for ext_id, value in self.data_details.items(): ext_id = ext_id.lower() val = value[0] total = 0.0 - timestamp = timestamp + datetime.timedelta(seconds=1) + timestamp += datetime.timedelta(seconds=1) vats = {} payments = {} val_items = [] @@ -334,7 +347,7 @@ class Sell: 'payment_method': self.fz.dicts['payment_method'].get(method), 'payment_object': self.fz.dicts['payment_object'].get(i['payment_object']), 'vat': self.fz.dicts['payment_object_vat_type'].get(vat), - 'agent_info': i['agent_type'], + 'agent_info': None if i['agent_type'] == None else 1, 'supplier_info': None if i['agent_type'] == None else i['supplier_info'] }) @@ -359,14 +372,16 @@ class Sell: { 'external_id': ext_id, 'company': val['id_company'], - 'agent_info': val['agent_type'], - 'supplier_info': None if val['agent_type'] == None else val['supplier_info'], + # if val['agent_type'] == None else 1, + 'agent_info': None, + # if val['agent_type'] == None else val['supplier_info'], + 'supplier_info': None, 'items': ext_id, 'payments': ext_id, 'vats': ext_id, 'total': round(total, 2) }) - """ + session = self.Session() for vt in vts: session.add(vt) @@ -377,16 +392,30 @@ class Sell: session.add(sell) session.add(reciept) session.commit() - """ + mod_val_item = [] for val_item in val_items: dict_val = val_item.__dict__ - dict_val['vat'] = {'type': dict_val.get('vat')} + if dict_val.get('agent_info'): + dict_val['agent_info'] = { + 'type': 'another' if dict_val.get('agent_info') == 1 else dict_val.get('agent_info')} + supp = dict_val.get('supplier_info') + agent = self.fz.dicts['agents'].get(supp) + dict_val['supplier_info'] = { + + 'name': agent.get('name'), + 'inn': agent.get('inn') + } + if dict_val.get('vat'): + dict_val['vat'] = {'type': dict_val.get('vat')} + else: + dict_val['vat'] = None + mod_val_item.append(dict_val) row_dict = { 'reciept': reciept.__dict__, 'sell': sell.__dict__, - 'vats': [vt.__dict__ for vt in vts], + # 'vats': [vt.__dict__ for vt in vts], 'payments': [pmnt.__dict__ for pmnt in pmnts], 'items': mod_val_item, 'company': company,