Добавлен API Квартплаты

This commit is contained in:
Gitea
2022-04-28 12:38:12 +09:00
parent 70aaff37f1
commit af49bdf6ec
67 changed files with 2035 additions and 58 deletions

View File

@ -1,6 +1,4 @@
from ast import While
from lib2to3.pgen2 import token
from re import A
from calendar import month
from time import sleep
from typing import Dict, List, Tuple
from sqlalchemy.ext.declarative import declarative_base
@ -13,7 +11,7 @@ from sqlalchemy import desc, cast, case, func
import kassa.schemas as schemas
import kassa.models as models
from kassa.cruds import doc
from kassa.databases import SessionLocal
from kassa.database import SessionLocal
from kassa.atol import Atol
import datetime
@ -72,10 +70,10 @@ class DBEngine:
def get_payment_details(db: Session, engine_class: DBEngine):
pd = engine_class.get_table('payment_details')
external_id, is_refund, is_taken = engine_class.get_columns(
'payment_details', ['external_id', 'is_refund', 'is_taken'])
query = db.query(pd).filter(is_taken == 0).with_entities(
external_id, is_refund, is_taken).distinct().order_by(external_id, desc(is_refund))
year, month, external_id, is_refund, is_taken = engine_class.get_columns(
'payment_details', ['year','month','external_id', 'is_refund', 'is_taken'])
query = db.query(pd).filter(is_taken == False).with_entities(
external_id, is_refund, is_taken).distinct().order_by(year, month,external_id, desc(is_refund))
return query
@ -111,7 +109,7 @@ def get_payment(db: Session, engine_class: DBEngine, payment_details: Tuple):
def get_payment_details_items(db: Session, engine_class: DBEngine, dict_engine: DBEngine, payment_details: Tuple):
payment = get_payment(
db, engine_class, payment_details).subquery('payment')
services = dict_engine.get_table('services')
services = dict_engine.get_table('vServices')
units = dict_engine.get_table('units')
payment_method = dict_engine.get_table('payment_method')
payment_object = dict_engine.get_table('payment_object')
@ -148,7 +146,7 @@ def get_payment_details_items(db: Session, engine_class: DBEngine, dict_engine:
.join(payment_object, payment.c.payment_object == payment_object.c["id"])\
.join(vats, payment.c.vat == vats.c["id"])\
.join(company, payment.c.id_company == company.c["id_provider"])\
.join(agents, payment.c.supplier_info == agents.c["id_agent"])
.join(agents, payment.c.supplier_info == agents.c["id_agent"], isouter=True)
return query
@ -163,15 +161,14 @@ def get_payments(data: List):
type_id = row.get("payment_group")
cur_sum = row.get("sum")
d[type_id] = cur_sum + d.get(type_id, 0.0)
res = [{'type': i[0], 'sum': i[1]} for i in d.items()]
res = [{'type': i[0], 'sum': round(i[1],2)} for i in d.items()]
return res
def get_token(db: Session, db_dict: DBEngine):
token_dict = db_dict.get_table("vAtolToken")
rows = db.query(token_dict).first()
return dict(rows).get("token")
rows = db.query(token_dict.c["token"].label("token")).select_from(token_dict)
return dict(rows.first()).get("token")
"""
#Функция для заполнения total
@ -219,10 +216,10 @@ def items_convert(data: query):
for i in ["supplier_info", 'supplier_inn', 'supplier_name']:
del item[i]
items.append(item)
payments = [{'type': i[0], 'sum': i[1]} for i in d.items()]
payments = [{'type': i[0], 'sum': round(i[1],2)} for i in d.items()]
client = get_client(phone)
company = get_company(inn)
return external_id, items, payments, client, company, total
return external_id, items, payments, client, company, round(total,2)
def get_company(inn: int):
@ -243,7 +240,7 @@ def get_receipt(data: query):
receipt["payments"] = payments
receipt["company"] = company
receipt['items'] = items
receipt['total'] = total
receipt['total'] = round(total,2)
return external_id, receipt
@ -314,18 +311,14 @@ def add_doc(sell: schemas.Sell, is_refund, token):
def get_check(db: Session, uuid: str, external_id: str, token: str):
atol_model = Atol(token)
a = atol_model.get_reciepts(uuid)
err = a.pop('error', None)
if err:
print(err)
return doc.create_error(db, error = schemas.Error(**err), external_id = external_id )
doc.create_doc(db, a, external_id)
doc.create_doc(db, schemas.Doc(**a), external_id)
return a
def get_atol_wo_doc(db: Session):
doc_sq = db.query(func.upper(models.Doc.external_id)).subquery()
return db.query(models.Atol.uuid, models.Atol.external_id).\
where(models.Atol.external_id.notin_(models.Doc.external_id)).\
all()
filter(func.upper(models.Atol.external_id).notin_(doc_sq))
def get_main_payment():
server = 'Sanctuary'
@ -336,12 +329,14 @@ def get_main_payment():
db = DBEngine(server, dbname, user, password)
db_dicts = DBEngine(server, db_dicts_name, user, password)
session = Session(autocommit=False, autoflush=False, bind=db.engine)
payment = get_payment_details(session, db).first()
payment_query = get_payment_details(session, db)
payment = payment_query.first()
if payment:
payments = get_payment_details_items(session, db, db_dicts, payment)
body = get_sell(payments)
sell = schemas.Sell(**body)
payment = dict(payment)
print(payment.get("external_id"))
sell = schemas.Sell(**body)
atol = {
"external_id": payment.get("external_id"),
"is_refund": payment.get("is_refund"),
@ -359,21 +354,32 @@ def main():
payment, is_refund, token = get_main_payment()
if payment == False:
break
sleep(1)
sleep(8)
doc = add_doc(sell=payment, is_refund=is_refund, token = token)
print(doc)
def run_get_check():
def get_actual_token():
server = 'Sanctuary'
user = 'sa'
password = '159357'
dbname = 'fz54_details'
db_dicts_name = 'fz54'
db = DBEngine(server, dbname, user, password)
db_dicts = DBEngine(server, db_dicts_name, user, password)
session = Session(autocommit=False, autoflush=False, bind=db.engine)
token = get_token(session, db_dicts)
return token
def run_get_check():
session = SessionLocal()
atols = get_atol_wo_doc(session)
print(get_atol_wo_doc(session))
atols = get_atol_wo_doc(session).all()
while len(atols)>0:
server = 'Sanctuary'
user = 'sa'
password = '159357'
db_dicts_name = 'fz54'
db = Session(autocommit=False, autoflush=False, bind=db.engine)
db_dicts = DBEngine(server, db_dicts_name, user, password)
token = get_token(db, db_dicts)
sleep(0.2)
uuid, ext_id = atols.pop()
token = get_actual_token()
check = get_check(session, uuid, ext_id, token)
print(check)