Исправления

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()
class GeneralViewSet:
def get_changing_list(db: Session, data: schemas.ChangingListInit):
return exec_procedure(db, 'uspGetChangingList', data.dict(), 'General')
class FilterViewSet:
"""get"""

View File

@ -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)

View File

@ -30,3 +30,7 @@ class FilterListSerializer(BaseModel):
ID: int
Name: Optional[str] = None
IsChecked: bool
class ChangingListInit(BaseModel):
IDGetType: int
IDRegion: int

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):
@ -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

View File

@ -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"}}