Skip to content

Wartość cykliczna kalendarzowo

Mediator generujący stałą ilość produktu w każdym okresie kalendarzowym (np. abonament miesięczny).

Mediator CalendarMediator służy do generowania cyklicznych opłat w oparciu o okresy kalendarzowe. Typowym zastosowaniem jest naliczanie abonamentów miesięcznych — opłata jest generowana przy każdej zmianie miesiąca kalendarzowego.

Billing dowolnego okresu wewnątrz miesiąca nie generuje produktów. Natomiast billing obejmujący początek (lub koniec) miesiąca generuje zadaną ilość wybranych produktów.

Mediator obsługuje cztery tryby rozliczania (billing_type):

  • start — naliczenie pełnej kwoty za każdy pełny miesiąc kalendarzowy w okresie. Opłata jest generowana, gdy w billingowanym okresie występuje pierwszy dzień miesiąca.
  • end — naliczenie opłaty na koniec miesiąca.
  • proportional — naliczenie proporcjonalne do liczby godzin w danym miesiącu. Jeśli okres billingowy obejmuje jedynie część miesiąca, ilość zostanie proporcjonalnie zmniejszona.
  • price_proportional — naliczenie proporcjonalne z uwzględnieniem zmian cen w trakcie miesiąca. Jeśli cena produktu zmienia się w trakcie miesiąca, mediator rozbija okres na fragmenty z pełnymi miesiącami (bez zmian cen) i fragmenty proporcjonalne (ze zmianami cen).

Aktualnie obsługiwany jest wyłącznie okres miesięczny (monthly).

  • Nazwa wyświetlana: Wartość cykliczna kalendarzowo.
  • Dokładna klasa: django_billy.basemediators.CalendarMediator
ParametrTypDomyślna wartośćOpis
product_idInteger/TablicabrakIdentyfikator produktu billingowego lub tablica identyfikatorów produktów. Jeśli podano pojedynczą wartość, zostanie automatycznie opakowana w tablicę.
quantityDecimalbrakIlość produktu generowana za każdy pełny okres (np. 1 dla jednego abonamentu miesięcznego).
periodTekstbrakOkres naliczania. Aktualnie jedyną obsługiwaną wartością jest monthly.
billing_typeTekstbrakTyp rozliczenia: start (początek miesiąca), end (koniec miesiąca), proportional (proporcjonalnie) lub price_proportional (proporcjonalnie z uwzględnieniem zmian cen).

Abonament miesięczny (naliczany na początku miesiąca)

Section titled “Abonament miesięczny (naliczany na początku miesiąca)”
{
"product_id": 10,
"quantity": 1,
"period": "monthly",
"billing_type": "start"
}

Opłata proporcjonalna z wieloma produktami

Section titled “Opłata proporcjonalna z wieloma produktami”
{
"product_id": [10, 11, 12],
"quantity": 1,
"period": "monthly",
"billing_type": "proportional"
}
{
"product_id": 10,
"quantity": 1,
"period": "monthly",
"billing_type": "price_proportional"
}
  1. Podane ID w product_id to identyfikatory produktów billingowych, a nie księgowych.
  2. W trybie start opłata jest naliczana za każdy pełny miesiąc — tzn. tylko wtedy, gdy w billingowanym okresie występuje pierwszy dzień miesiąca o godzinie 0:00.
  3. W trybie proportional ilość jest obliczana na podstawie stosunku liczby godzin w billingowanym fragmencie miesiąca do łącznej liczby godzin w całym miesiącu.
  4. W trybie price_proportional mediator korzysta ze strefy czasowej Europe/Warsaw do wykrywania zmian cen. Analizowane są ceny na początku i końcu każdego miesiąca w billingowanym okresie.
  5. Mediator obsługuje wiele produktów jednocześnie — podanie tablicy identyfikatorów w product_id spowoduje wygenerowanie osobnego wyniku dla każdego produktu.
  6. Klasy pochodne (StepWiseCalendarMediator, PPEOrderedCapacityCalendarMediator, DistributionSpecificMediator) rozszerzają ten mediator o dodatkową logikę biznesową.