def create(self, vals): # # cek saldo siswa siswa = self.env['res.partner'].search([('id', '=', vals['siswa_id'])]) can_draw = True if siswa.saldo_tabungan == 0: vals['jenis'] = 'setor' else: if vals['jenis'] == 'tarik': if siswa.saldo_tabungan < vals['jumlah_temp']: can_draw = False if can_draw: if vals.get('name', _('New')) == _('New'): vals['name'] = 'DRAFT/TAB/' + str(datetime.today().date().strftime('%d%m%y/%H%M%S')) if vals['jenis'] == 'tarik' : vals['jumlah_temp'] = -vals['jumlah_temp'] result = super(tabungan, self).create(vals) return result else: print('Gagal Simpan Tabungan') # return {'warning': { # 'title': _('Warning'), # 'message': _('Saldo tabungan tidak mencukupi.') # }} raise exceptions.except_orm(_('Warning'), _('Saldo tabungan tidak mencukupi.'))
def unlink(self): for rec in self: if rec.state != 'draft': # alert can not delete on paid state raise exceptions.except_orm( _('Warning'), _('You can not delete this data at this state.')) else: res = super(PotonganBiaya, self).unlink() return res
def unlink(self): # clear rombel_id yang telah di set for cs in self.calon_siswa_ids: cs.rombel_id = None if self.state == 'done': # raise Warning(_("You can not delete Done state data")) raise exceptions.except_orm( _('Warning'), _('You can not delete Done state data')) return super(distribusi_siswa, self).unlink()
def action_reset(self): if self.state == 'open': # update amount_due siswa_biaya self.env.cr.execute( "update siswa_keu_ocb11_siswa_biaya set amount_due = " + str(self.siswa_biaya_id.amount_due + self.jumlah_potongan) + " where id = " + str(self.siswa_biaya_id.id)) # update total tagihan siswa print('Recompute Total Biaya Siswa') self.siswa_id._compute_total_biaya() # update state to draft self.state = 'draft' # recalculate keuangan dashboard self._recalculate_keuangan_dashboard() else: raise exceptions.except_orm(_('Error'), _('Can not reset on this state.'))
def unlink(self): for rec in self: if not rec.is_allow_to_delete: raise exceptions.except_orm(_('Warning'), _('You can not delete this type of data.')) return super(kas, self).unlink()
def validate_state(self): self.ensure_one() if self.biayas and len(self.biayas) > 0: # rombel_ids = self.env['siswa_ocb11.rombel'].search([('jenjang','=',int(self.jenjang))]).ids rombel_ids = self.env['siswa_ocb11.rombel'].search([ ('jenjang_id', '=', self.jenjang_id.id) ]).ids siswas = self.env['siswa_ocb11.rombel_siswa'].search([ ('tahunajaran_id', '=', self.tahunajaran_id.id), ('rombel_id', 'in', rombel_ids), ]) # create/insert biaya to siswa for sis in siswas: total_biaya = 0 for by in self.biayas: if by.biaya_id.assign_to == 'all' or ( sis.siswa_id.is_siswa_lama and by.biaya_id.assign_to == 'lama') or ( not sis.siswa_id.is_siswa_lama and by.biaya_id.assign_to == 'baru'): # if sis.siswa_id.is_siswa_lama and by.biaya_id.is_siswa_baru_only: # print('skip') # else: if by.biaya_id.is_bulanan: for bulan_index in range(1, 13): harga = by.harga if by.is_different_by_gender: if sis.siswa_id.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create( { 'name': by.biaya_id.name + ' ' + calendar.month_name[bulan_index], 'siswa_id': sis.siswa_id.id, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'bulan': bulan_index, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) total_biaya += harga else: harga = by.harga if by.is_different_by_gender: if sis.siswa_id.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create({ 'name': by.biaya_id.name, 'siswa_id': sis.siswa_id.id, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) total_biaya += harga # set total_biaya dan amount_due # total_biaya = sum(by.harga for by in self.biayas) self.env['res.partner'].search([('id', '=', sis.siswa_id.id) ]).write({ 'total_biaya': total_biaya, 'amount_due_biaya': total_biaya, }) # print(sis.siswa_id.name + ' ' + sis.siswa_id.active_rombel_id.name) # update state self.write({'state': 'valid'}) else: # raise error warning raise exceptions.except_orm(_('Warning'), _('There is no data to validate.'))
def recompute_biaya(self): self.ensure_one() print('Recompute Biaya Siswa') if self.biayas and len(self.biayas) > 0: # siswas = self.env['siswa_ocb11.rombel_siswa'].search([('tahunajaran_id','=',self.tahunajaran_id.id),('jenjang','=',self.jenjang)]) siswas = self.env['siswa_ocb11.rombel_siswa'].search([ ('tahunajaran_id', '=', self.tahunajaran_id.id), ('jenjang_id', '=', self.jenjang_id.id) ]) for biy in self.biayas: for sis in siswas: found = False for siswa_biaya in sis.siswa_id.biayas: if (siswa_biaya.biaya_id.id == biy.biaya_id.id): found = True if not found: print('Add biaya to : ' + sis.siswa_id.name) # jika tidak tersedia maka inputkan baru if biy.biaya_id.assign_to == 'all' or ( sis.siswa_id.is_siswa_lama and biy.biaya_id.assign_to == 'lama') or ( not sis.siswa_id.is_siswa_lama and biy.biaya_id.assign_to == 'baru'): # if sis.siswa_id.is_siswa_lama and biy.biaya_id.is_siswa_baru_only: # print('skip') # else: if biy.biaya_id.is_bulanan: for bulan_index in range(1, 13): harga = biy.harga if biy.is_different_by_gender: if sis.siswa_id.jenis_kelamin == 'perempuan': harga = biy.harga_alt print(harga) self.env[ 'siswa_keu_ocb11.siswa_biaya'].create({ 'name': biy.biaya_id.name + ' ' + calendar.month_name[bulan_index], 'siswa_id': sis.siswa_id.id, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': biy.biaya_id.id, 'bulan': bulan_index, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) else: harga = biy.harga if biy.is_different_by_gender: if sis.siswa_id.jenis_kelamin == 'perempuan': harga = biy.harga_alt print(harga) self.env['siswa_keu_ocb11.siswa_biaya'].create( { 'name': biy.biaya_id.name, 'siswa_id': sis.siswa_id.id, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': biy.biaya_id.id, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) print('End of Recompute Siswa Biaya') else: # raise error warning raise exceptions.except_orm(_('Warning'), _('There is no data to validate.'))
def unlink(self): if self.state == 'paid': raise exceptions.except_orm(_('Warning'), _('You can not delete a payment that is already paid!')) else: return super(pembayaran, self).unlink()
def action_confirm(self): self.ensure_one() # check if pembayaran is set or no if len(self.pembayaran_lines) > 0: # update state self.write({ 'state' : 'paid' }) # set paid to siswa_biaya for bayar in self.pembayaran_lines: print('Bayar : ' + str(bayar.bayar)) print('Amount due : ' + str(bayar.amount_due)) # if bayar.bayar == (bayar.amount_due - bayar.jumlah_potongan): if str(bayar.bayar) == str(bayar.biaya_id.amount_due): print('update amount due on siswa biaya and set siswa_biaya to paid') bayar.biaya_id.write({ 'state' : 'paid', 'amount_due' : 0, 'dibayar' : bayar.biaya_id.dibayar + bayar.bayar, }) else: print('update amount due on siswa_biaya') bayar.biaya_id.write({ # 'amount_due' : bayar.biaya_id.amount_due - bayar.jumlah_potongan - bayar.bayar, 'amount_due' : bayar.biaya_id.amount_due - bayar.bayar, 'dibayar' : bayar.biaya_id.dibayar + bayar.bayar, 'state' : 'paid' if (bayar.biaya_id.amount_due - bayar.bayar) == 0.0 else 'open' }) # update amount_due_biaya on siswa self.siswa_id.write({ 'amount_due_biaya' : self.siswa_id.amount_due_biaya - bayar.bayar }) # set potongan biaya to paid if bayar.biaya_id.potongan_ids: for pot_by in bayar.biaya_id.potongan_ids: pot_by.state = 'paid' # add confirm progress to table action_confirm self.env['siswa_keu_ocb11.action_confirm'].create({ 'pembayaran_id' : self.id }) # update kas statement per item pembayaran lines for pb in self.pembayaran_lines: akun_kas_id = self.env['siswa_keu_ocb11.kas_kategori'].search([('biaya_id', '=', pb.biaya_id.biaya_id.id)]).id kas = self.env['siswa_keu_ocb11.kas'].create({ 'tanggal' : self.tanggal, 'jumlah' : pb.bayar, 'pembayaran_id' : self.id , 'is_related' : True , 'kas_kategori_id' : akun_kas_id, }) kas.action_confirm() # if is_potong_tabungan = True, maka potong tabungan if self.is_potong_tabungan: # create trans tabungan new_tab = self.env['siswa_tab_ocb11.tabungan'].create({ 'siswa_id' : self.siswa_id.id, 'tanggal' : self.tanggal, 'jenis' : 'tarik', 'jumlah_temp' : self.jumlah_potongan_tabungan, 'desc' : 'Pembayaran ' + self.name, }) new_tab.action_confirm() self.tabungan_id = new_tab.id # recompute keuangan dashboard self.recompute_keuangan_dashboard() # reload return self.reload_page() else: raise exceptions.except_orm(_('Warning'), _('There is no data to confirm, complete payment first!'))
def action_confirm(self): # check pembayaran is set or not if len(self.payment_lines) > 0: # register siswa to res.partner if self.is_siswa_lama: # update siswa lama self.env['res.partner'].search([ ('id', '=', self.siswa_id.id) ]).write({ # 'rombels' : [(0, 0, { 'rombel_id' : self.rombel_id.id, 'tahunajaran_id' : self.tahunajaran_id.id })], # 'active_rombel_id' : self.rombel_id.id, 'is_siswa_lama': True, 'calon_siswa_id': self.id, }) else: # insert into res_partner new_siswa = self.env['res.partner'].create({ 'is_customer': 1, 'name': self.name, 'calon_siswa_id': self.id, 'street': self.street, 'street2': self.street2, 'zip': self.zip, 'city': self.city, 'state_id': self.state_id.id, 'country_id': self.country_id.id, 'phone': self.phone, 'mobile': self.mobile, 'tanggal_registrasi': self.tanggal_registrasi, 'tahunajaran_id': self.tahunajaran_id.id, 'nis': self.nis, 'panggilan': self.panggilan, 'jenis_kelamin': self.jenis_kelamin, 'tanggal_lahir': self.tanggal_lahir, 'tempat_lahir': self.tempat_lahir, 'alamat': self.alamat, 'telp': self.telp, 'ayah': self.ayah, 'pekerjaan_ayah_id': self.pekerjaan_ayah_id.id, 'telp_ayah': self.telp_ayah, 'ibu': self.ibu, 'pekerjaan_ibu_id': self.pekerjaan_ibu_id.id, 'telp_ibu': self.telp_ibu, # 'rombels' : [(0, 0, { 'rombel_id' : self.rombel_id.id, 'tahunajaran_id' : self.tahunajaran_id.id })], # 'active_rombel_id' : self.rombel_id.id, 'is_siswa': True, 'anak_ke': self.anak_ke, 'dari_bersaudara': self.dari_bersaudara }) # self.siswa_id = new_siswa.id self.registered_siswa_id = new_siswa.id # self.siswa_id = new_siswa.id # update state self.state = 'reg' # assign siswa biaya # get tahunajaran_jenjang ta_jenjang = self.env['siswa_ocb11.tahunajaran_jenjang'].search([ ('tahunajaran_id', '=', self.tahunajaran_id.id), ('jenjang_id', '=', self.jenjang_id.id) ]) # assign biaya to siswa total_biaya = 0.0 if self.is_siswa_lama: id_siswa = self.siswa_id.id else: id_siswa = new_siswa.id for by in ta_jenjang.biayas: # cek biaya apakah is_optional dan apakah di pilih dalam payment_lines by_found = False if by.biaya_id.is_optional: for by_in_pay in self.payment_lines: if by.biaya_id.id == by_in_pay.biaya_id.id: by_found = True if not by_found: continue if self.is_siswa_lama and by.biaya_id.is_siswa_baru_only: print('skip') continue else: print('JENJANG ID : ' + str(self.jenjang_id.id)) if by.biaya_id.is_bulanan: for bulan_index in range(1, 13): harga = by.harga if by.is_different_by_gender: if self.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create({ 'name': by.biaya_id.name + ' ' + calendar.month_name[bulan_index], 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'bulan': bulan_index, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) total_biaya += harga else: harga = by.harga if by.is_different_by_gender: if self.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create({ 'name': by.biaya_id.name, 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) total_biaya += harga # add potongan biaya for pay_a in self.payment_lines: if pay_a.potongan_harga > 0: if pay_a.biaya_id.is_bulanan: print('inside biaya is bulanan') biaya_bulanan_ids = self.env[ 'siswa_keu_ocb11.siswa_biaya'].search([ ('siswa_id', '=', id_siswa), ('tahunajaran_id', '=', self.tahunajaran_id.id), ('biaya_id', '=', pay_a.biaya_id.id), # ('tahunajaran_id','=',self.tahunajaran_id.id), ]) for by_bul in biaya_bulanan_ids: a_pot = self.env['siswa.potongan_biaya'].create({ 'siswa_id': id_siswa, 'siswa_biaya_id': by_bul.id, 'jumlah_potongan': pay_a.potongan_harga }) a_pot.action_confirm() else: print('inside biaya not bulanan') print(id_siswa) print(pay_a.biaya_id.id) print(self.tahunajaran_id.id) siswa_by_id = self.env[ 'siswa_keu_ocb11.siswa_biaya'].search([ ('siswa_id', '=', id_siswa), ('tahunajaran_id', '=', self.tahunajaran_id.id), ('biaya_id', '=', pay_a.biaya_id.id), # ('tahunajaran_id','=',self.tahunajaran_id.id), ]).id # siswa_by_id = self.env['siswa_keu_ocb11.siswa_biaya'].search([ # ('id','=',id_siswa), # ('biaya_id','=',pay_a.biaya_id.id), # ('tahunajaran_id','=',self.tahunajaran_id.id), # ]) pprint(siswa_by_id) a_pot = self.env['siswa.potongan_biaya'].create({ 'siswa_id': id_siswa, 'siswa_biaya_id': siswa_by_id, 'jumlah_potongan': pay_a.potongan_harga }) a_pot.action_confirm() # # set total_biaya dan amount_due # # total_biaya = sum(by.harga for by in self.biayas) # print('ID SISWA : ' + str(id_siswa)) # res_partner_siswa = self.env['res.partner'].search([('id','=',id_siswa)]) # self.env['res.partner'].search([('id','=',id_siswa)]).write({ # 'total_biaya' : total_biaya, # 'amount_due_biaya' : res_partner_siswa.amount_due_biaya + total_biaya, # }) # add pembayaran pembayaran = self.env['siswa_keu_ocb11.pembayaran'].create({ 'tanggal': self.tanggal_registrasi, 'tahunajaran_id': self.tahunajaran_id.id, 'siswa_id': id_siswa, }) # reset pembayaran_lines pembayaran.pembayaran_lines.unlink() pembayaran.total = 0 total_bayar = 0.0 for pay in self.payment_lines: print('Payment Lines : ') print('harga : ' + str(pay.harga)) print('dibayar : ' + str(pay.dibayar)) print('biaya_id : ' + str(pay.biaya_id.id)) # get siswa_biaya if pay.dibayar > 0: # jangan dimasukkan ke pembayaran untuk yang nilai dibayarnya = 0 if pay.biaya_id: if pay.biaya_id.is_bulanan: # pay_biaya_id = self.env['siswa_keu_ocb11.siswa_biaya'].search([ # ('siswa_id','=',id_siswa), # ('tahunajaran_id','=',self.tahunajaran_id.id), # ('biaya_id','=',pay.biaya_id.id), # ('tahunajaran_id','=',self.tahunajaran_id.id), # ('bulan','=',pay.bulan), # ]).id # untuk section ini diganti sesuai dengan ketentuan potongan biaya biaya_bulanan_ids = self.env[ 'siswa_keu_ocb11.siswa_biaya'].search([ ('siswa_id', '=', id_siswa), ('tahunajaran_id', '=', self.tahunajaran_id.id), ('biaya_id', '=', pay.biaya_id.id), ('tahunajaran_id', '=', self.tahunajaran_id.id), ]) dibayar_untuk_biaya_ini = pay.dibayar for by_bln in biaya_bulanan_ids: if dibayar_untuk_biaya_ini > 0: if dibayar_untuk_biaya_ini > by_bln.harga: pembayaran.pembayaran_lines = [(0, 0, { 'biaya_id': by_bln.id, 'jumlah_potongan': pay.potongan_harga, 'amount_due': by_bln.amount_due, 'bayar': by_bln.harga - pay.potongan_harga })] dibayar_untuk_biaya_ini -= ( by_bln.harga - pay.potongan_harga) total_bayar += by_bln.harga else: pembayaran.pembayaran_lines = [(0, 0, { 'biaya_id': by_bln.id, 'jumlah_potongan': pay.potongan_harga, 'amount_due': by_bln.amount_due, 'bayar': dibayar_untuk_biaya_ini })] total_bayar += dibayar_untuk_biaya_ini dibayar_untuk_biaya_ini = 0 else: pay_biaya_id = self.env[ 'siswa_keu_ocb11.siswa_biaya'].search([ ('siswa_id', '=', id_siswa), ('tahunajaran_id', '=', self.tahunajaran_id.id), ('biaya_id', '=', pay.biaya_id.id), # ('tahunajaran_id','=',self.tahunajaran_id.id), ]) # ini juga di rubah pembayaran.pembayaran_lines = [(0, 0, { 'biaya_id': pay_biaya_id.id, 'jumlah_potongan': pay.potongan_harga, 'amount_due': pay_biaya_id.amount_due, 'bayar': pay.dibayar })] total_bayar += pay.dibayar print('pay_biaya_id : ' + str(pay_biaya_id)) print('-------------------') # raise exceptions.except_orm(_('Warning'), _('TEST ERROR')) # confirm pembayaran pembayaran.action_confirm() # set terbilang if total_bayar == 0: self.terbilang = 'nol' else: t = self.terbilang_(total_bayar) while '' in t: t.remove('') self.terbilang = ' '.join(t) self.terbilang += ' Rupiah' # set total self.total = total_bayar # raise exceptions.except_orm(_('Warning'), _('You can not delete Done state data')) else: raise exceptions.except_orm( _('Warning'), _('Can not confirm this registration, complete payment first!') )
def action_confirm(self): # check pembayaran is set or not if len(self.biaya_lines) > 0: # register siswa to res.partner if self.is_siswa_lama: # update siswa lama self.env['res.partner'].search([ ('id', '=', self.siswa_id.id) ]).write({ # 'rombels' : [(0, 0, { 'rombel_id' : self.rombel_id.id, 'tahunajaran_id' : self.tahunajaran_id.id })], # 'active_rombel_id' : self.rombel_id.id, 'is_siswa_lama': True, 'calon_siswa_id': self.id, }) else: # insert into res_partner new_siswa = self.env['res.partner'].create({ 'is_customer': 1, 'name': self.name, 'calon_siswa_id': self.id, 'street': self.street, 'street2': self.street2, 'zip': self.zip, 'city': self.city, 'state_id': self.state_id.id, 'country_id': self.country_id.id, 'phone': self.phone, 'mobile': self.mobile, 'tanggal_registrasi': self.tanggal_registrasi, 'tahunajaran_id': self.tahunajaran_id.id, 'nis': self.nis, 'panggilan': self.panggilan, 'jenis_kelamin': self.jenis_kelamin, 'tanggal_lahir': self.tanggal_lahir, 'tempat_lahir': self.tempat_lahir, 'alamat': self.alamat, 'telp': self.telp, 'ayah': self.ayah, 'pekerjaan_ayah_id': self.pekerjaan_ayah_id.id, 'telp_ayah': self.telp_ayah, 'ibu': self.ibu, 'pekerjaan_ibu_id': self.pekerjaan_ibu_id.id, 'telp_ibu': self.telp_ibu, # 'rombels' : [(0, 0, { 'rombel_id' : self.rombel_id.id, 'tahunajaran_id' : self.tahunajaran_id.id })], # 'active_rombel_id' : self.rombel_id.id, 'is_siswa': True, 'anak_ke': self.anak_ke, 'dari_bersaudara': self.dari_bersaudara }) # self.siswa_id = new_siswa.id self.registered_siswa_id = new_siswa.id # self.siswa_id = new_siswa.id # update state self.state = 'reg' # assign siswa biaya # get tahunajaran_jenjang ta_jenjang = self.env['siswa_ocb11.tahunajaran_jenjang'].search([ ('tahunajaran_id', '=', self.tahunajaran_id.id), ('jenjang_id', '=', self.jenjang_id.id) ]) # assign biaya to siswa total_biaya = 0.0 if self.is_siswa_lama: id_siswa = self.siswa_id.id else: id_siswa = new_siswa.id for by in ta_jenjang.biayas: # # cek biaya apakah is_optional dan apakah di pilih dalam biaya_lines # by_found = False # if by.biaya_id.is_optional: # for by_in_pay in self.biaya_lines: # if by.biaya_id.id == by_in_pay.biaya_id.id: # by_found = True # if not by_found: # continue if self.is_siswa_lama and by.biaya_id.is_siswa_baru_only: print('skip') continue else: print('JENJANG ID : ' + str(self.jenjang_id.id)) if by.biaya_id.is_bulanan: for bulan_index in range(1, 13): harga = by.harga if by.is_different_by_gender: if self.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create({ 'name': by.biaya_id.name + ' ' + calendar.month_name[bulan_index], 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'bulan': bulan_index, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) # create product on sales self.env['product.template'].create({ 'name': by.biaya_id.name + ' ' + calendar.month_name[bulan_index], 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'bulan': bulan_index, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id, 'type': 'service', 'list_price': harga }) total_biaya += harga else: harga = by.harga if by.is_different_by_gender: if self.jenis_kelamin == 'perempuan': harga = by.harga_alt self.env['siswa_keu_ocb11.siswa_biaya'].create({ 'name': by.biaya_id.name, 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id }) # create product on sales self.env['product.template'].create({ 'name': by.biaya_id.name, 'siswa_id': id_siswa, 'tahunajaran_id': self.tahunajaran_id.id, 'biaya_id': by.biaya_id.id, 'harga': harga, 'amount_due': harga, 'jenjang_id': self.jenjang_id.id, 'type': 'service', 'list_price': harga }) total_biaya += harga # set total_biaya dan amount_due # total_biaya = sum(by.harga for by in self.biayas) print('ID SISWA : ' + str(id_siswa)) res_partner_siswa = self.env['res.partner'].search([('id', '=', id_siswa)]) self.env['res.partner'].search([('id', '=', id_siswa)]).write({ 'total_biaya': total_biaya, 'amount_due_biaya': res_partner_siswa.amount_due_biaya + total_biaya, }) # # add pembayaran # pembayaran = self.env['siswa_keu_ocb11.pembayaran'].create({ # 'tanggal' : self.tanggal_registrasi , # 'tahunajaran_id' : self.tahunajaran_id.id, # 'siswa_id' : id_siswa, # }) # # # reset pembayaran_lines # pembayaran.pembayaran_lines.unlink() # pembayaran.total = 0 # # total_bayar = 0.0 # for pay in self.biaya_lines: # # print('Payment Lines : ') # print('harga : ' + str(pay.harga)) # print('dibayar : ' + str(pay.dibayar)) # print('biaya_id : ' + str(pay.biaya_id.id)) # # # get siswa_biaya # if pay.dibayar > 0: # jangan dimasukkan ke pembayaran untuk yang nilai dibayarnya = 0 # if pay.biaya_id: # if pay.biaya_id.is_bulanan: # pay_biaya_id = self.env['siswa_keu_ocb11.siswa_biaya'].search([ # ('siswa_id', '=', id_siswa), # ('tahunajaran_id', '=', self.tahunajaran_id.id), # ('biaya_id', '=', pay.biaya_id.id), # ('tahunajaran_id', '=', self.tahunajaran_id.id), # ('bulan', '=', pay.bulan), # ]).id # else: # pay_biaya_id = self.env['siswa_keu_ocb11.siswa_biaya'].search([ # ('siswa_id', '=', id_siswa), # ('tahunajaran_id', '=', self.tahunajaran_id.id), # ('biaya_id', '=', pay.biaya_id.id), # ('tahunajaran_id', '=', self.tahunajaran_id.id), # ]).id # # pembayaran.pembayaran_lines = [(0, 0, { # 'biaya_id' : pay_biaya_id, # 'bayar' : pay.dibayar # })] # total_bayar += pay.dibayar # # print('pay_biaya_id : ' + str(pay_biaya_id)) # print('-------------------') # # # raise exceptions.except_orm(_('Warning'), _('TEST ERROR')) # # # confirm pembayaran # pembayaran.action_confirm() # # # set terbilang # if total_bayar == 0: # self.terbilang = 'nol' # else: # t = self.terbilang_(total_bayar) # while '' in t: # t.remove('') # self.terbilang = ' '.join(t) # # self.terbilang += ' Rupiah' # # set total # self.total = total_bayar # raise exceptions.except_orm(_('Warning'), _('You can not delete Done state data')) else: raise exceptions.except_orm( _('Warning'), _('Can not confirm this registration, complete payment first!') )
def get_updated_currency(self, currency_array, main_currency, max_delta_days): """implementation of abstract method of Curreny_getter_interface""" # as of Jan 2014 BOC is publishing noon rates for about 60 currencies url = ('http://www.bankofcanada.ca/stats/assets/' 'rates_rss/noon/en_%s.xml') # closing rates are available as well (please note there are only 12 # currencies reported): # http://www.bankofcanada.ca/stats/assets/rates_rss/closing/en_%s.xml # We do not want to update the main currency if main_currency in currency_array: currency_array.remove(main_currency) import feedparser import pytz from dateutil import parser for curr in currency_array: _logger.debug("BOC currency rate service : connecting...") dom = feedparser.parse(url % curr) self.validate_cur(curr) # check if BOC service is running if dom.bozo and dom.status != 404: _logger.error("Bank of Canada - service is down - try again\ later...") # check if BOC sent a valid response for this currency if dom.status != 200: _logger.error("Exchange data for %s is not reported by Bank\ of Canada." % curr) raise except_orm( _('Error !'), _('Exchange data for %s is not ' 'reported by Bank of Canada.' % str(curr))) _logger.debug("BOC sent a valid RSS file for: " + curr) # check for valid exchange data if (dom.entries[0].cb_basecurrency == main_currency) and \ (dom.entries[0].cb_targetcurrency == curr): rate = dom.entries[0].cb_exchangerate.split('\n', 1)[0] rate_date_datetime = parser.parse(dom.entries[0].updated)\ .astimezone(pytz.utc).replace(tzinfo=None) self.check_rate_date(rate_date_datetime, max_delta_days) self.updated_currency[curr] = rate _logger.debug("BOC Rate retrieved : %s = %s %s" % (main_currency, rate, curr)) else: _logger.error("Exchange data format error for Bank of Canada -" "%s. Please check provider data format " "and/or source code." % curr) raise except_orm( _('Error !'), _('Exchange data format error for ' 'Bank of Canada - %s !' % str(curr))) return self.updated_currency, self.log_info