fix: clinic approval flow api

This commit is contained in:
deepvasoya 2025-05-20 14:54:53 +05:30
parent 7073d7a283
commit 727d979145
7 changed files with 128 additions and 24 deletions

View File

@ -9,5 +9,5 @@ router = APIRouter()
@router.put("/clinic/status")
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")

View File

@ -52,10 +52,10 @@ app = FastAPI(
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"],
)
# Custom request type middleware

View File

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

View File

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

View File

@ -8,9 +8,9 @@ class ClinicFileVerifications(Base, CustomBase):
id = Column(Integer, primary_key=True, index=True)
clinic_id = Column(Integer, ForeignKey("clinics.id"), nullable=False)
logo_is_verified = Column(Boolean, default=False)
abn_doc_is_verified = Column(Boolean, default=False)
contract_doc_is_verified = Column(Boolean, default=False)
logo_is_verified = Column(Boolean, default=None, nullable=True)
abn_doc_is_verified = Column(Boolean, default=None, nullable=True)
contract_doc_is_verified = Column(Boolean, default=None, nullable=True)
last_changed_by = Column(Integer, ForeignKey("users.id"), nullable=False)
rejection_reason = Column(String(255), nullable=True)

View File

@ -32,6 +32,7 @@ class ClinicStatusUpdate(BaseModel):
clinic_id: int
status: ClinicStatus
rejection_reason: Optional[str] = None
documentStatus: Optional[dict] = None
class SignupPricingMasterUpdate(SignupPricingMasterBase):
pass

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm import Session, joinedload
from models import Clinics
from schemas.UpdateSchemas import ClinicStatusUpdate, ClinicUpdate
from schemas.ResponseSchemas import Clinic
from typing import List, Literal, Union
from typing import List, Literal, Optional, Union
from exceptions import ResourceNotFoundException
from enums.enums import ClinicStatus, UserType
from exceptions.unauthorized_exception import UnauthorizedException
@ -191,26 +191,63 @@ class ClinicServices:
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:
raise UnauthorizedException("You are not authorized to update clinic status")
clinic = self.db.query(Clinics).filter(Clinics.id == clinic_id).first()
clinic = self.db.query(Clinics).filter(Clinics.id == clinic_id).first()
if clinic is None:
raise ResourceNotFoundException("Clinic not found")
if clinic is None:
raise ResourceNotFoundException("Clinic not found")
clinic.status = status
self.db.add(clinic)
self.db.commit()
self.db.refresh(clinic)
clinic.status = status
self.db.add(clinic)
self.db.commit()
self.db.refresh(clinic)
if clinic.status == ClinicStatus.ACTIVE:
clinic_file_verification = self.db.query(ClinicFileVerifications).filter(ClinicFileVerifications.clinic_id == clinic_id).first()
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
if clinic.status == ClinicStatus.REJECTED:
pass
self.db.add(clinic_file_verification)
self.db.commit()
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)