Merge remote-tracking branch 'origin/master'
This commit is contained in:
		@@ -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()
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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))
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    })
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user