From 4f95de969d70760efc728745536bb18bc7bc52b7 Mon Sep 17 00:00:00 2001 From: younes Date: Tue, 9 Dec 2025 13:42:40 +0100 Subject: [PATCH] [IMP] odex_benefit: IMP benefit --- .../odex_benefit/models/family_expense.py | 85 +++++++++++++------ .../odex_benefit/security/ir.model.access.csv | 3 +- .../odex_benefit/views/actions_and_menus.xml | 2 + .../views/family_expense_view.xml | 35 ++++++-- .../wizards/reason_for_return_wizard.py | 30 ++++++- .../odex_benefit/wizards/researcher_wizard.py | 33 +++++++ .../wizards/researcher_wizard.xml | 33 +++++-- 7 files changed, 182 insertions(+), 39 deletions(-) diff --git a/odex25_benefit/odex_benefit/models/family_expense.py b/odex25_benefit/odex_benefit/models/family_expense.py index e998c439e..932d95d16 100644 --- a/odex25_benefit/odex_benefit/models/family_expense.py +++ b/odex25_benefit/odex_benefit/models/family_expense.py @@ -30,6 +30,7 @@ class ConfirmBenefitExpense(models.Model): default=lambda x: _('New')) state = fields.Selection(selection=[ ('draft', 'Draft'), + ('waiting_processing', 'Waiting for Processing'), ('calculated', 'Calculated'), ('assistant_general_manager', 'Waiting For The Assistant General Manager'), ('accounting_approve', 'Accounting Approve'), @@ -55,7 +56,7 @@ class ConfirmBenefitExpense(models.Model): cloth_expense = fields.Boolean(string='Include Clothing Expense', default=True, states={'confirm': [('readonly', True)]}) payment_order_id = fields.Many2one('payment.orders', string='Payment Order', ondelete="set null", copy=False) - move_id = fields.Many2one('account.move', ondelete='cascade') + move_id = fields.Many2one('account.move') available_payment_method_line_ids = fields.Many2many(comodel_name='account.payment.method.line') family_monthly_income = fields.Float(string="Total Monthly Income", compute='_get_family_monthly_values', store=True) @@ -98,6 +99,7 @@ class ConfirmBenefitExpense(models.Model): line_domain_ids = fields.Many2many(comodel_name='benefit.expense.line', compute='_compute_domain_ids', string="Return Line Domain", ) + assigned_supervisor_id = fields.Many2one('hr.employee',string='Assigned Supervisor',tracking=True,copy=False) @api.depends('payment_order_id', 'payment_order_id.state', 'move_id', 'move_id.state') def _compute_payment_move_state(self): @@ -321,7 +323,8 @@ class ConfirmBenefitExpense(models.Model): self.state = 'assistant_general_manager' def action_accounting_approve(self): - self.state = 'accounting_approve' + self.sudo().action_accounting_transfer() + self.sudo().state = 'accounting_approve' def action_cancel(self): self.state = 'cancel' @@ -332,6 +335,39 @@ class ConfirmBenefitExpense(models.Model): self.benefit_expense_line_ids.unlink() self.state = 'draft' + def action_reset_to_calculated(self): + self.ensure_one() + return { + 'name': _('Reason for Return'), + 'type': 'ir.actions.act_window', + 'res_model': 'reason.for.return.wizard', + 'view_mode': 'form', + 'target': 'new', + } + + def action_assign_supervisor(self): + self.ensure_one() + return { + 'name': _('Assign to Supervisor'), + 'type': 'ir.actions.act_window', + 'res_model': 'assign.supervisor.wizard', + 'view_mode': 'form', + 'target': 'new', + } + + def action_process_return(self): + self.ensure_one() + if self.state != 'waiting_processing': + raise UserError(_("You can only process when status is 'Waiting for Processing'.")) + + self.message_post( + body=_('Processing Completed
Processed By: %s') % self.env.user.name, + subject=_('Return Processing Completed'), + message_type='notification', + ) + + self.state = 'calculated' + def action_open_related_move_records(self): moves = self.move_id.ids return { @@ -392,29 +428,30 @@ class ConfirmBenefitExpense(models.Model): # Create Vendor Bill for Meal Card Invoice(othaime) account_id = validation_setting.meal_expense_account_id invoice_lines = [] - for line in lines.filtered(lambda l: l.meal_card): - family = line.family_id - invoice_lines.append((0, 0, { - 'name': f'{family.name}/{family.code}', - 'account_id': account_id.id, - 'quantity': 1, - 'benefit_family_id': family.id, - 'price_unit': line.family_monthly_othaime, + if lines.filtered(lambda l: l.meal_card): + for line in lines.filtered(lambda l: l.meal_card): + family = line.family_id + invoice_lines.append((0, 0, { + 'name': f'{family.name}/{family.code}', + 'account_id': account_id.id, + 'quantity': 1, + 'benefit_family_id': family.id, + 'price_unit': line.family_monthly_othaime, + 'family_confirm_id': rec.id, + 'analytic_account_id': family.branch_family_id.branch.analytic_account_id.id + })) + invoice_vals = { + 'move_type': 'in_invoice', + 'partner_id': validation_setting.meal_partner_id.id, + 'invoice_date': rec.date, 'family_confirm_id': rec.id, - 'analytic_account_id': family.branch_family_id.branch.analytic_account_id.id - })) - invoice_vals = { - 'move_type': 'in_invoice', - 'partner_id': validation_setting.meal_partner_id.id, - 'invoice_date': rec.date, - 'family_confirm_id': rec.id, - 'benefit_family_ids': [(6, 0, rec.benefit_expense_line_ids.mapped('family_id').ids)], - 'journal_id': validation_setting.journal_id.id, - 'invoice_line_ids': invoice_lines, - 'ref': rec.name, - } + 'benefit_family_ids': [(6, 0, rec.benefit_expense_line_ids.mapped('family_id').ids)], + 'journal_id': validation_setting.journal_id.id, + 'invoice_line_ids': invoice_lines, + 'ref': rec.name, + } - invoice = self.env['account.move'].create(invoice_vals) - rec.move_id = invoice + invoice = self.env['account.move'].create(invoice_vals) + rec.move_id = invoice return True diff --git a/odex25_benefit/odex_benefit/security/ir.model.access.csv b/odex25_benefit/odex_benefit/security/ir.model.access.csv index af52f06f8..e74391af9 100644 --- a/odex25_benefit/odex_benefit/security/ir.model.access.csv +++ b/odex25_benefit/odex_benefit/security/ir.model.access.csv @@ -171,4 +171,5 @@ access_expense_line_benefit_manager,access_expense_line_benefit_manager,model_be access_expense_researcher,access_expense_researcher,model_benefit_expense_line,odex_benefit.group_benefit_info,1,0,0,0 access_family_bank_report_wizard,access_family_bank_report_wizard,model_family_bank_report_wizard,base.group_user,1,1,1,1 access_return_reason,access_return_reason,model_return_reason,base.group_user,1,1,1,1 -access_return_reason_wizard,access_return_reason_wizard,model_return_reason_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_return_reason_wizard,access_return_reason_wizard,model_return_reason_wizard,base.group_user,1,1,1,1 +access_assign_supervisor_wizard,access_assign_supervisor_wizard,model_assign_supervisor_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/odex25_benefit/odex_benefit/views/actions_and_menus.xml b/odex25_benefit/odex_benefit/views/actions_and_menus.xml index f2b584924..fc47762d3 100644 --- a/odex25_benefit/odex_benefit/views/actions_and_menus.xml +++ b/odex25_benefit/odex_benefit/views/actions_and_menus.xml @@ -1066,6 +1066,8 @@ parent="education_main_menu" action="education_exam_type_action" sequence="9"/> + +