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 @@ 1 - - ir.module.category,name - ar_001 - model - - Beneficiaries Management - فئات المستفيدين - + diff --git a/odex25_ensan/odex_benefit/views/family_members.xml b/odex25_ensan/odex_benefit/views/family_members.xml index 295f0222a..57886decd 100644 --- a/odex25_ensan/odex_benefit/views/family_members.xml +++ b/odex25_ensan/odex_benefit/views/family_members.xml @@ -143,7 +143,7 @@ - + - + @@ -219,7 +220,8 @@ - + @@ -294,6 +296,23 @@ + + family.member.kanban + family.member + + + + + +
+
+
+
+
+
+
+
+
family.member.search @@ -321,7 +340,7 @@ Family Members family.member - tree,form + tree,kanban,form

Create the Member

diff --git a/odex25_ensan/odex_benefit/views/seasonal_service_view.xml b/odex25_ensan/odex_benefit/views/seasonal_service_view.xml index b7d1c8ed1..d3fdec95c 100644 --- a/odex25_ensan/odex_benefit/views/seasonal_service_view.xml +++ b/odex25_ensan/odex_benefit/views/seasonal_service_view.xml @@ -8,13 +8,20 @@
+
@@ -42,9 +49,11 @@ + + + @@ -73,11 +83,30 @@ - - + + - - + + + + + + + + + + + + + + + + diff --git a/odex25_ensan/odex_benefit/views/service_request.xml b/odex25_ensan/odex_benefit/views/service_request.xml index 7d105fa91..5606298fe 100644 --- a/odex25_ensan/odex_benefit/views/service_request.xml +++ b/odex25_ensan/odex_benefit/views/service_request.xml @@ -177,7 +177,7 @@ - +