zapamietanie akcji
This commit is contained in:
+45
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user