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()