Ejemplo n.º 1
0
    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.'))
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
 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.'))
Ejemplo n.º 5
0
 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.'))
Ejemplo n.º 8
0
 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()
Ejemplo n.º 9
0
    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!'))
Ejemplo n.º 10
0
    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!')
            )
Ejemplo n.º 11
0
    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!')
            )
Ejemplo n.º 12
0
    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