[IMP] odex_benefit: IMP benefit

This commit is contained in:
younes 2025-12-07 14:41:47 +01:00
parent 3029e053db
commit c852aac5da
6 changed files with 56 additions and 12 deletions

View File

@ -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 أشهر."
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 "جهة تعليمية"

View File

@ -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')
education_entity_ids = fields.Many2many(
"res.partner", domain="[('is_education_entity','=',True)]", string='Education Entities')

View File

@ -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,

View File

@ -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)

View File

@ -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):

View File

@ -89,6 +89,7 @@
<field name="benefit_type" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="allowed_member_ids" widget="many" invisible="1"/>
</group>
</group>
<notebook>
@ -190,7 +191,7 @@
</page>
<page string="Members" attrs="{'invisible': [('benefit_type', '!=', 'member')]}">
<field name="member_ids" attrs="{'readonly': [('state', '!=', 'draft')]}"
domain="[('benefit_id', 'in', benefit_ids),('member_status', '=', 'benefit')]"/>
domain="[('id', 'in', allowed_member_ids)]"/>
</page>
</notebook>
</sheet>