Исправления

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

@ -33,6 +33,11 @@ def exec_procedure_wo_result(session, proc_name, params, database: str = None):
session.commit() session.commit()
class GeneralViewSet:
def get_changing_list(db: Session, data: schemas.ChangingListInit):
return exec_procedure(db, 'uspGetChangingList', data.dict(), 'General')
class FilterViewSet: class FilterViewSet:
"""get""" """get"""
@ -45,4 +50,4 @@ class FilterViewSet:
return exec_procedure(db, 'uspGetFilterList', data.dict(), 'ISJKHRSTO') return exec_procedure(db, 'uspGetFilterList', data.dict(), 'ISJKHRSTO')
def set_filter_list(db: Session, data: schemas.FilterSetInit): def set_filter_list(db: Session, data: schemas.FilterSetInit):
return exec_procedure_wo_result(db, 'uspSetFilterList', data.dict(), 'ISJKHRSTO') return exec_procedure_wo_result(db, 'uspSetFilterList', data.dict(), 'ISJKHRSTO')

View File

@ -2,9 +2,10 @@ from fastapi import APIRouter, Depends
from auth.login.schemas import login as models from auth.login.schemas import login as models
from auth import oauth2 from auth import oauth2
from databases.mssql import general from databases.mssql import general
import kv.schemas as schemas import isjkhrs.schemas as schemas
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List from typing import List
import isjkhrs.crud as crud
router = APIRouter(dependencies= [Depends(oauth2.get_current_user) ]) router = APIRouter(dependencies= [Depends(oauth2.get_current_user) ])
@ -20,6 +21,11 @@ async def get_cities(db = Depends(general.get_db)):
async def get_city(region_id: int,db = Depends(general.get_db)): async def get_city(region_id: int,db = Depends(general.get_db)):
return db.execute(f"SELECT id, name FROM General.dbo.vCities WHERE id_region = {region_id}").fetchall() return db.execute(f"SELECT id, name FROM General.dbo.vCities WHERE id_region = {region_id}").fetchall()
@router.get('/getBoilersByRegion/IDRegion={IDRegion}')
async def get_boiler_by_region(IDRegion: int,db = Depends(general.get_db)):
return db.execute(f"select * from General..vBoilers b "
+"inner join General..vCities c on c.id = b.id_city "
+"where c.id_region = {IDRegion}").fetchall()
@router.get('/getAddress/city-id={city_id}') @router.get('/getAddress/city-id={city_id}')
async def get_address(city_id: int, db= Depends(general.get_db)): async def get_address(city_id: int, db= Depends(general.get_db)):
@ -27,4 +33,8 @@ async def get_address(city_id: int, db= Depends(general.get_db)):
@router.get('/getRegions') @router.get('/getRegions')
async def get_region(db = Depends(general.get_db)): async def get_region(db = Depends(general.get_db)):
return db.execute("SELECT id, name FROM General.dbo.vRegions").fetchall() return db.execute("SELECT id, name FROM General.dbo.vRegions").fetchall()
@router.post('/get_changing_list')
async def get_filter_list(request: schemas.ChangingListInit, db: Session = Depends(general.get_db)):
return crud.GeneralViewSet.get_changing_list(db, request)

View File

@ -29,4 +29,8 @@ class FilterTypeSerializer(BaseModel):
class FilterListSerializer(BaseModel): class FilterListSerializer(BaseModel):
ID: int ID: int
Name: Optional[str] = None Name: Optional[str] = None
IsChecked: bool IsChecked: bool
class ChangingListInit(BaseModel):
IDGetType: int
IDRegion: int

View File

@ -1,36 +1,38 @@
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy import text from sqlalchemy import text, sql
from kv.database import get_table from kv.database import get_table
from kv import schemas from kv import schemas
def exec_procedure(session, proc_name, params, database: str = None): 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}" sql_params = ",".join([f"@{key} = :{key}"
for name, value in params.items()]) for key, value in params.items()])
dbstr = "" dbstr = ""
if database: if database:
dbstr = f"[{database}]." dbstr = f"[{database}]."
sql_string = """ sql_string = sql.text(f'''
DECLARE @return_value int; 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; 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.commit()
session.expire_all() session.expire_all()
return data return data
def exec_procedure_wo_result(session, proc_name, params, database: str = None): 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}" sql_params = ",".join([f"@{key} = :{key}"
for name, value in params.items()]) for key, value in params.items()])
dbstr = "" dbstr = ""
if database: if database:
dbstr = f"[{database}]." dbstr = f"[{database}]."
sql_string = """ sql_string = sql.text(f'''
EXEC {dbstr}[dbo].[{proc_name}] {params} EXEC @return_value = {dbstr}[dbo].[{proc_name}] {sql_params};
""".format(dbstr=dbstr, proc_name=proc_name, params=sql_params) ''')
session.execute(sql_string) session.execute(
sql_string, params).fetchall()
session.commit() session.commit()
@ -122,7 +124,7 @@ class ObjectViewSet:
return exec_procedure(db, 'uspGetObjectMunicipals', {'IDCity': IDCity}) return exec_procedure(db, 'uspGetObjectMunicipals', {'IDCity': IDCity})
def get_services(db: Session, IDObject: str = None): 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): def get_addresses(db: Session, IDObject: str = None):
return exec_procedure(db, 'uspGetObjectAddresses', {'IDObject': IDObject}) return exec_procedure(db, 'uspGetObjectAddresses', {'IDObject': IDObject})
@ -206,12 +208,8 @@ class PaymentViewSet:
def get_receipt_calculate(db: Session, data: schemas.RecieptCalculateInit): def get_receipt_calculate(db: Session, data: schemas.RecieptCalculateInit):
return exec_procedure(db, 'uspGetReceiptCalculate', **data) return exec_procedure(db, 'uspGetReceiptCalculate', **data)
def save_receipt(db: Session, data: schemas.ReceiptSaveInit = None): def save_receipt(db: Session, data: schemas.ReceiptSaveInit):
try: return exec_procedure(db, 'uspSaveReceipt', data.dict())
exec_procedure_wo_result(db, 'uspSaveReceipt', data.dict())
return {'msg': 'success'}
except:
return {'msg': 'error'}
def repayment_info(db: Session, data: schemas.RepaymentInfoInit): def repayment_info(db: Session, data: schemas.RepaymentInfoInit):
return exec_procedure(db, 'uspGetRepaymentInfo', **data) return exec_procedure(db, 'uspGetRepaymentInfo', **data)
@ -271,6 +269,13 @@ class RecalculationViewSet:
except: except:
return {'msg': 'error'} 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""" """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]) @router.get("/get_addresses/{IDObject}", response_model=List[schemas.ObjectAddressesSerializer])
async def get_addresses(IDObject: str, db: Session = Depends(get_db)): 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 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) 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)): async def save_receipt(request: schemas.ReceiptSaveInit, db: Session = Depends(get_db)):
return crud.PaymentViewSet.save_receipt(db, request) 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]) @router.post("/get_financial_account", response_model=List[schemas.ReportTOFinancialAccount])
async def get_financial_account(request: schemas.PersonalAccountInit, db: Session = Depends(get_db)): async def get_financial_account(request: schemas.ReportTOFinancialAccountInit, db: Session = Depends(get_db)):
data = crud.PersonalAccountViewSet.get_financial_account(db, request) return crud.PersonalAccountViewSet.get_financial_account(db, request)
return schemas.ReportTOFinancialAccount(**data)

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) return crud.RecalculationViewSet.get_accruals_can_be_recalculated(db, request)
@router.post('/save_withdrawing') @router.post('/save_recalculation')
async def save_withdrawing(request: schemas.WithdrawingSave, db: Session = Depends(get_db)): async def save_recalculation(request: schemas.RecalculationSave, db: Session = Depends(get_db)):
return crud.RecalculationViewSet.save_withdrawing(db, request) return crud.RecalculationViewSet.save_recalculation(db, request)

View File

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

View File

@ -5,7 +5,7 @@ from fastapi.middleware.cors import CORSMiddleware
from kv import kv from kv import kv
from auth import auth from auth import auth
from kassa import kassa from kassa import kassa
from isjkhrs import isapi from isjkhrs import ismain
import uvicorn import uvicorn
middleware = [Middleware( middleware = [Middleware(
@ -39,7 +39,7 @@ app.include_router(
app.include_router( app.include_router(
router=isapi.router, router=ismain.router,
prefix='/is', prefix='/is',
tags=['Информационная система'], tags=['Информационная система'],
responses={404: {"description": "Not found"}} responses={404: {"description": "Not found"}}