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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import logging
from opensipkd.aset.pemda.models import (
AsetDBSession,
AsetPerolehanItem,
AsetKib,
)
from opensipkd.aset.pemda.models.hitung import hitung
class BaseError(Exception):
def __init__(self, message):
self.message = message
def unposting(perolehan, from_posting=False):
q = AsetKib.query().filter_by(perolehan_item_id=perolehan.id)
for r in q:
q_at = AsetTetap.query().filter_by(kib_id=r.id)
if q_at.first():
raise BaseError(f'Data Penetapan ID {r.id} masih ada')
q.delete()
if not from_posting:
perolehan.status = 0
AsetDBSession.add(perolehan)
AsetDBSession.flush()
def posting(perolehan):
unposting(perolehan, True)
nilai_perolehan = perolehan.biaya_umum + perolehan.harga
harga = round(nilai_perolehan / perolehan.jumlah, 0)
selisih = int(nilai_perolehan - harga * perolehan.jumlah)
log = logging.getLogger('posting.py')
for x in range(perolehan.jumlah):
values = perolehan.to_dict()
del values['id']
del values['kd_rekening']
del values['no_bast']
if 'no_dpa' in values:
del values['no_dpa']
values['perolehan_item_id'] = perolehan.id
values['jumlah'] = 1
values['status'] = 1
if selisih > 0:
values['harga'] = harga + 1
selisih -= 1
elif selisih < 0:
values['harga'] = harga - 1
selisih += 1
else:
values['harga'] = harga
values['no_register'] = AsetKib.get_no_register(
perolehan.tahun, perolehan.departemen_id,
perolehan.kategori_id) + 1
kib = AsetKib(**values)
AsetDBSession.add(kib)
AsetDBSession.flush()
no = x + 1
log.debug(f'Perolehan ID {perolehan.id}, KIB #{no}/{perolehan.jumlah}, '
f'ID {kib.id} {kib.to_dict()}')
hitung(kib, kib.th_beli)
q = AsetPerolehanItem.query_id(perolehan.id)
p = q.first()
p.status = 1
AsetDBSession.add(p)
AsetDBSession.flush()