Merge branch 'dev_odex25_ensan' into ensan_education_modified

This commit is contained in:
MahmoudSalahEXP 2025-10-07 17:15:33 +03:00 committed by GitHub
commit ce97805303
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 911 additions and 292 deletions

View File

@ -1818,11 +1818,6 @@ msgstr "مدة الانتهاء بالايام"
msgid "Allowed Categories"
msgstr "الفئات المستفيدة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_electrical_devices__allowed_quantity
msgid "Allowed Quantity"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__allowed_recurrence
msgid "Allowed Recurrence"
@ -2027,6 +2022,11 @@ msgstr "موافقة"
msgid "Are you sure you want to Approve?"
msgstr "هل أنت متأكد أنك تريد الموافقة؟"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Are you sure you want to approve ?"
msgstr "هل أنت متأكد أنك تريد الموافقة؟"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
msgid "Are you sure you want to Finish Complete data ?"
@ -3197,6 +3197,26 @@ msgstr ""
msgid "Both"
msgstr "مشترك"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__benefit_type__both
msgid "Both"
msgstr "مشترك"
#. module: odex_benefit
#: model:ir.actions.act_window,name:odex_benefit.action_social_search_committees
msgid "Social Research Committees"
msgstr "فرق البحث الاجتماعي"
#. module: odex_benefit
#: model:ir.ui.menu,name:odex_benefit.social_search_committees_menu
msgid "Social Research Teams"
msgstr "فرق البحث الاجتماعي"
#. module: odex_benefit
#: model:ir.ui.menu,name:odex_benefit.social_search_settings_menu
msgid "Social Search Settings"
msgstr "إعدادات البحث الاجتماعي"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__message_bounce
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__message_bounce
@ -11905,8 +11925,10 @@ msgid "Refuse Date"
msgstr "تاريخ الرفض"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_entity_refuse_reason__name
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__refuse_reason_id
#, python-format
msgid "Refuse Reason"
msgstr "سبب الرفض"
@ -12895,6 +12917,9 @@ msgstr "نفس"
#: model:ir.cron,name:odex_benefit.cron_send_attachment_expiry_emails
msgid "Send Expiring Salary Attachments Notifications"
msgstr ""
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Send Request"
msgstr "إرسال الطلب"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__state__send_request
@ -17635,6 +17660,145 @@ msgstr ""
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__replacement_mother_id_number_type__resident
msgid "مقيم"
msgstr ""
#: model:ir.ui.menu,name:odex_benefit.menu_refuse_reason
msgid "Service Refuse Reasons"
msgstr "أسباب رفض الخدمات"
#. module: odex_benefit
#: model:ir.actions.act_window,name:odex_benefit.action_refuse_reason
#: model:ir.model,name:odex_benefit.model_service_refuse_reason
msgid "Reasons for Service Rejection"
msgstr "أسباب رفض الخدمات"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_service_refuse_reason_form
msgid "Service Refuse Reason"
msgstr "أسباب رفض الخدمات"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_payment_orders__service_requests_ids
#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
#, python-format
msgid "Service Requests"
msgstr "طلبات الخدمات"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_refuse_reason_wizard
msgid "Select Reason"
msgstr "اختر سبب الرفض"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Return the request to the specialist"
msgstr "إعادة الطلب إلي الاخصائي"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__return_reason
#, python-format
msgid "Reason for Returning the Request"
msgstr "سبب إعادة الطلب"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__specialist_note
msgid "Specialist's Note After Return"
msgstr "ملاحظة اﻹخصائي بعد اﻹعادة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_reason_for_return_wizard__reason
msgid "reason for return"
msgstr "سبب إعادة الطلب"
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_reason_for_return_wizard
msgid "Reason For Return Wizard"
msgstr "سبب إعادة الطلب"
#. module: odex_benefit
#: model:res.groups,name:odex_benefit.group_approval_of_beneficiary_services
msgid "Approval Of Beneficiary Services"
msgstr "اعتماد خدمات المستفيدين"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__exception_or_steal_attach
msgid "Exception or steal Attachment"
msgstr "مرفق إثبات حالات الاستثناء"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__service_reason_id
msgid "Service Reason"
msgstr "سبب الخدمة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__max_amount
msgid "Max Transportation Amount"
msgstr "الحد الأعلى للنقل"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__transportation_insurance_ids
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_type__transportation_insurance
msgid "Transportation Insurance"
msgstr "تأمين مواصلات"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_electrical_devices__price_unit
msgid "Price Unit"
msgstr "سعر الوحدة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_transportation_insurance__name
msgid "Insurance Name"
msgstr "اسم التأمين"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_transportation_insurance__limit_amount
msgid "Limit Amount"
msgstr "الحد الأعلى للمبلغ"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_tree
msgid "Request Creator"
msgstr "منشئ الطلب"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__requests_counts
msgid "Requests Counts"
msgstr "عدد الطلبات"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__is_family_member
msgid "Is Family member?"
msgstr "هل صاحب الحساب من أفراد الأسرة؟"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_location_settings__is_far_from_family
msgid "Is Far From Family?"
msgstr "هل هو بعيد عن سكن العائلة؟"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__owner_identity_attachment_ids
msgid "Account holder identity"
msgstr "هوية صاحب الحساب"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__family_approval_attachment_ids
msgid "Family approval of transfer"
msgstr "إقرار أفراد الأسرة بالتحويل"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
msgid "Account Holder Identity Attachment is required."
msgstr ".مرفق هوية صاحب الحساب مطلوب"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
msgid "Family approval of transfer Attachment is required."
msgstr ".مرفق إقرار أفراد الأسرة بالتحويل مطلوب"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_id_number_type__citizen
@ -17657,3 +17821,304 @@ msgstr ""
#: model:ir.model.constraint,message:odex_benefit.constraint_benefit_vehicle_model_name_unique
msgid "يجب أن يكون اسم الموديل فريداً."
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__show_in_portal
msgid "Show in Portal"
msgstr "عرض في البوابة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_category__emergency
msgid "Emergency"
msgstr "طارئة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_category__permanent
msgid "Permanent"
msgstr "دائمة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_category__exceptional
msgid "Exceptional"
msgstr "استثنائية"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_category__seasonal
msgid "Seasonal"
msgstr "موسمية"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_amount
msgid "Maximum Amount"
msgstr "الحد الأقصى للمبلغ"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_age
msgid "Maximum Age"
msgstr "الأقصى للعمر"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__service_conditions
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__service_conditions
msgid "Service Conditions"
msgstr "شروط الخدمة"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Settings"
msgstr "الإعدادات"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Accounts"
msgstr "الحسابات"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__allowed_recurrence
msgid "Allowed Recurrence"
msgstr "التكرار المسموح"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__allowed_recurrence__once
msgid "Once"
msgstr "مرة واحدة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__allowed_recurrence__periodic
msgid "Every Period"
msgstr "مرة كل فترة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__allowed_recurrence__unlimited
msgid "Unlimited"
msgstr "غير محدد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__recurrence_period
msgid "Recurrence Period (Months)"
msgstr "فترة التكرار(عدد الشهور)"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__requires_visit
msgid "Requires Visit?"
msgstr "هل الخدمة تحتاج زيارة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__fixed
msgid "Fixed Amount"
msgstr "مبلغ ثابت"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__category
msgid "Amount by Category"
msgstr "مبلغ حسب الفئة"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__category_person
msgid "Amount by Category and Individuals"
msgstr "مبلغ حسب الفئة وعدد الأفراد"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__region
msgid "Amount by Region"
msgstr "مبلغ حسب المنطقة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_limit_type
msgid "Max Limit Type"
msgstr "طريقة الحد الأقصى"
#. module: odex_benefit
#: 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 has a physical or intellectual disability but is over %s years of age."
msgstr "لديه إعاقة جسدية أو فكرية ولكنه تجاوز عمر %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He is enrolled in a scientific or vocational specialization but is over %s years of age."
msgstr "منتظم في أحد التخصصات العلمية أو المهنية ولكنه تجاوز عمر %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He is enrolled in a medical specialization but is over %s years of age."
msgstr "منتظم في أحد التخصصات الطبية ولكنه تجاوز عمر %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He is over %s years of age and not enrolled in a scientific or medical specialization."
msgstr "تجاوز عمر %s وليس منتظم في تخصص علمي أو طبي"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He is over %s years of age and not enrolled in an educational institution."
msgstr "تجاوز عمر %s وغير منتظم بجهة تعلمية"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He is employed with a salary exceeding %s."
msgstr "يعمل براتب اكبر من %s"
#. 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 is over %s years of age and has completed his education."
msgstr "تجاوز عمر %s واكمل تعليمه"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "He does not reside with his 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 "
"familys ineligibility for the associations 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 %s years of age and has no underage brothers."
msgstr "تجاوزت عمر %s وليس لديها اخوة قصر"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "She is over %s years of age."
msgstr "تجاوزت عمر %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid "She works with a salary greater than %s."
msgstr "تعمل براتب اكبر من %s "
#. 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 "عدم استكمال المستندات المطاوبة او الاثباتات الرسمية او عدم استحقاق الاسرة لخدمات الجمعية وتم رفض الطلب"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Eligibility Criteria"
msgstr "شروط الاستحقاق"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__allow_non_beneficiary
msgid "Allow Non Beneficiary"
msgstr "منح الخدمة لغير المستفيد"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Send"
msgstr "إرسال الطلب"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Researcher Approval"
msgstr "موافقة الأخصائي"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Family Received"
msgstr "تم الاستلام"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_refuse_reason_wizard__notes
msgid "Additional Notes"
msgstr "ملاحظات"
#. module: odex_benefit
#: code:addons/odex_benefit/wizards/service_refuse_reason_wizard.py:0
#, python-format
msgid ""
"Request was refused.\n"
"Reason: %s\n"
"Notes: %s"
msgstr ""
"تم رفض طلب الخدمة.\n"
"السبب: %s\n"
"الملاحظات: %s"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__refuse_reason
msgid "Reason for Refusal"
msgstr "ملاحظة الرفض"
#. module: odex_benefit
#: model:res.groups,name:odex_benefit.group_family_service_receipt
msgid "Family Service Receipt"
msgstr "الاستلام الاسرة للخدمة"

View File

@ -20,7 +20,7 @@ class ServiceRequest(models.Model):
family_category = fields.Many2one('benefit.category',string='Family Category',related='family_id.benefit_category_id')
benefit_member_count = fields.Integer(string="Benefit Member count", related='family_id.benefit_member_count')
branch_custom_id = fields.Many2one('branch.settings', string="Branch",related='family_id.branch_custom_id',store=True)
member_id = fields.Many2one('family.member',domain="[('benefit_id','=',family_id), ('member_status', '=', 'benefit')]",string='Member')
member_id = fields.Many2one('family.member',domain="[('benefit_id','=',family_id)]",string='Member')
description = fields.Char(string='Description')
need_status = fields.Selection(string='Need Status',selection=[('urgent', 'urgent'),('not_urgent', 'Not urgent')])
main_service_category = fields.Many2one('services.settings',domain="[('is_main_service','=',True)]",string="Main Service Category")
@ -67,11 +67,11 @@ class ServiceRequest(models.Model):
new_rent_amount = fields.Float(string='Rent Amount')
new_rent_amount_payment = fields.Float(string='New Rent Amount Payment',compute='_get_new_rent_amount_payment')
new_payment_type = fields.Selection([
('1', 'Yearly'),
('2', 'Half-yearly'),
('1', 'Yearly'),
('2', 'Half-yearly'),
('4', 'Quarterly'),
('5', 'Monthly')
],
],
string='Payment Type'
)
new_rent_attachment = fields.Many2many('ir.attachment', 'rel_rent_attachment_service_request', 'service_request_id',
@ -86,15 +86,15 @@ class ServiceRequest(models.Model):
'attachment_id', string='Rent Attachment')
added_amount_if_mother_dead = fields.Float(string="Added Amount (If mother dead)",compute="_get_added_amount_if_mother_dead")
attachment_lines = fields.One2many(
'service.attachments.settings',
'service_request_id',
compute='_compute_attachment_lines',
readonly=False,
'service.attachments.settings',
'service_request_id',
compute='_compute_attachment_lines',
readonly=False,
copy=False,
store=True
)
account_id = fields.Many2one(
'account.account',
'account.account',
string='Expenses Account',
compute="_compute_account_id"
)
@ -174,6 +174,7 @@ class ServiceRequest(models.Model):
state_b = fields.Selection(related='state', tracking=False)
refuse_reason_id = fields.Many2one('service.refuse.reason', string="Refuse Reason")
return_reason = fields.Text(string="Reason for Returning the Request")
refuse_reason = fields.Text(string="Reason for Refusal")
specialist_note = fields.Text(string="Specialist's Note After Return")
exception = fields.Boolean(string='Exception',default=False)
exception_attach = fields.Many2many('ir.attachment', 'rel_exception_attachment_service_request', 'service_request_id',
@ -181,7 +182,7 @@ class ServiceRequest(models.Model):
service_conditions = fields.Html(related='service_cat.service_conditions', string="Service Conditions")
def _expand_states(self, states, domain, order):
return [key for key, val in type(self).state.selection]
@ -192,23 +193,27 @@ class ServiceRequest(models.Model):
rec.account_id = rec.service_reason_id.account_id
else:
rec.account_id = rec.service_cat.account_id
@api.onchange('service_cat', 'device_id')
def _calculate_electrical_type_values(self):
for rec in self:
if rec.service_type == 'electrical_devices':
rec.requested_service_amount = rec.device_id.price_unit if rec.device_id else 0.0
@api.depends('service_cat')
def _compute_attachment_lines(self):
for rec in self:
rec.attachment_lines.unlink()
for attachment_line in rec.service_cat.attachment_lines:
attachment_line.copy({
'service_id': False,
'service_request_id': rec.id,
'previous_service_attachment_settings_id': attachment_line.id
})
commands = [(5, 0, 0)]
if rec.service_cat:
for attachment_line in rec.service_cat.attachment_lines:
commands.append((0, 0, {
'service_id': False,
'service_request_id': rec.id,
'previous_service_attachment_settings_id': attachment_line.id,
}))
rec.attachment_lines = commands
@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
@ -255,7 +260,7 @@ class ServiceRequest(models.Model):
# Write updates to the related family_id
res.family_id.write(update_values)
return res
def write(self, vals):
# Define the list of fields you want to check
new_rent_fields = ['new_rent_contract_number', 'new_rent_start_date', 'new_rent_end_date', 'new_rent_amount',
@ -438,7 +443,7 @@ class ServiceRequest(models.Model):
rec.amount_for_buy_home_for_member_count = 0
if rec.service_type == 'buy_home':
rec.amount_for_buy_home_for_member_count = (rec.service_cat.buy_home_lines.filtered(lambda x : x.min_count_member <= rec.benefit_member_count <= rec.benefit_member_count)).amount_for_buy_home
def action_send_to_researcher(self):
for rec in self:
rec.state = 'researcher'
@ -485,7 +490,7 @@ class ServiceRequest(models.Model):
def action_first_refuse(self):
return {
'name': 'Reason for Returning the Request',
'name': _('Reason for Returning the Request'),
'type': 'ir.actions.act_window',
'res_model': 'reason.for.return.wizard',
'view_mode': 'form',
@ -493,10 +498,8 @@ class ServiceRequest(models.Model):
}
def action_refuse(self):
# for rec in self:
# rec.state = 'refused'
return {
'name': 'Select Reason',
'name': _('Refuse Reason'),
'type': 'ir.actions.act_window',
'res_model': 'service.refuse.reason.wizard',
'view_mode': 'form',
@ -563,15 +566,15 @@ class ServiceRequest(models.Model):
self.max_water_bill_amount = water_bill_amount
@api.onchange(
'requested_service_amount',
'benefit_type',
'requested_service_amount',
'benefit_type',
'date',
'service_cat',
'family_id',
'exception_or_steal',
'home_furnishing_exception',
'has_marriage_course',
'home_age',
'home_age',
'service_reason_id'
)
def onchange_requested_service_amount(self):
@ -954,33 +957,28 @@ class ServiceRequest(models.Model):
rec.new_rent_start_date <= rec.new_end <= rec.new_rent_end_date):
raise UserError(
"The Start Date and End Date must be within the Rent Start Date and Rent End Date range.")
# @api.onchange('main_service_category', 'sub_service_category', 'benefit_type', 'family_id', 'member_id')
# def _reset_service_cat(self):
# if self.service_cat:
# self.service_cat = False
@api.depends('family_category')
@api.depends('family_category','member_id')
def _compute_available_service_cats(self):
for rec in self:
if rec.benefit_type:
if rec.benefit_type == 'family':
domain = [('service_type', '!=', 'main_service')]
rec.available_service_cats = rec.available_service_cats.sudo().search(domain).filtered(
lambda r: rec.family_category.id in r.benefit_category_ids.ids or\
(rec.family_category.id, rec.benefit_member_count) in r.rent_lines.mapped(lambda r: (r.benefit_category_id.id, r.benefit_count)) or\
rec.family_category.id in r.home_restoration_lines.benefit_category_id.ids or\
len(r.electricity_bill_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id and rec.benefit_member_count >= r.min_count_member and rec.benefit_member_count <= r.max_count_member)) or\
len(r.water_bill_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id and rec.benefit_member_count >= r.min_count_member and rec.benefit_member_count <= r.max_count_member))
)
elif rec.benefit_type == 'member':
domain = [('service_type', '!=', 'main_service'),('benefit_type','!=','member'),('benefit_category_ids', 'in', [rec.family_category.id])]
rec.available_service_cats = rec.available_service_cats.sudo().search(domain)
elif rec.benefit_type == 'member' and rec.member_id:
domain = [
('service_type', '!=', 'main_service'),
('is_this_service_for_student','=',True)
('benefit_type', '!=', 'family'),
('benefit_category_ids', 'in', [rec.family_category.id])
]
rec.available_service_cats = rec.available_service_cats.sudo().search(domain).filtered(
lambda r: rec.family_category.id in r.benefit_category_ids.ids
)
if rec.member_id.member_status != 'benefit':
domain.append(('allow_non_beneficiary','=',True))
rec.available_service_cats = rec.available_service_cats.sudo().search(domain)
else:
rec.available_service_cats = False

View File

@ -7,7 +7,7 @@ class ServicesSettings(models.Model):
_order = 'service_number'
service_name = fields.Char(string='Service Name')
benefit_type = fields.Selection(string='Benefit Type', selection=[('family', 'Family'), ('member', 'Member')])
benefit_type = fields.Selection(string='Benefit Type', selection=[('family', 'Family'), ('member', 'Member'), ('both', 'Both')],default='both')
parent_service = fields.Many2one('services.settings',string='Parent Service')
is_main_service = fields.Boolean(string='Is Main Service?')
is_service_producer = fields.Boolean(string='Is Service Producer?')
@ -116,6 +116,7 @@ class ServicesSettings(models.Model):
], string="Max Limit Type"
)
needs_beneficiary_manager_approval = fields.Boolean()
allow_non_beneficiary = fields.Boolean(string="Allow Non Beneficiary")

View File

@ -113,6 +113,12 @@
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="group_family_service_receipt" model="res.groups">
<field name="name">Family Service Receipt</field>
<field name="category_id" ref="module_category_benefit"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<!-- Add rules for grant.benefit -->
<record id="grant_benefit_show_all_rule" model="ir.rule">
<field name="name">Show All Benefits Profiles</field>
@ -244,8 +250,8 @@
<field name="name">Show Service Requests That Own</field>
<field name="model_id" ref="model_service_request"/>
<field name="domain_force">[
'|',
('create_uid','=',user.id),
'|',
('create_uid','=',user.id),
('researcher_id.employee_id', 'in', user.employee_id.ids)
]</field>
<field name="groups" eval="[(4, ref('group_benefit_researcher'))]"/>

View File

@ -8,140 +8,245 @@
<form string="Service Request">
<header>
<button name="action_send_to_researcher" type="object" states="draft"
string="Researcher Accept" class="oe_highlight"/>
string="Send" class="oe_highlight" />
<button name="action_researcher_send_request" type="object" states="researcher"
string="Send Request" class="oe_highlight"/>
string="Researcher Approval" class="oe_highlight"
groups="odex_benefit.group_benefit_researcher"
/>
<button name="action_refuse" type="object"
string="Refuse" class="btn btn-danger"
states="researcher" groups="odex_benefit.group_benefit_researcher"/>
<button name="action_operations_chief_approve" type="object"
string="Request First Approve" class="oe_highlight"
confirm="Are you sure you want to first approve ?"
states="send_request" groups="odex_benefit.group_benefit_woman_commitee,odex_benefit.group_benefit_manager"/>
states="send_request"
groups="odex_benefit.group_benefit_woman_commitee"
/>
<button name="action_first_refuse" type="object"
string="Return the request to the specialist" class="btn btn-warning"
states="send_request"
groups="odex_benefit.group_benefit_woman_commitee"/>
<button name="action_refuse" type="object"
string="Refuse" class="btn btn-danger"
states="send_request"
groups="odex_benefit.group_benefit_woman_commitee"
/>
<button name="action_branch_manager_approve" type="object"
string="Request Second Approve" class="oe_highlight"
confirm="Are you sure you want to second approve ?"
states="first_approve" groups="odex_benefit.group_benefit_branch_manager,odex_benefit.group_benefit_manager"/>
<button name="action_beneficiary_manager_approve" type="object"
string="Beneficiary Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
states="second_approve" groups="odex_benefit.group_benefit_branch_manager,odex_benefit.group_benefit_manager"/>
states="first_approve"
groups="odex_benefit.group_benefit_branch_manager"/>
<button name="action_first_refuse" type="object"
string="Return the request to the specialist" class="btn btn-warning"
states="first_approve"
groups="odex_benefit.group_benefit_branch_manager"/>
<button name="action_refuse" type="object"
string="Refuse" class="btn btn-danger"
states="first_approve"
groups="odex_benefit.group_benefit_branch_manager"
/>
<button name="action_accounting_approve" type="object"
string="Accounting Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
states="accounting_approve" groups="odex_benefit.group_benefit_accounting_accept"/>
<button name="action_first_refuse" type="object"
string="Return the request to the specialist" class="btn btn-warning"
states="accounting_approve"
groups="odex_benefit.group_benefit_accounting_accept"/>
<button name="action_refuse" type="object"
string="Refuse" class="btn btn-danger"
states="accounting_approve"
groups="odex_benefit.group_benefit_accounting_accept"
/>
<button name="action_request_done" type="object"
string="Family Received" class="oe_highlight"
states="send_request_to_supplier"
groups="odex_benefit.group_family_service_receipt"
/>
<button name="action_refuse" type="object"
string="Refuse" class="btn btn-danger"
states="send_request_to_supplier"
groups="odex_benefit.group_family_service_receipt"
/>
<button name="action_first_refuse" type="object"
string="Return the request to the specialist" class="btn btn-warning"
states="refused"
/>
<button name="action_beneficiary_manager_approve" type="object"
string="Beneficiary Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
states="second_approve"
groups="odex_benefit.group_benefit_branch_manager,odex_benefit.group_benefit_manager"/>
<button name="action_supplier_approve" type="object"
string="Supplier Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
states="approval_of_beneficiary_services" groups="odex_benefit.group_benefit_accounting_accept"/>
<button name="action_request_done" type="object"
string="Family Received Device" class="oe_highlight"
groups="odex_benefit.group_benefit_accounting_accept" states="send_request_to_supplier" />
<button name="action_first_refuse" type="object"
string="Return the request to the specialist" class="oe_highlight"
attrs="{'invisible': ['|',('return_reason','!=', False), ('state', 'not in', ['accounting_approve', 'second_approve' ,'send_request' ,'first_approve'])]}"
groups="odex_benefit.group_benefit_accounting_accept,odex_benefit.group_benefit_woman_commitee,odex_benefit.group_benefit_branch_manager,odex_benefit.group_benefit_manager"/>
<button name="action_refuse" type="object"
string="Refuse" class="oe_highlight"
states="first_approve,second_approve,draft,send_request"/>
<field name="state" widget="statusbar" statusbar_visible="draft,researcher,send_request,first_approve,accounting_approve,send_request_to_supplier,family_received_device,refused"/>
</header>
<sheet>
<field name="is_payment_order_done" invisible="1"/>
<widget name="web_ribbon" title="Payment Order Done" bg_color="bg-success"
attrs="{'invisible': [('is_payment_order_done', '=', False)]}"/>
states="approval_of_beneficiary_services"
groups="odex_benefit.group_benefit_accounting_accept"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,researcher,send_request,first_approve,accounting_approve,send_request_to_supplier,family_received_device,refused"/>
</header>
<sheet>
<field name="is_payment_order_done" invisible="1"/>
<widget name="web_ribbon" title="Payment Order Done" bg_color="bg-success"
attrs="{'invisible': [('is_payment_order_done', '=', False)]}"/>
<group>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<field name="date" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" required="1"/>
<field name="benefit_type" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" required="1"/>
<field name="family_id" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" required="1"/>
<field name="family_category" force_save="1"/>
<field name="researcher_id" force_save="1"/>
<field name="benefit_member_count" force_save="1"/>
<field name="eid_gift_benefit_count" attrs="{'invisible':['|',('service_type','!=','eid_gift'),('benefit_type','!=','family')]}"/>
<field name="branch_custom_id" force_save="1"/>
<field name="member_id" attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher','send_request'])],'required':[('benefit_type','=','member')]}"/>
<field name="member_age" attrs="{'invisible':[('benefit_type','!=','member')]}"/>
<field name="account_id" invisible="1"/>
<field name="device_account_id" invisible="1"/>
<field name="accountant_id" attrs="{'invisible':[('state','in',['draft','researcher','send_request','first_approve','second_approve'])]}"/>
<field name="payment_order_id" readonly="1" groups="odex_benefit.group_benefit_accounting_accept" invisible="1"/>
<field name="vendor_bill" readonly="1" attrs="{'invisible':[('service_type','!=','electrical_devices')]}"/>
<field name="is_service_producer" invisible="1"/>
<field name="service_producer_id" attrs="{'invisible':[('is_service_producer','=',False)],'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
</group>
<group>
<field name="available_service_cats" invisible="1"/>
<field name="service_cat" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" domain="[('id','in',available_service_cats)]" required="1"/>
<field name="need_status" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="main_service_category" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" invisible="1"/>
<field name="sub_service_category" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" invisible="1"/>
<field name="requested_service_amount" attrs="{'readonly': [
<field name="date"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
required="1"/>
<field name="benefit_type"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
required="1"/>
<field name="family_id"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
required="1"/>
<field name="family_category" force_save="1"/>
<field name="researcher_id" force_save="1"/>
<field name="benefit_member_count" force_save="1"/>
<field name="eid_gift_benefit_count"
attrs="{'invisible':['|',('service_type','!=','eid_gift'),('benefit_type','!=','family')]}"/>
<field name="branch_custom_id" force_save="1"/>
<field name="member_id"
attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher','send_request'])],'required':[('benefit_type','=','member')]}"/>
<field name="member_age" attrs="{'invisible':[('benefit_type','!=','member')]}"/>
<field name="account_id" invisible="1"/>
<field name="device_account_id" invisible="1"/>
<field name="accountant_id"
attrs="{'invisible':[('state','in',['draft','researcher','send_request','first_approve','second_approve'])]}"/>
<field name="payment_order_id" readonly="1"
groups="odex_benefit.group_benefit_accounting_accept" invisible="1"/>
<field name="vendor_bill" readonly="1"
attrs="{'invisible':[('service_type','!=','electrical_devices')]}"/>
<field name="is_service_producer" invisible="1"/>
<field name="service_producer_id"
attrs="{'invisible':[('is_service_producer','=',False)],'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
</group>
<group>
<field name="available_service_cats" invisible="1"/>
<field name="service_cat"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
domain="[('id','in',available_service_cats)]" required="1"/>
<field name="need_status"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="main_service_category"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
invisible="1"/>
<field name="sub_service_category"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
invisible="1"/>
<field name="requested_service_amount" attrs="{'readonly': [
'|',
'&amp;',
('state', 'not in', ['draft', 'researcher', 'send_request', 'first_approve', 'second_approve', 'accounting_approve']),
('service_type', 'in', ['marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']),
('service_type', 'in', ['electrical_devices', 'home_furnishing'])
]}" force_save="1" required="1" />
<field name="exception" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}" widget="many2many_attachment_preview"/>
<field name="amount_for_buy_home_for_member_count" attrs="{'invisible':[('service_type','!=','buy_home')]}"/>
<field name="home_age" attrs="{'invisible':[('service_type','!=','buy_home')]}"/>
<field name="max_electricity_bill_amount" readonly="1" force_save="1" attrs="{'invisible':[('service_type','!=','electricity_bill')]}"/>
<field name="max_water_bill_amount" readonly="1" force_save="1" attrs="{'invisible':[('service_type','!=','water_bill')]}"/>
<field name="aid_amount" invisible="1"/>
<field name="description" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="service_attach" invisible="1" widget="many2many_attachment_preview"/>
<field name="has_marriage_course" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])],'invisible':[('service_type','!=','marriage')],'required':[('service_type','=','marriage')]}"/>
<field name="service_type" invisible="1"/>
<field name="refuse_reason_id" attrs="{'invisible': [('refuse_reason_id', '=', False)]}" readonly="1"/>
<field name="return_reason" attrs="{'invisible': [('return_reason', '=', False)]}" readonly="1"/>
<field name="specialist_note" attrs="{'invisible': [('return_reason', '=', False)]}"/>
<field name="required_attach" invisible="1"/>
</group>
]}" force_save="1" required="1"/>
<field name="exception"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}"
widget="many2many_attachment_preview"/>
<field name="amount_for_buy_home_for_member_count"
attrs="{'invisible':[('service_type','!=','buy_home')]}"/>
<field name="home_age" attrs="{'invisible':[('service_type','!=','buy_home')]}"/>
<field name="max_electricity_bill_amount" readonly="1" force_save="1"
attrs="{'invisible':[('service_type','!=','electricity_bill')]}"/>
<field name="max_water_bill_amount" readonly="1" force_save="1"
attrs="{'invisible':[('service_type','!=','water_bill')]}"/>
<field name="aid_amount" invisible="1"/>
<field name="description"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="service_attach" invisible="1" widget="many2many_attachment_preview"/>
<field name="has_marriage_course"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])],'invisible':[('service_type','!=','marriage')],'required':[('service_type','=','marriage')]}"/>
<field name="service_type" invisible="1"/>
<field name="refuse_reason_id" attrs="{'invisible': [('refuse_reason_id', '=', False)]}"
readonly="1"/>
<field name="refuse_reason" attrs="{'invisible': [('refuse_reason', '=', False)]}"
readonly="1"/>
<field name="return_reason" attrs="{'invisible': [('return_reason', '=', False)]}"
readonly="1"/>
<field name="specialist_note" attrs="{'invisible': [('return_reason', '=', False)]}"/>
<field name="required_attach" invisible="1"/>
</group>
<notebook>
<page string="Services Attachments Settings" attrs="{'invisible':[('required_attach','=',False)]}">
<field name="attachment_lines" widget="one2many_list">
<tree editable="bottom" delete="0">
<field name="name"/>
<field name="service_attach" widget="many2many_attachment_preview"/>
<field name="notes"/>
<field name="service_type" invisible="1"/>
</tree>
</field>
</page>
<page string="Rent Information" attrs="{'invisible':[('service_type', '!=', 'rent'),'|',('service_type', '!=', 'alternative_housing'),('providing_alternative_housing_based_rent','=',False)]}">
</group>
<notebook>
<page string="Services Attachments Settings"
attrs="{'invisible':[('required_attach','=',False)]}">
<field name="attachment_lines" widget="one2many_list">
<tree editable="bottom" delete="0">
<field name="name"/>
<field name="service_attach" widget="many2many_attachment_preview"/>
<field name="notes"/>
<field name="service_type" invisible="1"/>
</tree>
</field>
</page>
<page string="Rent Information"
attrs="{'invisible':[('service_type', '!=', 'rent'),'|',('service_type', '!=', 'alternative_housing'),('providing_alternative_housing_based_rent','=',False)]}">
<form>
<sheet>
<group>
<group attrs="{'invisible':[('service_type', '=', 'alternative_housing')]}">
<group attrs="{'invisible':[('service_type', '=', 'alternative_housing')]}">
<separator string="Rent Contract Information" colspan="2"/>
<br/>
<field name="rent_payment_date_exception" widget="boolean_toggle"/>
<field name="rent_payment_date" attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',False)]}"/>
<field name="rent_contract_number" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="rent_start_date" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="rent_end_date" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<label for="start" string="Period" />
<field name="rent_payment_date"
attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',False)]}"/>
<field name="rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="rent_start_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="rent_end_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<label for="start" string="Period"/>
<div name="dates" class="o_row">
<field name="start" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only" aria-label="Arrow icon" title="Arrow" />
<i class="fa fa-long-arrow-right mx-2 oe_read_only" aria-label="Arrow icon" title="Arrow" attrs="{'invisible': [('start', '=', False), ('end', '=', False)]}" />
<field name="end" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" />
<field name="start"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only"
aria-label="Arrow icon" title="Arrow"/>
<i class="fa fa-long-arrow-right mx-2 oe_read_only"
aria-label="Arrow icon" title="Arrow"
attrs="{'invisible': [('start', '=', False), ('end', '=', False)]}"/>
<field name="end"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
</div>
<field name="rent_amount" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="rent_amount_payment" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="payment_type" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="rent_attachment" widget="many2many_attachment_preview" attrs="{'invisible':[('benefit_type','!=','family')]}" force_save="1"/>
<field name="member_rent_contract_number" attrs="{'invisible':[('benefit_type','!=','member')]}" force_save="1"/>
<field name="member_rent_start_date" attrs="{'invisible':[('benefit_type','!=','member')]}" force_save="1"/>
<field name="member_rent_end_date" attrs="{'invisible':[('benefit_type','!=','member')]}" force_save="1"/>
<field name="member_rent_attachment" widget="many2many_attachment_preview" attrs="{'invisible':[('benefit_type','!=','member')]}" force_save="1"/>
<field name="new_rent_contract" widget="boolean_toggle" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<!-- <field name="is_alternative_housing" widget="boolean_toggle"/>-->
<field name="rent_amount"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="rent_amount_payment"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="payment_type"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="rent_attachment" widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/>
<field name="member_rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/>
<field name="member_rent_start_date"
attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/>
<field name="member_rent_end_date"
attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/>
<field name="member_rent_attachment"
widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/>
<field name="new_rent_contract" widget="boolean_toggle"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<!-- <field name="is_alternative_housing" widget="boolean_toggle"/>-->
</group>
<group attrs="{'invisible':[('benefit_type','!=','family')]}">
<separator string="Rent Amounts" colspan="2"/>
@ -149,7 +254,8 @@
<field name="estimated_rent_amount"/>
<field name="estimated_rent_amount_payment"/>
<field name="paid_rent_amount"/>
<field name="added_amount_if_mother_dead" attrs="{'invisible':[('service_type','=','alternative_housing')]}"/>
<field name="added_amount_if_mother_dead"
attrs="{'invisible':[('service_type','=','alternative_housing')]}"/>
</group>
</group>
<group attrs="{'invisible':[('new_rent_contract','=',False),'|',('service_type', '!=', 'alternative_housing'),('providing_alternative_housing_based_rent','=',False)]}">
@ -157,21 +263,36 @@
<separator string="New Rent Contract Information" colspan="2"/>
<br/>
<field name="new_rent_payment_date_exception" widget="boolean_toggle"/>
<field name="new_rent_payment_date" attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',True)]}"/>
<field name="new_rent_contract_number" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_start_date" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_end_date" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<label for="new_start" string="Period" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<div name="dates" class="o_row" attrs="{'invisible':[('benefit_type','!=','family')]}">
<field name="new_start" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only" aria-label="Arrow icon" title="Arrow" />
<i class="fa fa-long-arrow-right mx-2 oe_read_only" aria-label="Arrow icon" title="Arrow" attrs="{'invisible': [('new_start', '=', False), ('new_end', '=', False)]}" />
<field name="new_end" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" />
<field name="new_rent_payment_date"
attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',True)]}"/>
<field name="new_rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_start_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_end_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<label for="new_start" string="Period"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<div name="dates" class="o_row"
attrs="{'invisible':[('benefit_type','!=','family')]}">
<field name="new_start"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only"
aria-label="Arrow icon" title="Arrow"/>
<i class="fa fa-long-arrow-right mx-2 oe_read_only"
aria-label="Arrow icon" title="Arrow"
attrs="{'invisible': [('new_start', '=', False), ('new_end', '=', False)]}"/>
<field name="new_end"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
</div>
<field name="new_rent_amount" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_amount_payment" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_payment_type" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_attachment" widget="many2many_attachment_preview" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_amount"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_amount_payment"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_payment_type"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_attachment" widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
</group>
<group>
</group>
@ -179,80 +300,93 @@
</sheet>
</form>
</page>
<page string="Maintenance Service" attrs="{'invisible':[('service_type', '!=', 'home_maintenance')]}">
<field name="maintenance_items_ids" widget="one2many_list">
<tree editable="bottom">
<field name="maintenance_items_id"/>
</tree>
</field>
</page>
<page string="Home Restoration Service" attrs="{'invisible':[('service_type', '!=', 'home_restoration')]}">
<group>
<page string="Maintenance Service"
attrs="{'invisible':[('service_type', '!=', 'home_maintenance')]}">
<field name="maintenance_items_ids" widget="one2many_list">
<tree editable="bottom">
<field name="maintenance_items_id"/>
</tree>
</field>
</page>
<page string="Home Restoration Service"
attrs="{'invisible':[('service_type', '!=', 'home_restoration')]}">
<group>
<field name="restoration_max_amount"/>
<field name="has_money_field_is_appearance" invisible="1"/>
<field name="has_money_to_pay_first_payment" attrs="{'invisible':[('has_money_field_is_appearance', '=', False)],'required':[('has_money_field_is_appearance', '=', True)]}"/>
</group>
</page>
<page string="Complete Building House" attrs="{'invisible':[('service_type', '!=', 'complete_building_house')]}">
<group>
<field name="max_complete_building_house_amount"/>
<field name="has_money_for_payment" attrs="{'invisible':[('has_money_for_payment_is_appearance', '=', False)],'required':[('has_money_for_payment_is_appearance', '=', True)]}"/>
<field name="has_money_for_payment_is_appearance" invisible="1"/>
</group>
<field name="has_money_to_pay_first_payment"
attrs="{'invisible':[('has_money_field_is_appearance', '=', False)],'required':[('has_money_field_is_appearance', '=', True)]}"/>
</group>
</page>
<page string="Alternative Housing Service" attrs="{'invisible':[('service_type', '!=', 'alternative_housing')]}">
<group>
<page string="Complete Building House"
attrs="{'invisible':[('service_type', '!=', 'complete_building_house')]}">
<group>
<field name="max_complete_building_house_amount"/>
<field name="has_money_for_payment"
attrs="{'invisible':[('has_money_for_payment_is_appearance', '=', False)],'required':[('has_money_for_payment_is_appearance', '=', True)]}"/>
<field name="has_money_for_payment_is_appearance" invisible="1"/>
</group>
</page>
<page string="Alternative Housing Service"
attrs="{'invisible':[('service_type', '!=', 'alternative_housing')]}">
<group>
<field name="providing_alternative_housing_based_rent"/>
<field name="rent_for_alternative_housing"/>
</group>
</page>
<page string="Electrical Devices Service" attrs="{'invisible':[('service_type', '!=', 'electrical_devices')]}">
<group>
<field name="device_id" attrs="{'required':[('service_type', '=', 'electrical_devices')]}"/>
<field name="requested_quantity" attrs="{'required':[('service_type', '=', 'electrical_devices')]}"/>
</group>
</page>
<page string="Electrical Devices Service"
attrs="{'invisible':[('service_type', '!=', 'electrical_devices')]}">
<group>
<field name="device_id"
attrs="{'required':[('service_type', '=', 'electrical_devices')]}"/>
<field name="requested_quantity"
attrs="{'required':[('service_type', '=', 'electrical_devices')]}"/>
<field name="exception_or_steal" widget="boolean_toggle"/>
<field name="exception_or_steal_attach" widget="many2many_attachment_preview" attrs="{'invisible':[('exception_or_steal', '=', False)]}"/>
</group>
</page>
<page string="Home Furnishing Service" attrs="{'invisible':[('service_type', '!=', 'home_furnishing')]}">
<field name="exception_or_steal_attach" widget="many2many_attachment_preview"
attrs="{'invisible':[('exception_or_steal', '=', False)]}"/>
</group>
</page>
<page string="Home Furnishing Service"
attrs="{'invisible':[('service_type', '!=', 'home_furnishing')]}">
<group>
<field name="home_furnishing_exception"/>
</group>
</group>
<field name="furnishing_items_ids" widget="one2many_list">
<tree editable="bottom">
<field name="home_furnishing_items"/>
<field name="furnishing_cost"/>
<!-- <field name="max_furnishing_cost"/>-->
<field name="price_first"/>
<field name="price_first_attach" widget="many2many_attachment_preview"/>
<field name="price_second"/>
<field name="price_second_attach" widget="many2many_attachment_preview"/>
</tree>
<tree editable="bottom">
<field name="home_furnishing_items"/>
<field name="furnishing_cost"/>
<!-- <field name="max_furnishing_cost"/>-->
<field name="price_first"/>
<field name="price_first_attach" widget="many2many_attachment_preview"/>
<field name="price_second"/>
<field name="price_second_attach" widget="many2many_attachment_preview"/>
</tree>
</field>
</page>
<page string="Transportation Insurance Service" attrs="{'invisible':[('service_type', '!=', 'transportation_insurance')]}">
</page>
<page string="Transportation Insurance Service"
attrs="{'invisible':[('service_type', '!=', 'transportation_insurance')]}">
<group>
<field name="service_reason_id" options="{'no_create': True, 'no_open': True, 'no_create_edit': True}"/>
<field name="service_reason_id"
options="{'no_create': True, 'no_open': True, 'no_create_edit': True}"/>
<field name="max_amount" readonly="1" force_save="1"/>
<field name="requests_counts"/>
</group>
</page>
<page string="Marriage Service" attrs="{'invisible':[('service_type','!=','marriage')]}">
<group>
<field name="member_age"/>
<field name="member_payroll"/>
</group>
</page>
<page string="Eligibility Criteria">
<group>
<field name="service_conditions"/>
</group>
</page>
</notebook>
</sheet>
</group>
</page>
<page string="Marriage Service" attrs="{'invisible':[('service_type','!=','marriage')]}">
<group>
<field name="member_age"/>
<field name="member_payroll"/>
</group>
</page>
<page string="Eligibility Criteria">
<group>
<field name="service_conditions"/>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
<field name="activity_ids" />
<field name="activity_ids"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
@ -272,11 +406,14 @@
<field name="main_service_category" invisible="1"/>
<field name="sub_service_category" invisible="1"/>
<field name="service_cat"/>
<field name="requested_service_amount" />
<field name="requested_service_amount"/>
<field name="payment_order_id" invisible="1" groups="odex_benefit.group_benefit_accounting_accept"/>
<field name="vendor_bill" invisible="1" groups="odex_benefit.group_benefit_accounting_accept"/>
<field name="state" widget="badge" decoration-success="state in ['second_approve']" decoration-muted="state == 'draft'"
decoration-danger="state in ['refused']" decoration-info="state in ['first_approve','send_request']" decoration-warning="state in ['researcher']"/>
<field name="state" widget="badge" decoration-success="state in ['second_approve']"
decoration-muted="state == 'draft'"
decoration-danger="state in ['refused']"
decoration-info="state in ['first_approve','send_request']"
decoration-warning="state in ['researcher']"/>
</tree>
</field>
</record>
@ -286,51 +423,62 @@
<field name="arch" type="xml">
<search>
<group string="Group By">
<filter string="Branch" name="branch_custom_id" context="{'group_by': 'branch_custom_id'}"/>
<filter string="Main Service" name="main_service_category" context="{'group_by': 'main_service_category'}"/>
<filter string="Sub Service Category" name="sub_service_category" context="{'group_by': 'sub_service_category'}"/>
<filter string="Service Cat" name="service_cat" context="{'group_by': 'service_cat'}"/>
<filter string="Branch" name="branch_custom_id" context="{'group_by': 'branch_custom_id'}"/>
<filter string="Main Service" name="main_service_category"
context="{'group_by': 'main_service_category'}"/>
<filter string="Sub Service Category" name="sub_service_category"
context="{'group_by': 'sub_service_category'}"/>
<filter string="Service Cat" name="service_cat" context="{'group_by': 'service_cat'}"/>
</group>
<separator/>
<filter string="Draft" name="draft" domain="[('state','=','draft')]"/>
<filter string="Draft" name="draft" domain="[('state','=','draft')]"/>
<separator/>
<separator/>
<filter string="Send Request" name="send_request" domain="[('state', '=', 'send_request')]"/>
<filter string="Send Request" name="send_request" domain="[('state', '=', 'send_request')]"/>
<separator/>
<separator/>
<filter string="Request First Approve" name="first_approve" domain="[('state', '=', 'first_approve')]"/>
<filter string="Request First Approve" name="first_approve"
domain="[('state', '=', 'first_approve')]"/>
<separator/>
<separator/>
<filter string="Request Second Approve" name="second_approve" domain="[('state', '=', 'second_approve')]"/>
<filter string="Request Second Approve" name="second_approve"
domain="[('state', '=', 'second_approve')]"/>
<separator/>
<separator/>
<filter string="Accounting Approve" name="accounting_approve" domain="[('state', '=', 'accounting_approve')]"/>
<filter string="Accounting Approve" name="accounting_approve"
domain="[('state', '=', 'accounting_approve')]"/>
<separator/>
<separator/>
<filter string="Refused" name="refused" domain="[('state', '=', 'refused')]"/>
<filter string="Refused" name="refused" domain="[('state', '=', 'refused')]"/>
<separator/>
<separator/>
<filter string="Payment Order Done" name="payment_order_done" domain="[('payment_order_id', '!=', False)]"/>
<filter string="Payment Order Done" name="payment_order_done"
domain="[('payment_order_id', '!=', False)]"/>
<separator/>
<separator/>
<filter string="Need Payment Order" name="payment_order_done" domain="[('payment_order_id', '=', False),('state','=','accounting_approve')]"/>
<filter string="Need Payment Order" name="payment_order_done"
domain="[('payment_order_id', '=', False),('state','=','accounting_approve')]"/>
<separator/>
<separator/>
<filter string="Need Vendor Bill" name="need_vendor_bill" domain="[('vendor_bill', '=', False),('state','=','family_received_device')]"/>
<filter string="Need Vendor Bill" name="need_vendor_bill"
domain="[('vendor_bill', '=', False),('state','=','family_received_device')]"/>
<separator/>
<separator/>
<filter string="Vendor Bill Done" name="need_vendor_bill" domain="[('vendor_bill', '!=', False),('state','=','family_received_device')]"/>
<separator/>
<separator/>
<filter string="Send Request To Supplier" name="send_request_to_supplier" domain="[('state','=','send_request_to_supplier')]"/>
<filter string="Vendor Bill Done" name="need_vendor_bill"
domain="[('vendor_bill', '!=', False),('state','=','family_received_device')]"/>
<separator/>
<separator/>
<filter string="Family Received Device" name="family_received_device" domain="[('state','=','family_received_device')]"/>
<filter string="Send Request To Supplier" name="send_request_to_supplier"
domain="[('state','=','send_request_to_supplier')]"/>
<separator/>
<separator/>
<filter string="Family Received Device" name="family_received_device"
domain="[('state','=','family_received_device')]"/>
<separator/>
<searchpanel>
<field name="state" string="State" enable_counters="1"/>
<field name="service_cat" string="Categories" enable_counters="1"/>
</searchpanel>
<field name="service_cat" string="Categories" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>

View File

@ -15,13 +15,15 @@
<group>
<field name="service_number"/>
<field name="service_type"/>
<field name="benefit_type"/>
<field name="benefit_type" required="1"/>
<field name="allow_non_beneficiary" widget="boolean_toggle"/>
<field name="service_producer_id"
attrs="{'invisible':['|',('is_main_service','=',True),('is_service_producer','=',False)]}"/>
</group>
<group>
<field name="service_category"/>
<field name="parent_service" attrs="{'invisible':[('is_main_service','=',True)]}"/>
<field name="benefit_category_ids" widget="many2many_tags" required="1"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
@ -136,22 +138,17 @@
</tree>
</field>
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_maintenance_amount"/>
</group>
</page>
<page string="Complete Building House Settings"
attrs="{'invisible':[('service_type','!=','complete_building_house')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_complete_building_house_amount"/>
</group>
</page>
<page string="Electrical Devices Settings"
attrs="{'invisible':[('service_type','!=','electrical_devices')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
</group>
<field name="electrical_devices_lines" widget="one2many_list">
<tree editable="bottom">
<field name="min_count_member"/>
@ -166,7 +163,6 @@
<page string="Home furnishing Settings"
attrs="{'invisible':[('service_type','!=','home_furnishing')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_furnishing_amount"/>
<field name="max_furnishing_amount_if_exception"/>
</group>
@ -201,7 +197,6 @@
</page>
<page string="Buy Car Settings" attrs="{'invisible':[('service_type','!=','buy_car')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_buy_car_amount"/>
<field name="min_count_member"/>
</group>
@ -209,14 +204,12 @@
<page string="Recruiting Driver Settings"
attrs="{'invisible':[('service_type','!=','recruiting_driver')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_recruiting_driver_amount"/>
</group>
</page>
<page string="Transportation Insurance Settings"
attrs="{'invisible':[('service_type','!=','transportation_insurance')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="transportation_insurance_ids" options="{'no_open': True}">
<tree editable="bottom">
<field name="name"/>
@ -228,33 +221,23 @@
</page>
<page string="Debits Settings" attrs="{'invisible':[('service_type','!=','debits')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_debits_amount"/>
</group>
</page>
<page string="Health Care Settings"
attrs="{'invisible':[('service_type','!=','health_care')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_health_care_amount"/>
</group>
</page>
<page string="Providing Medicines Medical Devices And Needs The Disabled Settings"
attrs="{'invisible':[('service_type','!=','providing_medicines_medical_devices_and_needs_the_disabled')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
</group>
</page>
<page string="Recruiting Domestic Worker Or Nurse Settings"
attrs="{'invisible':[('service_type','!=','recruiting_domestic_worker_or_nurse')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="max_recruiting_domestic_worker_or_nurse_amount"/>
</group>
</page>
<page string="Marriage Settings" attrs="{'invisible':[('service_type','!=','marriage')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="member_max_age"/>
<field name="member_max_payroll"/>
<field name="fatherless_member_amount"/>
@ -263,7 +246,6 @@
</page>
<page string="Eid Gift Settings" attrs="{'invisible':[('service_type','!=','eid_gift')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="eid_gift_max_age"/>
<field name="eid_gift_member_amount"/>
</group>
@ -271,34 +253,29 @@
<page string="Winter Clothing Settings"
attrs="{'invisible':[('service_type','!=','winter_clothing')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="winter_clothing_member_amount"/>
</group>
</page>
<page string="Ramadan Basket Settings"
attrs="{'invisible':[('service_type','!=','ramadan_basket')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="ramadan_basket_member_amount"/>
</group>
</page>
<page string="Natural disasters Settings"
attrs="{'invisible':[('service_type','!=','natural_disasters')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="natural_disasters_max_amount"/>
</group>
</page>
<page string="Legal arguments Settings"
attrs="{'invisible':[('service_type','!=','legal_arguments')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="legal_arguments_max_amount"/>
</group>
</page>
<page string="Buy Home Settings" attrs="{'invisible':[('service_type','!=','buy_home')]}">
<group>
<field name="benefit_category_ids" widget="many2many_tags"/>
<field name="buy_home_max_total_amount"/>
<field name="home_age"/>
</group>

View File

@ -12,5 +12,5 @@ class ReasonForReturnWizard(models.TransientModel):
for record in self:
record.env['service.request'].browse(self._context.get('active_id')).write({
'return_reason': record.reason,
'state': 'draft',
'state': 'researcher',
})

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from odoo import models, fields
from odoo import models, fields, _
class RefuseReasonWizard(models.TransientModel):
@ -7,10 +7,16 @@ class RefuseReasonWizard(models.TransientModel):
_description = 'Wizard to select a reason for service rejection'
reason_id = fields.Many2one('service.refuse.reason', string="Reason", required=True)
notes = fields.Text(string="Additional Notes", required=True)
def action_confirm(self):
for record in self:
record.env['service.request'].browse(self._context.get('active_id')).write({
'refuse_reason_id': record.reason_id.id,
service_request = self.env['service.request'].browse(self._context.get('active_id'))
if service_request:
service_request.write({
'refuse_reason_id': self.reason_id.id,
'refuse_reason': self.notes,
'state': 'refused',
})
message = _("Request was refused.\nReason: %s\nNotes: %s") % (self.reason_id.name, self.notes)
service_request.message_post(body=message, message_type='notification')
return {'type': 'ir.actions.act_window_close'}

View File

@ -6,6 +6,7 @@
<form string="Select Reason">
<group>
<field name="reason_id"/>
<field name="notes"/>
</group>
<footer>
<button string="Confirm" type="object" name="action_confirm" class="btn-primary"/>

View File

@ -1,7 +1,20 @@
from odoo import models, fields
from odoo import models, fields, api
from odoo.exceptions import ValidationError
from odoo import _
class ResPartner(models.Model):
_inherit = 'res.partner'
bank_journal_id = fields.Many2one('account.journal', domain="[('type', '=', 'bank')]")
bank_journal_id = fields.Many2one('account.journal', domain="[('type', '=', 'bank')]")
@api.constrains('is_family', 'is_benefit', 'is_donor', 'is_sponsor_portal')
def _check_family_beneficiary_exclusivity(self):
for rec in self:
is_family_or_beneficiary = rec.is_family or rec.is_benefit
is_donor_vendor_sponsor = rec.is_donor or rec.is_sponsor_portal or rec.is_vendor
if is_family_or_beneficiary and is_donor_vendor_sponsor:
raise ValidationError(_("A contact cannot be both Family/Beneficiary and Donor/Member/Sponsor at the same time"))

View File

@ -239,7 +239,7 @@ class TakafulSponsor(models.Model):
second_name = values.get('second_name')
middle_name = values.get('middle_name')
family_name = values.get('family_name')
name = self.sponsor_title.browse(sponsor_title).name + " " + first_name + " " + second_name + " " + middle_name + " " + family_name
name = f'{self.sponsor_title.browse(sponsor_title).name} {first_name} {second_name} {middle_name} {family_name}'
values.update({'name': name})
values.update({'lang': 'ar_001'})
@ -259,6 +259,10 @@ class TakafulSponsor(models.Model):
res = res.sudo().create_user(res)
res.partner_id = res.user_id.partner_id.id
res.partner_id.write({
'is_sponsor_portal': True,
'is_donor': True,
})
return res

View File

@ -20,13 +20,13 @@
<page string="Account Type">
<group>
<group>
<field name="is_family" />
<field name="is_sponsor_portal" />
<field name="is_benefit" />
<field name="is_family" readonly="1"/>
<field name="is_sponsor_portal" readonly="1"/>
<field name="is_benefit" readonly="1"/>
</group>
<group>
<field name="is_vendor" />
<field name="is_donor" />
<field name="is_vendor" readonly="1"/>
<field name="is_donor" readonly="1"/>
</group>
</group>
</page>