From 11d3d2644f4c3f9398369e42b9017ffe1b58c660 Mon Sep 17 00:00:00 2001 From: Gitea Date: Thu, 20 Jan 2022 17:56:38 +0900 Subject: [PATCH] kassa work correct --- kassa/atol.py | 2 ++ kassa/cruds/doc.py | 5 ++--- kassa/kassa.py | 8 ++++---- kassa/models.py | 12 +++++------ kassa/new.py | 51 +++++++++++++++++++++++++++++++--------------- kassa/schemas.py | 7 +++++++ main.py | 2 +- 7 files changed, 57 insertions(+), 30 deletions(-) diff --git a/kassa/atol.py b/kassa/atol.py index 89e7aa2..e063f7f 100644 --- a/kassa/atol.py +++ b/kassa/atol.py @@ -39,7 +39,9 @@ class Atol: def set_sell(self, reciept, is_refund): func = '/sell' if is_refund == 0 else '/sell_refund' + print(reciept) s = self.get_request('post', self.group_id+func, reciept) + print(s) return s def get_reciepts(self, uuid): diff --git a/kassa/cruds/doc.py b/kassa/cruds/doc.py index 3a50cdb..c6bded9 100644 --- a/kassa/cruds/doc.py +++ b/kassa/cruds/doc.py @@ -1,7 +1,6 @@ -from ast import Dict from sqlalchemy.orm import Session -import schemas -import models +import kassa.schemas as schemas +import kassa.models as models def create_doc(db: Session, doc: schemas.Doc, external_id: str = None): diff --git a/kassa/kassa.py b/kassa/kassa.py index b8dddb2..9a2cdc0 100644 --- a/kassa/kassa.py +++ b/kassa/kassa.py @@ -1,8 +1,8 @@ from fastapi import APIRouter, Depends -import databases -import cruds.doc as doc -import schemas -import models +import kassa.databases as databases +import kassa.cruds.doc as doc +import kassa.schemas as schemas +import kassa.models as models models.Base.metadata.create_all(databases.engine) router = APIRouter() diff --git a/kassa/models.py b/kassa/models.py index 441648a..b061212 100644 --- a/kassa/models.py +++ b/kassa/models.py @@ -1,7 +1,7 @@ from sqlalchemy.sql.schema import ForeignKey -from sqlalchemy import Column, Integer, String, Numeric, DateTime, Boolean +from sqlalchemy import Column, Integer, String, Numeric, DateTime, Boolean, BigInteger from sqlalchemy.orm import relationship -from databases import Base +from kassa.databases import Base class Payment(Base): @@ -56,15 +56,15 @@ class Payload(Base): __tablename__ = 'payloads' external_id = Column('external_id', String(128), primary_key=True) - fiscal_receipt_number = Column('fiscal_receipt_number', Integer) - shift_number = Column('shift_number', Integer) + fiscal_receipt_number = Column('fiscal_receipt_number', BigInteger) + shift_number = Column('shift_number', BigInteger) receipt_datetime = Column('receipt_datetime', String(length=128)) total = Column('total', Numeric(12, 2)) fn_number = Column('fn_number', String(length=128)) ecr_registration_number = Column( 'ecr_registration_number', String(length=128)) - fiscal_document_number = Column('fiscal_document_number', Integer) - fiscal_document_attribute = Column('fiscal_document_attribute', Integer) + fiscal_document_number = Column('fiscal_document_number', BigInteger) + fiscal_document_attribute = Column('fiscal_document_attribute', BigInteger) fns_site = Column('fns_site', String(length=128)) diff --git a/kassa/new.py b/kassa/new.py index f613136..f29ffeb 100644 --- a/kassa/new.py +++ b/kassa/new.py @@ -1,3 +1,4 @@ +from lib2to3.pgen2 import token from time import sleep from typing import Dict, List, Tuple from sqlalchemy.ext.declarative import declarative_base @@ -7,8 +8,10 @@ from sqlalchemy.orm import query, sessionmaker from sqlalchemy.types import BigInteger, Integer, String, Numeric, Boolean, DateTime from sqlalchemy.sql.sqltypes import DateTime from sqlalchemy import desc, cast, case, func -import schemas -import models +import kassa.schemas as schemas +import kassa.models as models +from kassa.databases import SessionLocal +from kassa.atol import Atol import datetime Base = declarative_base() @@ -163,7 +166,8 @@ def get_payments(data: List): def get_token(db: Session, db_dict: DBEngine): token_dict = db_dict.get_table("vAtolToken") - return token_dict.get("token") + rows = db.query(token_dict).first() + return dict(rows).get("token") """ @@ -265,24 +269,39 @@ def get_vat(vat: str): def add_atol(db: Session, engine: DBEngine, atol: Dict): aa = engine.get_table("Atol") + atol.pop("is_taken", None) a = aa.insert().values(atol) db.execute(a) db.commit() +def clear_dict(d): + if d is None: + return None + elif isinstance(d, list): + return list(filter(lambda x: x is not None, map(clear_dict, d))) + elif not isinstance(d, dict): + return d + else: + r = dict( + filter(lambda x: x[1] is not None, + map(lambda x: (x[0], clear_dict(x[1])), + d.items()))) + if not bool(r): + return None + return r -def add_doc(sell: schemas.Sell, is_refund): - from databases import SessionLocal - from atol import Atol - atol_model = Atol +def add_doc(sell: schemas.Sell, is_refund, token): + + atol_model = Atol(token) session = SessionLocal() - a = Atol.set_sell(atol_model, sell, is_refund) - check = models.Atol(**a) + a = atol_model.set_sell(clear_dict(sell.dict()), is_refund) + check = models.Atol(schemas.AtolSell(**a)) + check.external_id = sell.external_id session.add(check) session.commit() - session.close() -def get_payment(): +def get_main_payment(): server = 'Sanctuary' user = 'sa' password = '159357' @@ -305,15 +324,15 @@ def get_payment(): } add_atol(session, db, atol) update_payment_details(session, db, payment) - return sell, payment.get("is_refund") - return False, False + return sell, payment.get("is_refund"), get_token(session, db_dicts) + return False, False, False -if __name__ == "__main__": +def main(): while True: - payment, is_refund = get_payment() + payment, is_refund, token = get_main_payment() if payment == False: break sleep(1) - add_doc(sell=payment, is_refund=is_refund) + add_doc(sell=payment, is_refund=is_refund, token = token) break diff --git a/kassa/schemas.py b/kassa/schemas.py index 672e66e..916a556 100644 --- a/kassa/schemas.py +++ b/kassa/schemas.py @@ -207,6 +207,13 @@ class Sell(BaseModel): class Config: arbitrary_types_allowed = True +class AtolSell(BaseModel): + uuid: str + timestamp: str + status: Optional[str] = None + error: Error = None + class Config: + orm_mode = True class SellCreate(Sell): is_refund: bool diff --git a/main.py b/main.py index bd61218..42b9b16 100644 --- a/main.py +++ b/main.py @@ -41,4 +41,4 @@ app.include_router( ) if __name__ == "__main__": - uvicorn.run("main:app", host="0.0.0.0", port=5000) + uvicorn.run("main:app", host="0.0.0.0", port=4321)