From 94c8f4853e9dbc0103be8e5c65d85c5abe18ac69 Mon Sep 17 00:00:00 2001 From: younes Date: Wed, 19 Nov 2025 09:50:35 +0100 Subject: [PATCH] [IMP] odex_benefit: IMP benefit --- odex25_ensan/odex_benefit/i18n/ar_001.po | 5 ----- .../odex_benefit/models/family_expense.py | 20 ++++++++++--------- .../models/family_expense_line.py | 1 - .../odex_benefit/models/service_request.py | 15 +++++++------- .../views/family_expense_view.xml | 3 ++- .../odex_benefit/views/payment_order.xml | 4 ++-- .../wizards/reason_for_return_wizard.py | 1 + 7 files changed, 24 insertions(+), 25 deletions(-) diff --git a/odex25_ensan/odex_benefit/i18n/ar_001.po b/odex25_ensan/odex_benefit/i18n/ar_001.po index b97edafed..0503034bc 100644 --- a/odex25_ensan/odex_benefit/i18n/ar_001.po +++ b/odex25_ensan/odex_benefit/i18n/ar_001.po @@ -17347,11 +17347,6 @@ msgstr "يرجى اختيار سطر رجيع واحد على الأقل للح msgid "Return Confirm" msgstr "تأكيد الرجيع" -#. module: odex_benefit -#: model:ir.model.fields,field_description:odex_benefit.field_benefit_expense_line__return_calculated -msgid "Return Already Calculated" -msgstr "تم حساب الرجيع بالفعل" - #. module: odex_benefit #: model:ir.model.fields,help:odex_benefit.field_confirm_benefit_expense__is_return_calculation msgid "" diff --git a/odex25_ensan/odex_benefit/models/family_expense.py b/odex25_ensan/odex_benefit/models/family_expense.py index 3e1c56350..51ddcc36b 100644 --- a/odex25_ensan/odex_benefit/models/family_expense.py +++ b/odex25_ensan/odex_benefit/models/family_expense.py @@ -93,7 +93,10 @@ class ConfirmBenefitExpense(models.Model): ) return_expense_line_ids = fields.One2many(comodel_name='benefit.expense.line', inverse_name='return_confirm_id', string="Selected Return Lines", - domain="[('is_return', '=', True), ('return_calculated', '=', False)]", ) + domain="[('is_return', '=', True)]", ) + line_domain_ids = fields.Many2many(comodel_name='benefit.expense.line', compute='_compute_domain_ids', + string="Return Line Domain", + ) @api.depends('payment_order_id', 'payment_order_id.state', 'move_id', 'move_id.state') def _compute_payment_move_state(self): @@ -176,7 +179,6 @@ class ConfirmBenefitExpense(models.Model): 'family_monthly_othaime': 0, })) self.benefit_expense_line_ids = lines - return_lines.write({'return_calculated': True}) def action_calculate(self): for rec in self: @@ -221,18 +223,18 @@ class ConfirmBenefitExpense(models.Model): validation_setting = self.env["family.validation.setting"].search([], limit=1) if rec.is_return_calculation: domain = [ + ('start_date', '<=', rec.end_date), + ('end_date', '>=', rec.start_date), ('is_return', '=', True), ('return_reason_id', '!=', False), - ('return_calculated', '=', False), - '|', ('return_confirm_id', '=', False), - ('return_confirm_id', '=', rec.id), - ('start_date', '>=', rec.start_date), - ('end_date', '<=', rec.end_date), ] if rec.branch_custom_ids: domain.append(('branch_id', 'in', rec.branch_custom_ids.ids)) - rec.family_domain_ids = Line.search(domain).mapped('family_id') + + return_lines = Line.search(domain) + rec.line_domain_ids = return_lines + rec.family_domain_ids = return_lines.mapped('family_id') else: # Define base domain for family selection @@ -256,6 +258,7 @@ class ConfirmBenefitExpense(models.Model): base_domain.append(('id', 'not in', conflicting_family_ids)) rec.family_domain_ids = self.env['grant.benefit'].search(base_domain) + rec.line_domain_ids = self.env['benefit.expense.line'].browse([]) @api.onchange('branch_custom_ids') def _onchange_branch_custom_ids(self): @@ -312,7 +315,6 @@ class ConfirmBenefitExpense(models.Model): self.payment_order_id.unlink() self.move_id.unlink() self.benefit_expense_line_ids.unlink() - self.return_expense_line_ids.write({'return_calculated': False}) self.state = 'draft' def action_open_related_move_records(self): diff --git a/odex25_ensan/odex_benefit/models/family_expense_line.py b/odex25_ensan/odex_benefit/models/family_expense_line.py index 8ee406463..2c533b0f3 100644 --- a/odex25_ensan/odex_benefit/models/family_expense_line.py +++ b/odex25_ensan/odex_benefit/models/family_expense_line.py @@ -28,7 +28,6 @@ class BenefitExpenseLine(models.Model): payment_order_id = fields.Many2one('payment.orders', string='Payment Order', ondelete="set null", copy=False) return_reason_id = fields.Many2one("return.reason", string="Return Reason") is_return = fields.Boolean(string="Is Returned?", default=False) - return_calculated = fields.Boolean("Return Already Calculated", default=False, copy=False) @api.depends('family_monthly_income', 'family_monthly_clotting', 'family_monthly_meals') def _compute_total_family_expenses(self): diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py index 9d9254d9a..3c3b406f4 100644 --- a/odex25_ensan/odex_benefit/models/service_request.py +++ b/odex25_ensan/odex_benefit/models/service_request.py @@ -124,8 +124,7 @@ class ServiceRequest(models.Model): payment_order_ids = fields.Many2many(comodel_name='payment.orders', relation='service_request_payment_order_rel', column1='service_request_id', column2='payment_order_id', string='Payment Orders', copy=False, ) - payment_order_id = fields.Many2one('payment.orders', compute='_compute_payment_order', string='Payment Order', - copy=False, store=True) + payment_order_id = fields.Many2one('payment.orders', string='Payment Order', copy=False) payment_order_count = fields.Integer(compute='_compute_payment_order', string='Number of Payment Orders') is_payment_order_done = fields.Boolean(string='Is Payment Order Done?') aid_amount = fields.Float(string='Aid Amount', compute='_get_aid_amount') @@ -232,10 +231,8 @@ class ServiceRequest(models.Model): def _compute_payment_order(self): for rec in self: if rec.payment_order_ids: - rec.payment_order_id = rec.payment_order_ids.sorted('payment_order_date', reverse=True)[0] rec.payment_order_count = len(rec.payment_order_ids) else: - rec.payment_order_id = False rec.payment_order_count = 0 @api.depends('payment_order_id', 'payment_order_id.state', 'vendor_bill', 'vendor_bill.state') @@ -246,7 +243,8 @@ class ServiceRequest(models.Model): if rec.payment_order_id.state == "done": payment_order_state = "done" rec.service_approval_date = fields.Datetime.now() - rec.state = 'send_request_to_supplier' + if rec.state == 'accounting_approve': + rec.state = 'send_request_to_supplier' rec.is_payment_order_done = True else: payment_order_state = "waiting" @@ -1035,9 +1033,11 @@ class ServiceRequest(models.Model): ) % cat_names) if service_cats.payment_method == "payment_order": - # todo ask about this condition and seasonal services invalid_records = self.filtered( - lambda r: r.state != 'accounting_approve') + lambda r: r.state != 'accounting_approve' + or r.payment_order_state != 'none' + or r.payment_order_id + ) if invalid_records: names = ", ".join(invalid_records.mapped('name')) @@ -1057,6 +1057,7 @@ class ServiceRequest(models.Model): }) self.write({ 'payment_order_ids': [(4, payment_order.id)], + 'payment_order_id': payment_order.id, }) elif service_cats.payment_method == "invoice": diff --git a/odex25_ensan/odex_benefit/views/family_expense_view.xml b/odex25_ensan/odex_benefit/views/family_expense_view.xml index 6d22fd4f5..87a566fd8 100644 --- a/odex25_ensan/odex_benefit/views/family_expense_view.xml +++ b/odex25_ensan/odex_benefit/views/family_expense_view.xml @@ -140,6 +140,7 @@ + @@ -353,7 +354,7 @@ - diff --git a/odex25_ensan/odex_benefit/views/payment_order.xml b/odex25_ensan/odex_benefit/views/payment_order.xml index 79fa47dad..0c64a0390 100644 --- a/odex25_ensan/odex_benefit/views/payment_order.xml +++ b/odex25_ensan/odex_benefit/views/payment_order.xml @@ -102,7 +102,7 @@ type="object" string="Bank Return" class="btn btn-danger" - attrs="{'invisible': ['|',('return_reason_id', '!=', False),('parent.state', '!=', 'done')]}" + attrs="{'invisible': ['|',('state', '!=', 'accounting_approve'),('parent.state', '!=', 'waiting_deposit')]}" /> @@ -143,7 +143,7 @@ type="object" string="Bank Return" class="btn btn-danger" - attrs="{'invisible': ['|',('is_return', '=', True),('parent.state', '!=', 'done')]}" + attrs="{'invisible': ['|',('is_return', '=', True),('parent.state', '!=', 'waiting_deposit')]}" /> diff --git a/odex25_ensan/odex_benefit/wizards/reason_for_return_wizard.py b/odex25_ensan/odex_benefit/wizards/reason_for_return_wizard.py index ce459a2ea..ab309f447 100644 --- a/odex25_ensan/odex_benefit/wizards/reason_for_return_wizard.py +++ b/odex25_ensan/odex_benefit/wizards/reason_for_return_wizard.py @@ -32,5 +32,6 @@ class ReturnReasonWizard(models.TransientModel): record.is_return = True if self.line_model == "service.request" and hasattr(record, "state"): record.state = "return_to_bank" + record.payment_order_id = False return {'type': 'ir.actions.act_window_close'} \ No newline at end of file