[IMP] odex_benefit: IMP benefit

This commit is contained in:
younes 2026-01-08 14:57:23 +01:00
parent c00f5b584c
commit 3010f59c48
11 changed files with 78 additions and 96 deletions

View File

@ -33,16 +33,6 @@
<field name="binding_type">action</field>
</record>
<record id="action_assign_benefit_sequence" model="ir.actions.server">
<field name="name">Re-Assign Benefit Sequence</field>
<field name="model_id" ref="odex_benefit.model_grant_benefit"/>
<field name="binding_model_id" ref="odex_benefit.model_grant_benefit"/>
<field name="state">code</field>
<field name="code">
action = records.assign_sequence_to_all()
</field>
</record>
<record id="action_assign_specialist_mass" model="ir.actions.server">
<field name="name">Assign Specialist (Mass)</field>
<field name="model_id" ref="odex_benefit.model_grant_benefit"/>

View File

@ -7891,7 +7891,6 @@ msgstr "المرفقات الرئيسية"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.main_service_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Main Service"
msgstr "نوع الخدمة الرئيسية"
@ -9873,7 +9872,6 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__ref
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__ref
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__ref
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__name
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location__name
#: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__name
#, fuzzy
@ -9886,6 +9884,11 @@ msgstr ""
"#-#-#-#-# catalog.po (Odoo Server 14.0) #-#-#-#-#\n"
"الرقم التسلسلي"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__name
msgid "Reference"
msgstr "رقم الخدمة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_entity_refuse_reason__date
msgid "Refuse Date"
@ -11117,7 +11120,6 @@ msgstr "يدرس خارج السعودية"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__sub_service_category
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Sub Service Category"
msgstr "الخدمة الفرعية"
@ -12687,11 +12689,6 @@ msgstr ""
msgid "bad"
msgstr "سيء"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.banks_view_tree
msgid "banks_tree"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__generate_reports__qualification_type__behavior
msgid "behavior"

View File

@ -27,15 +27,15 @@ class GrantBenefitProfile(models.Model):
def get_url(self):
return "wwww"
def name_get(self):
result = []
for rec in self:
if rec.name and rec.code:
display_name = f"{rec.code} - {rec.name}"
result.append((rec.id, display_name))
else:
result.append((rec.id, rec.name or rec.code or ""))
return result
#def name_get(self):
# result = []
# for rec in self:
# if rec.name and rec.code:
# display_name = f"{rec.code} - {rec.name}"
# result.append((rec.id, display_name))
# else:
# result.append((rec.id, rec.name or rec.code or ""))
# return result
@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):

View File

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
import logging
from datetime import datetime, date
from re import search
from dateutil.relativedelta import relativedelta as rd
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
@ -38,8 +40,11 @@ class FamilyMemberProfile(models.Model):
name = fields.Char(string="Name", compute='get_partner_name', store=True, readonly=False)
member_id_number = fields.Char(string="Member Id Number")
benefit_id = fields.Many2one("grant.benefit", string="Responsable", default=_default_benefit)
benefit_code = fields.Char(string='Family Code', related='benefit_id.code', store=True)
branch_custom_id = fields.Many2one('branch.settings', string="Branch", related="benefit_id.branch_custom_id",
search="_search_branch_custom_id")
researcher_id = fields.Many2one("committees.line", string="Researcher", related="benefit_id.researcher_id", search="_search_researcher_id")
benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category',related="benefit_id.benefit_category_id",search="_search_benefit_category_id")
gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], string="Gender")
member_phone = fields.Char(string="Member Phone")
member_location = fields.Selection(selection=[('with_family', 'With Family'), ('with_relative', 'with a relative'),
@ -307,6 +312,12 @@ class FamilyMemberProfile(models.Model):
def _search_branch_custom_id(self, operator, value):
return [('benefit_id.branch_custom_id', operator, value)]
def _search_researcher_id(self, operator, value):
return [('benefit_id.researcher_id', operator, value)]
def _search_benefit_category_id(self, operator, value):
return [('benefit_id.benefit_category_id', operator, value)]
@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
if self._context.get('members_domain_force_all'):

View File

@ -20,7 +20,8 @@ class ServiceRequest(models.Model):
researcher_id = fields.Many2one("committees.line", string="Researcher", related="family_id.researcher_id",
store=True)
family_category = fields.Many2one('benefit.category', string='Family Category',
related='family_id.benefit_category_id')
related='family_id.benefit_category_id', search="_search_benefit_category_id")
family_code = fields.Char(string='Family Code', related='family_id.code', store=True)
benefit_member_count = fields.Integer(string="Benefit Member count", related='family_id.benefit_member_count')
branch_custom_id = fields.Many2one('branch.settings', string="Branch", related='family_id.branch_custom_id',
store=True)
@ -58,7 +59,7 @@ class ServiceRequest(models.Model):
rent_start_date = fields.Date(string='Rent Start Date', compute='_compute_rent_details', store=True)
rent_end_date = fields.Date(string='Rent End Date', compute='_compute_rent_details', store=True)
rent_amount = fields.Float(string='Rent Amount', compute='_compute_rent_details', store=True)
rent_amount_payment = fields.Float(string='Rent Amount Payment', compute='_get_rent_amount_payment',store=True)
rent_amount_payment = fields.Float(string='Rent Amount Payment', compute='_get_rent_amount_payment', store=True)
payment_type = fields.Selection(
[
('1', 'Yearly'),
@ -204,6 +205,9 @@ class ServiceRequest(models.Model):
compute='_compute_related_information_html', store=True, )
researcher_opinion = fields.Html(string='Specialist Opinion', tracking=True)
def _search_benefit_category_id(self, operator, value):
return [('family_id.benefit_category_id', operator, value)]
def action_create_project(self):
pass
@ -758,11 +762,6 @@ class ServiceRequest(models.Model):
rec.service_cat = False
rec.available_service_cats = False
@api.onchange('service_cat', 'family_id')
def _onchange_service_cat(self):
if self.service_cat.service_type == 'rent' and self.family_id.property_type_code != 'rent' and self.benefit_type == 'family':
raise UserError(_("You cannot benefit from this service (property type not rent)"))
@api.onchange('start', 'end', 'rent_start_date', 'rent_end_date', 'payment_type')
def _check_date_range(self):
for rec in self:
@ -979,7 +978,7 @@ class ServiceRequest(models.Model):
else:
if service_type in special_services:
if service_type == 'electrical_devices':
#rec.service_max_amount = rec.device_id.price_unit if rec.device_id else 0.0
# rec.service_max_amount = rec.device_id.price_unit if rec.device_id else 0.0
if rec.device_id:
rec.service_max_amount = rec.device_id.price_unit * rec.requested_quantity
rec.requested_service_amount = rec.service_max_amount

View File

@ -207,7 +207,6 @@
<field name="res_model">res.bank</field>
<!-- <field name="view_type">form</field>-->
<field name="view_mode">tree,form</field>
<field name="view_id" ref="banks_view_tree"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create the first Bank
</p>

View File

@ -544,38 +544,6 @@
</form>
</field>
</record>
<!-- Banks -->
<record id="view_res_banks_form" model="ir.ui.view">
<field name="name">Odex - Banks form</field>
<field name="model">res.bank</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name" required="True"/>
</group>
<group>
<field name="code" required="True"/>
<field name="iban" required="True"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="banks_view_tree" model="ir.ui.view">
<field name="name">banks_view_tree</field>
<field name="model">res.bank</field>
<field name="arch" type="xml">
<tree string="banks_tree">
<field name="name"/>
<field name="code"/>
<field name="iban"/>
</tree>
</field>
</record>
<!-- <record id="grant_benefit_tree" model="ir.ui.view">-->
<!-- <field name="name">grant.benefit.tree</field>-->
<!-- <field name="model">grant.benefit</field>-->

View File

@ -2083,7 +2083,7 @@
<field name="model">grant.benefit</field>
<field name="arch" type="xml">
<tree string=" Benefit" create="0">
<field name="code" decoration-bf="1"/>
<field name="code" string="Family Code" decoration-bf="1"/>
<field name="benefit_partner_name"/>
<field name="benefit_category_id"/>
<field name="create_date" optional="hide"/>
@ -2125,12 +2125,12 @@
<field name="model">grant.benefit</field>
<field name="arch" type="xml">
<search>
<field name="code" string="Family Code"/>
<field name="name"/>
<field name="id_number"/>
<field name="email"/>
<field name="sms_phone"/>
<field name="phone"/>
<field name="code"/>
<field name="branch_custom_id"/>
<field name="branch_family_id"/>
<group string="Group By">

View File

@ -180,6 +180,9 @@
<field name="education_status"/>
<field name="benefit_id" attrs="{'readonly': [('state','!=','draft')]}" force_save="1"
required="1"/>
<field name="benefit_code"/>
<field name="benefit_category_id"/>
<field name="researcher_id"/>
<field name="partner_id" invisible="1"/>
</group>
<group>
@ -337,6 +340,7 @@
<field name="model">family.member</field>
<field name="arch" type="xml">
<tree string="Family Members" create="false">
<field name="benefit_code"/>
<field name="member_id_number"/>
<field name="name" force_save="1"/>
<field name="relationn"/>

View File

@ -196,12 +196,13 @@
</div>
<group>
<field name="date"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
required="1"/>
<field name="benefit_type" invisible="1"/>
<field name="family_id"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
required="1"/>
<field name="family_code" decoration-bf="1"/>
<field name="family_category" force_save="1"/>
<field name="researcher_id" force_save="1"/>
<field name="benefit_member_count" force_save="1"/>
@ -210,7 +211,7 @@
<field name="branch_custom_id" force_save="1"/>
<field name="member_domain_ids" invisible="1" widget="many2many_tags"/>
<field name="member_id" domain="[('id', 'in', member_domain_ids)]"
attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher','waiting_approve'])],'required':[('benefit_type','=','member')]}"/>
attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher'])],'required':[('benefit_type','=','member')]}"/>
<field name="is_orphan" attrs="{'invisible':[('service_type', '!=', 'marriage')]}"/>
<field name="member_age" attrs="{'invisible':[('benefit_type','!=','member')]}"/>
<field name="member_payroll" attrs="{'invisible':[('service_type','!=','marriage')]}"/>
@ -233,10 +234,10 @@
<field name="max_limit_period" invisible="1"/>
<field name="payment_method" force_save="1" invisible="1"/>
<field name="service_cat"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
domain="[('id','in',available_service_cats)]" required="1"/>
<field name="is_in_kind" widget="boolean_toggle" invisible="1"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"/>
<field name="service_qty"
attrs="{'invisible':[('is_in_kind','=',False)]}"/>
<label for="start" string="Period"
@ -244,30 +245,30 @@
<div name="dates" class="o_row"
attrs="{'invisible': ['&amp;', ('service_type', '!=', 'rent'), ('max_limit_period', '!=', 'month')]}">
<field name="start"
attrs="{'required': ['|',('service_type', '=', 'rent'),('max_limit_period', '=', 'month')],'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
attrs="{'required': ['|',('service_type', '=', 'rent'),('max_limit_period', '=', 'month')],'readonly':[('state','not in',['draft','researcher'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only"
aria-label="Arrow icon" title="Arrow"/>
<i class="fa fa-long-arrow-right mx-2 oe_read_only"
aria-label="Arrow icon" title="Arrow"
attrs="{'invisible': [('start', '=', False), ('end', '=', False)]}"/>
<field name="end"
attrs="{'required': ['|',('service_type', '=', 'rent'),('max_limit_period', '=', 'month')],'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
attrs="{'required': ['|',('service_type', '=', 'rent'),('max_limit_period', '=', 'month')],'readonly':[('state','not in',['draft','researcher'])]}"/>
</div>
<field name="marriage_contract_date"
attrs="{'invisible':[('service_type', '!=', 'marriage')],'required':[('service_type','=','marriage')]}"/>
<field name="service_approval_date"
attrs="{'invisible':[('service_approval_date','=',False)]}"/>
<field name="need_status"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
<field name="need_status" invisible="1"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"/>
<field name="main_service_category"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
invisible="1"/>
<field name="sub_service_category"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
invisible="1"/>
<field name="show_car_remaining_amount" invisible="1"/>
<field name="car_price"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])],'invisible': [('service_type', '!=', 'buy_car')]}"/>
attrs="{'readonly':[('state','not in',['draft','researcher'])],'invisible': [('service_type', '!=', 'buy_car')]}"/>
<field name="requested_service_amount"
attrs="{
'readonly': [
@ -280,12 +281,13 @@
('service_type', 'in', ['electrical_devices', 'home_furnishing', 'rent'])
]
}"
force_save="1" required="1"/>
force_save="1" required="1" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field name="car_remaining_amount" readonly="1"
attrs="{'invisible': [('show_car_remaining_amount', '=', False)]}"/>
<field name="service_max_amount" force_save="1" readonly="1"/>
<field name="exception"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"/>
<field name="exception_attach" attrs="{'invisible': [('exception', '=', False)]}"
widget="many2many_attachment_preview"/>
<field name="amount_for_buy_home_for_member_count"
@ -294,7 +296,7 @@
<field name="aid_amount" invisible="1"/>
<field name="service_attach" invisible="1" widget="many2many_attachment_preview"/>
<field name="has_marriage_course"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])],'invisible':[('service_type','!=','marriage')],'required':[('service_type','=','marriage')]}"/>
attrs="{'readonly':[('state','not in',['draft','researcher'])],'invisible':[('service_type','!=','marriage')],'required':[('service_type','=','marriage')]}"/>
<field name="service_type" invisible="1"/>
<field name="refuse_reason_id" attrs="{'invisible': [('refuse_reason_id', '=', False)]}"
readonly="1"/>
@ -307,7 +309,7 @@
</group>
<group>
<field name="description"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"/>
<field name="return_reason_id" attrs="{'invisible': [('return_reason_id', '=', False)]}"
readonly="1"/>
<field name="return_reason" attrs="{'invisible': [('return_reason', '=', False)]}"
@ -385,7 +387,7 @@
</group>
</page>
<page string="Electrical Devices Service"
attrs="{'invisible':[('service_type', '!=', 'electrical_devices')]}">
attrs="{'invisible':[('service_type', '!=', 'electrical_devices')],'readonly':[('state','not in',['draft','researcher'])]}">
<group>
<field name="device_id"
attrs="{'required':[('service_type', '=', 'electrical_devices')]}"/>
@ -438,6 +440,7 @@
<page string="Researcher Opinion">
<group>
<field name="researcher_opinion" nolabel="1"
attrs="{'readonly':[('state','not in',['draft','researcher'])]}"
placeholder="Please write the specialist opinion here..."
/>
</group>
@ -461,18 +464,22 @@
<field name="name">service.request.tree</field>
<field name="model">service.request</field>
<field name="arch" type="xml">
<tree>
<tree decoration-danger="exception==True">
<field name="name"/>
<field name="exception" invisible="1"/>
<field name="date"/>
<field name="create_uid" string="Request Creator"/>
<field name="family_code"/>
<field name="family_id"/>
<field name="branch_custom_id"/>
<field name="branch_custom_id" optional="hide"/>
<field name="researcher_id"/>
<field name="need_status"/>
<field name="need_status" invisible="1"/>
<field name="main_service_category" invisible="1"/>
<field name="sub_service_category" invisible="1"/>
<field name="service_cat"/>
<field name="requested_service_amount"/>
<field name="requested_service_amount" decoration-bf="1" decoration-success="1" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
<field name="currency_id" invisible="1"/>
<field name="accountant_id" optional="hide"/>
<field name="payment_order_id" invisible="1"/>
<field name="vendor_bill" invisible="1"/>
@ -495,12 +502,19 @@
<field name="model">service.request</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="family_code"/>
<field name="family_id"/>
<field name="member_id"/>
<field name="service_cat"/>
<group string="Group By">
<filter string="Branch" name="branch_custom_id" context="{'group_by': 'branch_custom_id'}"/>
<filter string="Main Service" name="main_service_category"
context="{'group_by': 'main_service_category'}"/>
<filter string="Sub Service Category" name="sub_service_category"
context="{'group_by': 'sub_service_category'}"/>
<filter string="Researcher" name="researcher_id"
context="{'group_by': 'researcher_id'}"/>
<filter string="Family Category" name="family_category"
context="{'group_by': 'family_category'}"/>
<filter string="Accountant" name="accountant_id"
context="{'group_by': 'accountant_id'}"/>
<filter string="Service Cat" name="service_cat" context="{'group_by': 'service_cat'}"/>
</group>
<separator/>

View File

@ -40,7 +40,7 @@ class FamilyBankReportWizard(models.TransientModel):
beneficiary_name = family.acc_holder_name or ''
beneficiary_id = family.acc_holder_id_number or ''
grouped[key] = {
'bank_name': (family.bank_id.code or ''),
'bank_name': (family.bank_id.bic or ''),
'account_number': 'SA' + (family.acc_number or ''),
'beneficiary_name': beneficiary_name,
'beneficiary_id': beneficiary_id,