diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po
index bcd589fb8..34a134ad4 100644
--- a/odex25_benefit/odex_benefit/i18n/ar_001.po
+++ b/odex25_benefit/odex_benefit/i18n/ar_001.po
@@ -4671,6 +4671,7 @@ msgstr "المراحل التعليمية"
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__education_levels
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__education_levels
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__replacement_education_levels
+#: model:ir.model.fields,field_description:odex_benefit.field_res_partner__education_level_ids
msgid "Education Levels"
msgstr "المرحلة التعليمية"
@@ -17289,4 +17290,10 @@ msgstr "يجب أن يكون تاريخ البدء وتاريخ الانتهاء
msgid ""
"Payment Type requires a period of %s months, but selected period is %s "
"months."
-msgstr "يتطلب نوع السداد فترة %s أشهر، ولكن الفترة المحددة هي %s أشهر."
\ No newline at end of file
+msgstr "يتطلب نوع السداد فترة %s أشهر، ولكن الفترة المحددة هي %s أشهر."
+
+#. module: odex_benefit
+#: model:ir.model.fields,field_description:odex_benefit.field_res_partner__is_education_entity
+msgid "Is Education Entity"
+msgstr "جهة تعليمية"
+
diff --git a/odex25_benefit/odex_benefit/models/education_period.py b/odex25_benefit/odex_benefit/models/education_period.py
index be39b95ec..0bbcd6445 100644
--- a/odex25_benefit/odex_benefit/models/education_period.py
+++ b/odex25_benefit/odex_benefit/models/education_period.py
@@ -1,4 +1,4 @@
-from odoo import fields, models,api
+from odoo import fields, models, api
class EducationPeriod(models.Model):
@@ -10,4 +10,5 @@ class EducationPeriod(models.Model):
start_date = fields.Date(string='Period Start Date', required=True)
end_date = fields.Date(string='Period End Date', required=True)
education_level_ids = fields.Many2many('education.level', string='Education Levels')
- education_entity_ids = fields.Many2many("res.partner", string='Education Entities')
\ No newline at end of file
+ education_entity_ids = fields.Many2many(
+ "res.partner", domain="[('is_education_entity','=',True)]", string='Education Entities')
diff --git a/odex25_benefit/odex_benefit/models/family_expense.py b/odex25_benefit/odex_benefit/models/family_expense.py
index 9dc808119..e998c439e 100644
--- a/odex25_benefit/odex_benefit/models/family_expense.py
+++ b/odex25_benefit/odex_benefit/models/family_expense.py
@@ -3,6 +3,7 @@ from dateutil.relativedelta import relativedelta
from odoo import models, fields, api, _
from odoo.exceptions import UserError
from odoo.tools import date_utils
+from dateutil.relativedelta import relativedelta
class ConfirmBenefitExpense(models.Model):
@@ -118,6 +119,19 @@ class ConfirmBenefitExpense(models.Model):
if rec.move_state == 'done' and rec.payment_state == 'done':
rec.state = 'confirm'
+ def _get_month_count(self):
+ self.ensure_one()
+ if not self.start_date or not self.end_date:
+ return 1
+
+ start = fields.Date.from_string(self.start_date)
+ end = fields.Date.from_string(self.end_date)
+
+ diff = relativedelta(end, start)
+ months = diff.years * 12 + diff.months + 1
+
+ return max(1, months)
+
@api.model
def create(self, vals):
res = super(ConfirmBenefitExpense, self).create(vals)
@@ -129,6 +143,7 @@ class ConfirmBenefitExpense(models.Model):
def _update_benefit_expense_lines(self):
self.ensure_one()
+ month_count = self._get_month_count()
for line in self.benefit_expense_line_ids:
family = line.family_id
income, meals, clotting, othaim = 0, 0, 0, 0
@@ -137,12 +152,12 @@ class ConfirmBenefitExpense(models.Model):
monthly_meals = 0.0 if family.meal_card else family.family_monthly_meals
othaime = family.family_monthly_meals if family.meal_card else 0.0
if self.cash_expense:
- income = family.family_monthly_income
+ income = family.family_monthly_income * month_count
if self.meal_expense:
- meals = monthly_meals
- othaim = othaime
+ meals = monthly_meals * month_count
+ othaim = othaime * month_count
if self.cloth_expense:
- clotting = family.family_monthly_clotting
+ clotting = family.family_monthly_clotting * month_count
vals = {
'branch_id': family.branch_custom_id.id,
'family_category_id': family.benefit_category_id.id,
diff --git a/odex25_benefit/odex_benefit/models/seasonal_service.py b/odex25_benefit/odex_benefit/models/seasonal_service.py
index f75c14779..c5e531794 100644
--- a/odex25_benefit/odex_benefit/models/seasonal_service.py
+++ b/odex25_benefit/odex_benefit/models/seasonal_service.py
@@ -60,6 +60,8 @@ class SeasonalService(models.Model):
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")
+ allowed_member_ids = fields.Many2many('family.member', compute='_compute_allowed_member_ids',
+ string="Allowed Members", )
service_delivery_method = fields.Selection(selection=[
('cash', 'Cash'),
('in_kind', 'In kind'), ], string='Service Delivery Method', default='cash')
@@ -80,6 +82,25 @@ class SeasonalService(models.Model):
payment_order_state = "waiting"
rec.payment_order_state = payment_order_state
+ @api.depends('benefit_ids', 'service_type_id')
+ def _compute_allowed_member_ids(self):
+ for rec in self:
+ domain = [('benefit_id', 'in', rec.benefit_ids.ids),
+ ('member_status', '=', 'benefit')]
+
+ members = self.env['family.member'].sudo().search(domain)
+
+ if rec.service_type_id.is_this_service_for_student:
+ members = members.filtered(
+ lambda m: (
+ m.education_status == 'educated'
+ and any(edu.case_study == 'continuous'
+ for edu in m.member_education_status_ids)
+ )
+ )
+
+ rec.allowed_member_ids = members
+
@api.onchange('service_type_id')
def _onchange_service_type_id(self):
if self.benefit_ids:
@@ -88,7 +109,6 @@ class SeasonalService(models.Model):
if self.service_type_id and self.service_type_id.benefit_category_ids:
self.family_category_ids = [(6, 0, self.service_type_id.benefit_category_ids.ids)]
-
@api.depends('branch_ids', 'family_category_ids')
def _compute_domain_ids(self):
for rec in self:
@@ -132,7 +152,6 @@ class SeasonalService(models.Model):
if len(members_to_keep) != len(self.member_ids):
self.member_ids = [(6, 0, members_to_keep.ids)]
-
@api.model
def create(self, vals):
res = super(SeasonalService, self).create(vals)
diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py
index 09f6b678b..7841429c7 100644
--- a/odex25_benefit/odex_benefit/models/service_request.py
+++ b/odex25_benefit/odex_benefit/models/service_request.py
@@ -368,8 +368,6 @@ class ServiceRequest(models.Model):
count = len(count_members)
- rec.service_benefit_count = count
-
domain_members = family_members
if rec.service_cat:
@@ -384,7 +382,10 @@ class ServiceRequest(models.Model):
for edu in m.member_education_status_ids)
)
)
+ if rec.benefit_type == "family":
+ count = len(domain_members)
+ rec.service_benefit_count = count
rec.member_domain_ids = domain_members
def action_send_to_researcher(self):
diff --git a/odex25_benefit/odex_benefit/views/seasonal_service_view.xml b/odex25_benefit/odex_benefit/views/seasonal_service_view.xml
index aa811bac9..9780ab898 100644
--- a/odex25_benefit/odex_benefit/views/seasonal_service_view.xml
+++ b/odex25_benefit/odex_benefit/views/seasonal_service_view.xml
@@ -89,6 +89,7 @@
+
@@ -190,7 +191,7 @@
+ domain="[('id', 'in', allowed_member_ids)]"/>