feat: complete deal

This commit is contained in:
2024-09-10 18:33:19 +03:00
parent 780b3b4b32
commit 21cfaaf139
5 changed files with 60 additions and 1 deletions

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, BigInteger from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from models import BaseModel from models import BaseModel
@@ -23,6 +23,7 @@ class Client(BaseModel):
barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True) barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True)
barcode_template = relationship('BarcodeTemplate', lazy='selectin') barcode_template = relationship('BarcodeTemplate', lazy='selectin')
# users = relationship('ClientUser', back_populates='client', cascade='all, delete')
class ClientDetails(BaseModel): class ClientDetails(BaseModel):
@@ -42,3 +43,20 @@ class ClientDetails(BaseModel):
modified_by_user_id = Column(Integer, ForeignKey('users.id'), nullable=False) modified_by_user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
modified_by_user = relationship('User') modified_by_user = relationship('User')
# class ClientContact(BaseModel):
# __tablename__ = 'client_contact'
# id: Mapped[int] = mapped_column(primary_key=True)
#
# client_id: Mapped[int] = mapped_column(ForeignKey('clients.id'))
# client: Mapped["Client"] = relationship('Client', back_populates='users')
#
# first_name: Mapped[str] = mapped_column()
# last_name: Mapped[str] = mapped_column()
#
# telegram: Mapped[str] = mapped_column()
# phone_number: Mapped[str] = mapped_column()
# email: Mapped[str] = mapped_column()
# inn: Mapped[str] = mapped_column()
#

View File

@@ -42,6 +42,19 @@ async def delete(
return await DealService(session).delete(request) return await DealService(session).delete(request)
@deal_router.post(
'/complete',
response_model=DealCompleteResponse,
operation_id='completeDeal',
dependencies=[Depends(authorized_user)]
)
async def complete(
request: DealCompleteRequest,
session: SessionDependency,
user: CurrentUserDependency
):
return await DealService(session).complete(user,request)
@deal_router.post( @deal_router.post(
'/quickCreate', '/quickCreate',
response_model=DealQuickCreateResponse, response_model=DealQuickCreateResponse,

View File

@@ -212,6 +212,8 @@ class DealAddKitRequest(BaseSchema):
class DealCreateGuestUrlRequest(BaseSchema): class DealCreateGuestUrlRequest(BaseSchema):
deal_id: int deal_id: int
class DealCompleteRequest(BaseSchema):
deal_id: int
# endregion Requests # endregion Requests
@@ -308,4 +310,8 @@ class DealAddKitResponse(OkMessageSchema):
class DealCreateGuestUrlResponse(OkMessageSchema): class DealCreateGuestUrlResponse(OkMessageSchema):
url: str url: str
class DealCompleteResponse(OkMessageSchema):
pass
# endregion Responses # endregion Responses

View File

@@ -972,4 +972,20 @@ class DealService(BaseService):
return DealProductAddKitResponse(ok=True, message='Набор услуг успешно добавлен к товару') return DealProductAddKitResponse(ok=True, message='Набор услуг успешно добавлен к товару')
except Exception as e: except Exception as e:
return DealProductAddKitResponse(ok=False, message=str(e)) return DealProductAddKitResponse(ok=False, message=str(e))
# endregion # endregion
async def complete(self, user: User, request: DealCompleteRequest) -> DealCompleteResponse:
try:
# check for admin
if not user.is_admin:
return DealCompleteResponse(ok=False, message='Завершить сделку может только администратор')
deal = await self._get_deal_by_id(request.deal_id)
if not deal:
return DealCompleteResponse(ok=False, message="Сделка не найдена")
deal.is_completed = True
await self.session.commit()
return DealCompleteResponse(ok=True, message="Сделка успешно завершена")
except Exception as e:
await self.session.rollback()
return DealCompleteResponse(ok=False, message=str(e))

View File

@@ -1,3 +1,9 @@
def chunk_list(lst, n) -> list: def chunk_list(lst, n) -> list:
for i in range(0, len(lst), n): for i in range(0, len(lst), n):
yield lst[i:i + n] yield lst[i:i + n]
def compile_query_to_plain_sql(query) -> str:
return query.compile(compile_kwargs={
'literal_binds': True
})