Исправления

This commit is contained in:
Gitea
2022-06-16 09:38:24 +09:00
parent 21e5ad26f2
commit 8d82068324
12 changed files with 175 additions and 103 deletions

View File

@ -1,36 +1,38 @@
from sqlalchemy.orm import Session
from sqlalchemy import text
from sqlalchemy import text, sql
from kv.database import get_table
from kv import schemas
def exec_procedure(session, proc_name, params, database: str = None):
sql_params = ",".join([f"@{name}='{value}'" if type(value) in [str] else f"@{name}={value}"
for name, value in params.items()])
sql_params = ",".join([f"@{key} = :{key}"
for key, value in params.items()])
dbstr = ""
if database:
dbstr = f"[{database}]."
sql_string = """
sql_string = sql.text(f'''
DECLARE @return_value int;
EXEC @return_value = {dbstr}[dbo].[{proc_name}] {params};
EXEC @return_value = {dbstr}[dbo].[{proc_name}] {sql_params};
SELECT 'Return Value' = @return_value;
""".format(dbstr=dbstr, proc_name=proc_name, params=sql_params)
data = session.execute(sql_string).fetchall()
''')
data = session.execute(
sql_string, params).fetchall()
session.commit()
session.expire_all()
return data
def exec_procedure_wo_result(session, proc_name, params, database: str = None):
sql_params = ",".join([f"@{name}='{value}'" if type(value) in [str] else f"@{name}={value}"
for name, value in params.items()])
sql_params = ",".join([f"@{key} = :{key}"
for key, value in params.items()])
dbstr = ""
if database:
dbstr = f"[{database}]."
sql_string = """
EXEC {dbstr}[dbo].[{proc_name}] {params}
""".format(dbstr=dbstr, proc_name=proc_name, params=sql_params)
session.execute(sql_string)
sql_string = sql.text(f'''
EXEC @return_value = {dbstr}[dbo].[{proc_name}] {sql_params};
''')
session.execute(
sql_string, params).fetchall()
session.commit()
@ -122,7 +124,7 @@ class ObjectViewSet:
return exec_procedure(db, 'uspGetObjectMunicipals', {'IDCity': IDCity})
def get_services(db: Session, IDObject: str = None):
return exec_procedure(db, 'uspGetObjectMunicipals', {'IDObject': IDObject})
return exec_procedure(db, 'uspGetObjectServices', {'IDObject': IDObject})
def get_addresses(db: Session, IDObject: str = None):
return exec_procedure(db, 'uspGetObjectAddresses', {'IDObject': IDObject})
@ -206,12 +208,8 @@ class PaymentViewSet:
def get_receipt_calculate(db: Session, data: schemas.RecieptCalculateInit):
return exec_procedure(db, 'uspGetReceiptCalculate', **data)
def save_receipt(db: Session, data: schemas.ReceiptSaveInit = None):
try:
exec_procedure_wo_result(db, 'uspSaveReceipt', data.dict())
return {'msg': 'success'}
except:
return {'msg': 'error'}
def save_receipt(db: Session, data: schemas.ReceiptSaveInit):
return exec_procedure(db, 'uspSaveReceipt', data.dict())
def repayment_info(db: Session, data: schemas.RepaymentInfoInit):
return exec_procedure(db, 'uspGetRepaymentInfo', **data)
@ -271,6 +269,13 @@ class RecalculationViewSet:
except:
return {'msg': 'error'}
def save_recalculation(db: Session, data: schemas.RecalculationSave = None):
try:
exec_procedure_wo_result(db, 'uspSaveRecalculation', data.dict())
return {'msg': 'success'}
except:
return {'msg': 'error'}
"""ReferenceViewSet"""

24
kv/routers/filter.py Normal file
View File

@ -0,0 +1,24 @@
import kv.schemas as schemas
import kv.crud as crud
from kv.database import get_db
from sqlalchemy.orm import Session
from fastapi import APIRouter, Depends
from typing import List
router = APIRouter()
"""post"""
@router.post('/get_filter_types', response_model=List[schemas.FilterTypeSerializer])
async def get_filter_types(request: schemas.FilterTypeInit, db: Session = Depends(get_db)):
return crud.FilterViewSet.get_filter_types(db, request)
@router.post('/get_filter_list', response_model=List[schemas.FilterListSerializer])
async def get_filter_list(request: schemas.FilterListInit, db: Session = Depends(get_db)):
return crud.FilterViewSet.get_filter_list(db, request)
@router.post('/set_report_filter_list', response_model=List[schemas.FilterListSerializer])
async def set_report_filter_list(request: schemas.FilterSetInit, db: Session = Depends(get_db)):
return crud.FilterViewSet.set_filter_list(db, request)

View File

@ -29,7 +29,7 @@ async def get_services(IDObject: str, db: Session = Depends(get_db)):
@router.get("/get_addresses/{IDObject}", response_model=List[schemas.ObjectAddressesSerializer])
async def get_addresses(IDObject: str, db: Session = Depends(get_db)):
data = crud.ObjectViewSet.get_addresses(db, id)
data = crud.ObjectViewSet.get_addresses(db, IDObject)
return data

View File

@ -41,7 +41,7 @@ async def get_receipt_calculate(request: schemas.RecieptCalculateInit, db: Sessi
return crud.PaymentViewSet.get_receipt_calculate(db, request)
@router.post('/save_receipt')
@router.post('/save_receipt', response_model=List[schemas.ReceiptSaveSerializer])
async def save_receipt(request: schemas.ReceiptSaveInit, db: Session = Depends(get_db)):
return crud.PaymentViewSet.save_receipt(db, request)

View File

@ -46,6 +46,5 @@ async def get_debts(IDPersonalAccount: int, GetType: bool, db: Session = Depends
@router.post("/get_financial_account", response_model=List[schemas.ReportTOFinancialAccount])
async def get_financial_account(request: schemas.PersonalAccountInit, db: Session = Depends(get_db)):
data = crud.PersonalAccountViewSet.get_financial_account(db, request)
return schemas.ReportTOFinancialAccount(**data)
async def get_financial_account(request: schemas.ReportTOFinancialAccountInit, db: Session = Depends(get_db)):
return crud.PersonalAccountViewSet.get_financial_account(db, request)

View File

@ -32,6 +32,6 @@ async def get_accruals_can_be_recalculated(request: schemas.AccrualsCanBeRecalcu
return crud.RecalculationViewSet.get_accruals_can_be_recalculated(db, request)
@router.post('/save_withdrawing')
async def save_withdrawing(request: schemas.WithdrawingSave, db: Session = Depends(get_db)):
return crud.RecalculationViewSet.save_withdrawing(db, request)
@router.post('/save_recalculation')
async def save_recalculation(request: schemas.RecalculationSave, db: Session = Depends(get_db)):
return crud.RecalculationViewSet.save_recalculation(db, request)

View File

@ -5,6 +5,8 @@ from pydantic import BaseModel
from typing import Optional, List
from datetime import date, datetime
from sqlalchemy import SmallInteger, null
class AddObjectInit(BaseModel):
IDCity: int
@ -126,7 +128,7 @@ class WithdrawingCheckInit(PersonalAccountInit, GetTypeInit, DateInit):
pass
class AccrualsCanBeRecalculatedInit(BaseModel):
IDPersonalAccount: int
IDUser: int
DateBegin: str
DateEnd: str
@ -138,6 +140,14 @@ class WithdrawingSave(PersonalAccountInit, WithdrawingCheckSerializer, DateInit)
IDProviderContract: int
IDManagementCompany: int
class RecalculationSave(BaseModel):
IDUser: int
IDService: int
IDType: int
Percent: float
DateBegin: str
DateEnd: str
class RepaymentInfoInit(BaseModel):
IDCashbox: int
@ -161,10 +171,10 @@ class ReceiptSaveInit(BaseModel):
IDCashbox: int
IDType: int
IDPersonalAccount: int
IDDebtContract: int
IDService: int
DateBegin: date
DateEnd: date
IDDebtContract: int = None
IDService: int = None
DateBegin: str
DateEnd: str
IDMoneyType: int
Amount: float
AmountFine: float
@ -384,25 +394,25 @@ class TOArchiveReceiptSerializer(BaseModel):
class ReportTOFinancialAccount(BaseModel):
por: int
por: int = None
ServiceName: Optional[str] = None
ProviderName: Optional[str] = None
DateBegin: date
DateEnd: date
StandartVolume: float
TariffPopulation: float
TariffProvider: float
AmountSaldoBegin: float
AmountTotalAccrued: float
AmountAccruedSubsidy: float
AmountAccrued: float
AmountSubsidy: float
AmountWithdrawing: float
AmountActualAccrued: float
AmountReceipt: float
AmountSaldoCorrect: float
AmountAccruedPreferential: float
AmountSaldoEnd: float
DateBegin: str = None
DateEnd: str = None
StandartVolume: float = None
TariffPopulation: float = None
TariffProvider: float = None
AmountSaldoBegin: float = None
AmountTotalAccrued: float = None
AmountAccruedSubsidy: float = None
AmountAccrued: float = None
AmountSubsidy: float = None
AmountWithdrawing: float = None
AmountActualAccrued: float = None
AmountReceipt: float = None
AmountSaldoCorrect: float = None
AmountAccruedPreferential: float = None
AmountSaldoEnd: float = None
class MoneyTypesSerializer(BaseModel):
@ -486,6 +496,11 @@ class ReceiptCalculatedSerializer(BaseModel):
ServiceName: Optional[str] = None
Amount: float
class ReceiptSaveSerializer(BaseModel):
IDService: int
ServiceName: Optional[str] = None
Amount: float
class RentRepaymentInfoSerializer(BaseModel):
Name: Optional[str] = None
@ -627,52 +642,53 @@ class AccrualsCanBeRecalculatedSerializer(BaseModel):
id: int
IDService: int
ServiceName: Optional[str] = None
Volume: float
Amount: float
class ObjectDetailsSerializer(BaseModel):
IDObject: str
IDObject: str = None
IDFias: Optional[str] = None
IDBoiler: str
IDOwnershipType: int
IDProviderUtilityServices: int
BuildDate: int
FloorNumber: int
Entrance: int
CommissDate: date
Volume: float
FullArea: float
IDBoiler: str = None
IDOwnershipType: int = None
IDProviderUtilityServices: int = None
BuildDate: int = None
FloorNumber: int = None
Entrance: int = None
CommissDate: date = None
Volume: float = None
FullArea: float = None
IDBuildingType: Optional[str] = None
IDOverlappingType: int
IDWallMaterial: int
IDRoofType: int
IDFoundationType: int
WithdrawingDate: date
IDOverlappingType: int = None
IDWallMaterial: int = None
IDRoofType: int = None
IDFoundationType: int = None
WithdrawingDate: date = None
WithdrawingReason: Optional[str] = None
IDSystemHotWater: int
IDSystemHotWaterPeriodType: int
IDSystemColdWater: int
IDSystemColdWaterPeriodType: int
IDSystemSewerage: int
IDStandartVolume: int
IDHeatingType: int
IDGasType: int
IDWiringType: int
IDImprovementDegree: int
Amount: float
Deterioration: float
AreaRoof: float
AreaFoundation: float
AreaFacade: float
AreaPlub: float
AreaAttic: float
AreaTechnicalFloor: float
AreaBuilding: float
AreaLk: float
AreaYardArea: float
AreaBoiler: float
ActAvailabilityCounterInstallObjectHeating: int
ActAvailabilityCounterInstallObjectWater: int
DirectControl: bool
IDSystemHotWater: int = None
IDSystemHotWaterPeriodType: int = None
IDSystemColdWater: int = None
IDSystemColdWaterPeriodType: int = None
IDSystemSewerage: int = None
IDStandartVolume: int = None
IDHeatingType: int = None
IDGasType: int = None
IDWiringType: int = None
IDImprovementDegree: int = None
Amount: float = None
Deterioration: float = None
AreaRoof: float = None
AreaFoundation: float = None
AreaFacade: float = None
AreaPlub: float = None
AreaAttic: float = None
AreaTechnicalFloor: float = None
AreaBuilding: float = None
AreaLk: float = None
AreaYardArea: float = None
AreaBoiler: float = None
ActAvailabilityCounterInstallObjectHeating: int = None
ActAvailabilityCounterInstallObjectWater: int = None
DirectControl: bool = None
class ObjectMunicipalsSerializer(BaseModel):
@ -683,15 +699,15 @@ class ObjectMunicipalsSerializer(BaseModel):
class ObjectServicesSerializer(BaseModel):
id: int
IDService: int
IDProviderContract: int
IDProviderContract: int = None
ServiceName: Optional[str] = None
por: int
por: int = None
ProviderName: Optional[str] = None
DateBegin: date
DateEnd: date
IDTariffPopulation: int
TariffPopAmount: float
TariffProvAmount: float
DateBegin: date = None
DateEnd: date = None
IDTariffPopulation: int = None
TariffPopAmount: float = None
TariffProvAmount: float = None
class ObjectAddressesSerializer(BaseModel):
@ -780,6 +796,7 @@ class ObjectWaterSystemVolumesInit(BaseModel):
IDHotWater: int
IDColdWater: int
IDSewerage: int
class TariffPopulationSerializer(BaseModel):
@ -813,3 +830,11 @@ class ProviderUtilityService(BaseModel):
CorrectAccount: str
BIK: str
WorkTime: Optional[str] = None
class ReportTOFinancialAccountInit(BaseModel):
IDUser: int
IDCashbox: int
IDPersonalAccount: int
Month: int
vid: bool
IsAUP: bool