diff --git a/odex25_benefit/odex_benefit/MODULE_REVIEW.md b/odex25_benefit/odex_benefit/MODULE_REVIEW.md index 5227af4b3..40553b60d 100644 --- a/odex25_benefit/odex_benefit/MODULE_REVIEW.md +++ b/odex25_benefit/odex_benefit/MODULE_REVIEW.md @@ -75,7 +75,6 @@ - **معلومات السكن:** - `housing_type`: نوع السكن (apartment/villa/popular_house/tent) - - `property_type`: نوع الملكية (ownership/rent/charitable/ownership_shared/rent_shared) - `rent_amount`: مبلغ الإيجار - `contract_num`: رقم عقد الإيجار - `rent_start_date`: تاريخ بداية الإيجار diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po index d17f3b41d..82971d45f 100644 --- a/odex25_benefit/odex_benefit/i18n/ar_001.po +++ b/odex25_benefit/odex_benefit/i18n/ar_001.po @@ -9029,7 +9029,6 @@ msgstr "زيادة الوزن" #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_housing__property_type__ownership_shared -#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__property_type__ownership_shared msgid "Ownership Shared" msgstr "سكن مشترك ملك" @@ -9390,7 +9389,6 @@ msgstr "رقم الصك" #. module: odex_benefit #: model:ir.model.fields,field_description:odex_benefit.field_benefit_housing__property_type -#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__property_type msgid "Property Type" msgstr "نوع العقار" @@ -9875,7 +9873,6 @@ msgstr "" #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_housing__property_type__rent_shared -#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__property_type__rent_shared msgid "Rent Shared" msgstr "سكن مشترك إيجار" @@ -12617,7 +12614,6 @@ msgstr "طلبات النقل" #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_housing__property_type__charitable -#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__property_type__charitable msgid "charitable" msgstr "وقف خيري" @@ -13361,7 +13357,6 @@ msgstr "" #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_housing__property_type__ownership -#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__property_type__ownership msgid "ownership" msgstr "ملك" @@ -13497,7 +13492,6 @@ msgstr "مرفوض" #. module: odex_benefit #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_housing__property_type__rent -#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__property_type__rent msgid "rent" msgstr "إيجار" diff --git a/odex25_benefit/odex_benefit/models/benefit.py b/odex25_benefit/odex_benefit/models/benefit.py index 546f90687..89e212ebb 100644 --- a/odex25_benefit/odex_benefit/models/benefit.py +++ b/odex25_benefit/odex_benefit/models/benefit.py @@ -478,6 +478,11 @@ class GrantBenefitProfile(models.Model): ('charitable', 'charitable'), ('ownership_shared', 'Ownership Shared'), ('rent_shared', 'Rent Shared')]) + property_type_id = fields.Many2one('property.type.settings',string="Property Type",tracking=True) + property_type_code = fields.Selection([ + ('ownership', 'Ownership'), + ('rent', 'Rent') + ], string="Property Type Code",related='property_type_id.type', store=True) room_ids = fields.One2many('benefit.housing.rooms', inverse_name='housing_id') request_producer_id = fields.Many2one('res.partner',string='Request Producer', compute='_compute_request_producer_id') request_producer = fields.Many2one('res.partner',string='Request Producer',default=lambda self: self.env.user.partner_id) @@ -747,11 +752,11 @@ class GrantBenefitProfile(models.Model): "You can only archive the family if its status is: Refused, Final Suspension, or Blacklisted." )) - @api.depends('rent_amount','property_type','benefit_member_count', 'branch_custom_id.branch_type') + @api.depends('rent_amount','property_type_id','benefit_member_count', 'branch_custom_id.branch_type') def _compute_estimated_rent_amount(self): for rec in self: estimated_rent_amount = 0.0 - if rec.rent_amount > 0 and rec.property_type in ['rent','rent_shared']: + if rec.rent_amount > 0 and rec.property_type_id and rec.property_type_code == 'rent': if rec.branch_custom_id.branch_type == 'branches': estimated_rent_amount = self.env['rent.lines'].search( [('benefit_count', '=', rec.benefit_member_count)], order="estimated_rent_branches desc",limit=1).estimated_rent_branches diff --git a/odex25_benefit/odex_benefit/models/benefit_config.py b/odex25_benefit/odex_benefit/models/benefit_config.py index 17897f1c6..8fed51eec 100644 --- a/odex25_benefit/odex_benefit/models/benefit_config.py +++ b/odex25_benefit/odex_benefit/models/benefit_config.py @@ -937,3 +937,21 @@ class HomeFurnishingItems(models.Model): price_second = fields.Float(string='Price Second') price_second_attach = fields.Many2many('ir.attachment','rel_second_price_attachments', 'furnishing_id', 'attach_id',string="Second Price Attachment") service_request_id = fields.Many2one('service.request',string='Service Request') + +class PropertyTypeSettings(models.Model): + _name = 'property.type.settings' + _description = 'Property Type Settings' + _order = 'name' + + name = fields.Char(string="Name", required=True) + type = fields.Selection([ + ('ownership', 'Ownership'), + ('rent', 'Rent') + ], string="Property Type", required=True) + is_shared = fields.Boolean(string="Shared", default=False) + active = fields.Boolean(string="Active", default=True) + unavailable_service_ids = fields.Many2many( + 'services.settings', + string="Unavailable Services", + help="Services that are not available for families or members with this property type" + ) diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py index f1b183f6b..a3f96fce5 100644 --- a/odex25_benefit/odex_benefit/models/service_request.py +++ b/odex25_benefit/odex_benefit/models/service_request.py @@ -1,8 +1,8 @@ from odoo import fields, models, api, _ from odoo.exceptions import UserError, ValidationError -from datetime import date,datetime, timedelta +from datetime import date, datetime, timedelta from dateutil.relativedelta import relativedelta -from odoo.tools import html_escape,html2plaintext +from odoo.tools import html_escape, html2plaintext class ServiceRequest(models.Model): @@ -39,7 +39,7 @@ class ServiceRequest(models.Model): store=True) service_attach = fields.Many2many('ir.attachment', 'rel_service_attachment_service_request', 'service_request_id', 'attachment_id', string='Service Attachment') - requested_service_amount = fields.Float(string="Requested Service Amount",copy=False) + requested_service_amount = fields.Float(string="Requested Service Amount", copy=False) # yearly Estimated Rent Amount estimated_rent_amount = fields.Float(string="Estimated Rent Amount", compute="_get_estimated_rent_amount") # The value of payment by payment method(yearly-half-quartarly) @@ -209,7 +209,7 @@ class ServiceRequest(models.Model): agree_terms = fields.Boolean(string="I agree to the Terms and Conditions", default=False, ) related_information_html = fields.Html(string="Related Information", compute='_compute_related_information_html', store=True, ) - researcher_opinion = fields.Html(string='Specialist Opinion',tracking=True) + researcher_opinion = fields.Html(string='Specialist Opinion', tracking=True) def action_create_project(self): pass @@ -713,8 +713,7 @@ 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 not in ['rent', - 'rent_shared'] and self.benefit_type == 'family': + if self.service_cat.service_type == 'rent' and self.family_id.property_type_code == 'rent' and self.benefit_type == 'family': raise UserError(_("You cannot benefit from this service (property type not rent)")) @api.onchange('start', 'end', 'rent_start_date', 'rent_end_date', 'payment_type') @@ -1091,10 +1090,17 @@ class ServiceRequest(models.Model): for rec in self: domain = [('is_seasonal_service', '=', False), ('service_type', '!=', 'main_service'), ('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')) - else: - domain.append(('service_type', '!=', 'buy_home')) + + if rec.family_id.property_type_id: + if rec.family_id.property_type_code != 'ownership': + domain.append(('service_type', '!=', 'home_restoration')) + else: + domain.append(('service_type', '!=', 'buy_home')) + + unavailable_services = rec.family_id.property_type_id.unavailable_service_ids + if unavailable_services: + domain.append(('id', 'not in', unavailable_services.ids)) + rec.available_service_cats = rec.available_service_cats.sudo().search(domain) def action_set_to_draft(self): @@ -1233,7 +1239,11 @@ class ServiceRequest(models.Model): # Determine rent amount based on branch type and property type branch_type = rec.family_id.branch_family_id.branch_type - is_shared_rent = rec.family_id.property_type == 'rent_shared' + is_shared_rent = ( + rec.family_id.property_type_id and + rec.family_id.property_type_id.type == 'rent' and + rec.family_id.property_type_id.is_shared + ) if branch_type == 'branches': rec.estimated_rent_amount = item.estimated_rent_branches * ( @@ -1249,7 +1259,11 @@ class ServiceRequest(models.Model): # Determine rent amount based on branch type and property type branch_type = rec.family_id.branch_custom_id.branch_type - is_shared_rent = rec.family_id.property_type == 'rent_shared' + is_shared_rent = ( + rec.family_id.property_type_id and + rec.family_id.property_type_id.type == 'rent' and + rec.family_id.property_type_id.is_shared + ) if branch_type == 'branches': rec.estimated_rent_amount = item.estimated_rent_branches * ( diff --git a/odex25_benefit/odex_benefit/security/ir.model.access.csv b/odex25_benefit/odex_benefit/security/ir.model.access.csv index 8aae1687f..a7d252bec 100644 --- a/odex25_benefit/odex_benefit/security/ir.model.access.csv +++ b/odex25_benefit/odex_benefit/security/ir.model.access.csv @@ -171,4 +171,5 @@ access_expense_line_benefit_manager,access_expense_line_benefit_manager,model_be access_expense_researcher,access_expense_researcher,model_benefit_expense_line,odex_benefit.group_benefit_info,1,1,0,0 access_family_bank_report_wizard,access_family_bank_report_wizard,model_family_bank_report_wizard,base.group_user,1,1,1,1 access_return_reason,access_return_reason,model_return_reason,base.group_user,1,1,1,1 -access_return_reason_wizard,access_return_reason_wizard,model_return_reason_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_return_reason_wizard,access_return_reason_wizard,model_return_reason_wizard,base.group_user,1,1,1,1 +access_property_type_settings,access_property_type_settings,model_property_type_settings,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/odex25_benefit/odex_benefit/views/actions_and_menus.xml b/odex25_benefit/odex_benefit/views/actions_and_menus.xml index c1017570e..e4c9d01fd 100644 --- a/odex25_benefit/odex_benefit/views/actions_and_menus.xml +++ b/odex25_benefit/odex_benefit/views/actions_and_menus.xml @@ -760,6 +760,15 @@ [('is_supporter','=', True)] {'default_is_company':True,'default_is_supporter':True} + + Property Type Settings + property.type.settings + tree,form + +

Create the Property Type +

+
+
@@ -901,12 +910,19 @@ action="member_location_action" sequence="10" /> + + sequence="6"/> @@ -1011,7 +1027,7 @@ id="menu_benefits_config_contact" name="contact" parent="benefit_tools" - sequence="5"/> + sequence="7"/> diff --git a/odex25_benefit/odex_benefit/views/benefit_config_view.xml b/odex25_benefit/odex_benefit/views/benefit_config_view.xml index 0956492cf..0282e2384 100644 --- a/odex25_benefit/odex_benefit/views/benefit_config_view.xml +++ b/odex25_benefit/odex_benefit/views/benefit_config_view.xml @@ -1457,5 +1457,45 @@ + + property.type.settings.tree + property.type.settings + + + + + + + + + + + property.type.settings.form + property.type.settings + +
+ +
+

+ +

+
+ + + + + + + + + + + + + +
+
+
+
diff --git a/odex25_benefit/odex_benefit/views/benefit_view.xml b/odex25_benefit/odex_benefit/views/benefit_view.xml index e4522784f..e73d124f3 100644 --- a/odex25_benefit/odex_benefit/views/benefit_view.xml +++ b/odex25_benefit/odex_benefit/views/benefit_view.xml @@ -59,7 +59,7 @@ - + @@ -454,7 +454,7 @@ attrs="{'invisible': [('state', '!=', 'temporary_suspended')]}" groups="odex_benefit.group_benefit_manager"/>