Merge pull request #4832 from expsa/tt_dev_odex25_ensan

IMP benefit
This commit is contained in:
kchyounes19 2025-10-08 08:03:56 +01:00 committed by GitHub
commit 424ebeafcc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 126 additions and 259 deletions

View File

@ -2346,7 +2346,6 @@ msgstr "اسم المرفق"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__attachment_ids
@ -2685,7 +2684,6 @@ msgstr "فئات الاسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_electricity_bill_lines__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_rent_lines__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_water_bill_lines__benefit_category_id
msgid "Benefit Category"
@ -4342,7 +4340,6 @@ msgstr "قم بإنشاء أول فترة تعليمية"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_uid
@ -4498,7 +4495,6 @@ msgstr "انشئ بواسطة"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_date
@ -5118,7 +5114,6 @@ msgstr "نوع المرض"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__display_name
@ -7039,93 +7034,11 @@ msgstr ""
msgid "Has Unreconciled Entries"
msgstr "يحتوي قيود غير مسواة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__has_money_field_is_appearance
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__has_money_for_payment_is_appearance
msgid "Has money Field is appearance?"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__has_money_for_payment
msgid "Has money for payment?"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__has_money_to_pay_first_payment
msgid "Has money to pay first payment?"
msgstr ""
#. 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 ""
"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 employed with a salary exceeding %s."
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 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 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 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
#: model:res.groups,name:odex_benefit.group_benefit_woman_commitee
msgid "Head of the Women's Committee"
msgstr "رئيس العمليات"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_type__health_care
msgid "Health Care"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Health Care Settings"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__health_status
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__health_status
@ -7222,31 +7135,11 @@ msgstr ""
msgid "Home Restoration"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__home_restoration_lines
msgid "Home Restoration Lines"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Home Restoration Service"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Home Restoration Service Settings"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__service_type__home_furnishing
msgid "Home furnishing"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Home furnishing Settings"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__hospital_id
msgid "Hospital"
@ -7459,7 +7352,6 @@ msgstr "مرفق الآيبان مطلوب."
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__id
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__id
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__id
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__id
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__id
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__id
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__id
@ -8714,7 +8606,6 @@ msgstr "الجهة التعليمية السابقة"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_house_need____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need____last_update
@ -8895,7 +8786,6 @@ msgstr "التخصص السابق"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_uid
@ -9051,7 +8941,6 @@ msgstr "آخر تحديث بواسطة"
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_items__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_hospital_hospital__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_date
@ -9451,17 +9340,9 @@ msgid "Marriage"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__marriage_certificate
msgid "Marriage Certificate"
msgstr "شهادة الزواج"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#, python-format
msgid ""
"Marriage Certificate is required for member '%s' when marked as married and "
"not a mother."
msgstr "شهادة الزواج مطلوبة للفرد '%s' عند تحديده كمتزوج وليس أماً."
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_amount_for_student
msgid "Max Amount for Student"
msgstr "الحد الاقصى لإيجار الطالب"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
@ -10593,7 +10474,6 @@ msgstr "نوع النشاط التالي"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_marriage_course__no
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_for_payment__no
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_to_pay_first_payment__no
msgid "No"
msgstr "لا"
@ -13222,7 +13102,6 @@ msgstr "طلبات الخدمات"
#: model:ir.model.fields,field_description:odex_benefit.field_electricity_bill_lines__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_lines__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_rent_lines__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_transportation_insurance__services_settings_id
#: model:ir.model.fields,field_description:odex_benefit.field_water_bill_lines__services_settings_id
@ -15595,7 +15474,6 @@ msgstr "سنوي"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_marriage_course__yes
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_for_payment__yes
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_to_pay_first_payment__yes
msgid "Yes"
msgstr "نعم"
@ -16533,11 +16411,6 @@ msgstr ""
msgid "home.maintenance.lines"
msgstr ""
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_home_restoration_lines
msgid "home.restoration.lines"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.hospital_tree
msgid "hospital"
@ -18005,11 +17878,6 @@ msgstr "مرة كل فترة"
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?"

View File

@ -105,9 +105,7 @@ class ServiceRequest(models.Model):
# maintenance_items_id = fields.Many2one('home.maintenance.lines', string="Maintenance Items")
maintenance_items_ids = fields.One2many('home.maintenance.items','service_request_id', string="Maintenance Items",)
#Home restoration fields
restoration_max_amount = fields.Float(string='Restoration Max Amount',compute='_get_restoration_max_amount')
has_money_to_pay_first_payment = fields.Selection([('yes', 'Yes'), ('no', 'No')],string='Has money to pay first payment?')
has_money_field_is_appearance = fields.Boolean(string='Has money Field is appearance?',compute='_get_money_field_is_appearance')
restoration_max_amount = fields.Float(string='Restoration Max Amount')
payment_order_id = fields.Many2one('payment.orders',string='Payment Order')
is_payment_order_done = fields.Boolean(string='Is Payment Order Done?')
aid_amount = fields.Float(string='Aid Amount',compute='_get_aid_amount')
@ -180,6 +178,10 @@ class ServiceRequest(models.Model):
exception_attach = fields.Many2many('ir.attachment', 'rel_exception_attachment_service_request', 'service_request_id',
'attachment_id', string='Exception Attachment')
service_conditions = fields.Html(related='service_cat.service_conditions', string="Service Conditions")
service_approval_date = fields.Datetime(string="Service Approval Date",readonly=True,)
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.user.company_id)
currency_id = fields.Many2one('res.currency', string="Currency", related='company_id.currency_id')
service_max_amount = fields.Monetary(string="Maximum Amount", currency_field='currency_id', copy=False)
@ -385,21 +387,6 @@ class ServiceRequest(models.Model):
rec.added_amount_if_mother_dead = 0.0
if rec.family_id.mother_marital_conf.is_dead:
rec.added_amount_if_mother_dead = rec.service_cat.raise_amount_for_orphan
@api.depends('service_cat','family_id')
def _get_restoration_max_amount(self):
self.restoration_max_amount = 0.0
for line in self.service_cat.home_restoration_lines:
if line.benefit_category_id == self.family_category:
self.restoration_max_amount = line.max_amount
# else:
# self.restoration_max_amount = 0.0
@api.depends('requested_service_amount', 'restoration_max_amount')
def _get_money_field_is_appearance(self):
for rec in self:
if rec.requested_service_amount and rec.restoration_max_amount and rec.requested_service_amount > rec.restoration_max_amount :
rec.has_money_field_is_appearance = True
else:
rec.has_money_field_is_appearance = False
@api.depends('requested_service_amount', 'max_complete_building_house_amount')
def _get_money_for_payment_is_appearance(self):
@ -474,10 +461,12 @@ class ServiceRequest(models.Model):
else:
if rec.service_type == 'buy_car':
rec.family_id.has_car = True
rec.service_approval_date = fields.Datetime.now()
rec.state = 'send_request_to_supplier'
def action_supplier_approve(self):
for rec in self:
rec.service_approval_date = fields.Datetime.now()
rec.state = 'send_request_to_supplier'
def action_request_done(self):
@ -506,13 +495,6 @@ class ServiceRequest(models.Model):
'target': 'new',
}
@api.onchange('service_cat','family_id')
def onchange_service_cat(self):
for rec in self:
if rec.service_cat.service_type == 'rent' and rec.family_id.property_type != 'rent' and rec.family_id.property_type != 'rent_shared' and rec.benefit_type == 'family':
raise UserError(_("You cannot benefit from this service (property type not rent)"))
if rec.service_cat.service_type == 'home_restoration' and rec.family_id.property_type != 'ownership' and rec.family_id.property_type != 'ownership_shared' and rec.family_id.property_type != 'charitable' and rec.benefit_type == 'family':
raise UserError(_("You cannot benefit from this service (property type not ownership)"))
@api.onchange('rent_payment_date','new_rent_payment_date')
def onchange_rent_payment_date(self):
@ -557,6 +539,8 @@ class ServiceRequest(models.Model):
@api.onchange('service_cat','family_id')
def _onchange_service_cat(self):
if self.service_cat.service_type == 'rent' and self.family_id.property_type != 'rent' and self.family_id.property_type != 'rent_shared' and self.benefit_type == 'family':
raise UserError(_("You cannot benefit from this service (property type not rent)"))
electricity_bill_amount = max(self.service_cat.electricity_bill_lines.filtered(lambda x : x.benefit_category_id.id == self.family_category.id and
x.min_count_member <= self.benefit_member_count <= x.max_count_member).mapped('max_amount_for_electricity_bill'), default=0.0)
water_bill_amount = max(self.service_cat.water_bill_lines.filtered(lambda x : x.benefit_category_id.id == self.family_category.id and
@ -650,8 +634,7 @@ class ServiceRequest(models.Model):
if existing_request_maintenance:
raise UserError(
_("You cannot request this service with maintenance service in the same year."))
if rec.has_money_to_pay_first_payment == 'no':
home_restoration_line_id = rec.service_cat.home_restoration_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id)
home_restoration_line_id = rec.service_cat.category_amount_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id)
if rec.requested_service_amount > home_restoration_line_id.max_amount:
raise UserError(
_("You cannot request more than %s") % home_restoration_line_id.max_amount
@ -969,6 +952,8 @@ class ServiceRequest(models.Model):
if rec.benefit_type:
if rec.benefit_type == 'family':
domain = [('service_type', '!=', 'main_service'),('benefit_type','!=','member'),('benefit_category_ids', 'in', [rec.family_category.id])]
if rec.family_id.property_type not in ['ownership','ownership_shared','charitable']:
domain.append(('service_type','!=','home_restoration'))
rec.available_service_cats = rec.available_service_cats.sudo().search(domain)
elif rec.benefit_type == 'member' and rec.member_id:
domain = [

View File

@ -27,7 +27,7 @@ class ServicesSettings(models.Model):
rent_lines = fields.One2many('rent.lines','services_settings_id')
attachment_lines = fields.One2many('service.attachments.settings','service_id')
#Fields for home restoration
home_restoration_lines = fields.One2many('home.restoration.lines','services_settings_id')
category_amount_lines = fields.One2many('category.amount.line','services_settings_id')
rent_amount_for_alternative_housing = fields.Float(string='Rent Amount For Alternative Housing')
rent_period = fields.Integer('Rent Period')
home_maintenance_lines = fields.One2many('home.maintenance.lines','services_settings_id')
@ -102,8 +102,14 @@ class ServicesSettings(models.Model):
('periodic', 'Every Period'),
('unlimited', 'Unlimited'),
], string="Allowed Recurrence", default='once')
recurrence_period = fields.Integer(
string="Recurrence Period (Months)"
recurrence_period = fields.Selection([
('months', 'Months'),
('years', 'Years'),],
string="Recurrence Period", default='months'
)
recurrence_interval = fields.Integer(
string="Recurrence Interval",
default=1,
)
requires_visit = fields.Boolean(
string="Requires Visit?"
@ -137,10 +143,10 @@ class RentLines(models.Model):
_("Couldn't create same benefit category and count")
)
]
class HomeRestorationLines(models.Model):
_name = 'home.restoration.lines'
class CategoryAmountLine(models.Model):
_name = 'category.amount.line'
benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category')
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
@ -205,8 +211,8 @@ class TransportationInsurance(models.Model):
name = fields.Char(string="Insurance Name", required=True)
limit_amount = fields.Float(required=True)
account_id = fields.Many2one(
'account.account',
string='Expenses Account',
domain="[('user_type_id.id', '=', 15)]",
'account.account',
string='Expenses Account',
domain="[('user_type_id.id', '=', 15)]",
required=True
)

View File

@ -135,7 +135,7 @@ access_seasonal_service,access_seasonal_services,model_seasonal_service,base.gro
access_seasonal_grant_benefit,access_seasonal_grant_benefits,model_seasonal_grant_benefit,base.group_user,1,1,1,1
access_marital_status,access_marital_status,model_marital_status,base.group_user,1,1,1,1
access_service_attachments_settings,access_service_attachments_settings,model_service_attachments_settings,base.group_user,1,1,1,1
access_home_restoration_lines,access_home_restoration_lines,model_home_restoration_lines,base.group_user,1,1,1,1
access_category_amount_line,access_category_amount_line,model_category_amount_line,base.group_user,1,1,1,1
access_home_maintenance_lines,access_home_maintenance_lines,model_home_maintenance_lines,base.group_user,1,1,1,1
access_home_maintenance_items,access_home_maintenance_items,model_home_maintenance_items,base.group_user,1,1,1,1
access_exchange_order_wizard,access_exchange_order_wizard,model_exchange_order_wizard,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
135 access_seasonal_grant_benefit access_seasonal_grant_benefits model_seasonal_grant_benefit base.group_user 1 1 1 1
136 access_marital_status access_marital_status model_marital_status base.group_user 1 1 1 1
137 access_service_attachments_settings access_service_attachments_settings model_service_attachments_settings base.group_user 1 1 1 1
138 access_home_restoration_lines access_category_amount_line access_home_restoration_lines access_category_amount_line model_home_restoration_lines model_category_amount_line base.group_user 1 1 1 1
139 access_home_maintenance_lines access_home_maintenance_lines model_home_maintenance_lines base.group_user 1 1 1 1
140 access_home_maintenance_items access_home_maintenance_items model_home_maintenance_items base.group_user 1 1 1 1
141 access_exchange_order_wizard access_exchange_order_wizard model_exchange_order_wizard base.group_user 1 1 1 1

View File

@ -8,7 +8,7 @@
<form string="Service Request">
<header>
<button name="action_send_to_researcher" type="object" states="draft"
string="Send" class="oe_highlight" />
string="Send" class="oe_highlight"/>
<button name="action_researcher_send_request" type="object" states="researcher"
string="Researcher Approval" class="oe_highlight"
groups="odex_benefit.group_benefit_researcher"
@ -126,12 +126,15 @@
<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'])]}"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="company_id" groups="base.group_multi_company"/>
</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="service_approval_date"/>
<field name="need_status"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="main_service_category"
@ -147,6 +150,8 @@
('service_type', 'in', ['marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']),
('service_type', 'in', ['electrical_devices', 'home_furnishing'])
]}" force_save="1" required="1"/>
<field name="service_max_amount"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}"
@ -308,15 +313,6 @@
</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>

View File

@ -32,7 +32,8 @@
<page string="Settings">
<group>
<group>
<field name="max_amount"/>
<field name="max_limit_type"/>
<field name="max_amount" attrs="{'invisible': [('max_limit_type', '!=', 'fixed')]}"/>
<field name="currency_id" invisible="1"/>
</group>
<group>
@ -59,12 +60,15 @@
<group>
<group>
<field name="allowed_recurrence"/>
<field name="recurrence_period"
<label for="recurrence_interval"
attrs="{'invisible': [('allowed_recurrence', '!=', 'periodic')]}"/>
<div class="o_row" attrs="{'invisible': [('allowed_recurrence', '!=', 'periodic')]}">
<field name="recurrence_interval" class="oe_inline" nolabel="1"/>
<field name="recurrence_period" class="oe_inline" nolabel="1"/>
</div>
</group>
<group>
<field name="requires_visit" widget="boolean_toggle"/>
<field name="max_limit_type"/>
</group>
</group>
</page>
@ -114,9 +118,9 @@
<field name="raise_amount_for_orphan"/>
</group>
</page>
<page string="Home Restoration Service Settings"
attrs="{'invisible':[('service_type','!=','home_restoration')]}">
<field name="home_restoration_lines" widget="one2many_list">
<page string="Amounts by Categories"
attrs="{'invisible':[('max_limit_type', '!=', 'category')]}">
<field name="category_amount_lines" widget="one2many_list">
<tree editable="bottom">
<field name="benefit_category_id"/>
<field name="max_amount"/>

View File

@ -20,16 +20,6 @@ msgstr ""
msgid "Alternative Housing"
msgstr ""
#. module: odex_benefit_project
#: model:ir.model.fields,field_description:odex_benefit_project.field_project_project__has_money_field_is_appearance
msgid "Has money Field is appearance?"
msgstr ""
#. module: odex_benefit_project
#: model:ir.model.fields,field_description:odex_benefit_project.field_project_project__has_money_to_pay_first_payment
msgid "Has money to pay first payment?"
msgstr ""
#. module: odex_benefit_project
#: model:ir.model.fields.selection,name:odex_benefit_project.selection__project_project__service_type__home_maintenance
msgid "Home Maintenance"

View File

@ -7,8 +7,6 @@ class ProjectProjectInherit(models.Model):
#Fields for 'Home restoration' service and 'alternative_housing' service
requested_service_amount = fields.Float(string="Requested Service Amount")
restoration_max_amount = fields.Float(string='Restoration Max Amount')
has_money_field_is_appearance = fields.Boolean(string='Has money Field is appearance?')
has_money_to_pay_first_payment = fields.Boolean(string='Has money to pay first payment?')
is_family_need_evacuate = fields.Boolean(string='Is family need evacuate?')
#Fields for 'complete building house' service
max_complete_building_house_amount = fields.Float(string='Max Complete Building House Amount')

View File

@ -1,6 +1,6 @@
from odoo import fields, models, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import timedelta
from datetime import datetime,timedelta
from dateutil.relativedelta import relativedelta
class ServiceRequestInherit(models.Model):
@ -8,14 +8,15 @@ class ServiceRequestInherit(models.Model):
_inherit = 'service.request'
project_id = fields.Many2one('project.project',srting='Project')
project_expected_delivery_date = fields.Date(string='Expected Delivery Date',related='project_id.date',)
rent_period = fields.Integer('Rent Period')
project_create = fields.Boolean(string='Project Create?',related='service_cat.project_create')
def action_accounting_approve(self):
super(ServiceRequestInherit, self).action_accounting_approve()
for rec in self:
if rec.service_cat.project_create:
project = self.env['project.project'].create(
if rec.service_cat.project_create and not rec.project_id:
project = self.env['project.project'].sudo().create(
{
'name': (_('%s')%rec.service_cat.service_type) +"/"+ rec.family_id.name +"/"+ rec.family_id.code,
'partner_id': rec.service_producer_id.id,
@ -23,12 +24,19 @@ class ServiceRequestInherit(models.Model):
'category_id' : rec.service_cat.category_id.id,
'requested_service_amount' : rec.requested_service_amount,
'restoration_max_amount' : rec.restoration_max_amount,
'has_money_field_is_appearance': rec.has_money_field_is_appearance,
'has_money_to_pay_first_payment' : rec.has_money_to_pay_first_payment,
'service_type' : rec.service_cat.service_type,
'max_complete_building_house_amount' : rec.max_complete_building_house_amount,
'has_money_for_payment_is_appearance' : rec.has_money_for_payment_is_appearance,
'has_money_for_payment' : rec.has_money_for_payment,
'department_execute_id': rec.family_id.branch_custom_id.branch.id,
'project_latitude': rec.family_id.lat,
'project_longitude': rec.family_id.lon,
'street': rec.family_id.street,
'street2': rec.family_id.house_number,
'city': rec.family_id.city_id.name,
'state_id': rec.family_id.city_id.state_id.id,
'zip': rec.family_id.zip,
'country_id':rec.family_id.city_id.country_id.id,
}
)
rec.project_id = project
@ -47,14 +55,70 @@ class ServiceRequestInherit(models.Model):
)
def onchange_requested_service_amount(self):
res = {}
Service = self.env['service.request']
today = fields.Date.today()
#to delete
date_before_year = today - timedelta(days=365)
date_before_seven_years = today - relativedelta(years=7)
date_before_three_years = today - relativedelta(years=3)
date_before_ten_years = today - timedelta(days=3650)
date_before_month = today - timedelta(days=30)
for rec in self:
if not rec.exception and not rec.exception_attach:
family_id = rec.family_id.id
service_type = rec.service_cat.service_type
allowed = rec.service_cat.allowed_recurrence
interval = rec.service_cat.recurrence_interval or 1
period = rec.service_cat.recurrence_period or 'months'
max_limit_type = rec.service_cat.max_limit_type
if allowed:
if allowed == 'unlimited':
continue
base_domain = [
('family_id', '=', family_id),
('service_cat.service_type', '=', service_type),
('id', '!=', rec._origin.id),
('state', '!=', 'refused')
]
if allowed == 'once':
if Service.search_count(base_domain):
raise UserError(_("You cannot request this service more than once."))
continue
last_request = Service.search(base_domain, order='date desc', limit=1)
if last_request and last_request.date:
last_date = (
last_request.date.date()
if isinstance(last_request.date, datetime)
else last_request.date
)
next_allowed_date = (
last_date + relativedelta(months=interval)
if period == 'months'
else last_date + relativedelta(years=interval)
)
if isinstance(next_allowed_date, datetime):
next_allowed_date = next_allowed_date.date()
if today < next_allowed_date:
raise UserError(_(
"You can only request this service again after %s."
) % next_allowed_date.strftime('%Y-%m-%d'))
if max_limit_type:
if max_limit_type == 'fixed':
rec.service_max_amount = rec.service_cat.max_amount
elif max_limit_type == 'category':
rec.service_max_amount = rec.service_cat.category_amount_lines.filtered(
lambda r: r.benefit_category_id.id == rec.family_category.id).max_amount
if rec.requested_service_amount > rec.service_max_amount:
raise UserError(
_("You cannot request more than %s") % rec.service_max_amount
)
# Validation for 'member' benefit type
if rec.benefit_type == 'member' and rec.service_cat.service_type == 'rent':
max_requested_amount = rec.service_cat.max_amount_for_student
@ -101,31 +165,6 @@ class ServiceRequestInherit(models.Model):
if existing_request_restoration:
raise UserError(
_("You cannot request this service with restoration service in the same year."))
# Validation for 'family' benefit type with 'home_restoration'
if rec.benefit_type == 'family' and rec.service_cat.service_type == 'home_restoration':
# Prevent multiple 'home_maintenance' requests within the same year
existing_request_restoration = self.search([
('date', '>', date_before_ten_years),
('family_id', '=', rec.family_id.id),
('service_cat.service_type', '=', 'home_restoration'), ('id', '!=', self._origin.id)
], limit=1)
if existing_request_restoration:
raise UserError(_("You cannot request this service more than once a ten years."))
existing_request_maintenance = self.search([
('date', '>', date_before_year),
('family_id', '=', rec.family_id.id),
('service_cat.service_type', '=', 'home_maintenance')
], limit=1)
if existing_request_maintenance:
raise UserError(
_("You cannot request this service with maintenance service in the same year."))
if rec.has_money_to_pay_first_payment == 'no':
home_restoration_line_id = rec.service_cat.home_restoration_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id)
if rec.requested_service_amount > home_restoration_line_id.max_amount:
raise UserError(
_("You cannot request more than %s") % home_restoration_line_id.max_amount
)
# Validation for 'family' benefit type with 'complete_building_house' service type
if rec.benefit_type == 'family' and rec.service_cat.service_type == 'complete_building_house':
# Check for existing request of the same type

View File

@ -125,5 +125,5 @@ access_exception_reason,access_exception_reason,model_exception_reason,base.grou
access_service_request,access_service_request,model_service_request,base.group_user,1,1,1,1
access_marital_status,access_marital_status,model_marital_status,base.group_user,1,1,1,1
access_service_attachments_settings,access_service_attachments_settings,model_service_attachments_settings,base.group_user,1,1,1,1
access_home_restoration_lines,access_home_restoration_lines,model_home_restoration_lines,base.group_user,1,1,1,1
access_category_amount_line,access_category_amount_line,model_category_amount_line,base.group_user,1,1,1,1
access_home_maintenance_lines,access_home_maintenance_lines,model_home_maintenance_lines,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
125 access_service_request access_service_request model_service_request base.group_user 1 1 1 1
126 access_marital_status access_marital_status model_marital_status base.group_user 1 1 1 1
127 access_service_attachments_settings access_service_attachments_settings model_service_attachments_settings base.group_user 1 1 1 1
128 access_home_restoration_lines access_category_amount_line access_home_restoration_lines access_category_amount_line model_home_restoration_lines model_category_amount_line base.group_user 1 1 1 1
129 access_home_maintenance_lines access_home_maintenance_lines model_home_maintenance_lines base.group_user 1 1 1 1

View File

@ -18,8 +18,6 @@
<field name="service_type" readonly="1" force_save="1"/>
<field name="requested_service_amount"/>
<field name="restoration_max_amount"/>
<field name="has_money_field_is_appearance" invisible="1"/>
<field name="has_money_to_pay_first_payment" widget="boolean_toggle" attrs="{'invisible':[('has_money_field_is_appearance', '=', False)]}"/>
<field name="is_family_need_evacuate" groups="project_base.group_project_department_manager"/>
</group>
</page>

View File

@ -1,36 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="service_request_inherit_view_form" model="ir.ui.view">
<record id="service_request_inherit_view_form" model="ir.ui.view">
<field name="name">service.request.form</field>
<field name="model">service.request</field>
<field name="inherit_id" ref="odex_benefit.service_request_form"/>
<field name="arch" type="xml">
<field name="arch" type="xml">
<xpath expr="//field[@name='requested_service_amount']" position="after">
<field name="rent_period" attrs="{'invisible': [('service_type', '!=', 'alternative_housing')],'required':[('service_type', '=','alternative_housing')]}"/>
<field name="rent_period"
attrs="{'invisible': [('service_type', '!=', 'alternative_housing')],'required':[('service_type', '=','alternative_housing')]}"/>
<field name="project_create" invisible="1"/>
<field name="project_id" readonly="1" attrs="{'invisible': ['|',('state','!=','accounting_approve'),('project_create', '=',False)]}"/>
<field name="project_id" readonly="1" attrs="{'invisible': [('project_create', '=',False)]}"/>
<field name="project_expected_delivery_date" readonly="1" attrs="{'invisible': [('project_create', '=',False)]}"/>
</xpath>
<!-- <xpath expr="//button[@name='action_branch_manager_approve']" position="after">
<button name="action_approval_of_beneficiary_services" type="object"
string="Approval of beneficiary services" class="oe_highlight"
confirm="Are you sure you want to approval beneficiary services ?" groups="odex_benefit.group_approval_of_beneficiary_services" attrs="{'invisible': ['|',('project_create', '=', False),('state', '!=', 'second_approve')]}"/>
</xpath>
<xpath expr="//button[@name='action_accounting_approve']" position="replace">
<button name="action_accounting_approve" type="object"
string="Accounting Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
attrs="{'invisible':['|',('state','!=','approval_of_beneficiary_services'),('project_create', '=', False)]}"
groups="odex_benefit.group_benefit_accounting_accept"/>
<button name="action_accounting_approve" type="object"
string="Accounting Approve" class="oe_highlight"
confirm="Are you sure you want to approve ?"
attrs="{'invisible':['|',('state','!=','second_approve'),('project_create', '=', True)]}"
groups="odex_benefit.group_benefit_accounting_accept"/>
</xpath> -->
</field>
</record>
</field>
</record>
</data>
</odoo>