diff --git a/odex25_hr/hr_training_payment/models/hr_official_mission.py b/odex25_hr/hr_training_payment/models/hr_official_mission.py index 84a9a62e9..c9aca8245 100644 --- a/odex25_hr/hr_training_payment/models/hr_official_mission.py +++ b/odex25_hr/hr_training_payment/models/hr_official_mission.py @@ -11,15 +11,86 @@ class HrOfficialMission(models.Model): purchase_request_id = fields.Many2one(comodel_name='purchase.request', string="Purchase Request") - - def approve(self): # check if there is dealing with financial + self.employee_ids.chick_not_overtime() + if self.employee_ids and self.mission_type.related_with_financial: + # move amounts to journal entries + if self.move_type == 'accounting': + if self.mission_type.account_id and self.mission_type.journal_id: + for item in self.employee_ids: + if item.amount > 0.0: + debit_line_vals = { + 'name': item.employee_id.name + ' in official mission "%s" ' % self.mission_type.name, + 'debit': item.amount, + 'account_id': self.mission_type.account_id.id, + 'partner_id': item.employee_id.user_id.partner_id.id + } + credit_line_vals = { + 'name': item.employee_id.name + ' in official mission "%s" ' % self.mission_type.name, + 'credit': item.amount, + 'account_id': self.mission_type.journal_id.default_account_id.id, + 'partner_id': item.employee_id.user_id.partner_id.id + } + if not item.account_move_id: + move = self.env['account.move'].create({ + 'state': 'draft', + 'journal_id': self.mission_type.journal_id.id, + 'date': date.today(), + 'ref': 'Official mission for employee "%s" ' % item.employee_id.name, + 'line_ids': [(0, 0, debit_line_vals), (0, 0, credit_line_vals)], + 'res_model': 'hr.official.mission', + 'res_id': self.id + }) + # fill account move for each employee + item.write({'account_move_id': move.id}) + else: + raise exceptions.Warning( + _('You do not have account or journal in mission type "%s" ') % self.mission_type.name) - if self.mission_type.work_state == 'training': - self.employee_ids.chick_not_overtime() + # move amounts to advantages of employee in contract + elif self.move_type == 'payroll': + # get start and end date of the current month + current_date = date.today() + month_start = date(current_date.year, current_date.month, 1) + month_end = date(current_date.year, current_date.month, calendar.mdays[current_date.month]) + for line in self.employee_ids: + if line.sudo().employee_id.contract_id: - if self.Training_cost > 0.0: + advantage_arc = line.env['contract.advantage'].create({ + 'benefits_discounts': self.official_mission.id, + 'date_from': month_start, + 'date_to': month_end, + 'amount': line.amount, + 'official_mission_id': True, + 'employee_id': line.employee_id.id, + 'contract_advantage_id': line.sudo().employee_id.contract_id.id, + 'out_rule': True, + 'state': 'confirm', + 'comments': self.mission_purpose}) + line.advantage_id = advantage_arc.id + else: + raise exceptions.Warning(_( + 'Employee "%s" has no contract Please create contract to add line to advantages') + % line.employee_id.name) + + for item in self: + # create ticket request from all employee + if item.issuing_ticket == 'yes': + for emp in item.employee_ids: + ticket = self.env['hr.ticket.request'].create({ + 'employee_id': emp.employee_id.id, + 'mission_request_id': item.id, + 'mission_check': True, + 'request_for': item.ticket_cash_request_for, + 'request_type': item.ticket_cash_request_type.id, + 'cost_of_tickets': item.get_ticket_cost(emp.employee_id), + 'destination': item.destination.id, + }) + item.write({'ticket_request_id': ticket.id}) + + # move invoice training cost our trining center + if item.Training_cost > 0: if not self.mission_type.pr_product_id.id: raise ValidationError(_("You must Enter Purchase Product in Training Type Configuration")) @@ -41,17 +112,15 @@ class HrOfficialMission(models.Model): }) self.purchase_request_id = purchase_request.id - self.state = "approve" - if self.mission_type.work_state and self.mission_type.duration_type == 'days': - for emp in self.employee_ids: - if emp.date_to >= fields.Date.today() >= emp.date_from: - emp.employee_id.write( - {'work_state': self.mission_type.work_state, 'active_mission_id': emp.id}) - self.call_cron_function() - else: - res = super(HrOfficialMission, self).approve() - return res + self.state = "approve" + if self.mission_type.work_state and self.mission_type.duration_type == 'days': + for emp in self.employee_ids: + if emp.date_to >= fields.Date.today() >= emp.date_from: + emp.employee_id.write({'work_state': self.mission_type.work_state, 'active_mission_id': emp.id}) + self.call_cron_function() + +