def action_across_month(self): loan_id = self._context.get('active_id', False) loan_obj = self.env['hr.loan'] loan_line_obj = self.env['hr.loan.line'] action = self._context.get('action', False) dt = fields.Date.from_string(self.period_id.date_start) day = dt.day if loan_id: if action == 'across': # تجاوز شهر # must delete this month add another month loan_lines = loan_line_obj.search([ ('loan_id', '=', loan_id), ('date_start', '=', self.period_id.date_start), ('date_stop', '=', self.period_id.date_stop) ]) loan_lines.unlink() um = HijriDate() loan = loan_obj.search([('id', '=', loan_id)]) last_date_start = fields.Date.from_string( loan.line_ids[-1].date_start) last_date_stop = fields.Date.from_string( loan.line_ids[-1].date_stop) temp_date_start = last_date_stop + relativedelta(days=1) hijri_month = get_hijri_month_by_date(HijriDate, Umalqurra, temp_date_start) hijri_year = get_hijri_year_by_date(HijriDate, Umalqurra, temp_date_start) new_date_start = get_hijri_month_start_by_year( HijriDate, Umalqurra, hijri_year, hijri_month) new_date_stop = get_hijri_month_end__by_year( HijriDate, Umalqurra, hijri_year, hijri_month) dates = str(new_date_start).split('-') um.set_date_from_gr(int(dates[0]), int(dates[1]), day) new_line_val = { 'loan_id': loan_id, 'amount': loan.monthly_amount, 'date_start': new_date_start, 'date_stop': new_date_stop, 'name': MONTHS[int(um.month)] + '/' + str(int(um.year)), } loan_line_obj.create(new_line_val) val = { 'loan_id': loan_id, 'reason': self.reason, 'period_id': self.period_id.id, 'number_decision': self.number_decision, 'date_decision': self.date_decision, 'action': action, } if action == 'full_amount': loan = self.env['hr.loan'].browse(loan_id) loan.write({'state': 'done', 'payment_full_amount': True}) # make all line payed loan.line_ids.write({'state': 'done'}) self.env['hr.loan.history'].create(val) return {'type': 'ir.actions.act_window_close'}
def _onchange_date(self): # لا يمكن أن يكون القسط أكبر من ثلث الراتب grid_id, basic_salary = self.employee_id.get_salary_grid_id(False) if not grid_id: return if self.monthly_amount > basic_salary / 3.0: warning = { 'title': _('تحذير!'), 'message': _(u'لا يمكن أن يكون القسط (%s) أكبر من ثلث الراتب (%s)' % (self.monthly_amount, basic_salary / 3.0)) } self.monthly_amount = False return {'warning': warning} if self.date_from and self.amount and self.monthly_amount: # get lines dt = fields.Date.from_string(self.date_from) months = [] amount = 0.0 diff = self.amount - amount installment_number = 0 final_amount = self.monthly_amount while diff > 0: um = HijriDate() dates = str(dt).split('-') um.set_date_from_gr(int(dates[0]), int(dates[1]), int(dates[2])) date_start = get_hijri_month_start_by_year( HijriDate, Umalqurra, int(um.year), int(um.month)) date_stop = get_hijri_month_end__by_year( HijriDate, Umalqurra, int(um.year), int(um.month)) month_val = { 'loan_id': self.id, 'amount': final_amount, 'date_start': date_start, 'date_stop': date_stop, 'name': MONTHS[int(um.month)] + '/' + str(int(um.year)), 'state': 'progress' } months.append(month_val) dt = fields.Date.from_string(str(dt)) + relativedelta(days=30) installment_number += 1 amount += self.monthly_amount diff = self.amount - amount if diff >= self.monthly_amount: final_amount = self.monthly_amount else: final_amount = diff self.installment_number = installment_number self.line_ids = months self.date_to = date_stop