from random import randint
from odoo import fields, models, api, _
class City(models.Model):
_name = 'res.country.city'
_description = "Benefits - City"
@api.depends('code', 'name')
def _load_country_id(self):
for r in self:
r.country_id = self.env.ref('base.sa')
code = fields.Char(string='Code')
name = fields.Char(string='Name')
state_id = fields.Many2one('res.country.state', string='State')
country_id = fields.Many2one('res.country', string='Country', compute='_load_country_id', store=True, readonly=False)
active = fields.Boolean(default=True)
class housing(models.Model):
_name = 'benefit.housing'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Benefits - housing"
name = fields.Char(compute='_compute_get_name')
city_id = fields.Many2one('res.country.city', string='City')
block = fields.Char(string='block')
street = fields.Char(string='street')
url = fields.Char(compute="open_map")
url_html = fields.Html(
sanitize=False,
compute="get_html")
lat = fields.Char()
lon = fields.Char()
house_number = fields.Char(string='house number')
floor = fields.Char(string='floor')
housing_number = fields.Char(string='housing number')
image = fields.Binary(string="", )
image_1 = fields.Binary(string="", )
image_2 = fields.Binary(string="", )
image_3 = fields.Binary(string="", )
image_4 = fields.Binary(string="", )
nearby_mosque = fields.Char(string='Nearby mosque')
housing_note = fields.Char(string='housing note')
note_neighborhood = fields.Char()
rent_amount = fields.Integer()
housing_type = fields.Selection([
('apartment', 'apartment'),
('villa', 'villa'),
('popular_house', 'popular house'),
('tent', 'tent'),
('Appendix', 'Appendix'), ], default='apartment')
housing_cat = fields.Selection([
('excellent', 'Excellent'),
('good', 'Good'),
('bad', 'Bad'),
('collapsible', 'Collapsible'),
('collapsed', 'Collapsed')])
property_type = fields.Selection([
('ownership', 'ownership'),
('rent', 'rent'),
('charitable', 'charitable'),
('ownership_shared', 'Ownership Shared'),
('rent_shared', 'Rent Shared')])
rooms_number = fields.Integer('Rooms Number', compute="get_rooms_total", required=True)
room_ids = fields.One2many('benefit.housing.rooms', inverse_name='housing_id')
water_bill_account_number = fields.Char(string='water Bill Account Number')
electricity_bill_account_number = fields.Char(string='Electricity Bill Account Number')
water_bill_account_attach = fields.Many2many('ir.attachment',
relation="ir_water_bill_account_number_rel",
column1="water_bill_account_number",
column2="name",
string="water Bill")
electricity_bill_account_attach = fields.Many2many('ir.attachment',
relation="ir_electricity_bill_account_attach_rel",
column1="electricity_bill_account_number",
column2="name",
string="Electricity Bill ")
benefits_total = fields.Integer(string="Benefit Total", compute="get_benefits_total")
benefit_ids = fields.One2many('grant.benefit', 'housing_id', string="Benefits")
family_ids = fields.One2many('benefit.family', 'housing_id', string="Benefits")
total_income = fields.Float(compute='get_total')
total_expenses = fields.Float(compute='get_total')
total_net = fields.Float(compute='get_total')
financial_aid = fields.Float(compute='get_total')
domestic_labor_ids = fields.Many2many('domestic.labor')
def get_html(self):
for rec in self:
print(f'')
rec.url_html = f''
# @api.multi
def open_map(self):
for Location in self:
url = "http://maps.google.com/maps?oi=map&q="
if Location.street:
url += Location.street.replace(' ', '+')
if Location.city_id:
url += '+' + Location.city_id.name.replace(' ', '+')
url += '+' + Location.city_id.state_id.name.replace(' ', '+')
url += '+' + Location.city_id.country_id.name.replace(' ', '+')
if Location.nearby_mosque:
url += Location.nearby_mosque.replace(' ', '+')
return {
'type': 'ir.actions.act_url',
'target': 'new',
'url': url
}
@api.onchange('url')
def onchange_image_url(self):
if self.image_url:
self.img_attach = '
' % self.url
@api.depends('benefit_ids')
def get_benefits_total(self):
for rec in self:
rec.benefits_total = len(rec.benefit_ids)
def get_total(self):
for rec in self:
for total in rec.benefit_ids:
rec.total_income += total.total_income
rec.total_expenses += total.total_expenses
# rec.total_net = rec.total_expenses - rec.total_income
if rec.total_expenses >= rec.total_income:
rec.total_net = rec.total_expenses - rec.total_income
else:
rec.total_net = rec.total_income - rec.total_expenses
if rec.total_net > 0:
rec.financial_aid = (abs(rec.total_net) * .5)
else:
rec.financial_aid = 0
@api.depends('room_ids')
def get_rooms_total(self):
for rec in self:
if rec.id:
rooms = rec.env['benefit.housing.rooms'].sudo().search([('housing_id', '=', rec.id)])
rec.rooms_number = len(rooms)
@api.onchange('block', 'city_id', 'housing_number', 'house_number')
def _compute_get_name(self):
for rec in self:
if rec.block and rec.city_id and rec.housing_number and rec.house_number:
rec.name = str(rec.housing_number + "-" + rec.house_number + "-" + rec.block + "-" + str(
rec.city_id.code) + "-" + rec.street)
def open_benefits(self):
return {
'name': _("Benefits"),
'view_type': 'form',
'view_mode': 'tree,form',
'views': [(self.env.ref(
'odex_benefit.grant_benefit_tree').id, 'tree'),
(self.env.ref('odex_benefit.grant_benefit_form').id, 'form')],
'res_model': 'grant.benefit',
'type': 'ir.actions.act_window',
'domain': "[('housing_id','=',%s)]" % (self.id),
'target': 'current',
}
def open_rooms(self):
context = {}
context['default_housing_id'] = self.id
return {
'name': _("Rooms"),
'view_type': 'form',
'view_mode': 'tree,form',
'views': [(self.env.ref(
'odex_benefit.housing_rooms_tree').id, 'tree'),
(self.env.ref('odex_benefit.housing_rooms_form').id, 'form')],
'res_model': 'benefit.housing.rooms',
'type': 'ir.actions.act_window',
'context': context,
'domain': "[('housing_id','=',%s)]" % (self.id),
'target': 'current',
}
@api.onchange('room_ids')
def onchange_room_ids(self):
res = {}
items_ids = []
for record in self:
items_ids.append(record.id)
res['domain'] = {'items': [('room_id', 'in', items_ids)]}
return res
class housingRooms(models.Model):
_name = 'benefit.housing.rooms'
_rec_name = 'rooms_type'
_description = "Benefits - housing rooms"
name = fields.Char(related='rooms_type.name')
housing_id = fields.Many2one(
'benefit.housing')
rooms_type = fields.Many2one(
'housing.rooms.type',
string='room',
required=False)
rooms_categories_id = fields.Many2one(
'rooms.categories')
family_members = fields.Integer(
string='',
required=False)
# male_members = fields.Integer(
# string='',
# required=False)
# female_members = fields.Integer(
# string='',
# required=False)
members_ids = fields.One2many(
'housing.rooms.members',
'room_id',
string='')
items = fields.One2many(
comodel_name='benefit.housing.rooms.items',
inverse_name='room_id',
string='items',
required=False)
room_ribs = fields.Char(
compute='_compute_space')
width = fields.Selection(
string='',
selection=[('1', '1'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('6', '6'),
('7', '7'),
('8', '8'),
('9', '9'), ],
required=False, )
length = fields.Selection(
string='',
selection=[('1', '1'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('6', '6'),
('7', '7'),
('8', '8'),
('9', '9'), ],
required=False, )
room_space = fields.Char(
compute='_compute_space')
room_condition = fields.Char(
string='',
required=False)
@api.onchange('width', 'length')
def _compute_space(self):
for i in self:
if i.width and i.length:
i.room_ribs = i.width + "*" + i.length
i.room_space = int(i.width) * int(i.length)
@api.onchange('rooms_type')
def _load_items(self):
items_list = []
for r in self.rooms_type.mapped('items'):
for item in r:
items_list.append(item)
for i in self.items:
if i.item in items_list:
items_list.remove(i.item)
for room in items_list:
self.sudo().update({'items': [(0, 0, {'item': room.id})]})
class HousingRoomsItems(models.Model):
_name = 'benefit.housing.rooms.items'
_description = "Benefits - housing items"
name = fields.Char(
string='',
required=False)
room_id = fields.Many2one(
comodel_name='benefit.housing.rooms')
item = fields.Many2one(
'rooms.items',
string='item',
required=False)
status = fields.Many2one(
'item.status', )
# compute='set_status')
percentage = fields.Float(
string='',
# related="status.percentage",
required=False)
# @api.onchange('percentage')
# def set_status(self):
# for rec in self:
# if rec.percentage:
# print(rec.percentage)
# status = rec.env['item.status'].sudo().search(
# [('minimum_percentage', '<=', rec.percentage)('maximum_percentage', '>=', rec.percentage)])
# rec.status = status.id
class HousingRoomsMembers(models.Model):
_name = 'housing.rooms.members'
_description = "Benefits - housing members"
room_id = fields.Many2one(
'benefit.housing.rooms')
housing_id = fields.Many2one('benefit.housing', related='room_id.housing_id')
rooms_categories_id = fields.Many2one('rooms.categories', related='room_id.rooms_categories_id',
string='',
required=False)
benefit_id = fields.Many2one(
'grant.benefit',
string='')
age = fields.Integer(
string='',
related='benefit_id.age', required=False)
gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], related='benefit_id.gender',
string="Gender")
is_accept = fields.Boolean(
string='',
store=True,
compute='_check_accept',
required=False)
@api.depends('age', 'gender')
def _check_accept(self):
for i in self:
i.is_accept = False
if i.age >= i.room_id.rooms_categories_id.age_from and i.age <= i.room_id.rooms_categories_id.age_to and (
i.gender == i.room_id.rooms_categories_id.gender or i.room_id.rooms_categories_id.gender == 'both'):
i.is_accept = True
class RoomsType(models.Model):
_name = 'housing.rooms.type'
_rec_name = 'name'
_description = "Benefits - rooms type"
name = fields.Char(
string='',
required=False)
items = fields.Many2many('rooms.items',
string='')
class RoomsItems(models.Model):
_name = 'rooms.items'
_rec_name = 'name'
_description = "Benefits - rooms items"
name = fields.Char(
string='',
required=False)
description = fields.Char(
string='Description',
required=False)
class RoomsCategories(models.Model):
_name = 'rooms.categories'
_rec_name = 'name'
_description = "Benefits - rooms categories"
name = fields.Char(
string='',
required=False)
age_from = fields.Integer(
string='',
required=False)
age_to = fields.Integer(
string='',
required=False)
gender = fields.Selection(selection=[('male', 'Male only'), ('female', 'Female only'), ('both', 'both')],
string="Gender")
description = fields.Char(
string='Description',
required=False)
class ItemStatus(models.Model):
_name = 'item.status'
_description = "Benefits - item status"
name = fields.Char(
string='',
required=False)
minimum_percentage = fields.Float(
string='',
required=False)
maximum_percentage = fields.Float(
string='',
required=False)
class DomesticLabor(models.Model):
_name = 'domestic.labor'
_description = "Benefits - domestic labor"
name = fields.Char(string='name')
# @staticmethod
# def _get_default_color():
# return randint(1, 11)
color = fields.Integer(string='Color Index')
class housingNeed(models.Model):
_name = 'housing.need'
_description = 'housing needs'
ap_id = fields.Many2one(
'appliances.furniture')
housing_id = fields.Many2one(
'benefit.housing')
benefit_id = fields.Many2one(
'grant.benefit')
amount = fields.Float(
string='',
required=False)