add visible field to form
This commit is contained in:
33
backend/alembic/versions/e777ed5729ce_message.py
Normal file
33
backend/alembic/versions/e777ed5729ce_message.py
Normal file
@@ -0,0 +1,33 @@
|
||||
"""message
|
||||
|
||||
Revision ID: e777ed5729ce
|
||||
Revises: 7854064278ce
|
||||
Create Date: 2026-02-23 13:53:09.999893
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
import sqlmodel.sql.sqltypes
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'e777ed5729ce'
|
||||
down_revision: Union[str, Sequence[str], None] = '7854064278ce'
|
||||
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('form', sa.Column('visible', sa.Boolean(), nullable=False, default=False, server_default="False"))
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema."""
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('form', 'visible')
|
||||
# ### end Alembic commands ###
|
||||
@@ -13,10 +13,20 @@ async def get_forms(
|
||||
seasons: list[str] = Query([]),
|
||||
productors: list[str] = Query([]),
|
||||
current_season: bool = False,
|
||||
session: Session = Depends(get_session)
|
||||
session: Session = Depends(get_session),
|
||||
):
|
||||
return service.get_all(session, seasons, productors, current_season)
|
||||
|
||||
@router.get('/referents', response_model=list[models.FormPublic])
|
||||
async def get_forms_filtered(
|
||||
seasons: list[str] = Query([]),
|
||||
productors: list[str] = Query([]),
|
||||
current_season: bool = False,
|
||||
session: Session = Depends(get_session),
|
||||
user: models.User = Depends(get_current_user)
|
||||
):
|
||||
return service.get_all(session, seasons, productors, current_season, user)
|
||||
|
||||
@router.get('/{id}', response_model=models.FormPublic)
|
||||
async def get_form(id: int, session: Session = Depends(get_session)):
|
||||
result = service.get_one(session, id)
|
||||
|
||||
@@ -7,12 +7,20 @@ def get_all(
|
||||
seasons: list[str],
|
||||
productors: list[str],
|
||||
current_season: bool,
|
||||
user: models.User = None
|
||||
) -> list[models.FormPublic]:
|
||||
statement = select(models.Form)
|
||||
if user:
|
||||
statement = statement\
|
||||
.join(models.Productor, models.Form.productor_id == models.Productor.id)\
|
||||
.where(models.Productor.type.in_([r.name for r in user.roles]))\
|
||||
.distinct()
|
||||
if len(seasons) > 0:
|
||||
statement = statement.where(models.Form.season.in_(seasons))
|
||||
if len(productors) > 0:
|
||||
statement = statement.join(models.Productor).where(models.Productor.name.in_(productors))
|
||||
if not user:
|
||||
statement = statement.where(models.Form.visible == True)
|
||||
if current_season:
|
||||
subquery = (
|
||||
select(
|
||||
@@ -29,6 +37,8 @@ def get_all(
|
||||
(models.Productor.type == subquery.c.type) &
|
||||
(models.Form.start == subquery.c.max_start)
|
||||
)
|
||||
if not user:
|
||||
statement = statement.where(models.Form.visible == True)
|
||||
return session.exec(statement.order_by(models.Form.name)).all()
|
||||
return session.exec(statement.order_by(models.Form.name)).all()
|
||||
|
||||
|
||||
@@ -136,6 +136,7 @@ class FormBase(SQLModel):
|
||||
start: datetime.date
|
||||
end: datetime.date
|
||||
minimum_shipment_value: float | None
|
||||
visible: bool
|
||||
|
||||
class FormPublic(FormBase):
|
||||
id: int
|
||||
@@ -167,6 +168,7 @@ class FormUpdate(SQLModel):
|
||||
start: datetime.date | None
|
||||
end: datetime.date | None
|
||||
minimum_shipment_value: float | None
|
||||
visible: bool | None
|
||||
|
||||
class FormCreate(FormBase):
|
||||
pass
|
||||
|
||||
@@ -15,7 +15,7 @@ def get_productors(
|
||||
user: models.User = Depends(get_current_user),
|
||||
session: Session = Depends(get_session)
|
||||
):
|
||||
return service.get_all(session, names, types)
|
||||
return service.get_all(session, user, names, types)
|
||||
|
||||
@router.get('/{id}', response_model=models.ProductorPublic)
|
||||
def get_productor(
|
||||
|
||||
@@ -2,11 +2,14 @@ from sqlmodel import Session, select
|
||||
import src.models as models
|
||||
|
||||
def get_all(
|
||||
session: Session,
|
||||
session: Session,
|
||||
user: models.User,
|
||||
names: list[str],
|
||||
types: list[str]
|
||||
) -> list[models.ProductorPublic]:
|
||||
statement = select(models.Productor)
|
||||
statement = select(models.Productor)\
|
||||
.where(models.Productor.type.in_([r.name for r in user.roles]))\
|
||||
.distinct()
|
||||
if len(names) > 0:
|
||||
statement = statement.where(models.Productor.name.in_(names))
|
||||
if len(types) > 0:
|
||||
|
||||
@@ -16,7 +16,8 @@ def get_products(
|
||||
productors: list[str] = Query([]),
|
||||
):
|
||||
return service.get_all(
|
||||
session,
|
||||
session,
|
||||
user,
|
||||
names,
|
||||
productors,
|
||||
types,
|
||||
|
||||
@@ -3,11 +3,15 @@ import src.models as models
|
||||
|
||||
def get_all(
|
||||
session: Session,
|
||||
user: models.User,
|
||||
names: list[str],
|
||||
productors: list[str],
|
||||
types: list[str],
|
||||
) -> list[models.ProductPublic]:
|
||||
statement = select(models.Product)
|
||||
statement = select(models.Product)\
|
||||
.join(models.Productor, models.Product.productor_id == models.Productor.id)\
|
||||
.where(models.Productor.type.in_([r.name for r in user.roles]))\
|
||||
.distinct()
|
||||
if len(names) > 0:
|
||||
statement = statement.where(models.Product.name.in_(names))
|
||||
if len(productors) > 0:
|
||||
|
||||
@@ -3,11 +3,16 @@ import src.models as models
|
||||
|
||||
def get_all(
|
||||
session: Session,
|
||||
user: models.User,
|
||||
names: list[str],
|
||||
dates: list[str],
|
||||
forms: list[int]
|
||||
) -> list[models.ShipmentPublic]:
|
||||
statement = select(models.Shipment)
|
||||
statement = select(models.Shipment)\
|
||||
.join(models.Form, models.Shipment.form_id == models.Form.id)\
|
||||
.join(models.Productor, models.Form.productor_id == models.Productor.id)\
|
||||
.where(models.Productor.type.in_([r.name for r in user.roles]))\
|
||||
.distinct()
|
||||
if len(names) > 0:
|
||||
statement = statement.where(models.Shipment.name.in_(names))
|
||||
if len(dates) > 0:
|
||||
|
||||
@@ -11,12 +11,14 @@ router = APIRouter(prefix='/shipments')
|
||||
@router.get('', response_model=list[models.ShipmentPublic], )
|
||||
def get_shipments(
|
||||
session: Session = Depends(get_session),
|
||||
user: models.User = Depends(get_current_user),
|
||||
names: list[str] = Query([]),
|
||||
dates: list[str] = Query([]),
|
||||
forms: list[str] = Query([]),
|
||||
):
|
||||
return service.get_all(
|
||||
session,
|
||||
user,
|
||||
names,
|
||||
dates,
|
||||
forms,
|
||||
|
||||
Reference in New Issue
Block a user