233 lines
11 KiB
Python
233 lines
11 KiB
Python
from odoo import fields, models, api, _
|
|
|
|
|
|
class ServicesSettings(models.Model):
|
|
_name = 'services.settings'
|
|
_rec_name = 'service_name'
|
|
_order = 'service_number'
|
|
|
|
service_name = fields.Char(string='Service Name')
|
|
benefit_type = fields.Selection(string='Benefit Type', selection=[('family', 'Family'), ('member', 'Member')])
|
|
parent_service = fields.Many2one('services.settings', string='Parent Service')
|
|
is_main_service = fields.Boolean(string='Is Main Service?')
|
|
is_service_producer = fields.Boolean(string='Is Service Producer?')
|
|
service_producer_id = fields.Many2one('res.partner', string='Service Producer')
|
|
is_this_service_for_student = fields.Boolean(string='Is Service For Student?')
|
|
service_type = fields.Selection(
|
|
[('rent', 'Rent'), ('home_restoration', 'Home Restoration'), ('alternative_housing', 'Alternative Housing'),
|
|
('home_maintenance', 'Home Maintenance')
|
|
, ('complete_building_house', 'Complete Building House'), ('electrical_devices', 'Electrical Devices'),
|
|
('home_furnishing', 'Home furnishing')
|
|
, ('electricity_bill', 'Electricity bill'), ('water_bill', 'Water bill'), ('buy_car', 'Buy Car'),
|
|
('recruiting_driver', 'Recruiting Driver')
|
|
, ('transportation_insurance', 'Transportation Insurance'), ('debits', 'Debits'),
|
|
('health_care', 'Health Care'),
|
|
('providing_medicines_medical_devices_and_needs_the_disabled',
|
|
'Providing Medicines Medical Devices And Needs The Disabled'),
|
|
('recruiting_domestic_worker_or_nurse', 'Recruiting a domestic worker or nurse'), ('marriage', 'Marriage'),
|
|
('eid_gift', 'Eid gift'),
|
|
('winter_clothing', 'Winter clothing'), ('ramadan_basket', 'Ramadan basket'),
|
|
('natural_disasters', 'Natural disasters'),
|
|
('legal_arguments', 'Legal arguments'), ('buy_home', 'Buy Home'), ('main_service', 'Main Service'),
|
|
('normal_service', 'Normal Service')]
|
|
, string='Service Type')
|
|
raise_amount_for_orphan = fields.Float(string='Raise Amount For Orphan')
|
|
rent_lines = fields.One2many('rent.lines', 'services_settings_id')
|
|
attachment_lines = fields.One2many('service.attachments.settings', 'service_id')
|
|
# Fields for home restoration
|
|
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')
|
|
benefit_category_ids = fields.Many2many('benefit.category', string='Allowed Categories')
|
|
account_id = fields.Many2one('account.account', string='Expenses Account', domain="[('user_type_id.id','=',15)]")
|
|
accountant_id = fields.Many2one('res.users', string='Accountant')
|
|
# For Electrical Devices
|
|
electrical_devices_lines = fields.One2many('electrical.devices', 'services_settings_id')
|
|
# Home Furnishing
|
|
home_furnishing_lines = fields.One2many('home.furnishing.lines', 'services_settings_id')
|
|
max_furnishing_amount_if_exception = fields.Float(string='Max Furnishing Amount (Exception)')
|
|
bill_lines = fields.One2many('bill.lines', 'services_settings_id')
|
|
min_count_member = fields.Integer(string='Mini Count Member')
|
|
member_max_payroll = fields.Float(string='Member Max Payroll')
|
|
fatherless_member_amount = fields.Float(string='Fatherless Member Amount')
|
|
orphan_member_amount = fields.Float(string='Orphan Member Amount')
|
|
# Buy Home
|
|
limit_person_line_ids = fields.One2many('service.limit.person.line', 'services_settings_id')
|
|
buy_home_max_total_amount = fields.Float(string='Buy Home Max Total Amount')
|
|
home_age = fields.Integer(string='Home Age')
|
|
required_attach = fields.Boolean(string='Required Attach')
|
|
is_seasonal_service = fields.Boolean(string='Is Seasonal Service?')
|
|
active = fields.Boolean('Active', default=True)
|
|
show_in_portal = fields.Boolean(string="Show in Portal", copy=False)
|
|
service_number = fields.Char(string="Service Number", copy=False)
|
|
service_category = fields.Selection([
|
|
('emergency', 'Emergency'),
|
|
('permanent', 'Permanent'),
|
|
('exceptional', 'Exceptional'),
|
|
('seasonal', 'Seasonal'),
|
|
], string="Service Category", copy=False)
|
|
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')
|
|
max_amount = fields.Monetary(string="Maximum Amount", currency_field='currency_id', copy=False)
|
|
max_age = fields.Integer(string="Maximum Age", copy=False)
|
|
service_description = fields.Text(string="Service Description")
|
|
service_conditions = fields.Html(string="Service Conditions")
|
|
allowed_recurrence = fields.Selection([
|
|
('once', 'Once'),
|
|
('periodic', 'Every Period'),
|
|
('unlimited', 'Unlimited'),
|
|
], string="Allowed Recurrence", default='once')
|
|
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?"
|
|
)
|
|
max_limit_type = fields.Selection([
|
|
('none', 'No Limit'),
|
|
('fixed', 'Fixed Amount'),
|
|
('amount_person', 'Amount by Individuals'),
|
|
('category', 'Amount by Category'),
|
|
('category_person', 'Amount by Category and Individuals'),
|
|
('region', 'Amount by Region'),
|
|
('service', 'Amount by Service'),
|
|
], string="Max Limit Type"
|
|
)
|
|
needs_beneficiary_manager_approval = fields.Boolean("Needs Beneficiary Manager Approval")
|
|
needs_services_head_approval = fields.Boolean(string="Needs Services Head Approval")
|
|
needs_legal_approval = fields.Boolean(string="Needs Legal Approval")
|
|
needs_project_management_approval = fields.Boolean(string="Needs Project Management Approval")
|
|
allow_non_beneficiary = fields.Boolean(string="Allow Non Beneficiary")
|
|
max_limit_period = fields.Selection([
|
|
('request', 'Per Request'),
|
|
('individual', 'Per Individual'),
|
|
('month', 'Per Month'),
|
|
('year_from_request', 'Year from date of request'),
|
|
('calendar_year', 'Calendar year'),
|
|
], string='Maximum Limit Period')
|
|
allowed_period = fields.Integer(
|
|
string='Allowed Period', default=1,
|
|
help='Specify the allowed number of months or years based on the selected period type.'
|
|
)
|
|
max_months_limit = fields.Integer(
|
|
string='Maximum Number of Months',
|
|
help='Specify the maximum allowed number of months when the period type is monthly.'
|
|
)
|
|
in_kind = fields.Boolean(string="In Kind")
|
|
payment_method = fields.Selection([
|
|
('none', 'None'),
|
|
('payment_order', 'Payment Order'),
|
|
('invoice', 'Invoice'),
|
|
], string='Payment Method', default="payment_order")
|
|
family_related_fields = fields.Many2many(
|
|
comodel_name='ir.model.fields',
|
|
relation='services_settings_family_field_rel',
|
|
column1='services_settings_id',
|
|
column2='field_id',
|
|
string='Related Family Fields',
|
|
domain="[('model_id.model', '=', 'grant.benefit')]",
|
|
help="Select fields from the Family profile (grant.benefit) to display in the service request."
|
|
)
|
|
|
|
member_related_fields = fields.Many2many(
|
|
comodel_name='ir.model.fields',
|
|
relation='services_settings_member_field_rel',
|
|
column1='services_settings_id',
|
|
column2='field_id',
|
|
string='Related Member Fields',
|
|
domain="[('model_id.model', '=', 'family.member')]",
|
|
help="Select fields from the Member profile to display only when the service is for a member."
|
|
)
|
|
|
|
@api.onchange('benefit_type')
|
|
def _onchange_benefit_type(self):
|
|
if self.benefit_type != 'member':
|
|
self.member_related_fields = [(5, 0, 0)]
|
|
|
|
@api.onchange('max_limit_period')
|
|
def _onchange_max_limit_period(self):
|
|
if self.max_limit_period not in ['year_from_request', 'calendar_year']:
|
|
self.allowed_period = 0
|
|
|
|
|
|
class RentLines(models.Model):
|
|
_name = 'rent.lines'
|
|
|
|
benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category')
|
|
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|
|
benefit_count = fields.Integer('Benefit Count')
|
|
estimated_rent_branches = fields.Float(string='Estimated Rent Branches')
|
|
estimated_rent_governorate = fields.Float(string='Estimated Rent Governorate')
|
|
discount_rate_shared_housing = fields.Float(string='Discount Rate For Shared housing')
|
|
|
|
_sql_constraints = [
|
|
(
|
|
'uniq_category_count',
|
|
'UNIQUE(benefit_category_id, benefit_count)',
|
|
_("Couldn't create same benefit category and count")
|
|
)
|
|
]
|
|
|
|
|
|
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')
|
|
max_amount = fields.Float(string='Max Amount')
|
|
|
|
|
|
class HomeMaintenanceLines(models.Model):
|
|
_name = 'home.maintenance.lines'
|
|
_rec_name = 'maintenance_name'
|
|
|
|
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|
|
maintenance_name = fields.Char(string='Maintenance Name')
|
|
|
|
|
|
class ElectricalDevices(models.Model):
|
|
_name = 'electrical.devices'
|
|
_rec_name = 'device_name'
|
|
|
|
min_count_member = fields.Integer(string='From')
|
|
max_count_member = fields.Integer(string='To')
|
|
device_name = fields.Char(string="Device Name")
|
|
allowed_quantity = fields.Integer(string='Allowed Quantity')
|
|
account_id = fields.Many2one('account.account', string='Expenses Account', domain="[('user_type_id.id','=',15)]")
|
|
services_settings_id = fields.Many2one('services.settings')
|
|
price_unit = fields.Float()
|
|
|
|
|
|
class HomeFurnishingLines(models.Model):
|
|
_name = 'home.furnishing.lines'
|
|
|
|
services_settings_id = fields.Many2one('services.settings')
|
|
name = fields.Char(string="Furnishing Name")
|
|
max_furnishing_amount = fields.Float(string='Furnishing Amount')
|
|
|
|
|
|
class BillLines(models.Model):
|
|
_name = 'bill.lines'
|
|
|
|
benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category')
|
|
min_count_member = fields.Integer(string='From')
|
|
max_count_member = fields.Integer(string='To')
|
|
max_amount_for_bill = fields.Float(string='Max Amount For Bill')
|
|
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|
|
|
|
|
|
class ServiceLimitByPersonLine(models.Model):
|
|
_name = 'service.limit.person.line'
|
|
|
|
min_count_member = fields.Integer(string='Minimum Number of Persons')
|
|
max_count_member = fields.Integer(string='Maximum Number of Persons')
|
|
amount = fields.Float(string='Amount')
|
|
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|