Commit 2b3e5390 by Owo Sugiana

hitung_denda() berdasarkan bulan

1 parent 40c457d1
0.1.4 2019-11-11
----------------
- hitung_denda() kini bisa berdasarkan bulan.
0.1.3 2019-07-05
----------------
- Penambahan FixLength.to_dict()
......
File mode changed
......@@ -13,20 +13,33 @@ def round_up(n):
return i - 1
def bulan_tunggakan(jatuh_tempo, tgl_hitung):
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 + 1
if tgl_hitung.day <= jatuh_tempo.day:
n -= 1
if n < 1:
n = 0
n = x + y
if n < 0:
return 0
if tgl_hitung.day > jatuh_tempo.day:
n += 1
if n > 24:
n = 24
return 24
return n
def hitung_denda(tagihan, jatuh_tempo, persen_denda, tgl_hitung=None):
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:
......@@ -35,6 +48,6 @@ def hitung_denda(tagihan, jatuh_tempo, persen_denda, tgl_hitung=None):
jatuh_tempo = jatuh_tempo.date()
if jatuh_tempo >= tgl_hitung or persen_denda <= 0:
return 0, 0
bulan = bulan_tunggakan(jatuh_tempo, tgl_hitung)
bulan = func_hitung_bulan(jatuh_tempo, tgl_hitung)
denda = bulan * float(persen_denda) / 100 * tagihan
return bulan, denda
......@@ -122,7 +122,7 @@ class FixLength:
for name, size, typ in self.struct:
r[name] = self.fields[name]['value']
return r
class DateVar(FixLength):
def __init__(self):
......
import os
from setuptools import setup
from setuptools import (
setup,
find_packages,
)
here = os.path.abspath(os.path.dirname(__file__))
......@@ -15,11 +18,6 @@ requires = [
'pytz',
]
packages = [
'opensipkd',
'opensipkd.string',
]
setup(
name='opensipkd-hitung',
version=version,
......@@ -28,7 +26,7 @@ setup(
author='Owo Sugiana',
author_email='sugiana@gmail.com',
license='PostgreSQL License',
packages=packages,
packages=find_packages(),
install_requires=requires,
zip_safe=False,
)
import unittest
from datetime import date
from opensipkd.hitung import (
bulan_tunggakan_berdasarkan_tgl as by_date,
bulan_tunggakan_berdasarkan_bln as by_month,
)
class Denda(unittest.TestCase):
def setUp(self):
self.jatuh_tempo = date(2019, 9, 20)
def by_date(self, tgl_bayar, jml_bln):
self.assertEqual(by_date(self.jatuh_tempo, tgl_bayar), jml_bln)
def by_month(self, tgl_bayar, jml_bln):
self.assertEqual(by_month(self.jatuh_tempo, tgl_bayar), jml_bln)
def bandingkan(self, tgl_bayar, jml_bln):
self.by_date(tgl_bayar, jml_bln)
self.by_month(tgl_bayar, jml_bln)
def test_sebelum_jatuh_tempo(self):
tgl_bayar = date(2019, 8, 31)
self.bandingkan(tgl_bayar, 0)
def test_saat_jatuh_tempo(self):
tgl_bayar = date(2019, 9, 20)
self.bandingkan(tgl_bayar, 0)
def test_setelah_jatuh_tempo_bulan_sama(self):
tgl_bayar = date(2019, 9, 21)
self.by_date(tgl_bayar, 1)
self.by_month(tgl_bayar, 0)
def test_setelah_jatuh_tempo_bulan_beda(self):
tgl_bayar = date(2019, 10, 1)
self.bandingkan(tgl_bayar, 1)
def test_setelah_jatuh_tempo_tahun_beda(self):
tgl_bayar = date(2020, 1, 2)
self.bandingkan(tgl_bayar, 4)
if __name__ == '__main__':
unittest.main()
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!