hitung.py 1.24 KB
from datetime import (
    date,
    datetime,
    )


def round_up(n):
    i = int(n)
    if n == i:
        return i
    if n > 0:
        return i + 1
    return i - 1


def bulan_tunggakan_berdasarkan_tgl(jatuh_tempo, tgl_hitung):
    x = (tgl_hitung.year - jatuh_tempo.year) * 12
    y = tgl_hitung.month - jatuh_tempo.month
    n = x + y
    if n < 0:
        return 0
    if tgl_hitung.day > jatuh_tempo.day:
        n += 1
    if n > 24:
        return 24
    return n


def bulan_tunggakan_berdasarkan_bln(jatuh_tempo, tgl_hitung):
    x = (tgl_hitung.year - jatuh_tempo.year) * 12
    y = tgl_hitung.month - jatuh_tempo.month
    n = x + y
    if n < 0:
        return 0
    if n > 24:
        return 24
    return n


def hitung_denda(
        tagihan, jatuh_tempo, persen_denda, tgl_hitung=None,
        func_hitung_bulan=bulan_tunggakan_berdasarkan_tgl):
    if jatuh_tempo is None:
        return 0, 0
    if tgl_hitung is None:
        tgl_hitung = date.today()
    if isinstance(jatuh_tempo, datetime):
        jatuh_tempo = jatuh_tempo.date()
    if jatuh_tempo >= tgl_hitung or persen_denda <= 0:
        return 0, 0
    bulan = func_hitung_bulan(jatuh_tempo, tgl_hitung)
    denda = bulan * float(persen_denda) / 100 * tagihan
    return bulan, denda