示例#1
0
 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'}
示例#2
0
文件: hr_loan.py 项目: rouag/orvea
    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