add visible field to form

This commit is contained in:
Julien Aldon
2026-02-23 15:38:29 +01:00
parent 85a70da07d
commit 124b0700da
19 changed files with 119 additions and 15 deletions

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

View File

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

View File

@@ -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()

View File

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

View File

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

View File

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

View File

@@ -16,7 +16,8 @@ def get_products(
productors: list[str] = Query([]),
):
return service.get_all(
session,
session,
user,
names,
productors,
types,

View File

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

View File

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

View File

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