mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-08-25 15:05:18 +02:00
feat: extend inventory and administration workflows
This commit is contained in:
@@ -117,18 +117,24 @@ def validate_member_dates(
|
||||
birth_date: str,
|
||||
accepted_at: str = "",
|
||||
membership_started_at: str = "",
|
||||
membership_ended_at: str = "",
|
||||
today: date | None = None,
|
||||
) -> None:
|
||||
reference = today or date.today()
|
||||
birth = validate_birth_date(birth_date, today=reference)
|
||||
accepted = _validate_not_future(accepted_at, "Aufnahmebeschluss", reference)
|
||||
started = _validate_not_future(membership_started_at, "Mitglied seit", reference)
|
||||
ended = parse_iso_date(membership_ended_at, "Austrittsdatum")
|
||||
if birth and accepted and accepted < birth:
|
||||
raise DateValidationError("Aufnahmebeschluss darf nicht vor dem Geburtsdatum liegen.")
|
||||
if birth and started and started < birth:
|
||||
raise DateValidationError("Mitgliedschaft darf nicht vor dem Geburtsdatum beginnen.")
|
||||
if accepted and started and started < accepted:
|
||||
raise DateValidationError("Mitgliedschaft darf nicht vor dem Aufnahmebeschluss beginnen.")
|
||||
if started and ended and ended < started:
|
||||
raise DateValidationError("Austrittsdatum darf nicht vor dem Mitgliedschaftsbeginn liegen.")
|
||||
if accepted and ended and ended < accepted:
|
||||
raise DateValidationError("Austrittsdatum darf nicht vor dem Aufnahmebeschluss liegen.")
|
||||
|
||||
|
||||
def calculate_age(birth_date: date, on_date: date | None = None) -> int:
|
||||
|
||||
@@ -27,6 +27,19 @@ ASSET_STATUS_LABELS = {
|
||||
"retired": "AUSGEMUSTERT",
|
||||
}
|
||||
|
||||
ASSET_OWNER_TYPE_LABELS = {
|
||||
"club": "VEREIN",
|
||||
"member": "MITGLIED",
|
||||
"external": "EXTERN",
|
||||
}
|
||||
|
||||
ASSET_CUSTODY_TYPE_LABELS = {
|
||||
"club": "VEREIN",
|
||||
"member": "MITGLIED",
|
||||
"external": "EXTERN",
|
||||
"unknown": "UNBEKANNT",
|
||||
}
|
||||
|
||||
HOUSEKEEPER_MEMBER_FIELD_LABELS = {
|
||||
"nickname": "Nickname",
|
||||
"email": "E-Mail-Adresse",
|
||||
@@ -77,6 +90,7 @@ class Member:
|
||||
status: str = "application"
|
||||
accepted_at: str = ""
|
||||
membership_started_at: str = ""
|
||||
membership_ended_at: str = ""
|
||||
payment_frequency: str = "annual"
|
||||
contribution_rule_id: str = "standard-2022"
|
||||
honorary: bool = False
|
||||
@@ -122,6 +136,7 @@ class Member:
|
||||
"status": self.status,
|
||||
"accepted_at": self.accepted_at,
|
||||
"started_at": self.membership_started_at,
|
||||
"ended_at": self.membership_ended_at,
|
||||
"honorary": self.honorary,
|
||||
},
|
||||
"contribution_profile": {
|
||||
@@ -165,6 +180,7 @@ class Member:
|
||||
status=str(membership.get("status", "application")),
|
||||
accepted_at=str(membership.get("accepted_at", "")),
|
||||
membership_started_at=str(membership.get("started_at", "")),
|
||||
membership_ended_at=str(membership.get("ended_at", "")),
|
||||
honorary=bool(membership.get("honorary", False)),
|
||||
contribution_rule_id=str(contribution.get("rule_id", "standard-2022")),
|
||||
payment_frequency=str(contribution.get("payment_frequency", "annual")),
|
||||
@@ -183,6 +199,14 @@ class Asset:
|
||||
serial_number: str = ""
|
||||
status: str = "available"
|
||||
current_holder_member_id: str = ""
|
||||
owner_type: str = "club"
|
||||
owner_member_id: str = ""
|
||||
owner_name: str = ""
|
||||
custody_type: str = "club"
|
||||
location: str = ""
|
||||
handed_over_at: str = ""
|
||||
condition: str = ""
|
||||
estimated_value: str = ""
|
||||
deposit_amount_default: str = "0.00"
|
||||
notes: str = ""
|
||||
created_at: str = field(default_factory=_iso_now)
|
||||
@@ -199,6 +223,14 @@ class Asset:
|
||||
"serial_number": self.serial_number,
|
||||
"status": self.status,
|
||||
"current_holder_member_id": self.current_holder_member_id,
|
||||
"owner_type": self.owner_type,
|
||||
"owner_member_id": self.owner_member_id,
|
||||
"owner_name": self.owner_name,
|
||||
"custody_type": self.custody_type,
|
||||
"location": self.location,
|
||||
"handed_over_at": self.handed_over_at,
|
||||
"condition": self.condition,
|
||||
"estimated_value": self.estimated_value,
|
||||
"deposit_amount_default": self.deposit_amount_default,
|
||||
"notes": self.notes,
|
||||
"created_at": self.created_at,
|
||||
@@ -216,6 +248,19 @@ class Asset:
|
||||
serial_number=str(data.get("serial_number", "")),
|
||||
status=str(data.get("status", "available")),
|
||||
current_holder_member_id=str(data.get("current_holder_member_id", "")),
|
||||
owner_type=str(data.get("owner_type", "club")),
|
||||
owner_member_id=str(data.get("owner_member_id", "")),
|
||||
owner_name=str(data.get("owner_name", "")),
|
||||
custody_type=str(
|
||||
data.get(
|
||||
"custody_type",
|
||||
"member" if data.get("current_holder_member_id") else "club",
|
||||
)
|
||||
),
|
||||
location=str(data.get("location", "")),
|
||||
handed_over_at=str(data.get("handed_over_at", "")),
|
||||
condition=str(data.get("condition", "")),
|
||||
estimated_value=str(data.get("estimated_value", "")),
|
||||
deposit_amount_default=str(data.get("deposit_amount_default", "0.00")),
|
||||
notes=str(data.get("notes", "")),
|
||||
created_at=str(data.get("created_at", _iso_now())),
|
||||
|
||||
Reference in New Issue
Block a user