zapamietanie akcji

This commit is contained in:
Mateusz Gruszczyński
2026-07-19 19:00:04 +02:00
parent e26d9e4ff3
commit 659f04f05f
9 changed files with 121 additions and 8 deletions
+45
View File
@@ -55,6 +55,51 @@ def effective_vat_rate(nominal_rate, on_date=None):
return override["rate"]
def vat_override_for_date(nominal_rate, on_date=None):
"""Return a complete, immutable VAT-action snapshot for a date."""
override = global_vat_override()
if isinstance(on_date, datetime):
on_date = on_date.date()
on_date = on_date or date.today()
applies = bool(
override["enabled"]
and override["rate"] is not None
and (not override["start"] or on_date >= override["start"])
and (not override["end"] or on_date <= override["end"])
)
return {
"applied": applies,
"name": override["name"] if applies else None,
"rate": override["rate"] if applies else Decimal(str(nominal_rate)),
"start": override["start"] if applies else None,
"end": override["end"] if applies else None,
}
def freeze_vat_action(entry, nominal_rate, previous_fueled_at=None):
"""Attach VAT action conditions to an entry without rewriting valid history."""
fueled_date = entry.fueled_at.date() if isinstance(entry.fueled_at, datetime) else entry.fueled_at
previous_date = previous_fueled_at.date() if isinstance(previous_fueled_at, datetime) else previous_fueled_at
if entry.vat_action_frozen and (previous_date is None or previous_date == fueled_date):
return
snapshot = vat_override_for_date(nominal_rate, fueled_date)
entry.vat_action_frozen = True
entry.vat_action_applied = snapshot["applied"]
entry.vat_action_name = snapshot["name"]
entry.vat_action_rate = snapshot["rate"] if snapshot["applied"] else None
entry.vat_action_start = snapshot["start"]
entry.vat_action_end = snapshot["end"]
def entry_vat_rate(entry, nominal_rate):
if entry.vat_action_frozen:
if entry.vat_action_applied and entry.vat_action_rate is not None:
return Decimal(str(entry.vat_action_rate))
return Decimal(str(nominal_rate))
return effective_vat_rate(nominal_rate, entry.fueled_at)
def save_global_vat_override(form):
enabled = "enabled" in form
name = (form.get("name") or "Projekt rządowy").strip()