Added agents_info supplier_info
This commit is contained in:
33
app.py
33
app.py
@ -8,7 +8,7 @@ import json
|
|||||||
|
|
||||||
|
|
||||||
def db_init():
|
def db_init():
|
||||||
server = '172.27.31.195:1433'
|
server = '172.16.1.150:1433'
|
||||||
user = 'sa'
|
user = 'sa'
|
||||||
password = '159357'
|
password = '159357'
|
||||||
dbname = 'fz54'
|
dbname = 'fz54'
|
||||||
@ -26,8 +26,8 @@ def main():
|
|||||||
return models, details
|
return models, details
|
||||||
|
|
||||||
|
|
||||||
def sell(fz, fzd):
|
def sell(fz, fzd, timestp):
|
||||||
res = Sell(fz, fzd)
|
res = Sell(fz, fzd, timestp)
|
||||||
dicts = res.make()
|
dicts = res.make()
|
||||||
return dicts
|
return dicts
|
||||||
|
|
||||||
@ -54,10 +54,15 @@ def connection_db(models):
|
|||||||
return Session()
|
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:
|
for sell_base_model in sell_base_models:
|
||||||
sbm = clear_dict(sell_base_model.dict())
|
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)
|
session1 = Atol(token)
|
||||||
sss = connection_db(models)
|
sss = connection_db(models)
|
||||||
try:
|
try:
|
||||||
@ -118,10 +123,7 @@ def get_receipt(uuid, ext_id, models, atol_session):
|
|||||||
session.add(doc)
|
session.add(doc)
|
||||||
session.add(err)
|
session.add(err)
|
||||||
session.commit()
|
session.commit()
|
||||||
print(doc_dict)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
|
||||||
print(doc_dict)
|
|
||||||
error = sell.get('error')
|
error = sell.get('error')
|
||||||
error['external_id'] = ext_id
|
error['external_id'] = ext_id
|
||||||
err = ErrorTable(**error)
|
err = ErrorTable(**error)
|
||||||
@ -141,10 +143,13 @@ def remove_tuple(lst):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
year = 2021
|
||||||
|
month = 6
|
||||||
|
day = 11
|
||||||
starttime = datetime.now()
|
starttime = datetime.now()
|
||||||
models, details = main()
|
models, details = main()
|
||||||
token = models.get_token()
|
timestamp = datetime(year, month, day, 0, 0, 0)
|
||||||
sell_models = sell(models, details)
|
sell_models = sell(models, details, timestamp)
|
||||||
sell_base_models = SellBaseModel().parse(db_dict_list=sell_models)
|
sell_base_models = SellBaseModel().parse(db_dict_list=sell_models)
|
||||||
inst_list_query = 'SELECT external_id FROM sell WHERE external_id NOT IN(\
|
inst_list_query = 'SELECT external_id FROM sell WHERE external_id NOT IN(\
|
||||||
SELECT external_id FROM atol_receipt )\
|
SELECT external_id FROM atol_receipt )\
|
||||||
@ -152,16 +157,18 @@ if __name__ == "__main__":
|
|||||||
inst_list = connection_db(models).execute(inst_list_query).fetchall()
|
inst_list = connection_db(models).execute(inst_list_query).fetchall()
|
||||||
sell_base_models = [model for model in sell_base_models if model.dict().get(
|
sell_base_models = [model for model in sell_base_models if model.dict().get(
|
||||||
'external_id') in remove_tuple(inst_list)]
|
'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()
|
endfirsttime = datetime.now()
|
||||||
deltatime = starttime - endfirsttime
|
deltatime = starttime - endfirsttime
|
||||||
print(f'прошло {deltatime.seconds}')
|
print(f'прошло {deltatime.seconds}')
|
||||||
receipt_list = connection_db(models).execute(
|
receipt_list = connection_db(models).execute(
|
||||||
"SELECT external_id, uuid FROM atol_receipt WHERE external_id not in (select external_id FROM docs)")
|
"SELECT external_id, uuid FROM atol_receipt WHERE external_id not in (select external_id FROM docs)")
|
||||||
for rec in list(receipt_list):
|
for rec in list(receipt_list):
|
||||||
sleep(2)
|
sleep(0.05)
|
||||||
ext_id, uuid = rec
|
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()
|
donetime = datetime.now()
|
||||||
deltaendtime = starttime - donetime
|
deltaendtime = starttime - donetime
|
||||||
print(f'прошло {deltaendtime.seconds}')
|
print(f'прошло {deltaendtime.seconds}')
|
||||||
|
@ -37,6 +37,8 @@ class PayingAgent(BaseModel):
|
|||||||
|
|
||||||
class SupplierInfo(BaseModel):
|
class SupplierInfo(BaseModel):
|
||||||
phones: Optional[List[PhoneNumber]] = None
|
phones: Optional[List[PhoneNumber]] = None
|
||||||
|
name: Optional[str] = None
|
||||||
|
inn: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class ReceivePaymentsOperator(BaseModel):
|
class ReceivePaymentsOperator(BaseModel):
|
||||||
@ -183,21 +185,23 @@ class SellBaseModel(BaseModel):
|
|||||||
def parse(self, db_dict_list):
|
def parse(self, db_dict_list):
|
||||||
sell_list = []
|
sell_list = []
|
||||||
for db_dict in db_dict_list:
|
for db_dict in db_dict_list:
|
||||||
receipt = db_dict['reciept']
|
receipt = db_dict.get('reciept')
|
||||||
sell = db_dict['sell']
|
sell = db_dict.get('sell')
|
||||||
vats = db_dict['vats']
|
vats = db_dict.get('vats')
|
||||||
payments = db_dict['payments']
|
payments = db_dict.get('payments')
|
||||||
items = db_dict['items']
|
items = db_dict.get('items')
|
||||||
company = db_dict['company']
|
company = db_dict.get('company')
|
||||||
client = db_dict['client']
|
client = db_dict.get('client')
|
||||||
items_model = [Item(**item) for item in items]
|
|
||||||
payments_model = [Payment(**payment) for payment in payments]
|
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(
|
receipt['client'] = ClientItem(
|
||||||
**client if client.get('phone') != None else {'email': 'test@test.ru'})
|
**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['items'] = items_model
|
||||||
|
receipt['vats'] = None
|
||||||
receipt['payments'] = payments_model
|
receipt['payments'] = payments_model
|
||||||
receipt['company'] = Company(**company)
|
receipt['company'] = Company(**company)
|
||||||
receipt_model = Receipt(**receipt)
|
receipt_model = Receipt(**receipt)
|
||||||
|
61
dbmodels.py
61
dbmodels.py
@ -79,6 +79,7 @@ class FZ54:
|
|||||||
'providers_to_kvar': ('kod_postav', 'id_provider'),
|
'providers_to_kvar': ('kod_postav', 'id_provider'),
|
||||||
'services': ('id_service', 'all'),
|
'services': ('id_service', 'all'),
|
||||||
'units': ('id_unit', 'sname'),
|
'units': ('id_unit', 'sname'),
|
||||||
|
'atol_receipt': ('external_id', 'external_id'),
|
||||||
}
|
}
|
||||||
self.datas = {tablename: DBModel(
|
self.datas = {tablename: DBModel(
|
||||||
self.db, tablename).data for tablename in tables.keys()}
|
self.db, tablename).data for tablename in tables.keys()}
|
||||||
@ -278,22 +279,34 @@ class SellTable(Base):
|
|||||||
|
|
||||||
|
|
||||||
class Sell:
|
class Sell:
|
||||||
def __init__(self, FZ54, FZ54Details):
|
def __init__(self, fz: FZ54, details: FZ54Details, sell_date: datetime):
|
||||||
self.fz = FZ54
|
self.fz = fz
|
||||||
self.fzd = FZ54Details
|
self.fzd = details
|
||||||
|
self.timestamp = sell_date
|
||||||
self.Session = sessionmaker(bind=self.fz.db.engine)
|
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):
|
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 = []
|
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()
|
ext_id = ext_id.lower()
|
||||||
val = value[0]
|
val = value[0]
|
||||||
total = 0.0
|
total = 0.0
|
||||||
timestamp = timestamp + datetime.timedelta(seconds=1)
|
timestamp += datetime.timedelta(seconds=1)
|
||||||
vats = {}
|
vats = {}
|
||||||
payments = {}
|
payments = {}
|
||||||
val_items = []
|
val_items = []
|
||||||
@ -334,7 +347,7 @@ class Sell:
|
|||||||
'payment_method': self.fz.dicts['payment_method'].get(method),
|
'payment_method': self.fz.dicts['payment_method'].get(method),
|
||||||
'payment_object': self.fz.dicts['payment_object'].get(i['payment_object']),
|
'payment_object': self.fz.dicts['payment_object'].get(i['payment_object']),
|
||||||
'vat': self.fz.dicts['payment_object_vat_type'].get(vat),
|
'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']
|
'supplier_info': None if i['agent_type'] == None else i['supplier_info']
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -359,14 +372,16 @@ class Sell:
|
|||||||
{
|
{
|
||||||
'external_id': ext_id,
|
'external_id': ext_id,
|
||||||
'company': val['id_company'],
|
'company': val['id_company'],
|
||||||
'agent_info': val['agent_type'],
|
# if val['agent_type'] == None else 1,
|
||||||
'supplier_info': None if val['agent_type'] == None else val['supplier_info'],
|
'agent_info': None,
|
||||||
|
# if val['agent_type'] == None else val['supplier_info'],
|
||||||
|
'supplier_info': None,
|
||||||
'items': ext_id,
|
'items': ext_id,
|
||||||
'payments': ext_id,
|
'payments': ext_id,
|
||||||
'vats': ext_id,
|
'vats': ext_id,
|
||||||
'total': round(total, 2)
|
'total': round(total, 2)
|
||||||
})
|
})
|
||||||
"""
|
|
||||||
session = self.Session()
|
session = self.Session()
|
||||||
for vt in vts:
|
for vt in vts:
|
||||||
session.add(vt)
|
session.add(vt)
|
||||||
@ -377,16 +392,30 @@ class Sell:
|
|||||||
session.add(sell)
|
session.add(sell)
|
||||||
session.add(reciept)
|
session.add(reciept)
|
||||||
session.commit()
|
session.commit()
|
||||||
"""
|
|
||||||
mod_val_item = []
|
mod_val_item = []
|
||||||
for val_item in val_items:
|
for val_item in val_items:
|
||||||
dict_val = val_item.__dict__
|
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)
|
mod_val_item.append(dict_val)
|
||||||
row_dict = {
|
row_dict = {
|
||||||
'reciept': reciept.__dict__,
|
'reciept': reciept.__dict__,
|
||||||
'sell': sell.__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],
|
'payments': [pmnt.__dict__ for pmnt in pmnts],
|
||||||
'items': mod_val_item,
|
'items': mod_val_item,
|
||||||
'company': company,
|
'company': company,
|
||||||
|
Reference in New Issue
Block a user