From e70045fecc018c086e6e8dd52d6bf2c4359d12b8 Mon Sep 17 00:00:00 2001 From: younes Date: Tue, 30 Sep 2025 08:29:43 +0100 Subject: [PATCH] IMP benefit --- odex25_ensan/odex_benefit/i18n/ar_001.po | 151 +++++++++- .../odex_benefit/models/family_members.py | 260 +++++++++++------- .../odex_benefit/views/benefit_view.xml | 5 + .../odex_benefit/views/family_members.xml | 4 +- 4 files changed, 306 insertions(+), 114 deletions(-) diff --git a/odex25_ensan/odex_benefit/i18n/ar_001.po b/odex25_ensan/odex_benefit/i18n/ar_001.po index 4d634e4ad..7781ebd93 100644 --- a/odex25_ensan/odex_benefit/i18n/ar_001.po +++ b/odex25_ensan/odex_benefit/i18n/ar_001.po @@ -7830,13 +7830,6 @@ msgstr "" msgid "Marital Status" msgstr "الحالة الاجتماعية" -#. module: odex_benefit -#: code:addons/odex_benefit/models/benefit.py:0 -#: code:addons/odex_benefit/models/family_members.py:0 -#, python-format -msgid "Married" -msgstr "متزوجة" - #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__associations_line__support_type__material #: model:ir.model.fields.selection,name:odex_benefit.selection__food_basket_line__donation_type__material @@ -15806,3 +15799,147 @@ msgstr "طريقة الحد الأقصى" #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__needs_beneficiary_manager_approval msgid "Needs Beneficiary Manager Approval" msgstr "هل تحتاج موافقة مدير المستفيدين؟" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "Mother has no benefiting children" +msgstr "ليس لديها ايتام قصر" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"The application has been rejected due to missing required documents, lack of" +" official proofs, or the family's ineligibility for the association's " +"services." +msgstr "تم رفض الطلب بسبب عدم استكمال المستندات المطلوبة أو الإثباتات الرسمية أو لعدم استحقاق الأسرة لخدمات الجمعية." + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"He/She has a physical or intellectual disability but is over 30 years of " +"age." +msgstr "لدية اعاقة حسدية او فكرية ولكن تجاوز عمر 30" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"He/She is enrolled in a scientific or vocational specialization but is over " +"24 years of age." +msgstr "منتظم في احدي التخصصات العلمية او المهنية ولكن تجاوز عمر 24" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"He/She is enrolled in a medical specialization but is over 26 years of age." +msgstr "منتظم في احدي التخصصات الطبية ولكن تجاوز عمر 26" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"He/She is over 18 years of age and not enrolled in a scientific or medical " +"specialization." +msgstr "تجاوز عمر 18 وليس منتظم في تخصص علمي او طبي" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"She is over 18 years of age and not enrolled in any educational institution." +msgstr "تجاوز عمر 18 وغير منتظمة بجهة تعلمية" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "He/She is employed with a salary exceeding 4,000." +msgstr "يعمل براتب اكبر من 4000 " + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"He/She is over 18 years of age and not enrolled in an educational " +"institution." +msgstr "تجاوز عمر 18 وغير منتظم بجهة تعلمية" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "He/She is over 18 years of age and has completed his/her education." +msgstr "تجاوز عمر 18 واكمل تعليمه" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "He/She does not reside with his/her family." +msgstr "لايقيم مع اسرته" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"Failure to complete the required documents or official proofs, or the " +"family’s ineligibility for the association’s services, and the application " +"has been rejected." +msgstr "عدم استكمال المستندات المطاوبة او الاثباتات الرسمية او عدم استحقاق الاسرة لخدمات الجمعية وتم رفض الطلب" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/benefit.py:0 +#: code:addons/odex_benefit/models/benefit.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "Married" +msgstr "متزوجة" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She is employed and not enrolled in an educational institution." +msgstr "تعمل وغير منتظمة بجهة تعلمية" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She is over 26 years of age and has no underage brothers." +msgstr "تجاوزت عمر 26 وليس لديها اخوة قصر" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She is over 35 years of age." +msgstr "تجاوزت عمر 35" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She works with a salary greater than 4,000." +msgstr "تعمل براتب اكبر من 4000 " + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She is employed and has completed her education." +msgstr "تعمل واكملت تعليمها" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "She does not reside with the family." +msgstr "لاتقييم مع الاسرة" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/family_members.py:0 +#, python-format +msgid "" +"Application rejected due to missing documents, missing official proofs, or " +"the family's ineligibility for the association's services." +msgstr "عدم استكمال المستندات المطاوبة او الاثباتات الرسمية او عدم استحقاق الاسرة لخدمات الجمعية وتم رفض الطلب" \ No newline at end of file diff --git a/odex25_ensan/odex_benefit/models/family_members.py b/odex25_ensan/odex_benefit/models/family_members.py index 69b8e3559..5f8f177ae 100644 --- a/odex25_ensan/odex_benefit/models/family_members.py +++ b/odex25_ensan/odex_benefit/models/family_members.py @@ -8,6 +8,7 @@ from odoo.tools import DEFAULT_SERVER_DATE_FORMAT import qrcode import base64 from io import BytesIO + SAUDI_MOBILE_PATTERN = "(^(05|5)(5|0|3|6|4|9|1|8|7)([0-9]{7})$)" ALPHABETIC_PATTERN = "^[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FFA-Za-z ]+$" import re @@ -26,73 +27,92 @@ class FamilyMemberProfile(models.Model): return self._context.get('active_id') member_first_name = fields.Char(string="Member First Name") - member_second_name = fields.Char(string="Member Second Name",related="benefit_id.father_name") - member_third_name = fields.Char(string="Member Third Name",related="benefit_id.father_second_name") - member_family_name = fields.Char(string="Member Family Name",related="benefit_id.father_family_name") + member_second_name = fields.Char(string="Member Second Name", related="benefit_id.father_name") + member_third_name = fields.Char(string="Member Third Name", related="benefit_id.father_second_name") + member_family_name = fields.Char(string="Member Family Name", related="benefit_id.father_family_name") mother_first_name = fields.Char(string="Mother First Name") mother_second_name = fields.Char(string="Mother Second Name") mother_third_name = fields.Char(string="Mother Third Name") mother_family_name = fields.Char(string="MotherFamily Name") - name = fields.Char(string="Name", compute='get_partner_name', store=True,readonly = False) + name = fields.Char(string="Name", compute='get_partner_name', store=True, readonly=False) member_id_number = fields.Char(string="Member Id Number") - benefit_id = fields.Many2one("grant.benefit",string="Responsable",default=_default_benefit) + benefit_id = fields.Many2one("grant.benefit", string="Responsable", default=_default_benefit) gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], string="Gender") member_phone = fields.Char(string="Member Phone") member_location = fields.Selection(selection=[('with_family', 'With Family'), ('with_relative', 'with a relative'), - ('study_inside_saudi_arabia', 'Study Inside Saudi Arabia'),('study_outside_saudi_arabia', 'Study Outside Saudi Arabia'), - ('rehabilitation_center_for_the_disabled', 'Rehabilitation center for the disabled'),('house_of_social_observations', 'House of Social Observations'), - ('girls_home','Girls Home'),('university_housing','University Housing'),('with_husband','With_husband'),('work_inside_saudi_arabia','Work Inside Saudi Arabia')], string="Member Location") - member_location_conf = fields.Many2one('location.settings',string='Member Location') + ('study_inside_saudi_arabia', 'Study Inside Saudi Arabia'), + ('study_outside_saudi_arabia', 'Study Outside Saudi Arabia'), + ('rehabilitation_center_for_the_disabled', + 'Rehabilitation center for the disabled'), + ('house_of_social_observations', 'House of Social Observations'), + ('girls_home', 'Girls Home'), + ('university_housing', 'University Housing'), + ('with_husband', 'With_husband'), + ('work_inside_saudi_arabia', 'Work Inside Saudi Arabia')], + string="Member Location") + member_location_conf = fields.Many2one('location.settings', string='Member Location') # member_location = fields.Many2one('member.location', string="Member Location") birth_date = fields.Date(string="Birth Date") - age = fields.Integer(string="Age", compute='_compute_get_age_date',store=True) + age = fields.Integer(string="Age", compute='_compute_get_age_date', store=True) age_status = fields.Selection( [('minor', 'Minor'), ('non_minor', 'Non-Minor')], string='Age Status', - default='non_minor', compute='_compute_get_age_status',store=True + default='non_minor', compute='_compute_get_age_status', store=True ) is_work = fields.Boolean('Is Work?') - salary_certificate = fields.Many2many('ir.attachment','member_salary_cert_rel','member_id','attachment_id',string="Salary Certificate") + salary_certificate = fields.Many2many('ir.attachment', 'member_salary_cert_rel', 'member_id', 'attachment_id', + string="Salary Certificate") is_dead = fields.Boolean('Is Dead?') - death_certificate = fields.Many2many('ir.attachment','member_death_cert_rel','member_id','attachment_id',string="Death Certificate") + death_certificate = fields.Many2many('ir.attachment', 'member_death_cert_rel', 'member_id', 'attachment_id', + string="Death Certificate") member_income = fields.Float('Member Income') is_married = fields.Boolean('Is Married?') - marriage_certificate = fields.Many2many('ir.attachment','member_marriage_cert_rel','member_id','attachment_id',string="Marriage Certificate") - relationn = fields.Many2one('relation.settings',domain="['|',('relation_type','=','son'),('relation_type','=','daughter')]",string="Relation") + marriage_certificate = fields.Many2many('ir.attachment', 'member_marriage_cert_rel', 'member_id', 'attachment_id', + string="Marriage Certificate") + relationn = fields.Many2one('relation.settings', + domain="['|',('relation_type','=','son'),('relation_type','=','daughter')]", + string="Relation") relationn_type = fields.Selection(related="relationn.relation_type") relation = fields.Selection( [('son', _('Son')), ('daughter', _('Daughter'))]) mother_marital = fields.Selection( [('married', _('Married')), ('widower', _('Widower')), ('divorced', _('Divorced')), - ('divorced_from_another_man', _('Divorced From Another Man')), ('prisoner', _('Prisoner')), ('dead', _('Dead')), ('hanging', _('Hanging'))], + ('divorced_from_another_man', _('Divorced From Another Man')), ('prisoner', _('Prisoner')), + ('dead', _('Dead')), ('hanging', _('Hanging'))], _('Marital Status')) - mother_marital_conf = fields.Many2one('marital.status',string='Mother Marital') + mother_marital_conf = fields.Many2one('marital.status', string='Mother Marital') mother_location = fields.Selection( [('with_husband_and_children', _('With Husband And Children')), ('with_children', _('With Children')), ('not_live_with_children', _('Not live with children'))], string='Mother Location') - attachment_ids = fields.One2many("ir.attachment",'member_id',domain=[('hobbies_id', '=', False),('diseases_id', '=', False),('disabilities_id', '=', False)]) - hobbies_attachment_ids = fields.One2many('ir.attachment', 'member_id', string='Hobbies Attachments',domain=[('hobbies_id', '!=', False)]) - diseases_attachment_ids = fields.One2many('ir.attachment', 'member_id', string='Diseases Attachments',domain=[('diseases_id', '!=', False)]) - disabilities_attachment_ids = fields.One2many('ir.attachment','member_id', string='Disabilities Attachments',domain=[('disabilities_id', '!=', False)]) - hobbies_ids = fields.One2many("member.hobbies",'member_id') - diseases_ids = fields.One2many("member.diseases",'member_id') - disabilities_ids = fields.One2many("member.disabilities",'member_id') - is_scientific_specialty = fields.Boolean('Is Scientific Specialty?',related="specialization_ids.is_scientific_specialty") - is_medical_specialty = fields.Boolean('Is Medical Specialty?',related="specialization_ids.is_medical_specialty") - minor_siblings = fields.Boolean('minor siblings?',compute="_compute_minor_siblings",store=True) + attachment_ids = fields.One2many("ir.attachment", 'member_id', + domain=[('hobbies_id', '=', False), ('diseases_id', '=', False), + ('disabilities_id', '=', False)]) + hobbies_attachment_ids = fields.One2many('ir.attachment', 'member_id', string='Hobbies Attachments', + domain=[('hobbies_id', '!=', False)]) + diseases_attachment_ids = fields.One2many('ir.attachment', 'member_id', string='Diseases Attachments', + domain=[('diseases_id', '!=', False)]) + disabilities_attachment_ids = fields.One2many('ir.attachment', 'member_id', string='Disabilities Attachments', + domain=[('disabilities_id', '!=', False)]) + hobbies_ids = fields.One2many("member.hobbies", 'member_id') + diseases_ids = fields.One2many("member.diseases", 'member_id') + disabilities_ids = fields.One2many("member.disabilities", 'member_id') + is_scientific_specialty = fields.Boolean('Is Scientific Specialty?', + related="specialization_ids.is_scientific_specialty") + is_medical_specialty = fields.Boolean('Is Medical Specialty?', related="specialization_ids.is_medical_specialty") + minor_siblings = fields.Boolean('minor siblings?', compute="_compute_minor_siblings", store=True) # Education_data member_education_status_ids = fields.One2many('education.status', 'family_member_id') education_status = fields.Selection( string='Education Status', - selection=[('educated', 'educated'), ('illiterate', 'illiterate'),('under_study_age', 'Under Study Age')], + selection=[('educated', 'educated'), ('illiterate', 'illiterate'), ('under_study_age', 'Under Study Age')], default='under_study_age', ) case_study = fields.Selection(string='Case Study', selection=[('continuous', 'continuous'), ('intermittent', 'intermittent'), ('graduate', 'Graduate')]) illiterate_reason = fields.Char(string='Illiterate Reason') - intermittent_reason = fields.Many2one('education.illiterate.reason',string='Intermittent Reason') - educational_certificate = fields.Binary(attachment=True,string='Educational Certificate') + intermittent_reason = fields.Many2one('education.illiterate.reason', string='Intermittent Reason') + educational_certificate = fields.Binary(attachment=True, string='Educational Certificate') education_entity = fields.Selection(string='Education Entity', selection=[('governmental', 'Governmental'), ('special', 'Special')]) last_education_entity = fields.Selection(string='Last Education Entity', @@ -106,7 +126,7 @@ class FamilyMemberProfile(models.Model): literacy_school_note = fields.Text(string="Literacy School Note", required=False) classroom = fields.Many2one('education.classroom', string='Classroom') last_classroom = fields.Many2one('education.classroom', string='Last Classroom') - last_educational_certificate = fields.Binary(attachment=True,string='Last Educational Certificate') + last_educational_certificate = fields.Binary(attachment=True, string='Last Educational Certificate') degree = fields.Many2one('education.result', string='Degree') last_degree = fields.Many2one('education.result', string='Last Degree') percentage = fields.Float(string="Percentage%") @@ -194,7 +214,7 @@ class FamilyMemberProfile(models.Model): ('suspended_second_approve', 'Suspended Second Approved'), ('exception_second_approve', 'Waiting for General Manager'), ('black_list', 'Black List'), - ], string='state', tracking=True,compute='_get_state',store = True, group_expand='_expand_states') + ], string='state', tracking=True, compute='_get_state', store=True, group_expand='_expand_states') state_a = fields.Selection([ ('draft', 'Draft'), ('new', 'Researcher Assignment'), @@ -218,20 +238,22 @@ class FamilyMemberProfile(models.Model): member_status = fields.Selection(selection=[ ('benefit', 'Benefit'), ('non_benefit', 'Non Benefit'), - ], string='Benefit Status', compute="check_member_status",default = False,store=True) + ], string='Benefit Status', compute="check_member_status", default=False, store=True) suspend_reason = fields.Many2one('suspend.reason', string='Suspend Reason') reason = fields.Text(string='Reason') suspend_description = fields.Text(string='Suspend Description') suspend_attachment = fields.Binary(string='Suspend Attachment', attachment=True) suspend_type = fields.Selection( selection=[('temporarily_suspend', 'Temporarily Suspended'), ('suspend', 'Suspend')], string="Suspend Type") - suspend_method = fields.Selection(selection=[('manual', 'Manual'), ('auto', 'Auto')], string="Suspend Method",default='auto') + suspend_method = fields.Selection(selection=[('manual', 'Manual'), ('auto', 'Auto')], string="Suspend Method", + default='auto') is_member_workflow = fields.Boolean('Is Member Workflow?') # sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner',domain="[('account_type','=','sponsor')]") - sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner',domain="[('is_sponsor_portal', '=', True)]") + sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner', domain="[('is_sponsor_portal', '=', True)]") sponsor_related_id = fields.Many2one('takaful.sponsor', string='Sponsor') sponsorship_id = fields.Many2one('takaful.sponsorship', string='Sponsorship') - required_attach = fields.Selection(selection=[('true', 'True'), ('false', 'False')], compute='get_required_attach',store=True,string='Member Required Attach') + required_attach = fields.Selection(selection=[('true', 'True'), ('false', 'False')], compute='get_required_attach', + store=True, string='Member Required Attach') # Exception fields exception_reason = fields.Many2one('exception.reason', string='Exception Reason') exception_description = fields.Text(string='Exception Description') @@ -246,7 +268,6 @@ class FamilyMemberProfile(models.Model): total_member_service_requests = fields.Integer(compute='_get_total_member_service_requests') non_benefit_reason = fields.Text(string="Non Benefit Reason", tracking=True) - # def create(self, vals): # for line_vals in vals: # if line_vals.get("education_status", False) == "educated" and "member_education_status_ids" not in line_vals: @@ -254,7 +275,7 @@ class FamilyMemberProfile(models.Model): # _("You should at least insert one current/previous education status!") # ) # return super(FamilyMemberProfile, self).create(vals) - + # def write(self, vals): # education_status = vals.get("education_status", False) or self.education_status # if education_status == "educated" and "member_education_status_ids" not in vals and not len(self.member_education_status_ids): @@ -279,8 +300,7 @@ class FamilyMemberProfile(models.Model): _("The son/daughter's age is supposed to be less than the mother's age by %s") % rec.relationn.age_difference ) - - @api.depends('age_status', 'is_dead','benefit_id.member_ids.age_status','benefit_id.member_ids.is_dead') + @api.depends('age_status', 'is_dead', 'benefit_id.member_ids.age_status', 'benefit_id.member_ids.is_dead') def _compute_minor_siblings(self): for member in self: member.minor_siblings = any( @@ -330,6 +350,7 @@ class FamilyMemberProfile(models.Model): _("%s must contain only alphabetic characters and spaces. " "Numbers and special characters are not allowed.") % field_label ) + @api.depends('age') def _compute_get_age_status(self): for rec in self: @@ -339,7 +360,8 @@ class FamilyMemberProfile(models.Model): rec.age_status = 'minor' elif rec.relationn.relation_type == 'daughter' and rec.age <= 26: rec.age_status = 'minor' - elif rec.relationn.relation_type == 'son' and rec.age <= 22 and (current_education_status_id.specialization_ids.is_scientific_specialty or current_education_status_id.specialization_ids.is_medical_specialty): + elif rec.relationn.relation_type == 'son' and rec.age <= 22 and ( + current_education_status_id.specialization_ids.is_scientific_specialty or current_education_status_id.specialization_ids.is_medical_specialty): rec.age_status = 'minor' else: rec.age_status = 'non_minor' @@ -352,7 +374,7 @@ class FamilyMemberProfile(models.Model): # Check that dates are not in the future if rec.birth_date and rec.birth_date > today: raise ValidationError("Member's Birth Date cannot be in the future.") - + def unlink(self): for order in self: if order.state not in ['draft']: @@ -369,7 +391,7 @@ class FamilyMemberProfile(models.Model): return super(FamilyMemberProfile, self).unlink() - @api.depends('is_member_workflow', 'benefit_id.state','state_a') + @api.depends('is_member_workflow', 'benefit_id.state', 'state_a') def _get_state(self): for rec in self: if not rec.is_member_workflow: @@ -403,7 +425,7 @@ class FamilyMemberProfile(models.Model): raise ValidationError('The attachment name is missing.') default_attachments_data.append((0, 0, { 'name': attach.name, - 'attach_id':attach.id, + 'attach_id': attach.id, 'is_required': attach.is_required, 'is_default': attach.is_default, 'show_in_portal': attach.show_in_portal @@ -414,11 +436,12 @@ class FamilyMemberProfile(models.Model): res['attachment_ids'] = default_attachments_data return res - + def _get_total_member_service_requests(self): for rec in self: - rec.total_member_service_requests = self.env['service.request'].search_count([('benefit_type', '=', 'member'), ('member_id', '=', rec.id)]) - + rec.total_member_service_requests = self.env['service.request'].search_count( + [('benefit_type', '=', 'member'), ('member_id', '=', rec.id)]) + def action_open_related_member_service_requests(self): """ Opens a tree view with related records filtered by a dynamic domain """ member_service_requests = self.env['service.request'].search([ @@ -460,7 +483,7 @@ class FamilyMemberProfile(models.Model): @api.depends( 'member_education_status_ids', - 'member_education_status_ids.specialization_ids', + 'member_education_status_ids.specialization_ids', 'member_education_status_ids.education_status', 'member_education_status_ids.case_study', 'relationn', @@ -478,7 +501,8 @@ class FamilyMemberProfile(models.Model): for rec in self: reasons = [] rec.non_benefit_reason = False - current_education_status_id = rec.member_education_status_ids.filtered(lambda r: r.education_status_type == 'current') + current_education_status_id = rec.member_education_status_ids.filtered( + lambda r: r.education_status_type == 'current') if rec.state == 'second_approve' and rec.is_excluded_suspension: rec.member_status = 'benefit' continue @@ -498,14 +522,15 @@ class FamilyMemberProfile(models.Model): if rec.relationn.relation_type == 'mother': if not benefiting_children: rec.write({'member_status': 'non_benefit'}) - reasons.append("Mother has no benefiting children") + reasons.append(_("Mother has no benefiting children")) else: rec.member_status = rec.benefit_id.check_mother_status() elif rec.relationn.relation_type == 'replacement_mother': rec.member_status = rec.benefit_id.check_replacement_mother_status() - if rec.state in ['suspended_second_approve','refused'] or not benefiting_children: + if rec.state in ['suspended_second_approve', 'refused'] or not benefiting_children: rec.member_status = 'non_benefit' - reasons.append("Test 01") + reasons.append( + _("The application has been rejected due to missing required documents, lack of official proofs, or the family's ineligibility for the association's services.")) # continue # Skip further checks for mothers # Gender-specific checks elif rec.relationn.relation_type == 'son': @@ -515,77 +540,89 @@ class FamilyMemberProfile(models.Model): else: if rec.age > exceptional_age_has_disabilities and rec.disabilities_attachment_ids: rec.member_status = 'non_benefit' - reasons.append("Test 02") - elif current_education_status_id.specialization_ids.is_scientific_specialty and rec.age > exceptional_age_scientific_specialty and not rec.minor_siblings : + reasons.append( + _("He/She has a physical or intellectual disability but is over 30 years of age.")) + elif current_education_status_id.specialization_ids.is_scientific_specialty and rec.age > exceptional_age_scientific_specialty and not rec.minor_siblings: rec.member_status = 'non_benefit' - reasons.append("Test 03") + reasons.append( + _("He/She is enrolled in a scientific or vocational specialization but is over 24 years of age.")) elif current_education_status_id.specialization_ids.is_medical_specialty and rec.age > exceptional_age_medical_specialty and not rec.minor_siblings: rec.member_status = 'non_benefit' - reasons.append("Test 04") - elif not any([current_education_status_id.specialization_ids.is_scientific_specialty, current_education_status_id.specialization_ids.is_medical_specialty]): + reasons.append( + _("He/She is enrolled in a medical specialization but is over 26 years of age.")) + elif not any([current_education_status_id.specialization_ids.is_scientific_specialty, + current_education_status_id.specialization_ids.is_medical_specialty]): rec.member_status = 'non_benefit' - reasons.append("Test 05") + reasons.append( + _("He/She is over 18 years of age and not enrolled in a scientific or medical specialization.")) if not rec.minor_siblings: rec.member_status = 'non_benefit' - reasons.append("Test 06") + reasons.append( + _("She is over 18 years of age and not enrolled in any educational institution.")) if rec.is_work: if rec.member_income > max_income_for_benefit: rec.member_status = 'non_benefit' - reasons.append("Test 07") + reasons.append(_("He/She is employed with a salary exceeding 4,000.")) if not rec.is_married and rec.education_status in ['illiterate']: rec.member_status = 'non_benefit' - reasons.append("Test 08") - if not rec.is_married and rec.education_status in ['educated'] and current_education_status_id.case_study in [ + reasons.append( + _("He/She is over 18 years of age and not enrolled in an educational institution.")) + if not rec.is_married and rec.education_status in [ + 'educated'] and current_education_status_id.case_study in [ 'graduate', 'intermittent']: rec.member_status = 'non_benefit' - reasons.append("Test 09") + reasons.append(_("He/She is over 18 years of age and has completed his/her education.")) if not rec.member_location_conf.is_benefit: rec.member_status = 'non_benefit' - reasons.append("Test 10") - if rec.state in ['suspended_second_approve','refused'] or rec.is_dead == True: + reasons.append(_("He/She does not reside with his/her family.")) + if rec.state in ['suspended_second_approve', 'refused'] or rec.is_dead == True: rec.member_status = 'non_benefit' - reasons.append("Test 11") + reasons.append( + _("Failure to complete the required documents or official proofs, or the family’s ineligibility for the association’s services, and the application has been rejected.")) elif rec.relationn.relation_type == 'daughter': if rec.age < female_benefit_age and rec.is_married: - rec.member_status = 'non_benefit' - reasons.append("Test 12") - if rec.age < female_benefit_age and rec.is_work and rec.education_status not in ['educated'] and current_education_status_id.case_study != 'continuous': rec.member_status = 'non_benefit' - reasons.append("Test 13") + reasons.append(_("Married")) + if rec.age < female_benefit_age and rec.is_work and rec.education_status not in [ + 'educated'] and current_education_status_id.case_study != 'continuous': + rec.member_status = 'non_benefit' + reasons.append(_("She is employed and not enrolled in an educational institution.")) if rec.age > female_benefit_age: if rec.age > minor_siblings_age and not rec.minor_siblings: rec.member_status = 'non_benefit' - reasons.append("Test 14") + reasons.append(_("She is over 26 years of age and has no underage brothers.")) elif not rec.minor_siblings: rec.member_status = 'non_benefit' - reasons.append("Test 15") + reasons.append(_("She is over 26 years of age and has no underage brothers.")) elif rec.minor_siblings and rec.age > minor_siblings_age: rec.member_status = 'non_benefit' - reasons.append("Test 16") + reasons.append(_("She is over 35 years of age.")) # elif rec.is_work and current_education_status_id.education_status in ['illiterate'] and current_education_status_id.case_study in [ # 'graduate', 'intermittent']: # rec.member_status = 'non_benefit' elif rec.is_married: rec.member_status = 'non_benefit' - reasons.append("Test 17") + reasons.append(_("Married")) # elif not rec.minor_siblings: # rec.member_status = 'non_benefit' - if rec.is_work and rec.member_income > max_income_for_benefit and rec.education_status in ['educated'] and current_education_status_id.case_study == 'continuous': + if rec.is_work and rec.member_income > max_income_for_benefit and rec.education_status in [ + 'educated'] and current_education_status_id.case_study == 'continuous': rec.member_status = 'non_benefit' - reasons.append("Test 18") - if rec.is_work and rec.education_status in ['illiterate'] : - rec.member_status = 'non_benefit' - reasons.append("Test 19") - if rec.is_work and rec.education_status in ['educated'] and current_education_status_id.case_study in [ - 'graduate', 'intermittent']: - rec.member_status = 'non_benefit' - reasons.append("Test 20") + reasons.append(_("She works with a salary greater than 4,000.")) + if rec.is_work and rec.education_status in ['illiterate']: + rec.member_status = 'non_benefit' + reasons.append(_("She is employed and not enrolled in an educational institution.")) + if rec.is_work and rec.education_status in [ + 'educated'] and current_education_status_id.case_study in [ + 'graduate', 'intermittent']: + rec.member_status = 'non_benefit' + reasons.append(_("She is employed and has completed her education.")) if not rec.member_location_conf.is_benefit: rec.member_status = 'non_benefit' - reasons.append("Test 21") - if rec.state in ['suspended_second_approve','refused'] or rec.is_dead == True: + reasons.append(_("She does not reside with the family.")) + if rec.state in ['suspended_second_approve', 'refused'] or rec.is_dead == True: rec.member_status = 'non_benefit' - reasons.append("Test 22") + reasons.append(_("Application rejected due to missing documents, missing official proofs, or the family's ineligibility for the association's services.")) # General checks for all members # if rec.is_work: # if rec.member_income > max_income_for_benefit: @@ -715,24 +752,27 @@ class FamilyMemberProfile(models.Model): # Check if the father ID and mother ID are the same on the same record if rec.member_id_number == rec.benefit_id.mother_id_number or rec.member_id_number == rec.benefit_id.father_id_number or rec.member_id_number == rec.benefit_id.replacement_mother_id_number: - raise ValidationError(_("ID number cannot be the same with mother or replacement mother or father id number")) + raise ValidationError( + _("ID number cannot be the same with mother or replacement mother or father id number")) # Check if the ID number exists in other records or in family members exist = self.search([ ('member_id_number', '=', rec.member_id_number) - ],limit=1) + ], limit=1) exist_in_family = self.env["grant.benefit"].search([ - '|','|', + '|', '|', ('father_id_number', '=', rec.member_id_number), ('mother_id_number', '=', rec.member_id_number), ('replacement_mother_id_number', '=', rec.member_id_number), - ],limit=1) + ], limit=1) if exist or exist_in_family: if exist_in_family: - raise ValidationError(_("The ID Number already exists in Family with code %s")%exist_in_family.code) - if exist : + raise ValidationError( + _("The ID Number already exists in Family with code %s") % exist_in_family.code) + if exist: raise ValidationError( _("The ID Number already exists in Family with code %s") % exist.benefit_id.code) + # @api.onchange("member_id_number") # def onchange_member_id_number(self): # for rec in self: @@ -742,19 +782,21 @@ class FamilyMemberProfile(models.Model): # raise ValidationError( # _('The ID Number Already Exist!')) - @api.onchange('relationn','member_status','gender','birth_date', 'is_scientific_specialty', 'is_medical_specialty', 'is_married', - 'minor_siblings','member_income','is_married','member_location_conf','education_status','case_study') + @api.onchange('relationn', 'member_status', 'gender', 'birth_date', 'is_scientific_specialty', + 'is_medical_specialty', 'is_married', + 'minor_siblings', 'member_income', 'is_married', 'member_location_conf', 'education_status', + 'case_study') def onchange_member_status(self): - res ={} - for rec in self: - if rec.member_status == 'non_benefit': - res['warning'] = {'title': _('ValidationError'), - 'message': _('Not Benefit')} - return res + res = {} + for rec in self: + if rec.member_status == 'non_benefit': + res['warning'] = {'title': _('ValidationError'), + 'message': _('Not Benefit')} + return res - #Member Suspend Manual + # Member Suspend Manual def action_suspend(self): - for rec in self : + for rec in self: rec.is_member_workflow = True rec.is_excluded_suspension = False return { @@ -766,16 +808,20 @@ class FamilyMemberProfile(models.Model): 'view_id': self.env.ref('odex_benefit.view_suspend_member_reason_wizard_form').id, 'target': 'new', } + def action_suspend_first_accept(self): for rec in self: rec.state_a = 'first_approve' + def action_suspend_second_accept(self): for rec in self: rec.state_a = 'suspended_second_approve' + def action_suspend_refuse(self): for rec in self: rec.state_a = 'second_approve' rec.is_member_workflow = False + # Excption Work flow def action_exception(self): for rec in self: @@ -837,9 +883,11 @@ class FamilyMemberProfile(models.Model): message = self.create_message('waiting_approve') # self.partner_id.send_sms_notification(message, self.phone) self.state_a = 'waiting_approve' + def action_accepted(self): """Accept registration""" self.state_a = "second_approve" + def action_first_refusal(self): """First refusal to entity registration""" domain = [] @@ -859,6 +907,7 @@ class FamilyMemberProfile(models.Model): 'domain': domain, 'context': context, } + def action_refuse(self): """Refuse entity registration""" domain = [] @@ -876,6 +925,7 @@ class FamilyMemberProfile(models.Model): 'domain': domain, 'context': context, } + def action_black_list(self): """Move benefit to black list""" domain = [] @@ -893,6 +943,7 @@ class FamilyMemberProfile(models.Model): 'domain': domain, 'context': context, } + def action_edit_info(self): self.state = 'complete_info' @@ -901,6 +952,7 @@ class FamilyMemberProfile(models.Model): # group_e = self.env.ref('odex_benefit.group_benefit_edit', False) # group_e.write({'users': [(3, self.user_id.id)]}) rec.state_a = rec.old_stage + def create_manual_visit(self): self.env['visit.location'].create({ 'benefit_id': self.id, @@ -947,7 +999,3 @@ class FamilyMemberProfile(models.Model): if exist: raise ValidationError( _("The phone Number already exists in Family with code %s") % exist.benefit_id.code) - - - - diff --git a/odex25_ensan/odex_benefit/views/benefit_view.xml b/odex25_ensan/odex_benefit/views/benefit_view.xml index 59ee27ca9..f33b72667 100644 --- a/odex25_ensan/odex_benefit/views/benefit_view.xml +++ b/odex25_ensan/odex_benefit/views/benefit_view.xml @@ -742,6 +742,11 @@
+ diff --git a/odex25_ensan/odex_benefit/views/family_members.xml b/odex25_ensan/odex_benefit/views/family_members.xml index f63ba05b6..f528df557 100644 --- a/odex25_ensan/odex_benefit/views/family_members.xml +++ b/odex25_ensan/odex_benefit/views/family_members.xml @@ -270,7 +270,9 @@ - +