[IMP] odex_benefit: IMP benefit

This commit is contained in:
younes 2025-11-05 09:26:47 +01:00
parent 5c29f36027
commit 317311c4c1
9 changed files with 211 additions and 163 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -6,14 +6,7 @@
<field name="sequence">1</field>
</record>
<record id="translation_benefit_ar" model="ir.translation">
<field name="name">ir.module.category,name</field>
<field name="lang">ar_001</field>
<field name="type">model</field>
<field name="res_id" eval="ref('module_category_benefit')"/>
<field name="src">Beneficiaries Management</field>
<field name="value">فئات المستفيدين</field>
</record>
<!-- <record id="group_benefit_user" model="res.groups">-->
<!-- <field name="name">Beneficiaries User</field>-->

View File

@ -143,7 +143,7 @@
<field name="education_status"/>
<field name="benefit_id" attrs="{'readonly': [('state','!=','draft')]}" force_save="1"
required="1"/>
<field name="partner_id" />
<field name="partner_id"/>
</group>
<group>
<field name="is_work"
@ -211,7 +211,8 @@
attrs="{'invisible': [('education_status', '!=', 'educated')]}">
<field name="member_education_status_ids" mode="tree,form"/>
</page>
<page string="Exams Degrees" attrs="{'invisible': [('education_status', '!=', 'educated')]}">
<page string="Exams Degrees"
attrs="{'invisible': [('education_status', '!=', 'educated')]}">
<field name="exam_ids" mode="tree" options="{'no_open': True}"
widget="one2many_list">
<tree editable="bottom">
@ -219,7 +220,8 @@
<field name="exam_id" options="{'no_create_edit': True, 'no_create': True}"/>
<field name="exam_degree"/>
<field name="exam_date"/>
<field name="exam_attachment" widget="binary" filename="exam_attachment_file_name"/>
<field name="exam_attachment" widget="binary"
filename="exam_attachment_file_name"/>
<field name="exam_attachment_file_name" invisible="1"/>
</tree>
@ -294,6 +296,23 @@
</tree>
</field>
</record>
<record id="family_member_kanban" model="ir.ui.view">
<field name="name">family.member.kanban</field>
<field name="model">family.member</field>
<field name="arch" type="xml">
<kanban create="0">
<field name="name"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="oe_kanban_details">
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="family_member_search" model="ir.ui.view">
<field name="name">family.member.search</field>
@ -321,7 +340,7 @@
<record model="ir.actions.act_window" id="family_member_action">
<field name="name">Family Members</field>
<field name="res_model">family.member</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">tree,kanban,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create the Member
</p>

View File

@ -8,13 +8,20 @@
<field name="arch" type="xml">
<form string="Seasonal Service">
<header>
<button name="action_calculate" type="object"
string="Calculate" class="btn btn-info"
attrs="{'invisible': [('state', '!=', 'draft')]}"/>
<button name="action_approval_of_beneficiary_services" type="object"
string="Approve Beneficiary Services" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'draft')]}"
attrs="{'invisible': [('state', '!=', 'calculated')]}"
groups="odex_benefit.group_approval_of_beneficiary_services"/>
<button name="get_families" type="object"
string="Get Families" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'draft')]}"/>
<button string="Withdraw" type="object" name="action_reset_to_draft" class="btn btn-danger"
states="calculated"/>
<button name="action_recalculate" string="Recalculate" class="btn btn-info"
type="object" states="calculated"/>
<button name="action_accounting_approve" type="object"
string="Accounting Approve"
class="oe_highlight"
@ -29,7 +36,7 @@
groups="odex_benefit.group_benefit_accounting_accept"/>
<field name="state" widget="statusbar"
statusbar_visible="draft, approval_of_beneficiary_services,accounting_approve"/>
statusbar_visible="draft,calculated,approval_of_beneficiary_services,accounting_approve"/>
</header>
<sheet>
@ -42,9 +49,11 @@
<field name="date" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="service_type_id"
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="service_delivery_method" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="branch_ids" widget="many2many_tags"
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="family_category_ids" widget="many2many_tags" readonly="1"/>
<field name="family_domain_ids" widget="many2many_tags" invisible="1"/>
<field name="payment_order_id" readonly="1"
groups="odex_benefit.group_benefit_accounting_accept"
attrs="{
@ -58,6 +67,7 @@
<field name="family_count" readonly="1"/>
<field name="benefit_member_count" readonly="1"/>
<field name="family_disbursement_total_amount" readonly="1"/>
<field name="benefit_type" invisible="1"/>
</group>
</group>
<notebook>
@ -73,11 +83,30 @@
</tree>
</field>
</page>
<page string="Services Requests">
<field name="service_requests_ids" widget="one2many_list" mode="tree,form"/>
<page string="Families">
<field name="benefit_ids" domain="[('id', 'in', family_domain_ids)]"/>
</page>
<page string="Families">
<field name="benefit_ids"/>
<page string="Members" attrs="{'invisible': [('benefit_type', '!=', 'member')]}">
<field name="member_ids" domain="[('benefit_id', 'in', family_domain_ids)]"/>
</page>
<page string="Services Requests">
<field name="service_requests_ids">
<tree>
<field name="family_id"/>
<field name="branch_custom_id" optional="hidden"/>
<field name="researcher_id" optional="hidden"/>
<field name="family_category"/>
<field name="benefit_member_count"/>
<field name="service_benefit_count"/>
<field name="requested_service_amount"
attrs="{'column_invisible':[('parent.service_delivery_method','!=','cash')]}"/>
<field name="state" widget="badge" decoration-success="state in ['gm_assistant']"
decoration-muted="state == 'draft'"
decoration-danger="state in ['refused']"
decoration-info="state in ['first_approve','waiting_approve']"
decoration-warning="state in ['researcher']"/>
</tree>
</field>
</page>
</notebook>
</sheet>

View File

@ -177,7 +177,7 @@
<field name="family_category" force_save="1"/>
<field name="researcher_id" force_save="1"/>
<field name="benefit_member_count" force_save="1"/>
<field name="eid_gift_benefit_count"
<field name="service_benefit_count"
attrs="{'invisible':['|',('service_type','!=','eid_gift'),('benefit_type','!=','family')]}"/>
<field name="branch_custom_id" force_save="1"/>
<field name="member_id"
@ -205,6 +205,8 @@
<field name="service_cat"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"
domain="[('id','in',available_service_cats)]" required="1"/>
<field name="is_in_kind"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
<label for="start" string="Period"
attrs="{'invisible': ['&amp;', ('service_type', '!=', 'rent'), ('max_limit_period', '!=', 'month')]}"/>
<div name="dates" class="o_row"
@ -467,9 +469,10 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="create_date"/>
<field name="date"/>
<field name="create_uid" string="Request Creator"/>
<field name="family_id"/>
<field name="branch_custom_id"/>
<field name="researcher_id"/>
<field name="need_status"/>
<field name="main_service_category" invisible="1"/>

View File

@ -51,7 +51,8 @@
<field name="currency_id" invisible="1"/>
</group>
<group>
<field name="max_age" attrs="{'invisible': [('benefit_type', '=', 'family')]}"/>
<field name="max_age"/>
<field name="in_kind" widget="boolean_toggle"/>
</group>
</group>
<group>
@ -209,24 +210,6 @@
</field>
</group>
</page>
<page string="Eid Gift Settings" attrs="{'invisible':[('service_type','!=','eid_gift')]}">
<group>
<field name="eid_gift_max_age"/>
<field name="eid_gift_member_amount"/>
</group>
</page>
<page string="Winter Clothing Settings"
attrs="{'invisible':[('service_type','!=','winter_clothing')]}">
<group>
<field name="winter_clothing_member_amount"/>
</group>
</page>
<page string="Ramadan Basket Settings"
attrs="{'invisible':[('service_type','!=','ramadan_basket')]}">
<group>
<field name="ramadan_basket_member_amount"/>
</group>
</page>
<page string="Amounts by Number of Persons"
attrs="{'invisible':[('max_limit_type', '!=', 'amount_person')]}">
<field name="limit_person_line_ids" widget="one2many_list">