From 4ec0ec282d282eb2322f151129d6fd46eeabb055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=BChmos?= Date: Sun, 16 Aug 2026 20:18:39 +0200 Subject: [PATCH 1/2] create cdr factory --- app/modules/cdr/endpoints_cdr.py | 3 +- app/modules/cdr/factory_cdr.py | 214 +++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 app/modules/cdr/factory_cdr.py diff --git a/app/modules/cdr/endpoints_cdr.py b/app/modules/cdr/endpoints_cdr.py index e100fbecbc..b719428483 100644 --- a/app/modules/cdr/endpoints_cdr.py +++ b/app/modules/cdr/endpoints_cdr.py @@ -44,6 +44,7 @@ ProductAssociationMembershipNotFoundError, PurchaseUserNotFoundError, ) +from app.modules.cdr.factory_cdr import CdrFactory from app.modules.cdr.types_cdr import ( CdrLogActionType, CdrStatus, @@ -82,7 +83,7 @@ class CdrPermissions(ModulePermissions): tag="Cdr", payment_callback=validate_payment, default_allowed_account_types=list(AccountType), - factory=None, + factory=CdrFactory(), permissions=CdrPermissions, ) diff --git a/app/modules/cdr/factory_cdr.py b/app/modules/cdr/factory_cdr.py new file mode 100644 index 0000000000..a9b38ca66a --- /dev/null +++ b/app/modules/cdr/factory_cdr.py @@ -0,0 +1,214 @@ +import uuid +from datetime import timedelta + +from sqlalchemy.ext.asyncio import AsyncSession + +from app.core.groups.cruds_groups import get_groups +from app.core.groups.factory_groups import CoreGroupsFactory +from app.core.memberships import cruds_memberships +from app.core.memberships.factory_memberships import CoreMembershipsFactory +from app.core.permissions import cruds_permissions, schemas_permissions +from app.core.users.factory_users import CoreUsersFactory +from app.core.utils.config import Settings +from app.modules.cdr import coredata_cdr, cruds_cdr, models_cdr +from app.types.factory import Factory + + +class CdrFactory(Factory): + depends_on = [CoreUsersFactory, CoreGroupsFactory, CoreMembershipsFactory] + + @classmethod + async def run(cls, db: AsyncSession, settings: Settings) -> None: + n = 0 + groups = await get_groups(db=db) + if groups: + for group in groups: + n += 1 + seller = models_cdr.Seller( + id=uuid.uuid4(), + name=group.name, + group_id=group.id, + order=n, + ) + cruds_cdr.create_seller(db=db, seller=seller) + + sellers = await cruds_cdr.get_sellers(db=db) + + curriculum = models_cdr.Curriculum( + id=uuid.uuid4(), + name="généraliste", + ) + cruds_cdr.create_curriculum(db=db, curriculum=curriculum) + + eclair = next((seller for seller in sellers if seller.name == "ECLAIR"), None) + bazar = next((seller for seller in sellers if seller.name == "Bazar"), None) + AEECL = next((seller for seller in sellers if seller.name == "AEECL"), None) + USEECL = next((seller for seller in sellers if seller.name == "USEECL"), None) + interest1 = models_cdr.CdrProduct( + id=uuid.uuid4(), + seller_id=eclair.id, + name_fr="Interêt pour l'asso", + name_en="Interest for the club", + available_online=False, + needs_validation=False, + product_constraints=[], + document_constraints=[], + year=coredata_cdr.CdrYear().year, + ) + interest1_variant = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=interest1.id, + name_fr="Prétendances", + name_en="English pretendances idk", + price=0, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + ) + interest2 = models_cdr.CdrProduct( + id=uuid.uuid4(), + seller_id=bazar.id, + name_fr="Interêt pour l'asso", + name_en="Interest for the club", + available_online=False, + needs_validation=False, + product_constraints=[], + document_constraints=[], + year=coredata_cdr.CdrYear().year, + ) + interest2_variant = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=interest2.id, + name_fr="Prétendances", + name_en="English pretendances idk", + price=0, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + ) + cruds_cdr.create_product(db=db, product=interest1) + cruds_cdr.create_product(db=db, product=interest2) + cruds_cdr.create_product_variant(db=db, product_variant=interest1_variant) + cruds_cdr.create_product_variant(db=db, product_variant=interest2_variant) + + memberships = await cruds_memberships.get_association_memberships(db=db) + membership_aeecl = next( + (membership for membership in memberships if membership.name == "AEECL"), + None, + ) + membership_useecl = next( + (membership for membership in memberships if membership.name == "USEECL"), + None, + ) + + membership_aeecl_product = models_cdr.CdrProduct( + id=uuid.uuid4(), + seller_id=AEECL.id, + name_fr="Adhésion AEECL", + name_en="AEECL Membership", + available_online=True, + needs_validation=True, + related_membership_id=membership_aeecl.id, + product_constraints=[], + document_constraints=[], + year=coredata_cdr.CdrYear().year, + ) + membership_aeecl_variant_1 = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=membership_aeecl_product.id, + name_fr="1 an", + name_en="1 year", + price=4000, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + related_membership_added_duration=timedelta(days=365), + ) + membership_aeecl_variant_2 = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=membership_aeecl_product.id, + name_fr="3 ans", + name_en="3 years", + price=10000, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + related_membership_added_duration=timedelta(days=365), + ) + membership_useecl_product = models_cdr.CdrProduct( + id=uuid.uuid4(), + seller_id=USEECL.id, + name_fr="Adhésion USEECL", + name_en="USEECL Membership", + available_online=True, + needs_validation=True, + related_membership_id=membership_useecl.id, + product_constraints=[], + document_constraints=[], + year=coredata_cdr.CdrYear().year, + ) + membership_useecl_variant_1 = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=membership_useecl_product.id, + name_fr="1 an", + name_en="1 year", + price=4000, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + related_membership_added_duration=timedelta(days=365), + ) + membership_useecl_variant_2 = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=membership_useecl_product.id, + name_fr="3 ans", + name_en="3 years", + price=10000, + enabled=True, + unique=True, + year=coredata_cdr.CdrYear().year, + related_membership_added_duration=timedelta(days=365), + ) + cruds_cdr.create_product(db=db, product=membership_aeecl_product) + cruds_cdr.create_product(db=db, product=membership_useecl_product) + cruds_cdr.create_product_variant( + db=db, product_variant=membership_aeecl_variant_1 + ) + cruds_cdr.create_product_variant( + db=db, product_variant=membership_aeecl_variant_2 + ) + cruds_cdr.create_product_variant( + db=db, product_variant=membership_useecl_variant_1 + ) + cruds_cdr.create_product_variant( + db=db, product_variant=membership_useecl_variant_2 + ) + + sacoche = models_cdr.CdrProduct( + id=uuid.uuid4(), + seller_id=AEECL.id, + name_fr="Sacoche banane moche", + name_en="Ugly bag", + available_online=False, + needs_validation=True, + product_constraints=[membership_aeecl_product], + document_constraints=[], + year=coredata_cdr.CdrYear().year, + ) + sacoche_variant = models_cdr.ProductVariant( + id=uuid.uuid4(), + product_id=sacoche.id, + name_fr="sacoche", + name_en="bag", + price=1500, + enabled=True, + unique=False, + year=coredata_cdr.CdrYear().year, + ) + cruds_cdr.create_product(db=db, product=sacoche) + cruds_cdr.create_product_variant(db=db, product_variant=sacoche_variant) + + @classmethod + async def should_run(cls, db: AsyncSession): + campaigns = await cruds_cdr.get_curriculums(db=db) + return len(campaigns) == 0 From 437ca07c1e5febcbdf28e3e6b92b3090ec9f4f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=BChmos?= Date: Sun, 16 Aug 2026 20:20:49 +0200 Subject: [PATCH 2/2] lint and format --- app/modules/cdr/factory_cdr.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/modules/cdr/factory_cdr.py b/app/modules/cdr/factory_cdr.py index a9b38ca66a..8d2d6b66af 100644 --- a/app/modules/cdr/factory_cdr.py +++ b/app/modules/cdr/factory_cdr.py @@ -7,7 +7,6 @@ from app.core.groups.factory_groups import CoreGroupsFactory from app.core.memberships import cruds_memberships from app.core.memberships.factory_memberships import CoreMembershipsFactory -from app.core.permissions import cruds_permissions, schemas_permissions from app.core.users.factory_users import CoreUsersFactory from app.core.utils.config import Settings from app.modules.cdr import coredata_cdr, cruds_cdr, models_cdr @@ -172,16 +171,20 @@ async def run(cls, db: AsyncSession, settings: Settings) -> None: cruds_cdr.create_product(db=db, product=membership_aeecl_product) cruds_cdr.create_product(db=db, product=membership_useecl_product) cruds_cdr.create_product_variant( - db=db, product_variant=membership_aeecl_variant_1 + db=db, + product_variant=membership_aeecl_variant_1, ) cruds_cdr.create_product_variant( - db=db, product_variant=membership_aeecl_variant_2 + db=db, + product_variant=membership_aeecl_variant_2, ) cruds_cdr.create_product_variant( - db=db, product_variant=membership_useecl_variant_1 + db=db, + product_variant=membership_useecl_variant_1, ) cruds_cdr.create_product_variant( - db=db, product_variant=membership_useecl_variant_2 + db=db, + product_variant=membership_useecl_variant_2, ) sacoche = models_cdr.CdrProduct(