def save(request, values, row=None): if not row: row = APInvoice() row.from_dict(values) if not row.no_urut: row.no_urut = APInvoice.max_no_urut(row.tahun_id,row.unit_id)+1; if not row.kode: tahun = request.session['tahun'] unit_kd = request.session['unit_kd'] no_urut = row.no_urut no = "0000%d" % no_urut nomor = no[-5:] row.kode = "%d" % tahun + "-%s" % unit_kd + "-%s" % nomor j='3' j1 = row.jenis if j1 != j: row.no_bku = None row.tgl_bku = None DBSession.add(row) DBSession.flush() return row
def view_delete(request): q = query_id(request) kegiatan_sub_id = request.matchdict['kegiatan_sub_id'] row = q.first() if not row: return id_not_found(request,kegiatan_sub_id) ## Cek sudah Posting atau belum q = DBSession.query(KegiatanSub.disabled).filter(KegiatanSub.id==request.matchdict['kegiatan_sub_id']) rowsub = q.first() if rowsub.disabled: request.session.flash('Data tidak dapat dihapus karena sudah Posting', 'error') return route_list(request, kegiatan_sub_id) form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: msg = '%s berhasil.' % (request.title) DBSession.query(KegiatanAsistensi).filter(KegiatanAsistensi.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) return route_list(request,kegiatan_sub_id) return dict(row=row, form=form.render())
def save(self, values, row=None): if not row: row = Sp2d() row.created = datetime.now() row.create_uid = self.request.user.id row.from_dict(values) row.updated = datetime.now() row.update_uid = self.request.user.id row.posted = 0 row.disabled = 'disabled' in values and 1 or 0 row.status_giro = 0 row.status_advist = 0 if not row.kode: tahun = self.session['tahun'] unit_kd = self.session['unit_kd'] unit_id = self.session['unit_id'] no_urut = Sp2d.get_norut(tahun, unit_id)+1 no = "0000%d" % no_urut nomor = no[-5:] row.kode = "%d" % tahun + "-%s" % unit_kd + "-%s" % nomor DBSession.add(row) DBSession.flush() #Untuk update status disabled pada SPM row1 = DBSession.query(Spm).filter(Spm.id==row.ap_spm_id).first() row1.disabled=1 self.save_request3(row1) return row
def view_edit_unposting(request): row = query_id(request).first() if not row: return id_not_found(request) if not row.posted: request.session.flash('Data tidak dapat di Unposting, karena belum diposting.', 'error') return route_list(request) if row.disabled: request.session.flash('Data jurnal Tagihan sudah diposting.', 'error') return route_list(request) form = Form(colander.Schema(), buttons=('unposting','cancel')) if request.POST: if 'unposting' in request.POST: #Update status posted pada UTANG row.posted=0 save_request3(request, row) r = DBSession.query(AkJurnal.id).filter(AkJurnal.source_no==row.kode).first() #Menghapus Item Jurnal DBSession.query(AkJurnalItem).filter(AkJurnalItem.ak_jurnal_id==r).delete() DBSession.flush() #Menghapus UTANG yang sudah menjadi jurnal DBSession.query(AkJurnal).filter(AkJurnal.source_no==row.kode).delete() DBSession.flush() return route_list(request) return dict(row=row, form=form.render())
def view_delete(request): q = query_id(request) row = q.first() if not row: return {'success':False, "msg":self.id_not_found()} msg = 'Data sudah dihapus' query_id(request).delete() DBSession.flush() amount = "%s" % Spp.get_nilai(row.ap_spp_id) # untuk kondisi hapus langsung nominal ke SPP if amount == 'None': amount=0 rows = DBSession.query(Spp).filter(Spp.id==row.ap_spp_id).first() rows.nominal=amount DBSession.add(rows) DBSession.flush() #Untuk update status posted dan status_spp pada APInvoice row = DBSession.query(APInvoice).filter(APInvoice.id==row.ap_invoice_id).first() #row.disabled=0 row.status_spp=0 save_request2(row) return {'success':True, "msg":msg, 'jml_total':amount}\
def save(values, request, user, row=None): if not row: row = KegiatanAsistensi() row.created = datetime.now() row.create_uid = user.id # isikan user update dan tanggal update row.updated = datetime.now() row.update_uid = user.id ag_step_id = request.session['ag_step_id'] if not values['catatan_1']: values['catatan_1']='-' if not values['catatan_2']: values['catatan_2']='-' if not values['catatan_3']: values['catatan_3']='-' if not values['catatan_4']: values['catatan_4']='-' row.from_dict(values) DBSession.add(row) DBSession.flush() return row
def import_data(adata): for i in range(len(adata)): if i>0: j = adata[i] row = query_gaji_pegawai(j[0],j[1],j[2]) id = row.id if row: potongan = query_gaji_potongan(id) potongan_dict = potongan.to_dict() if len(j)==10: #Pembantu Bendahara for k in range(6): xfield=str(k+7).zfill(2) print xfield potongan_dict['amount_%s' % xfield]= int(float(j[k+4])) elif len(j)==9: #Bendahara for k in range(5): xfield=str(k+2).zfill(2) potongan_dict['amount_%s' % xfield]= int(float(j[k+4])) elif len(j)==5 or len(j)==6: #Bank potongan_dict['amount_01'] = int(float(j[4])) for k in range(11): if (row.gaji_bersih-sum_of_potongan(potongan_dict))<15000: xfield = str(12 - k).zfill(2) potongan_dict['amount_%s' % xfield] = 0 potongan.from_dict(potongan_dict) DBSession.add(potongan) DBSession.flush()
def view_delete(request): q = query_id(request) row = q.first() if not row: return id_not_found(request) if row.posted: request.session.flash('Data sudah diposting', 'error') return route_list(request) if row.status_spp: request.session.flash('Data sudah di SPP', 'error') return route_list(request) """ if row.amount: request.session.flash('Data tidak bisa dihapus, karena memiliki data items', 'error') return route_list(request) """ form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: msg = '%s dengan kode %s telah berhasil.' % (request.title, row.kode) DBSession.query(APPayment).filter(APPayment.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) #Untuk update status posted dan status_pay pada APInvoice inv_id = row.invoice_id row = DBSession.query(APInvoice).filter(APInvoice.id==inv_id).first() row.status_pay = 0 save_request2(row) return route_list(request) return dict(row=row, form=form.render())
def save(self, values, user, row=None): if not row: row = ARPaymentItem() row.created = datetime.now() row.create_uid = user.id row.from_dict(values) row.updated = datetime.now() row.update_uid = user.id tanggal = datetime.strptime(values['tanggal'], '%Y-%m-%d') row.tahun = tanggal.year row.bulan = tanggal.month row.hari = tanggal.day row.minggu = tanggal.isocalendar()[1] row.disabled = 'disabled' in values and values['disabled'] and 1 or 0 row.is_kota = 'is_kota' in values and values['is_kota'] and 1 or 0 row.posted1 = 'posted1' in values and values['posted1'] and 1 or 0 tahun = self.session['tahun'] unit_id = self.session['unit_id'] if not row.no_urut: row.no_urut = ARPaymentItem.max_no_urut(tahun,unit_id)+1; if not row.ref_kode: tahun = self.session['tahun'] unit_kd = self.session['unit_kd'] unit_id = self.session['unit_id'] #no_urut = ARPaymentItem.get_norut(tahun, unit_id)+1 no_urut = row.no_urut no = "0000%d" % no_urut nomor = no[-5:] row.ref_kode = "%d" % tahun + "-%s" % unit_kd + "-%s" % nomor DBSession.add(row) DBSession.flush() return row
def save(self, values, user, row=None): if not row: row = Jurnal() row.created = datetime.now() row.create_uid = user.id row.from_dict(values) tanggal = datetime.strptime(values['tanggal'], '%Y-%m-%d') row.tahun_id = tanggal.year row.periode = tanggal.month row.updated = datetime.now() row.update_uid = user.id row.disabled = 'disabled' in values and values['disabled'] and 1 or 0 row.posted = 'posted' in values and values['posted'] and 1 or 0 row.tgl_transaksi = datetime.now() if not row.kode: tahun = self.session['tahun'] unit_kd = self.session['unit_kd'] is_skpd = row.is_skpd jv_type = row.jv_type tipe = Jurnal.get_tipe(jv_type) no_urut = Jurnal.get_norut(row.tahun_id,row.unit_id)+1 no = "0000%d" % no_urut nomor = no[-5:] row.kode = "%d" % tahun + "-%s" % is_skpd + "-%s" % unit_kd + "-%s" % tipe + "-%s" % nomor DBSession.add(row) DBSession.flush() return row
def view_delete(self): q = self.query_id() row = q.first() request=self.request if not row: return id_not_found(request) if row.posted: request.session.flash('Data sudah diposting', 'error') return self.route_list() if row.status_giro: request.session.flash('Data masih terdapat pada Giro', 'error') return self.route_list() form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: #Untuk menghapus SP2D msg = '%s dengan kode %s telah berhasil.' % (request.title, row.kode) DBSession.query(Sp2d).filter(Sp2d.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) #Untuk update status posted dan disabled pada SPM row = DBSession.query(Spm).filter(Spm.id==row.ap_spm_id).first() row.posted=0 row.disabled=0 self.save_request3(row) return self.route_list() return dict(row=row,form=form.render())
def view_delete(request): q = query_id(request) row = q.first() if not row: return self.id_not_found() query_id(request).delete() DBSession.flush() r = DBSession.query(SpdItem)\ .join(KegiatanSub)\ .outerjoin(Kegiatan)\ .filter(SpdItem.kegiatan_sub_id==row.kegiatan_sub_id, SpdItem.kegiatan_sub_id==KegiatanSub.id, KegiatanSub.kegiatan_id==Kegiatan.id, Kegiatan.kode=='0.00.00.21')\ .first() if r: bl = "%s" % Spd.get_nilai1(row.ap_spd_id) btl = "%s" % Spd.get_nilai2(row.ap_spd_id) else: bl = "%s" % Spd.get_nilai1(row.ap_spd_id) btl = "%s" % Spd.get_nilai2(row.ap_spd_id) return {'success': True, 'msg':'Sukses Hapus Data', 'jml_total1':bl, 'jml_total2':btl}
def save(self, values, row=None): if not row: row = Giro() row.created = datetime.now() row.create_uid = self.request.user.id row.from_dict(values) row.updated = datetime.now() row.update_uid = self.request.user.id row.posted=0 row.disabled = 'disabled' in values and 1 or 0 if not row.no_urut: row.no_urut = Giro.max_no_urut(row.tahun_id)+1; if not row.kode: tahun = self.session['tahun'] #unit_kd = self.session['unit_kd'] #unit_id = self.session['unit_id'] #no_urut = Giro.get_norut(tahun, unit_id)+1 no_urut = row.no_urut no = "00000%d" % no_urut nomor = no[-6:] row.kode = "%s" % nomor + "-BUD-%d" % tahun #no_urut = row.no_urut #no = "00000%d" % no_urut #nomor = no[-5:] #row.kode = "%d" % tahun + "-%s" % unit_kd + "-BUD-%s" % nomor DBSession.add(row) DBSession.flush() return row
def view_edit_unposting(self): request = self.request row = self.query_id().first() kode = row.ref_kode if not row: return id_not_found(request) if not row.posted: self.request.session.flash('Data tidak dapat di Unposting jurnal, karena belum diposting jurnal.', 'error') return self.route_list() if row.disabled: self.request.session.flash('Data jurnal TBP sudah diposting.', 'error') return self.route_list() form = Form(colander.Schema(), buttons=('un-jurnal','cancel')) if request.POST: if 'un-jurnal' in request.POST: #Update status posted pada TBP row.posted=0 self.save_request4(row) r = DBSession.query(Jurnal.id.label('di')).filter(Jurnal.source_no==row.ref_kode,Jurnal.source=='TBP').all() for row in r: #Menghapus Item Jurnal DBSession.query(JurnalItem).filter(JurnalItem.jurnal_id==row.di).delete() DBSession.flush() #Menghapus TBP yang sudah menjadi jurnal DBSession.query(Jurnal).filter(Jurnal.source_no==kode,Jurnal.source=='TBP').delete() DBSession.flush() return self.route_list() return dict(row=row, form=form.render())
def view_delete(request): q = query_id(request) row = q.first() if not row: return {'success':False, "msg":self.id_not_found()} msg = 'Data sudah dihapus' query_id(request).delete() DBSession.flush() nominal = "%s" % Advist.get_nilai(row.ap_advist_id) # untuk kondisi hapus langsung nominal ke Advist if nominal == 'None': nominal = 0 rows = DBSession.query(Advist).filter(Advist.id==row.ap_advist_id).first() rows.nominal= nominal DBSession.add(rows) DBSession.flush() #Untuk update status disabled pada SP2D row = DBSession.query(Sp2d).filter(Sp2d.id==row.ap_sp2d_id).first() row.status_advist=0 save_request2(row) return {'success':True, "msg":msg, 'jml_total':nominal}
def save(values, request, row=None): if not row: row = KegiatanItem() ag_step_id = request.session['ag_step_id'] if ag_step_id<2: values['vol_2_1'] = values['vol_%s_1' % ag_step_id] values['vol_2_2'] = values['vol_%s_2' % ag_step_id] values['sat_2_1'] = values['sat_%s_1' % ag_step_id] values['sat_2_2'] = values['sat_%s_2' % ag_step_id] values['hsat_2'] = values['hsat_%s' % ag_step_id] if ag_step_id<4: values['vol_3_1'] = values['vol_%s_1' % ag_step_id] values['vol_3_2'] = values['vol_%s_2' % ag_step_id] values['sat_3_1'] = values['sat_%s_1' % ag_step_id] values['sat_3_2'] = values['sat_%s_2' % ag_step_id] values['hsat_3'] = values['hsat_%s' % ag_step_id] if ag_step_id<5: values['vol_4_1'] = values['vol_%s_1' % ag_step_id] values['vol_4_2'] = values['vol_%s_2' % ag_step_id] values['sat_4_1'] = values['sat_%s_1' % ag_step_id] values['sat_4_2'] = values['sat_%s_2' % ag_step_id] values['hsat_4'] = values['hsat_%s' % ag_step_id] row.from_dict(values) if not row.no_urut: row.no_urut = KegiatanItem.max_no_urut(values['kegiatan_sub_id'],values['rekening_id'])+1; DBSession.add(row) DBSession.flush() return row
def view_delete(request): q = query_id(request) row = q.first() if not row: return id_not_found(request) if row.posted: request.session.flash('Data sudah diposting SKPD', 'error') return route_list(request) if row.posted1: request.session.flash('Data sudah diposting PPKD', 'error') return route_list(request) if row.nominal: request.session.flash('Data tidak bisa dihapus, karena memiliki data items', 'error') return route_list(request) form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: msg = '%s dengan kode %s telah berhasil.' % (request.title, row.kode) DBSession.query(Sts).filter(Sts.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) return route_list(request) return dict(row=row, form=form.render())
def view_ar_payment_item_delete(self): request = self.request q = self.query_id() row = q.first() if not row: return self.id_not_found(request) if row.posted: request.session.flash('Data sudah diposting', 'error') return self.route_list() if row.posted1: request.session.flash('Data sudah diposting rekap', 'error') return self.route_list() form = Form(colander.Schema(), buttons=('hapus','batal')) if request.POST: if 'hapus' in request.POST: msg = 'TBP ID %d %s sudah dihapus.' % (row.id, row.ref_nama) try: q.delete() DBSession.flush() except: msg = 'TBP ID %d %s tidak dapat dihapus.' % (row.id, row.ref_nama) request.session.flash(msg) return self.route_list() return dict(row=row, form=form.render())
def view_delete(request): q = query_id(request) row = q.first() if not row: return id_not_found(request) if row.posted: request.session.flash('Data sudah diposting', 'error') return route_list(request) if row.status_spp: request.session.flash('Data sudah masuk di SPP', 'error') return route_list(request) if row.status_pay: request.session.flash('Data sudah masuk di Pembayaran Tagihan', 'error') return route_list(request) if row.amount: request.session.flash('Data tidak bisa dihapus, karena memiliki data items', 'error') return route_list(request) form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: msg = '%s dengan kode %s telah berhasil.' % (request.title, row.kode) DBSession.query(APInvoice).filter(APInvoice.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) return route_list(request) return dict(row=row, form=form.render())
def view_delete(request): q = query_id(request) row = q.first() if not row: return id_not_found(request) # Cek posting #if row.disabled: # request.session.flash('Data tidak dapat dihapus karena sudah Posting', 'error') # return route_list(request) ses = request.session ## variabel ag_step_id ag_step_id = ses['ag_step_id'] if row.disabled == 1 and row.approval==4: request.session.flash('Data tidak dapat dihapus karena sudah Posting', 'error') return route_list1(request,row.id) if row.approval==3: request.session.flash('Data tidak dapat dihapus karena sudah di Approval oleh Dispenda', 'error') return route_list1(request,row.id) if row.approval==2: request.session.flash('Data tidak dapat dihapus karena sudah di Approval oleh Bappeda', 'error') return route_list1(request,row.id) form = Form(colander.Schema(), buttons=('hapus','cancel')) values= {} if request.POST: if 'hapus' in request.POST: msg = '%s Kode %s No. %s %s sudah dihapus.' % (request.title, row.kode, row.no_urut, row.nama) DBSession.query(KegiatanSub).filter(KegiatanSub.id==request.matchdict['id']).delete() DBSession.flush() request.session.flash(msg) return route_list(request) return dict(row=row, form=form.render())
def view_edit_unposting(self): request = self.request row = self.query_id().first() if not row: return id_not_found(request) if not row.posted: self.request.session.flash('Data tidak dapat di Un-Jurnal, karena belum dibuat jurnal.', 'error') return self.route_list() if row.disabled: self.request.session.flash('Data jurnal Penetapan/Tagihan sudah diposting.', 'error') return self.route_list() form = Form(colander.Schema(), buttons=('un-jurnal','cancel')) if request.POST: if 'un-jurnal' in request.POST: #Update status posted pada PIUTANG row.posted=0 self.save_request3(row) r = DBSession.query(Jurnal.id).filter(Jurnal.source_no==row.ref_kode,Jurnal.source=='Penetapan').first() #Menghapus Item Jurnal DBSession.query(JurnalItem).filter(JurnalItem.jurnal_id==r).delete() DBSession.flush() #Menghapus PIUTANG yang sudah menjadi jurnal DBSession.query(Jurnal).filter(Jurnal.source_no==row.ref_kode,Jurnal.source=='Penetapan').delete() DBSession.flush() return self.route_list() return dict(row=row, form=form.render())
def set_invoice(request, data): resp = auth_from_rpc(request) if resp['code'] != 0: return resp unit_id = 0 unit_kd = "" rekening_id = 0 rekening_kd = "" try: for row in data: if row['unit_kd']!=unit_kd: unit_id = DBSession.query(Unit.id).filter_by( kode = row['unit_kd']).scalar() unit_kd = unit_id and row['unit_kd'] if row['rekening_kd']!=rekening_kd: rekening_id = DBSession.query(Rekening.id).filter_by( kode = row['rekening_kd']).scalar() rekening_kd = rekening_id and row['rekening_kd'] invoice = DBSession.query(ARInvoiceTransaksi).filter_by( kode = row['rekening_kd'], tahun = row['tahun'], ref_kode = row['ref_kode'] ).first() if not invoice: invoice = ARInvoiceTransaksi() invoice.created = datetime.now() invoice.create_uid = 1 invoice.kode = row['rekening_kd'] invoice.nama = row['nama'] invoice.tahun = row['tahun'] invoice.amount = row['amount'] invoice.ref_kode = row['ref_kode'] invoice.ref_nama = row['ref_nama'] invoice.tanggal = row['tanggal'] invoice.kecamatan_kd = row['kecamatan_kd'] invoice.kecamatan_nm = row['kecamatan_nm'] invoice.kelurahan_kd = row['kelurahan_kd'] invoice.kelurahan_nm = row['kelurahan_nm'] invoice.is_kota = row['is_kota'] invoice.sumber_data = row['sumber_data'] invoice.sumber_id = row['sumber_id'] invoice.unit_id = unit_id invoice.rekening_id = rekening_id #invoice.notes = row['notes'] DBSession.add(invoice) DBSession.flush() except Exception e: print str(e) DBSession.rollback() return dict(code=CODE_DATA_INVALID, message='Data Invalid') try: DBSession.commit() except Exception e: print str(e) return dict(code=CODE_OK, message='Data Submitted')
def save(self, values, user, row=None): if not row: row = RekeningSap() row.from_dict(values) DBSession.add(row) DBSession.flush() return row
def save(values, user, row=None): if not row: row = UserGroup() row.from_dict(values) DBSession.add(row) query_group_member(values) DBSession.flush() return row
def save(self, values, user, row=None): if not row: row = FungsiUrusan() row.from_dict(values) DBSession.add(row) DBSession.flush() return row
def save(values, user, row=None): if not row: row = User() row.from_dict(values) if values['password']: row.password = values['password'] DBSession.add(row) DBSession.flush() return row
def save(values, row=None): if not row: row = KegiatanSub() row.from_dict(values) if not row.no_urut: row.no_urut = KegiatanSub.max_no_urut(row.tahun_id,row.unit_id,row.kegiatan_id)+1; DBSession.add(row) DBSession.flush() return row
def save(request, values, row=None): if not row: row = Sts() row.created = datetime.now() row.from_dict(values) row.updated = datetime.now() DBSession.add(row) DBSession.flush() return row
def view_edit_unposting(self): request = self.request row = self.query_id().first() id_sp2d = row.id kode = row.kode if not row: return id_not_found(request) if not row.posted1: request.session.flash('Data tidak dapat di Unposting jurnal, karena belum diposting jurnal.', 'error') return self.route_list() if row.disabled: request.session.flash('Data jurnal SP2D sudah diposting.', 'error') return self.route_list() form = Form(colander.Schema(), buttons=('un-jurnal','cancel')) if request.POST: if 'un-jurnal' in request.POST: #Update status posted pada SP2D row.posted1=0 self.save_request4(row) ji = DBSession.query(Spp.jenis.label('jenis'))\ .filter(Sp2d.id==id_sp2d, Sp2d.ap_spm_id==Spm.id, Spm.ap_spp_id==Spp.id, ).first() j = '%s' % ji if j=='1': s='UP' x='SP2D-%s' % s elif j=='2': s='TU' x='SP2D-%s' % s elif j=='3': s='GU' x='SP2D-%s' % s else: s='LS' x='SP2D-%s' % s r = DBSession.query(AkJurnal.id.label('di')).filter(AkJurnal.source_no==kode, AkJurnal.source==x,AkJurnal.is_skpd==0).all() for row in r: #Menghapus Item Jurnal DBSession.query(AkJurnalItem).filter(AkJurnalItem.ak_jurnal_id==row.di).delete() DBSession.flush() #Menghapus SP2D yang sudah menjadi jurnal DBSession.query(AkJurnal).filter(AkJurnal.source_no==kode,AkJurnal.source==x,AkJurnal.is_skpd==0).delete() DBSession.flush() return self.route_list() return dict(row=row, form=form.render())
def view_add(request): req = request ses = req.session params = req.params url_dict = req.matchdict ap_spd_id = 'ap_spd_id' in url_dict and url_dict['ap_spd_id'] or 0 controls = dict(req.POST.items()) ap_spd_item_id = 'ap_spd_item_id' in controls and controls['ap_spd_item_id'] or 0 #Cek dulu ada penyusup gak dengan mengecek sessionnya ap_spd = DBSession.query(Spd)\ .filter(#Spd.unit_id==ses['unit_id'], Spd.id==ap_spd_id).first() if not ap_spd: return {"success": False, 'msg':'SPD tidak ditemukan'} #Cek lagi ditakutkan skpd ada yang iseng inject script if ap_spd_item_id: row = DBSession.query(SpdItem)\ .join(Spd)\ .filter(SpdItem.id==ap_spd_item_id, #Spd.unit_id==ses['unit_id'], SpdItem.ap_spd_id==ap_spd_id).first() if not row: return {"success": False, 'msg':'Invoice tidak ditemukan'} else: row = SpdItem() row.ap_spd_id = ap_spd_id row.kegiatan_sub_id = controls['kegiatan_sub_id'] row.anggaran = controls['anggaran'].replace('.','') row.lalu = controls['lalu'].replace('.','') row.nominal = controls['nominal'].replace('.','') DBSession.add(row) DBSession.flush() r = DBSession.query(SpdItem)\ .join(KegiatanSub)\ .outerjoin(Kegiatan)\ .filter(SpdItem.kegiatan_sub_id==controls['kegiatan_sub_id'], SpdItem.kegiatan_sub_id==KegiatanSub.id, KegiatanSub.kegiatan_id==Kegiatan.id, Kegiatan.kode=='0.00.00.21')\ .first() if r: bl = "%s" % Spd.get_nilai1(row.ap_spd_id) btl = "%s" % Spd.get_nilai2(row.ap_spd_id) else: bl = "%s" % Spd.get_nilai1(row.ap_spd_id) btl = "%s" % Spd.get_nilai2(row.ap_spd_id) return {"success": True, 'id': row.id, "msg":'Success Tambah SPD', 'jml_total1':bl, 'jml_total2':btl}