hitung.py
1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from datetime import (
date,
datetime,
)
def round_up(n):
i = int(n)
plus = (int(n*100) - int(n)*100) and 1
if n < 0:
return i - plus
return i + plus
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