fix: clinic approval flow api
This commit is contained in:
parent
7073d7a283
commit
727d979145
|
|
@ -9,5 +9,5 @@ router = APIRouter()
|
||||||
|
|
||||||
@router.put("/clinic/status")
|
@router.put("/clinic/status")
|
||||||
def update_clinic_status(req:Request, data: ClinicStatusUpdate):
|
def update_clinic_status(req:Request, data: ClinicStatusUpdate):
|
||||||
response = ClinicServices().update_clinic_status(req.state.user, data.clinic_id, data.status)
|
response = ClinicServices().update_clinic_status(req.state.user, data.clinic_id, data.status, data.documentStatus, data.rejection_reason)
|
||||||
return ApiResponse(data=response, message="Clinic status updated successfully")
|
return ApiResponse(data=response, message="Clinic status updated successfully")
|
||||||
|
|
|
||||||
8
main.py
8
main.py
|
|
@ -52,10 +52,10 @@ app = FastAPI(
|
||||||
# CORS middleware
|
# CORS middleware
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
allow_origins=["*"], # Allows all origins
|
allow_origins=["*"],
|
||||||
allow_credentials=True,
|
allow_methods=["*"],
|
||||||
allow_methods=["*"], # Allows all methods
|
allow_headers=["*"],
|
||||||
allow_headers=["*"], # Allows all headers
|
expose_headers=["*"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Custom request type middleware
|
# Custom request type middleware
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
"""file-verification-table
|
||||||
|
|
||||||
|
Revision ID: 497238c0338d
|
||||||
|
Revises: ad47f4af583e
|
||||||
|
Create Date: 2025-05-19 16:34:54.211429
|
||||||
|
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = '497238c0338d'
|
||||||
|
down_revision: Union[str, None] = 'ad47f4af583e'
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
"""Upgrade schema."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
# op.add_column('clinic_file_verifications', sa.Column('rejection_reason', sa.String(length=255), nullable=True))
|
||||||
|
pass
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
"""Downgrade schema."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_column('clinic_file_verifications', 'rejection_reason')
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
"""file-verification-table
|
||||||
|
|
||||||
|
Revision ID: ec157808ef2a
|
||||||
|
Revises: 497238c0338d
|
||||||
|
Create Date: 2025-05-19 17:16:52.137111
|
||||||
|
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = 'ec157808ef2a'
|
||||||
|
down_revision: Union[str, None] = '497238c0338d'
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
"""Upgrade schema."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
# op.add_column('clinic_file_verifications', sa.Column('logo_is_verified', sa.Boolean(), nullable=True))
|
||||||
|
pass
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
"""Downgrade schema."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_column('clinic_file_verifications', 'logo_is_verified')
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
@ -8,9 +8,9 @@ class ClinicFileVerifications(Base, CustomBase):
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True, index=True)
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
clinic_id = Column(Integer, ForeignKey("clinics.id"), nullable=False)
|
clinic_id = Column(Integer, ForeignKey("clinics.id"), nullable=False)
|
||||||
logo_is_verified = Column(Boolean, default=False)
|
logo_is_verified = Column(Boolean, default=None, nullable=True)
|
||||||
abn_doc_is_verified = Column(Boolean, default=False)
|
abn_doc_is_verified = Column(Boolean, default=None, nullable=True)
|
||||||
contract_doc_is_verified = Column(Boolean, default=False)
|
contract_doc_is_verified = Column(Boolean, default=None, nullable=True)
|
||||||
last_changed_by = Column(Integer, ForeignKey("users.id"), nullable=False)
|
last_changed_by = Column(Integer, ForeignKey("users.id"), nullable=False)
|
||||||
rejection_reason = Column(String(255), nullable=True)
|
rejection_reason = Column(String(255), nullable=True)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class ClinicStatusUpdate(BaseModel):
|
||||||
clinic_id: int
|
clinic_id: int
|
||||||
status: ClinicStatus
|
status: ClinicStatus
|
||||||
rejection_reason: Optional[str] = None
|
rejection_reason: Optional[str] = None
|
||||||
|
documentStatus: Optional[dict] = None
|
||||||
|
|
||||||
class SignupPricingMasterUpdate(SignupPricingMasterBase):
|
class SignupPricingMasterUpdate(SignupPricingMasterBase):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from sqlalchemy.orm import Session, joinedload
|
||||||
from models import Clinics
|
from models import Clinics
|
||||||
from schemas.UpdateSchemas import ClinicStatusUpdate, ClinicUpdate
|
from schemas.UpdateSchemas import ClinicStatusUpdate, ClinicUpdate
|
||||||
from schemas.ResponseSchemas import Clinic
|
from schemas.ResponseSchemas import Clinic
|
||||||
from typing import List, Literal, Union
|
from typing import List, Literal, Optional, Union
|
||||||
from exceptions import ResourceNotFoundException
|
from exceptions import ResourceNotFoundException
|
||||||
from enums.enums import ClinicStatus, UserType
|
from enums.enums import ClinicStatus, UserType
|
||||||
from exceptions.unauthorized_exception import UnauthorizedException
|
from exceptions.unauthorized_exception import UnauthorizedException
|
||||||
|
|
@ -191,26 +191,63 @@ class ClinicServices:
|
||||||
return counts
|
return counts
|
||||||
|
|
||||||
|
|
||||||
def update_clinic_status(self, user, clinic_id: int, status: ClinicStatus):
|
def update_clinic_status(self, user, clinic_id: int, status: ClinicStatus, documentStatus: Optional[dict] = None, rejection_reason: Optional[str] = None):
|
||||||
|
try:
|
||||||
|
if user["userType"] != UserType.SUPER_ADMIN:
|
||||||
|
raise UnauthorizedException("You are not authorized to update clinic status")
|
||||||
|
|
||||||
if user["userType"] != UserType.SUPER_ADMIN:
|
clinic = self.db.query(Clinics).filter(Clinics.id == clinic_id).first()
|
||||||
raise UnauthorizedException("You are not authorized to update clinic status")
|
|
||||||
|
|
||||||
clinic = self.db.query(Clinics).filter(Clinics.id == clinic_id).first()
|
if clinic is None:
|
||||||
|
raise ResourceNotFoundException("Clinic not found")
|
||||||
|
|
||||||
if clinic is None:
|
clinic.status = status
|
||||||
raise ResourceNotFoundException("Clinic not found")
|
self.db.add(clinic)
|
||||||
|
self.db.commit()
|
||||||
|
self.db.refresh(clinic)
|
||||||
|
|
||||||
clinic.status = status
|
if clinic.status == ClinicStatus.ACTIVE:
|
||||||
self.db.add(clinic)
|
clinic_file_verification = self.db.query(ClinicFileVerifications).filter(ClinicFileVerifications.clinic_id == clinic_id).first()
|
||||||
self.db.commit()
|
|
||||||
self.db.refresh(clinic)
|
|
||||||
|
|
||||||
clinic_response = Clinic(**clinic.__dict__.copy())
|
clinic_file_verification.logo_is_verified = True
|
||||||
|
clinic_file_verification.abn_doc_is_verified = True
|
||||||
|
clinic_file_verification.contract_doc_is_verified = True
|
||||||
|
|
||||||
# if rejected then email to clinic creator
|
self.db.add(clinic_file_verification)
|
||||||
if clinic.status == ClinicStatus.REJECTED:
|
self.db.commit()
|
||||||
pass
|
|
||||||
|
|
||||||
return clinic_response
|
|
||||||
|
if clinic.status == ClinicStatus.REJECTED or clinic.status == ClinicStatus.UNDER_REVIEW:
|
||||||
|
clinic_file_verification = self.db.query(ClinicFileVerifications).filter(ClinicFileVerifications.clinic_id == clinic_id).first()
|
||||||
|
|
||||||
|
|
||||||
|
if documentStatus and "LOGO" in documentStatus:
|
||||||
|
clinic_file_verification.logo_is_verified = documentStatus.get("LOGO")
|
||||||
|
clinic_file_verification.rejection_reason = rejection_reason
|
||||||
|
|
||||||
|
if documentStatus and "ABN" in documentStatus:
|
||||||
|
clinic_file_verification.abn_doc_is_verified = documentStatus.get("ABN")
|
||||||
|
clinic_file_verification.rejection_reason = rejection_reason
|
||||||
|
|
||||||
|
if documentStatus and "CONTRACT" in documentStatus:
|
||||||
|
clinic_file_verification.contract_doc_is_verified = documentStatus.get("CONTRACT")
|
||||||
|
clinic_file_verification.rejection_reason = rejection_reason
|
||||||
|
|
||||||
|
|
||||||
|
self.db.add(clinic_file_verification)
|
||||||
|
self.db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
# if rejected or under review then email to clinic creator
|
||||||
|
if clinic.status == ClinicStatus.REJECTED or clinic.status == ClinicStatus.UNDER_REVIEW:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# handle inactive status
|
||||||
|
if clinic.status == ClinicStatus.INACTIVE:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
raise Exception(e)
|
||||||
|
|
||||||
Loading…
Reference in New Issue