diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po index 3b140d098..7806608af 100644 --- a/odex25_benefit/odex_benefit/i18n/ar_001.po +++ b/odex25_benefit/odex_benefit/i18n/ar_001.po @@ -2752,6 +2752,7 @@ msgstr "بإمكانه النشر " #: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_visit_skip_otp_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.visit_location_otp_wizard_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resume_reason_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_visit_location_refusal_reason_wizard_form msgid "Cancel" msgstr "إلغاء" @@ -8724,6 +8725,7 @@ msgstr "جوار السكن" #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__comment #: model:ir.model.fields,field_description:odex_benefit.field_service_attachments_settings__notes #: model:ir.model.fields,field_description:odex_benefit.field_visit_location_refusal_reason_wizard__refusal_notes +#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resume_reason_wizard_form msgid "Notes" msgstr "الملاحظات" @@ -10888,6 +10890,7 @@ msgstr "الخدمة الفرعية" #: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_member_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_member_reason_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resume_reason_wizard_form msgid "Submit" msgstr "إرسال" @@ -10983,6 +10986,18 @@ msgstr "رابط الاستبيان" msgid "Suspend" msgstr "إيقاف نهائي" +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +msgid "Suspend" +msgstr "إيقاف" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +msgid "Resume" +msgstr "الإعادة للخدمة" + #. module: odex_benefit #: model:ir.model,name:odex_benefit.model_suspend_reason msgid "Suspend - Reason" @@ -13290,6 +13305,7 @@ msgstr "خريطة جوجال" #: model_terms:ir.ui.view,arch_db:odex_benefit.view_exception_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_member_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_member_reason_wizard_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resume_reason_wizard_form #: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form msgid "or" msgstr "أو" @@ -14638,6 +14654,12 @@ msgstr "سبب الإرجاع" msgid "Return Reason" msgstr "سبب إرجاع البنك" +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_family_member__resume_reason_id +#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__resume_reason_id +msgid "Return Reason" +msgstr "سبب الإعادة" + #. module: odex_benefit #: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_return_reason_wizard_form msgid "Retrun" @@ -17750,4 +17772,114 @@ msgstr "التزامات الأم" #. module: odex_benefit #: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form msgid "Deduct from Mother Income" -msgstr "يتم الخصم من دخل الأم" \ No newline at end of file +msgstr "يتم الخصم من دخل الأم" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__action_type__resume_from_temporary +#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__action_type__resume_from_temporary +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume from Temporary Suspension" +msgstr "إعادة من الإيقاف المؤقت" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__action_type__resume_from_final +#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__action_type__resume_from_final +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume from Final Suspension" +msgstr "إعادة من الإيقاف النهائي" + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_family_member__resume_date +#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__resume_date +msgid "Return Date" +msgstr "تاريخ الإعادة" + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_family_member__resume_notes +#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__resume_notes +msgid "Return Notes" +msgstr "ملاحظات الإعادة" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/benefit.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "Resume Reason Wizard" +msgstr "سبب الإعادة" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/benefit.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"Final suspension cannot be executed until after the specified final " +"suspension date." +msgstr "لا يمكن تنفيذ الإيقاف النهائي حتى بعد تاريخ الإيقاف النهائي المحدد." + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_suspend_reason__is_resume_reason +msgid "Resume Reason" +msgstr "سبب الإعادة" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume Approval by Operations Head" +msgstr "اعتماد رئيس العمليات للإعادة" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume Approval by Branch Manager" +msgstr "اعتماد مدير الفرع للإعادة" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume Approval by Family Services Manager" +msgstr "اعتماد مديرة خدمات المستفيدين للإعادة" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Resume Family Service" +msgstr "إعادة الأسرة للخدمة" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Final Suspension" +msgstr "الإيقاف النهائي" + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form +#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form +msgid "Reject Resume" +msgstr "رفض الإعادة" + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_suspend_reason_wizard__resume_date +msgid "Resume Date" +msgstr "تاريخ الإعادة" + +#. module: odex_benefit +#: code:addons/odex_benefit/wizards/suspend_reason_wizard.py:0 +#, python-format +msgid "No family record found." +msgstr "لم يتم العثور على سجل الأسرة." + +#. module: odex_benefit +#: code:addons/odex_benefit/wizards/suspend_reason_wizard.py:0 +#, python-format +msgid "No member record found." +msgstr "لم يتم العثور على سجل الفرد." + +#. module: odex_benefit +#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resume_reason_wizard_form +msgid "Reason for return" +msgstr "سبب الإعادة" + + + + + diff --git a/odex25_benefit/odex_benefit/models/benefit.py b/odex25_benefit/odex_benefit/models/benefit.py index f75b4fda0..546f90687 100644 --- a/odex25_benefit/odex_benefit/models/benefit.py +++ b/odex25_benefit/odex_benefit/models/benefit.py @@ -608,6 +608,8 @@ class GrantBenefitProfile(models.Model): ('edit_info', 'Edit Information'), ('approved', 'Approved'), ('suspended', 'Suspended'), + ('resume_from_temporary', 'Resume from Temporary Suspension'), + ('resume_from_final', 'Resume from Final Suspension'), ('exception', 'Exception'), ], string='Action Type', default='new', tracking=True) contact_type = fields.Selection([ @@ -626,6 +628,11 @@ class GrantBenefitProfile(models.Model): total_mother_families = fields.Integer(string="Mother Families", compute='_compute_total_families') total_replacement_mother_families = fields.Integer(string="Replacement Mother Families", compute='_compute_total_families') final_suspend_date = fields.Date(string="Final Suspend Date") + resume_reason_id = fields.Many2one('suspend.reason', string='Return Reason') + resume_date = fields.Date(string="Return Date") + resume_notes = fields.Text(string="Return Notes") + + _sql_constraints = [ ('unique_code', "unique (code) WHERE state NOT IN ('draft', 'new')", 'This code already exists') @@ -1683,10 +1690,28 @@ class GrantBenefitProfile(models.Model): 'target': 'new', } + def action_resume_family(self): + ctx = dict(self.env.context or {}) + ctx['resume_family'] = True + return { + 'name': _('Resume Reason Wizard'), + 'view_mode': 'form', + 'view_type': 'form', + 'type': 'ir.actions.act_window', + 'res_model': 'suspend.reason.wizard', + 'view_id': self.env.ref('odex_benefit.view_resume_reason_wizard_form').id, + 'target': 'new', + 'context': ctx, + } + def action_suspend_first_accept(self): for rec in self: rec.state = 'first_approve' + def action_resume_first_accept(self): + for rec in self: + rec.state = 'first_approve' + def action_suspend_second_accept(self): for rec in self: rec.action_type = 'suspended' @@ -1697,6 +1722,14 @@ class GrantBenefitProfile(models.Model): else: rec.state = 'suspended_second_approve' + def action_resume_second_accept(self): + for rec in self: + if rec.suspend_reason.need_service_manager_approval: + rec.state = 'family_services_manager' + else: + rec.state = 'second_approve' + rec.action_type = 'approved' + def action_suspend_third_accept(self): for rec in self: if rec.suspend_reason.suspend_type == 'temporarily_suspend': @@ -1704,6 +1737,22 @@ class GrantBenefitProfile(models.Model): else: rec.state = 'suspended_second_approve' + def action_resume_third_accept(self): + for rec in self: + rec.state = 'second_approve' + rec.action_type = 'approved' + + def action_final_suspend(self): + today = fields.Date.today() + for rec in self: + if rec.final_suspend_date and today >= rec.final_suspend_date: + rec.write({ + 'state': 'suspended_second_approve', + 'suspend_type': 'suspend', + }) + else: + raise UserError(_("Final suspension cannot be executed until after the specified final suspension date.")) + def action_auto_suspend(self): # Fetch grants in second approval state that are not excluded from suspension grants = self.env["grant.benefit"].search( @@ -1743,6 +1792,14 @@ class GrantBenefitProfile(models.Model): rec.action_type = 'approved' rec.get_member_income() + def action_reject_resume(self): + for rec in self: + if rec.action_type == 'resume_from_temporary': + rec.state = 'temporary_suspended' + elif rec.action_type == 'resume_from_final': + rec.state = 'suspended_second_approve' + rec.action_type = 'suspended' + #Excption Work flow def action_exception(self): return { diff --git a/odex25_benefit/odex_benefit/models/benefit_config.py b/odex25_benefit/odex_benefit/models/benefit_config.py index 9f6b14790..3339994f8 100644 --- a/odex25_benefit/odex_benefit/models/benefit_config.py +++ b/odex25_benefit/odex_benefit/models/benefit_config.py @@ -723,6 +723,7 @@ class SuspendReason(models.Model): is_stop_reason = fields.Boolean(string="Stop Reason",default=False) is_reject_reason = fields.Boolean(string="Reject Reason",default=False) is_return_reason = fields.Boolean(string="Return Reason",default=False) + is_resume_reason = fields.Boolean(string="Resume Reason", default=False) is_family_return_reason = fields.Boolean(string="Family Return Reason",default=False) is_incomplete_visit_reason = fields.Boolean(string="Incomplete Visit Reason",default=False) active = fields.Boolean(default=True) diff --git a/odex25_benefit/odex_benefit/models/family_members.py b/odex25_benefit/odex_benefit/models/family_members.py index 526b36411..a7bea4e46 100644 --- a/odex25_benefit/odex_benefit/models/family_members.py +++ b/odex25_benefit/odex_benefit/models/family_members.py @@ -239,6 +239,8 @@ class FamilyMemberProfile(models.Model): ('edit_info', 'Edit Information'), ('approved', 'Approved'), ('suspended', 'Suspended'), + ('resume_from_temporary', 'Resume from Temporary Suspension'), + ('resume_from_final', 'Resume from Final Suspension'), ('exception', 'Exception'), ], string='Action Type', default='new', tracking=True) member_status = fields.Selection(selection=[ @@ -276,6 +278,9 @@ class FamilyMemberProfile(models.Model): non_benefit_reason = fields.Text(string="Non Benefit Reason", tracking=True) final_suspend_date = fields.Date(string="Final Suspend Date") active = fields.Boolean(string='Active', default=True) + resume_reason_id = fields.Many2one('suspend.reason', string='Return Reason') + resume_date = fields.Date(string="Return Date") + resume_notes = fields.Text(string="Return Notes") # def create(self, vals): # for line_vals in vals: @@ -828,10 +833,39 @@ class FamilyMemberProfile(models.Model): 'target': 'new', } + def action_resume_member(self): + ctx = dict(self.env.context or {}) + ctx['resume_family'] = True + return { + 'name': _('Resume Reason Wizard'), + 'view_mode': 'form', + 'view_type': 'form', + 'type': 'ir.actions.act_window', + 'res_model': 'suspend.reason.wizard', + 'view_id': self.env.ref('odex_benefit.view_resume_reason_wizard_form').id, + 'target': 'new', + 'context': ctx, + } + + def action_final_suspend(self): + today = fields.Date.today() + for rec in self: + if rec.final_suspend_date and today >= rec.final_suspend_date: + rec.write({ + 'state': 'suspended_second_approve', + 'suspend_type': 'suspend', + }) + else: + raise UserError(_("Final suspension cannot be executed until after the specified final suspension date.")) + def action_suspend_first_accept(self): for rec in self: rec.state_a = 'first_approve' + def action_resume_first_accept(self): + for rec in self: + rec.state_a = 'first_approve' + def action_suspend_second_accept(self): for rec in self: if rec.suspend_reason.need_service_manager_approval: @@ -841,6 +875,14 @@ class FamilyMemberProfile(models.Model): else: rec.state_a = 'suspended_second_approve' + def action_resume_second_accept(self): + for rec in self: + if rec.suspend_reason.need_service_manager_approval: + rec.state_a = 'family_services_manager' + else: + rec.state_a = 'second_approve' + rec.action_type = 'approved' + def action_suspend_third_accept(self): for rec in self: if rec.suspend_reason.suspend_type == 'temporarily_suspend': @@ -848,11 +890,24 @@ class FamilyMemberProfile(models.Model): else: rec.state_a = 'suspended_second_approve' + def action_resume_third_accept(self): + for rec in self: + rec.state_a = 'second_approve' + rec.action_type = 'approved' + def action_suspend_refuse(self): for rec in self: rec.state_a = 'second_approve' rec.is_member_workflow = False + def action_reject_resume(self): + for rec in self: + if rec.action_type == 'resume_from_temporary': + rec.state = 'temporary_suspended' + elif rec.action_type == 'resume_from_final': + rec.state = 'suspended_second_approve' + rec.action_type = 'suspended' + # Excption Work flow def action_exception(self): for rec in self: diff --git a/odex25_benefit/odex_benefit/models/seasonal_service.py b/odex25_benefit/odex_benefit/models/seasonal_service.py index f36fdd84b..d055db968 100644 --- a/odex25_benefit/odex_benefit/models/seasonal_service.py +++ b/odex25_benefit/odex_benefit/models/seasonal_service.py @@ -247,7 +247,7 @@ class SeasonalService(models.Model): 'price_unit': request.requested_service_amount, }) line_ids.append(invoice_line) - vendor_bill = self.env['account.move'].create({ + vendor_bill = self.env['account.move'].sudo().create({ 'move_type': 'in_invoice', 'partner_id': rec.service_type_id.service_producer_id.id, 'journal_id': validation_setting.journal_id.id, diff --git a/odex25_benefit/odex_benefit/views/benefit_config_view.xml b/odex25_benefit/odex_benefit/views/benefit_config_view.xml index 95b083c69..0956492cf 100644 --- a/odex25_benefit/odex_benefit/views/benefit_config_view.xml +++ b/odex25_benefit/odex_benefit/views/benefit_config_view.xml @@ -943,10 +943,11 @@ + + attrs="{'invisible': [('is_stop_reason','=',False),('is_resume_reason','=',False)]}"/> + diff --git a/odex25_benefit/odex_benefit/views/benefit_view.xml b/odex25_benefit/odex_benefit/views/benefit_view.xml index 07c2c216a..718837817 100644 --- a/odex25_benefit/odex_benefit/views/benefit_view.xml +++ b/odex25_benefit/odex_benefit/views/benefit_view.xml @@ -431,6 +431,32 @@ string="Third Approve" class="oe_highlight" groups="odex_benefit.group_benefit_manager" attrs="{'invisible': ['|',('action_type','!=','suspended'),('state', 'not in', ['family_services_manager'])]}"/> + +