diff --git a/odex25_ensan/odex_benefit/i18n/ar_001.po b/odex25_ensan/odex_benefit/i18n/ar_001.po
index f3ffbd9eb..02fbeda9f 100644
--- a/odex25_ensan/odex_benefit/i18n/ar_001.po
+++ b/odex25_ensan/odex_benefit/i18n/ar_001.po
@@ -14468,11 +14468,6 @@ msgstr "الخدمات الموسمية"
msgid "Draft"
msgstr "مسودة"
-#. module: odex_benefit
-#: model_terms:ir.ui.view,arch_db:odex_benefit.seasonal_service_form_view
-msgid "Get Families"
-msgstr "جلب الأسر"
-
#. module: odex_benefit
#: code:addons/odex_benefit/models/seasonal_service.py:0
#, python-format
diff --git a/odex25_ensan/odex_benefit/models/seasonal_service.py b/odex25_ensan/odex_benefit/models/seasonal_service.py
index 72a444f13..a6fb27e43 100644
--- a/odex25_ensan/odex_benefit/models/seasonal_service.py
+++ b/odex25_ensan/odex_benefit/models/seasonal_service.py
@@ -8,25 +8,31 @@ class SeasonalService(models.Model):
_name = 'seasonal.service'
_inherit = ['mail.thread', 'mail.activity.mixin']
- name = fields.Char(string='Reference', required=True, copy=False, readonly=True, index=True,default=lambda self: _('New'))
+ name = fields.Char(string='Reference', required=True, copy=False, readonly=True, index=True,
+ default=lambda self: _('New'))
date = fields.Datetime(string='Request Date', default=fields.Datetime.now, copy=False)
- service_type_id = fields.Many2one('services.settings', domain="[('is_seasonal_service','=',True)]",string="Seasonal Service Type", required=True)
- branch_ids = fields.Many2many('branch.settings', 'service_branch_rel', 'service_id', 'branch_id', string='Branches', required=True)
+ service_type_id = fields.Many2one('services.settings', domain="[('is_seasonal_service','=',True)]",
+ string="Seasonal Service Type", required=True)
+ benefit_type = fields.Selection(string='Benefit Type', related='service_type_id.benefit_type')
+ branch_ids = fields.Many2many('branch.settings', 'service_branch_rel', 'service_id', 'branch_id', string='Branches',
+ required=True)
family_category_ids = fields.Many2many(
- 'benefit.category',
- 'service_category_rel',
- 'service_id',
- 'category_id',
- string='Family Category',
- compute='_compute_family_category_ids' ,)
- family_ids = fields.One2many('seasonal.grant.benefit', 'seasonal_service_id', string='Family')
- aid_amount = fields.Float(string="Aid Amount",compute="_compute_aid_amount", store=True)
+ 'benefit.category',
+ 'service_category_rel',
+ 'service_id',
+ 'category_id',
+ string='Family Category',
+ compute='_compute_family_category_ids', )
+ family_ids = fields.One2many('seasonal.grant.benefit', 'seasonal_service_id', string='Family')
+ aid_amount = fields.Float(string="Aid Amount", compute="_compute_aid_amount", store=True)
benefit_member_count = fields.Integer(string="Benefit Member count", compute="compute_family_benefit", store=True)
family_count = fields.Integer(string="Family count", compute="compute_family_benefit", store=True)
- family_disbursement_total_amount = fields.Float(string="Total Family Disbursement Amount", compute="_compute_family_disbursement", store=True)
- payment_order_id = fields.Many2one('payment.orders',string='Payment Order', copy= False)
+ family_disbursement_total_amount = fields.Float(string="Total Family Disbursement Amount",
+ compute="_compute_family_disbursement", store=True)
+ payment_order_id = fields.Many2one('payment.orders', string='Payment Order', copy=False)
state = fields.Selection(selection=[
('draft', 'Draft'),
+ ('calculated', 'Calculated'),
('approval_of_beneficiary_services', 'Approval of beneficiary services'),
('accounting_approve', 'Accounting Approve'),
@@ -35,17 +41,37 @@ class SeasonalService(models.Model):
account_id = fields.Many2one('account.account', string='Expenses Account', related="service_type_id.account_id")
service_requests_ids = fields.One2many('service.request', 'seasonal_service_id', string='Service Requests')
benefit_ids = fields.Many2many(comodel_name='grant.benefit', relation='benefit_grant_seasonal_service_rel',
+ column1='seasonal_service_id',
+ column2='benefit_id', string='Families', copy=False)
+ member_ids = fields.Many2many(comodel_name='family.member', relation='family_member_seasonal_service_rel',
column1='seasonal_service_id',
- column2='benefit_id', string='Families',copy=False)
+ column2='family_member_id', string='Family Members', copy=False)
+ family_domain_ids = fields.Many2many(comodel_name='grant.benefit', compute='_compute_domain_ids',
+ string="Eligible Families")
+ service_delivery_method = fields.Selection(selection=[
+ ('cash', 'Cash'),
+ ('in_kind', 'In kind'),], string='Service Delivery Method', default='cash')
+ @api.depends('branch_ids', 'family_category_ids')
+ def _compute_domain_ids(self):
+ for rec in self:
+ domain = ['|', ('state', '=', 'second_approve'), '&', ('state', 'in', ('waiting_approve', 'first_approve')),
+ ('action_type', '=', 'suspended')]
+ if self.branch_ids:
+ domain.append(('branch_custom_id', 'in', self.branch_ids.ids))
+ if self.family_category_ids:
+ domain.append(('benefit_category_id', 'in', self.family_category_ids.ids))
- @api.depends('service_type_id','service_type_id.benefit_category_ids')
+ families = self.env['grant.benefit'].sudo().search(domain)
+ rec.family_domain_ids = families
+
+ @api.depends('service_type_id', 'service_type_id.benefit_category_ids')
def _compute_family_category_ids(self):
for record in self:
- if record.service_type_id and record.service_type_id.benefit_category_ids:
+ if record.service_type_id and record.service_type_id.benefit_category_ids:
record.family_category_ids = record.service_type_id.benefit_category_ids
- else:
- record.family_category_ids = []
+ else:
+ record.family_category_ids = []
@api.model
def create(self, vals):
@@ -62,11 +88,10 @@ class SeasonalService(models.Model):
@api.onchange('service_type_id')
def _onchange_service_type_id(self):
- """
- Clears the One2many field when service_type_id is changed and data exists in the other field.
- """
- if self.family_ids:
- self.family_ids = [(5, 0, 0)]
+ if self.benefit_ids:
+ self.benefit_ids = [(5, 0, 0)]
+ if self.member_ids:
+ self.member_ids = [(5, 0, 0)]
def action_open_exchange_order_wizard(self):
ids = []
@@ -79,15 +104,15 @@ class SeasonalService(models.Model):
raise UserError(_("There are already disbursement orders associated with the request(s)."))
else:
return {
- 'type': 'ir.actions.act_window',
- 'name': 'Exchange Order',
- 'res_model': 'exchange.order.wizard',
- 'view_mode': 'form',
- 'target': 'new',
- 'context': {'default_service_ids': ids,
- 'seasonal_service': True,
- }
- }
+ 'type': 'ir.actions.act_window',
+ 'name': 'Exchange Order',
+ 'res_model': 'exchange.order.wizard',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {'default_service_ids': ids,
+ 'seasonal_service': True,
+ }
+ }
@api.depends('family_ids', 'family_ids.family_id')
def compute_family_benefit(self):
@@ -95,7 +120,7 @@ class SeasonalService(models.Model):
record.family_count = len(record.family_ids)
if record.service_type_id and record.service_type_id.service_type == 'eid_gift':
record.benefit_member_count = len(record.family_ids.family_id.member_ids.filtered(
- lambda x: x.member_status == 'benefit' and x.age <= self.service_type_id.eid_gift_max_age))
+ lambda x: x.member_status == 'benefit' and x.age <= self.service_type_id.max_age))
else:
record.benefit_member_count = sum(record.family_ids.family_id.mapped('benefit_member_count'))
@@ -106,11 +131,11 @@ class SeasonalService(models.Model):
aid_amount = 0.0
if record.service_type_id:
if record.service_type_id.service_type == 'ramadan_basket':
- aid_amount = record.service_type_id.ramadan_basket_member_amount
+ aid_amount = record.service_type_id.max_amount
elif record.service_type_id.service_type == 'eid_gift':
- aid_amount = record.service_type_id.eid_gift_member_amount
+ aid_amount = record.service_type_id.max_amount
elif record.service_type_id.service_type == 'winter_clothing':
- aid_amount = record.service_type_id.winter_clothing_member_amount
+ aid_amount = record.service_type_id.max_amount
record.write({'aid_amount': aid_amount})
@api.depends('service_type_id', 'aid_amount', 'benefit_member_count', 'family_count')
@@ -129,7 +154,6 @@ class SeasonalService(models.Model):
else:
record.family_disbursement_total_amount = 0.0
-
def action_approval_of_beneficiary_services(self):
for rec in self:
if not rec.service_requests_ids:
@@ -140,42 +164,54 @@ class SeasonalService(models.Model):
rec.state = 'approval_of_beneficiary_services'
def action_accounting_approve(self):
- for rec in self:
- rec.service_requests_ids.write({'state': 'send_request_to_supplier'})
- rec.state = 'accounting_approve'
-
+ for rec in self:
+ rec.service_requests_ids.write({'state': 'send_request_to_supplier'})
+ rec.state = 'accounting_approve'
- def get_families(self):
- if self.family_ids:
- self.family_ids.unlink()
- domain = ['|', ('state', '=', 'second_approve'), '&', ('state', 'in', ('waiting_approve','first_approve')),('action_type', '=', 'suspended')]
- if self.branch_ids:
- domain.append(('branch_custom_id', 'in', self.branch_ids.ids)) # Filter by selected branches
+ def action_calculate(self):
+ # if self.service_type_id and self.service_type_id.service_type == 'eid_gift':
+ # family_ids = self.env['family.member'].search(
+ # [('age', '<=', self.service_type_id.eid_gift_max_age),('member_status','=','benefit')]).benefit_id
- if self.family_category_ids:
- domain.append(('benefit_category_id', 'in', self.family_category_ids.ids)) # Filter by selected family categories
-
- if self.service_type_id and self.service_type_id.service_type == 'eid_gift':
- family_ids = self.env['family.member'].search(
- [('age', '<=', self.service_type_id.eid_gift_max_age),('member_status','=','benefit')]).benefit_id
-
- domain.append(('id', 'in', family_ids.ids)) # Append the filtered family IDs to domain
- families = self.env['grant.benefit'].sudo().search(domain)
- if not self.family_ids and families:
- for rec in families:
- self.family_ids = [(0, 0, {
- 'family_id': rec.id,
- })]
+ # domain.append(('id', 'in', family_ids.ids)) # Append the filtered family IDs to domain
+ Service = self.env['service.request']
+ vals = []
+ for rec in self:
+ if not rec.benefit_ids:
+ raise UserError(_("You must add at least one family."))
+ rec.service_requests_ids.unlink()
+ if rec.benefit_type == "family":
+ for benefit in rec.benefit_ids:
+ service_request = Service.create(
+ {'family_id': benefit.id, 'service_cat': rec.service_type_id.id, 'seasonal_service_id': rec.id,
+ 'benefit_type': rec.benefit_type})
+ service_request.onchange_requested_service_amount()
+ if rec.service_delivery_method == "cash":
+ service_request.requested_service_amount = service_request.service_max_amount
+ else:
+ service_request.requested_service_amount = 0
+ service_request.is_in_kind = True
+ else:
+ pass
+ rec.state = 'calculated'
+ def action_recalculate(self):
+ for rec in self:
+ rec.service_requests_ids.unlink()
+ def action_reset_to_draft(self):
+ for rec in self:
+ rec.service_requests_ids.write({'state': 'draft'})
+ rec.service_requests_ids.unlink()
+ rec.state = 'draft'
class SeasonalGrantBenefit(models.Model):
_name = 'seasonal.grant.benefit'
- family_id = fields.Many2one('grant.benefit',string='Family', required=True)
+ family_id = fields.Many2one('grant.benefit', string='Family', required=True)
family_category = fields.Many2one('benefit.category', string='Family Category',
related='family_id.benefit_category_id')
branch_custom_id = fields.Many2one('branch.settings', string="Branch", related='family_id.branch_custom_id',
@@ -183,12 +219,12 @@ class SeasonalGrantBenefit(models.Model):
aid_amount = fields.Float(string="Aid Amount", compute="_compute_aid_amount", store=True)
account_id = fields.Many2one('account.account', string='Expenses Account', related='seasonal_service_id.account_id')
name = fields.Char(string='Reference', related='seasonal_service_id.name')
- service_type_id = fields.Many2one('services.settings', related='seasonal_service_id.service_type_id', string="Seasonal Service Type")
- seasonal_service_id = fields.Many2one('seasonal.service',string='Seasonal Service')
- payment_order_id = fields.Many2one('payment.orders',string='Payment Order')
+ service_type_id = fields.Many2one('services.settings', related='seasonal_service_id.service_type_id',
+ string="Seasonal Service Type")
+ seasonal_service_id = fields.Many2one('seasonal.service', string='Seasonal Service')
+ payment_order_id = fields.Many2one('payment.orders', string='Payment Order')
-
- @api.depends('family_id','service_type_id')
+ @api.depends('family_id', 'service_type_id')
def _compute_aid_amount(self):
""" Compute Aid Amount based on service_type_id """
for record in self:
@@ -196,33 +232,35 @@ class SeasonalGrantBenefit(models.Model):
# benefit_members = 1
if record.service_type_id:
if record.service_type_id.service_type == 'ramadan_basket':
- aid_amount = record.service_type_id.ramadan_basket_member_amount
+ aid_amount = record.service_type_id.max_amount
elif record.service_type_id.service_type == 'eid_gift' and record.family_id:
- benefit_members = len(record.family_id.member_ids.filtered(lambda x: x.member_status == 'benefit' and x.age <= record.service_type_id.eid_gift_max_age))
- aid_amount = record.service_type_id.eid_gift_member_amount * benefit_members
+ benefit_members = len(record.family_id.member_ids.filtered(
+ lambda x: x.member_status == 'benefit' and x.age <= record.service_type_id.max_age))
+ aid_amount = record.service_type_id.max_amount * benefit_members
elif record.service_type_id.service_type == 'winter_clothing' and record.family_id:
benefit_members = record.family_id.mapped('benefit_member_count')[0]
- aid_amount = record.service_type_id.winter_clothing_member_amount * benefit_members
+ aid_amount = record.service_type_id.max_amount * benefit_members
record.write({'aid_amount': aid_amount})
@api.onchange('family_id')
def get_family_id_domain(self):
- domain = ['|', ('state', '=', 'second_approve'), '&', ('state', 'in', ('waiting_approve','first_approve')),('action_type', '=', 'suspended')]
+ domain = ['|', ('state', '=', 'second_approve'), '&', ('state', 'in', ('waiting_approve', 'first_approve')),
+ ('action_type', '=', 'suspended')]
if self.seasonal_service_id:
if self.seasonal_service_id.branch_ids:
- domain.append(('branch_custom_id', 'in', self.seasonal_service_id.branch_ids.ids)) # Filter by selected branches
+ domain.append(
+ ('branch_custom_id', 'in', self.seasonal_service_id.branch_ids.ids)) # Filter by selected branches
if self.seasonal_service_id.family_category_ids:
- domain.append(('benefit_category_id', 'in', self.seasonal_service_id.family_category_ids.ids)) # Filter by selected family categories
+ domain.append(('benefit_category_id', 'in',
+ self.seasonal_service_id.family_category_ids.ids)) # Filter by selected family categories
if self.service_type_id and self.service_type_id.service_type == 'eid_gift':
family_ids = self.env['family.member'].search(
- [('age', '<=', self.service_type_id.eid_gift_max_age),('member_status','=','benefit')]).benefit_id
+ [('age', '<=', self.service_type_id.max_age),
+ ('member_status', '=', 'benefit')]).benefit_id
domain.append(('id', 'in', family_ids.ids)) # Append the filtered family IDs to domain
families = self.seasonal_service_id.family_ids.mapped('family_id')
domain.append(('id', 'not in', families.ids))
return {'domain': {'family_id': domain}}
-
-
-
diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py
index 9550dd2be..0377596e4 100644
--- a/odex25_ensan/odex_benefit/models/service_request.py
+++ b/odex25_ensan/odex_benefit/models/service_request.py
@@ -137,8 +137,7 @@ class ServiceRequest(models.Model):
('yes', 'Yes'),
('no', 'No'),
], string='Has Marriage Course')
- #Eid Gift
- eid_gift_benefit_count = fields.Integer(string='Eid Gift Benefit Count',compute="_get_eid_gift_benefit_count")
+ service_benefit_count = fields.Integer(string='Service Benefit Count',compute="_compute_service_benefit_count")
#Buy home
amount_for_buy_home_for_member_count = fields.Float(string="Amount For Buy Home for member count")
home_age = fields.Integer(string='Home Age')
@@ -192,6 +191,7 @@ class ServiceRequest(models.Model):
string="Owner Identity")
seasonal_service_id = fields.Many2one('seasonal.service', string='Seasonal Service', ondelete='cascade')
is_seasonal = fields.Boolean(string='Is Seasonal Service?',related='service_cat.is_seasonal_service')
+ is_in_kind = fields.Boolean(string="In Kind",default=False)
@api.depends('requested_service_amount', 'service_max_amount')
def _get_money_for_payment_is_appearance(self):
@@ -420,12 +420,18 @@ class ServiceRequest(models.Model):
rec.rent_for_alternative_housing = self.env['services.settings'].search([('service_type','=','rent')],limit=1).id
else:
rec.rent_for_alternative_housing = False
- @api.depends('family_id')
- def _get_eid_gift_benefit_count(self):
+
+ @api.depends('family_id','service_cat')
+ def _compute_service_benefit_count(self):
for rec in self:
- rec.eid_gift_benefit_count = 0
- if rec.family_id:
- rec.eid_gift_benefit_count = len(rec.family_id.member_ids.filtered(lambda x: x.age <= rec.service_cat.max_age))
+ count = 1
+ if rec.benefit_type == "family":
+ count = len(rec.family_id.member_ids)
+ if rec.service_cat.max_age > 0:
+ count = len(
+ rec.family_id.member_ids.filtered(lambda x: x.age <= rec.service_cat.max_age))
+ rec.service_benefit_count = count
+
@api.onchange('requests_counts', 'service_type', 'service_reason_id')
def _get_max_transportation_amounts(self):
@@ -565,22 +571,11 @@ class ServiceRequest(models.Model):
furnishing_cost_sum += rec.furnishing_cost
self.requested_service_amount = furnishing_cost_sum
- @api.onchange('member_id','family_id','eid_gift_benefit_count','service_cat')
+ @api.onchange('family_id','service_cat')
def _onchange_member(self):
for rec in self:
- if rec.family_id:
- rec.benefit_type = rec.service_cat.benefit_type
- if rec.benefit_type == 'family' and rec.service_type == 'eid_gift':
- rec.requested_service_amount = rec.eid_gift_benefit_count * rec.service_cat.eid_gift_member_amount
- if rec.benefit_type == 'member' and rec.service_type == 'eid_gift':
- rec.requested_service_amount = rec.service_cat.eid_gift_member_amount
- if rec.benefit_type == 'family' and rec.service_type == 'winter_clothing':
- rec.requested_service_amount = rec.benefit_member_count * rec.service_cat.winter_clothing_member_amount
- if rec.benefit_type == 'member' and rec.service_type == 'winter_clothing':
- rec.requested_service_amount = rec.service_cat.winter_clothing_member_amount
- if rec.benefit_type == 'family' and rec.service_type == 'ramadan_basket':
- rec.requested_service_amount = rec.service_cat.ramadan_basket_member_amount
- else:
+ rec.benefit_type = rec.service_cat.benefit_type
+ if not rec.family_id:
rec.member_id = False
rec.service_cat = False
rec.available_service_cats = False
@@ -814,8 +809,7 @@ class ServiceRequest(models.Model):
total_spent = sum(existing_requests_within_year.mapped('requested_service_amount'))
rec.service_max_amount = rec.service_cat.max_amount - total_spent
elif rec.max_limit_period == "individual":
- if rec.benefit_type == "family":
- rec.service_max_amount *= rec.benefit_member_count
+ rec.service_max_amount *= rec.service_benefit_count
elif rec.max_limit_period == "recurrence_period":
pass
@@ -883,15 +877,15 @@ class ServiceRequest(models.Model):
raise UserError(
_("You Cannot request this service for period more than %s") % rec.service_cat.rent_period)
# Validation for 'family' benefit type with 'eid_gift' service type
- if rec.benefit_type == 'family' and rec.service_cat.service_type == 'eid_gift':
- if rec.eid_gift_benefit_count == 0:
- raise UserError(
- _("You cannot request this service because family should have members his age less than %s") % rec.service_cat.eid_gift_max_age)
+ #if rec.benefit_type == 'family' and rec.service_cat.service_type == 'eid_gift':
+ # if rec.eid_gift_benefit_count == 0:
+ # raise UserError(
+ # _("You cannot request this service because family should have members his age less than %s") % rec.service_cat.max_age)
# Validation for 'member' benefit type with 'eid_gift' service type
- if rec.benefit_type == 'member' and rec.service_cat.service_type == 'eid_gift':
- if rec.member_id.age > rec.service_cat.eid_gift_max_age:
- raise UserError(
- _("You cannot request this service because your age should be less than %s") % rec.service_cat.eid_gift_max_age)
+ #if rec.benefit_type == 'member' and rec.service_cat.service_type == 'eid_gift':
+ # if rec.member_id.age > rec.service_cat.max_age:
+ # raise UserError(
+ # _("You cannot request this service because your age should be less than %s") % rec.service_cat.max_age)
@api.onchange('member_id')
def onchange_member_id(self):
diff --git a/odex25_ensan/odex_benefit/models/services_settings.py b/odex25_ensan/odex_benefit/models/services_settings.py
index 6115d84d9..c60b0d621 100644
--- a/odex25_ensan/odex_benefit/models/services_settings.py
+++ b/odex25_ensan/odex_benefit/models/services_settings.py
@@ -46,13 +46,6 @@ class ServicesSettings(models.Model):
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')
- # Eid Gift
- eid_gift_max_age = fields.Integer(string='Eid Gift Max Age')
- eid_gift_member_amount = fields.Float(string='Eid Gift Member Amount')
- #Winter clothing
- winter_clothing_member_amount = fields.Float(string="Winter clothing Member Amount")
- #Ramadan Basket
- ramadan_basket_member_amount = fields.Float(string='Ramadan Basket 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')
@@ -117,6 +110,7 @@ class ServicesSettings(models.Model):
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")
diff --git a/odex25_ensan/odex_benefit/security/security_view.xml b/odex25_ensan/odex_benefit/security/security_view.xml
index aaf8c7b4b..7aca5273d 100644
--- a/odex25_ensan/odex_benefit/security/security_view.xml
+++ b/odex25_ensan/odex_benefit/security/security_view.xml
@@ -6,14 +6,7 @@
Create the Member