IMP benefit

This commit is contained in:
younes 2025-10-07 19:45:03 +01:00
parent 2948c1327b
commit e2cdf0ca6d
12 changed files with 123 additions and 171 deletions

View File

@ -1829,7 +1829,6 @@ msgstr "اسم المرفق"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__attachment_grant_benefit_ids #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__attachment_grant_benefit_ids
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__attachment_ids #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__attachment_ids #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__attachment_ids
@ -2173,7 +2172,6 @@ msgstr "فئات الاسرة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__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_rent_lines__benefit_category_id
msgid "Benefit Category" msgid "Benefit Category"
msgstr "فئة الأسرة" msgstr "فئة الأسرة"
@ -3641,7 +3639,6 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__create_uid #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__create_uid #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_uid #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_uid
@ -3769,7 +3766,6 @@ msgstr "هل تم إنشاءه من البوابة؟"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__create_date #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__create_date #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_date #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__create_date
@ -4395,7 +4391,6 @@ msgstr "نوع المرض"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__display_name #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__display_name #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__display_name #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__display_name
@ -5828,16 +5823,6 @@ msgstr ""
msgid "Has Unreconciled Entries" msgid "Has Unreconciled Entries"
msgstr "يحتوي قيود غير مسواة" msgstr "يحتوي قيود غير مسواة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__has_money_field_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_to_pay_first_payment
msgid "Has money to pay first payment?"
msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: model:res.groups,name:odex_benefit.group_benefit_woman_commitee #: model:res.groups,name:odex_benefit.group_benefit_woman_commitee
msgid "Head of the Women's Committee" msgid "Head of the Women's Committee"
@ -5916,21 +5901,11 @@ msgstr ""
msgid "Home Restoration" msgid "Home Restoration"
msgstr "" 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 #. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form #: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "Home Restoration Service" msgid "Home Restoration Service"
msgstr "" 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 #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__hospital_id #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__hospital_id
msgid "Hospital" msgid "Hospital"
@ -6124,7 +6099,6 @@ msgstr "رقم الآي بان"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__id #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__id
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__id #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__id
#: model:ir.model.fields,field_description:odex_benefit.field_home_maintenance_lines__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_hospital_hospital__id
#: model:ir.model.fields,field_description:odex_benefit.field_house_need__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 #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__id
@ -7225,7 +7199,6 @@ msgstr "الجهة التعليمية السابقة"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit____last_update #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings____last_update #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings____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_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_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_house_need____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need____last_update #: model:ir.model.fields,field_description:odex_benefit.field_housing_need____last_update
@ -7373,7 +7346,6 @@ msgstr "التخصص السابق"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__write_uid #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__write_uid #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_uid #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_uid
@ -7496,7 +7468,6 @@ msgstr "آخر تحديث بواسطة"
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__write_date #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__write_date #: model:ir.model.fields,field_description:odex_benefit.field_hobbies_settings__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_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_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_house_need__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_date #: model:ir.model.fields,field_description:odex_benefit.field_housing_need__write_date
@ -7851,11 +7822,6 @@ msgstr "الحالة الاجتماعية"
msgid "Material" msgid "Material"
msgstr "مواد" msgstr "مواد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_home_restoration_lines__max_amount
msgid "Max Amount"
msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_amount_for_student #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_amount_for_student
msgid "Max Amount for Student" msgid "Max Amount for Student"
@ -8676,7 +8642,6 @@ msgstr "نوع النشاط التالي"
#. module: odex_benefit #. 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_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_for_payment__no
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_to_pay_first_payment__no
msgid "No" msgid "No"
msgstr "لا" msgstr "لا"
@ -10628,7 +10593,6 @@ msgstr "طلبات الخدمات"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.actions.act_window,name:odex_benefit.services_settings_action #: model:ir.actions.act_window,name:odex_benefit.services_settings_action
#: 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_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_rent_lines__services_settings_id
#: model:ir.ui.menu,name:odex_benefit.services_settings_menu #: model:ir.ui.menu,name:odex_benefit.services_settings_menu
#: model:ir.ui.menu,name:odex_benefit.benefit_tools_services_settings_menu #: model:ir.ui.menu,name:odex_benefit.benefit_tools_services_settings_menu
@ -12390,7 +12354,6 @@ msgstr ""
#. module: odex_benefit #. 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_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_for_payment__yes
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__has_money_to_pay_first_payment__yes
msgid "Yes" msgid "Yes"
msgstr "نعم" msgstr "نعم"
@ -13092,11 +13055,6 @@ msgstr ""
msgid "home.maintenance.lines" msgid "home.maintenance.lines"
msgstr "" msgstr ""
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_home_restoration_lines
msgid "home.restoration.lines"
msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.hospital_tree #: model_terms:ir.ui.view,arch_db:odex_benefit.hospital_tree
msgid "hospital" msgid "hospital"
@ -15764,11 +15722,6 @@ msgstr "مرة كل فترة"
msgid "Unlimited" msgid "Unlimited"
msgstr "غير محدد" 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 #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__requires_visit #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__requires_visit
msgid "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_id = fields.Many2one('home.maintenance.lines', string="Maintenance Items")
maintenance_items_ids = fields.One2many('home.maintenance.items','service_request_id', string="Maintenance Items",) maintenance_items_ids = fields.One2many('home.maintenance.items','service_request_id', string="Maintenance Items",)
#Home restoration fields #Home restoration fields
restoration_max_amount = fields.Float(string='Restoration Max Amount',compute='_get_restoration_max_amount') restoration_max_amount = fields.Float(string='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')
payment_order_id = fields.Many2one('payment.orders',string='Payment Order') payment_order_id = fields.Many2one('payment.orders',string='Payment Order')
is_payment_order_done = fields.Boolean(string='Is Payment Order Done?') is_payment_order_done = fields.Boolean(string='Is Payment Order Done?')
aid_amount = fields.Float(string='Aid Amount',compute='_get_aid_amount') 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', exception_attach = fields.Many2many('ir.attachment', 'rel_exception_attachment_service_request', 'service_request_id',
'attachment_id', string='Exception Attachment') 'attachment_id', string='Exception Attachment')
service_conditions = fields.Html(related='service_cat.service_conditions', string="Service Conditions") 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 rec.added_amount_if_mother_dead = 0.0
if rec.family_id.mother_marital_conf.is_dead: if rec.family_id.mother_marital_conf.is_dead:
rec.added_amount_if_mother_dead = rec.service_cat.raise_amount_for_orphan 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') @api.depends('requested_service_amount', 'max_complete_building_house_amount')
def _get_money_for_payment_is_appearance(self): def _get_money_for_payment_is_appearance(self):
@ -474,10 +461,12 @@ class ServiceRequest(models.Model):
else: else:
if rec.service_type == 'buy_car': if rec.service_type == 'buy_car':
rec.family_id.has_car = True rec.family_id.has_car = True
rec.service_approval_date = fields.Datetime.now()
rec.state = 'send_request_to_supplier' rec.state = 'send_request_to_supplier'
def action_supplier_approve(self): def action_supplier_approve(self):
for rec in self: for rec in self:
rec.service_approval_date = fields.Datetime.now()
rec.state = 'send_request_to_supplier' rec.state = 'send_request_to_supplier'
def action_request_done(self): def action_request_done(self):
@ -506,13 +495,6 @@ class ServiceRequest(models.Model):
'target': 'new', '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') @api.onchange('rent_payment_date','new_rent_payment_date')
def onchange_rent_payment_date(self): def onchange_rent_payment_date(self):
@ -557,6 +539,8 @@ class ServiceRequest(models.Model):
@api.onchange('service_cat','family_id') @api.onchange('service_cat','family_id')
def _onchange_service_cat(self): 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 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) 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 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: if existing_request_maintenance:
raise UserError( raise UserError(
_("You cannot request this service with maintenance service in the same year.")) _("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.category_amount_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id)
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: if rec.requested_service_amount > home_restoration_line_id.max_amount:
raise UserError( raise UserError(
_("You cannot request more than %s") % home_restoration_line_id.max_amount _("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:
if rec.benefit_type == 'family': if rec.benefit_type == 'family':
domain = [('service_type', '!=', 'main_service'),('benefit_type','!=','member'),('benefit_category_ids', 'in', [rec.family_category.id])] 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) rec.available_service_cats = rec.available_service_cats.sudo().search(domain)
elif rec.benefit_type == 'member' and rec.member_id: elif rec.benefit_type == 'member' and rec.member_id:
domain = [ domain = [

View File

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

View File

@ -131,7 +131,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_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_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_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_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_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 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
131 access_seasonal_grant_benefit access_seasonal_grant_benefits model_seasonal_grant_benefit base.group_user 1 1 1 1
132 access_marital_status access_marital_status model_marital_status base.group_user 1 1 1 1
133 access_service_attachments_settings access_service_attachments_settings model_service_attachments_settings base.group_user 1 1 1 1
134 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
135 access_home_maintenance_lines access_home_maintenance_lines model_home_maintenance_lines base.group_user 1 1 1 1
136 access_home_maintenance_items access_home_maintenance_items model_home_maintenance_items base.group_user 1 1 1 1
137 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"> <form string="Service Request">
<header> <header>
<button name="action_send_to_researcher" type="object" states="draft" <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" <button name="action_researcher_send_request" type="object" states="researcher"
string="Researcher Approval" class="oe_highlight" string="Researcher Approval" class="oe_highlight"
groups="odex_benefit.group_benefit_researcher" groups="odex_benefit.group_benefit_researcher"
@ -126,12 +126,15 @@
<field name="is_service_producer" invisible="1"/> <field name="is_service_producer" invisible="1"/>
<field name="service_producer_id" <field name="service_producer_id"
attrs="{'invisible':[('is_service_producer','=',False)],'readonly':[('state','not in',['draft','researcher','send_request'])]}"/> 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>
<group> <group>
<field name="available_service_cats" invisible="1"/> <field name="available_service_cats" invisible="1"/>
<field name="service_cat" <field name="service_cat"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"
domain="[('id','in',available_service_cats)]" required="1"/> domain="[('id','in',available_service_cats)]" required="1"/>
<field name="service_approval_date"/>
<field name="need_status" <field name="need_status"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/> attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="main_service_category" <field name="main_service_category"
@ -147,6 +150,8 @@
('service_type', 'in', ['marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']), ('service_type', 'in', ['marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']),
('service_type', 'in', ['electrical_devices', 'home_furnishing']) ('service_type', 'in', ['electrical_devices', 'home_furnishing'])
]}" force_save="1" required="1"/> ]}" force_save="1" required="1"/>
<field name="service_max_amount"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception" <field name="exception"
attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/> attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
<field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}" <field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}"
@ -308,15 +313,6 @@
</tree> </tree>
</field> </field>
</page> </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" <page string="Complete Building House"
attrs="{'invisible':[('service_type', '!=', 'complete_building_house')]}"> attrs="{'invisible':[('service_type', '!=', 'complete_building_house')]}">
<group> <group>

View File

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

View File

@ -20,16 +20,6 @@ msgstr ""
msgid "Alternative Housing" msgid "Alternative Housing"
msgstr "" 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 #. module: odex_benefit_project
#: model:ir.model.fields.selection,name:odex_benefit_project.selection__project_project__service_type__home_maintenance #: model:ir.model.fields.selection,name:odex_benefit_project.selection__project_project__service_type__home_maintenance
msgid "Home Maintenance" msgid "Home Maintenance"

View File

@ -7,8 +7,6 @@ class ProjectProjectInherit(models.Model):
#Fields for 'Home restoration' service and 'alternative_housing' service #Fields for 'Home restoration' service and 'alternative_housing' service
requested_service_amount = fields.Float(string="Requested Service Amount") requested_service_amount = fields.Float(string="Requested Service Amount")
restoration_max_amount = fields.Float(string='Restoration Max 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?') is_family_need_evacuate = fields.Boolean(string='Is family need evacuate?')
#Fields for 'complete building house' service #Fields for 'complete building house' service
max_complete_building_house_amount = fields.Float(string='Max Complete Building House Amount') 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 import fields, models, api, _
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
from datetime import timedelta from datetime import datetime,timedelta
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
class ServiceRequestInherit(models.Model): class ServiceRequestInherit(models.Model):
@ -8,14 +8,15 @@ class ServiceRequestInherit(models.Model):
_inherit = 'service.request' _inherit = 'service.request'
project_id = fields.Many2one('project.project',srting='Project') 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') rent_period = fields.Integer('Rent Period')
project_create = fields.Boolean(string='Project Create?',related='service_cat.project_create') project_create = fields.Boolean(string='Project Create?',related='service_cat.project_create')
def action_accounting_approve(self): def action_accounting_approve(self):
super(ServiceRequestInherit, self).action_accounting_approve() super(ServiceRequestInherit, self).action_accounting_approve()
for rec in self: for rec in self:
if rec.service_cat.project_create: if rec.service_cat.project_create and not rec.project_id:
project = self.env['project.project'].create( project = self.env['project.project'].sudo().create(
{ {
'name': (_('%s')%rec.service_cat.service_type) +"/"+ rec.family_id.name +"/"+ rec.family_id.code, 'name': (_('%s')%rec.service_cat.service_type) +"/"+ rec.family_id.name +"/"+ rec.family_id.code,
'partner_id': rec.service_producer_id.id, 'partner_id': rec.service_producer_id.id,
@ -23,12 +24,19 @@ class ServiceRequestInherit(models.Model):
'category_id' : rec.service_cat.category_id.id, 'category_id' : rec.service_cat.category_id.id,
'requested_service_amount' : rec.requested_service_amount, 'requested_service_amount' : rec.requested_service_amount,
'restoration_max_amount' : rec.restoration_max_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, 'service_type' : rec.service_cat.service_type,
'max_complete_building_house_amount' : rec.max_complete_building_house_amount, '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_is_appearance' : rec.has_money_for_payment_is_appearance,
'has_money_for_payment' : rec.has_money_for_payment, '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 rec.project_id = project
@ -47,14 +55,70 @@ class ServiceRequestInherit(models.Model):
) )
def onchange_requested_service_amount(self): def onchange_requested_service_amount(self):
res = {} res = {}
Service = self.env['service.request']
today = fields.Date.today() today = fields.Date.today()
#to delete
date_before_year = today - timedelta(days=365) date_before_year = today - timedelta(days=365)
date_before_seven_years = today - relativedelta(years=7) date_before_seven_years = today - relativedelta(years=7)
date_before_three_years = today - relativedelta(years=3) date_before_three_years = today - relativedelta(years=3)
date_before_ten_years = today - timedelta(days=3650)
date_before_month = today - timedelta(days=30) date_before_month = today - timedelta(days=30)
for rec in self: for rec in self:
if not rec.exception and not rec.exception_attach: 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 # Validation for 'member' benefit type
if rec.benefit_type == 'member' and rec.service_cat.service_type == 'rent': if rec.benefit_type == 'member' and rec.service_cat.service_type == 'rent':
max_requested_amount = rec.service_cat.max_amount_for_student max_requested_amount = rec.service_cat.max_amount_for_student
@ -101,31 +165,6 @@ class ServiceRequestInherit(models.Model):
if existing_request_restoration: if existing_request_restoration:
raise UserError( raise UserError(
_("You cannot request this service with restoration service in the same year.")) _("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 # 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': if rec.benefit_type == 'family' and rec.service_cat.service_type == 'complete_building_house':
# Check for existing request of the same type # 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_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_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_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_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="service_type" readonly="1" force_save="1"/>
<field name="requested_service_amount"/> <field name="requested_service_amount"/>
<field name="restoration_max_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"/> <field name="is_family_need_evacuate" groups="project_base.group_project_department_manager"/>
</group> </group>
</page> </page>

View File

@ -1,36 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<data> <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="name">service.request.form</field>
<field name="model">service.request</field> <field name="model">service.request</field>
<field name="inherit_id" ref="odex_benefit.service_request_form"/> <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"> <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_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>
<!-- <xpath expr="//button[@name='action_branch_manager_approve']" position="after"> </field>
<button name="action_approval_of_beneficiary_services" type="object" </record>
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>
</data> </data>
</odoo> </odoo>