Исправления
This commit is contained in:
@ -33,6 +33,11 @@ def exec_procedure_wo_result(session, proc_name, params, database: str = None):
|
||||
session.commit()
|
||||
|
||||
|
||||
class GeneralViewSet:
|
||||
|
||||
def get_changing_list(db: Session, data: schemas.ChangingListInit):
|
||||
return exec_procedure(db, 'uspGetChangingList', data.dict(), 'General')
|
||||
|
||||
class FilterViewSet:
|
||||
"""get"""
|
||||
|
||||
|
@ -2,9 +2,10 @@ from fastapi import APIRouter, Depends
|
||||
from auth.login.schemas import login as models
|
||||
from auth import oauth2
|
||||
from databases.mssql import general
|
||||
import kv.schemas as schemas
|
||||
import isjkhrs.schemas as schemas
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List
|
||||
import isjkhrs.crud as crud
|
||||
|
||||
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)):
|
||||
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}')
|
||||
async def get_address(city_id: int, db= Depends(general.get_db)):
|
||||
@ -28,3 +34,7 @@ async def get_address(city_id: int, db= Depends(general.get_db)):
|
||||
@router.get('/getRegions')
|
||||
async def get_region(db = Depends(general.get_db)):
|
||||
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)
|
@ -30,3 +30,7 @@ class FilterListSerializer(BaseModel):
|
||||
ID: int
|
||||
Name: Optional[str] = None
|
||||
IsChecked: bool
|
||||
|
||||
class ChangingListInit(BaseModel):
|
||||
IDGetType: int
|
||||
IDRegion: int
|
||||
|
45
kv/crud.py
45
kv/crud.py
@ -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
24
kv/routers/filter.py
Normal 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)
|
@ -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
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
163
kv/schemas.py
163
kv/schemas.py
@ -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):
|
||||
@ -782,6 +798,7 @@ class ObjectWaterSystemVolumesInit(BaseModel):
|
||||
IDSewerage: int
|
||||
|
||||
|
||||
|
||||
class TariffPopulationSerializer(BaseModel):
|
||||
ID: int
|
||||
IDService: int
|
||||
@ -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
|
||||
|
4
main.py
4
main.py
@ -5,7 +5,7 @@ from fastapi.middleware.cors import CORSMiddleware
|
||||
from kv import kv
|
||||
from auth import auth
|
||||
from kassa import kassa
|
||||
from isjkhrs import isapi
|
||||
from isjkhrs import ismain
|
||||
import uvicorn
|
||||
|
||||
middleware = [Middleware(
|
||||
@ -39,7 +39,7 @@ app.include_router(
|
||||
|
||||
|
||||
app.include_router(
|
||||
router=isapi.router,
|
||||
router=ismain.router,
|
||||
prefix='/is',
|
||||
tags=['Информационная система'],
|
||||
responses={404: {"description": "Not found"}}
|
||||
|
Reference in New Issue
Block a user