Merge remote-tracking branch 'origin/master'

This commit is contained in:
2024-09-11 19:08:42 +04:00
5 changed files with 61 additions and 2 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 models import BaseModel
@@ -23,6 +23,7 @@ class Client(BaseModel):
barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True)
barcode_template = relationship('BarcodeTemplate', lazy='selectin')
# users = relationship('ClientUser', back_populates='client', cascade='all, delete')
class ClientDetails(BaseModel):
@@ -42,3 +43,20 @@ class ClientDetails(BaseModel):
modified_by_user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
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

@@ -44,6 +44,19 @@ async def delete(
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(
'/quickCreate',
response_model=DealQuickCreateResponse,

View File

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

View File

@@ -207,7 +207,7 @@ class DealService(BaseService):
if not full:
q = q.where(
Deal.is_completed == False,
Deal.current_status != DealStatus.COMPLETED
# Deal.current_status != DealStatus.COMPLETED
)
else:
q = q.order_by(Deal.created_at.desc())
@@ -970,4 +970,20 @@ class DealService(BaseService):
return DealProductAddKitResponse(ok=True, message='Набор услуг успешно добавлен к товару')
except Exception as e:
return DealProductAddKitResponse(ok=False, message=str(e))
# 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:
for i in range(0, len(lst), n):
yield lst[i:i + n]
def compile_query_to_plain_sql(query) -> str:
return query.compile(compile_kwargs={
'literal_binds': True
})