[IMP] grant.benefit

This commit is contained in:
younes 2025-07-30 16:17:22 +01:00
parent ab2f11964e
commit 0923f303cf
9 changed files with 152 additions and 109 deletions

View File

@ -1,89 +1,91 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="sequence_benefit" model="ir.sequence">
<field name="name">Benefit Sequence</field>
<field name="code">benefit.sequence</field>
<field name="prefix">B/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="False" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<record id="receive_zkat_sequence" model="ir.sequence">
<field name="name">Receive Zkat Sequence</field>
<field name="code">benefit.receive.zkat.sequence</field>
<field name="prefix">RZ/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<data noupdate="1">
<record id="sequence_benefit" model="ir.sequence">
<field name="name">Benefit Sequence</field>
<field name="code">benefit.sequence</field>
<field name="prefix">B/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="False" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<record id="receive_zkat_sequence" model="ir.sequence">
<field name="name">Receive Zkat Sequence</field>
<field name="code">benefit.receive.zkat.sequence</field>
<field name="prefix">RZ/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<record id="zkat_sequence" model="ir.sequence">
<field name="name">Zkat Sequence</field>
<field name="code">benefit.zkat.sequence</field>
<field name="prefix">Z/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence For Visit -->
<record id="visit_location_sequence" model="ir.sequence">
<field name="name">Visit Sequence</field>
<field name="code">visit.location.sequence</field>
<field name="prefix">VT</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">5</field>
</record>
<!-- Sequence for services requests -->
<record id="service_request_sequence" model="ir.sequence">
<field name="name">Services Requests Sequence</field>
<field name="code">service.request.sequence</field>
<field name="prefix">R/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for Seasonal services-->
<record id="seasonal_service_sequence" model="ir.sequence">
<field name="name">Seasonal Services Sequence</field>
<field name="code">seasonal.service.sequence</field>
<field name="prefix">R/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for payment orders -->
<record id="payment_orders_sequence" model="ir.sequence">
<field name="name">Payment Orders Sequence</field>
<field name="code">payment.orders.sequence</field>
<field name="prefix">P/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for Family Expense -->
<record id="family_expense_sequence" model="ir.sequence">
<field name="name">Family Expense Sequence</field>
<field name="code">family.expense.sequence</field>
<field name="prefix">EXP/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<record id="zkat_sequence" model="ir.sequence">
<field name="name">Zkat Sequence</field>
<field name="code">benefit.zkat.sequence</field>
<field name="prefix">Z/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence For Visit -->
<record id="visit_location_sequence" model="ir.sequence">
<field name="name">Visit Sequence</field>
<field name="code">visit.location.sequence</field>
<field name="prefix">VT</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">5</field>
</record>
<!-- Sequence for services requests -->
<record id="service_request_sequence" model="ir.sequence">
<field name="name">Services Requests Sequence</field>
<field name="code">service.request.sequence</field>
<field name="prefix">R/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for Seasonal services-->
<record id="seasonal_service_sequence" model="ir.sequence">
<field name="name">Seasonal Services Sequence</field>
<field name="code">seasonal.service.sequence</field>
<field name="prefix">R/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for payment orders -->
<record id="payment_orders_sequence" model="ir.sequence">
<field name="name">Payment Orders Sequence</field>
<field name="code">payment.orders.sequence</field>
<field name="prefix">P/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for Family Expense -->
<record id="family_expense_sequence" model="ir.sequence">
<field name="name">Family Expense Sequence</field>
<field name="code">family.expense.sequence</field>
<field name="prefix">EXP/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
</data>
</odoo>

View File

@ -9922,6 +9922,7 @@ msgstr " توجيه الملف للاخصائي"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__researcher_ids
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__researcher_id
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__researcher_id
#: model:ir.model.fields,field_description:odex_benefit.field_family_complaints__researcher_id
#: model:ir.model.fields,field_description:odex_benefit.field_visit_location__researcher_ids
msgid "Researcher"
@ -12071,6 +12072,7 @@ msgstr "مدير اللجنة النسائية"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__state__new
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__state__new
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_search
msgid "New"
msgstr "جديد"
@ -14495,4 +14497,18 @@ msgid ""
"The benefit record <b>%s</b> state has been changed to <b>%s</b>.<br/>Return"
" Reason: <b>%s</b>"
msgstr ""
"تم تغيير حالة المستفيد <b>%s</b> إلى <b>%s</b>.<br/>سبب الإرجاع: <b>%s</b>"
"تم تغيير حالة المستفيد <b>%s</b> إلى <b>%s</b>.<br/>سبب الإرجاع: <b>%s</b>"
#. module: odex_benefit
#: code:addons/odex_benefit/models/res_users.py:0
#, python-format
msgid ""
"Failed to delete this partner after the related user was "
"removed.<br/>Reason: %s"
msgstr "فشل في حذف هذا الشريك بعد حذف المستخدم المرتبط به.<br/>السبب: %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/res_users.py:0
#, python-format
msgid "Cannot delete user '%s': linked to Benefits - Profiles %s"
msgstr "لا يمكن حذف المستخدم '%s': مرتبط بملفات المستفيدين %s"

View File

@ -32,4 +32,5 @@ from . import family_complaints
from . import service_refuse_reason
from . import res_city
from . import seasonal_service
# from . import res_config_settings
# from . import res_config_settings
from . import res_users

View File

@ -20,7 +20,7 @@ class GrantBenefitProfile(models.Model):
_description = "Benefits - Profiles"
_inherit = ['mail.thread', 'mail.activity.mixin']
_inherits = {'res.partner': 'partner_id'}
_order = 'code desc'
_order = 'create_date desc'
def get_url(self):
return "wwww"
@ -574,6 +574,10 @@ class GrantBenefitProfile(models.Model):
seasonal_service_id = fields.Many2one('seasonal.service', string="Seasonal Service")
is_from_portal = fields.Boolean(string='is Created from Portal?', default=False, readonly=True)
_sql_constraints = [
('unique_code', 'unique (code)', 'This code already exists')
]
def action_set_waiting_if_needed(self):
records = self.env['grant.benefit'].browse(self._context.get('active_ids', []))
@ -1063,7 +1067,7 @@ class GrantBenefitProfile(models.Model):
def unlink(self):
for order in self:
if order.state not in ['draft']:
if order.state not in ['draft','new']:
raise UserError(_('You cannot delete this record'))
return super(GrantBenefitProfile, self).unlink()

View File

@ -0,0 +1,34 @@
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class ResUsers(models.Model):
_inherit = 'res.users'
def unlink(self):
for user in self:
grants = self.env['grant.benefit'].search([
('user_id', '=', user.id),
('state', 'not in', ['draft', 'new'])
])
if grants:
grant_info = ', '.join('[%s: %s]' % (g.code or g.name or g.id, g.state) for g in grants)
raise ValidationError(
_("Cannot delete user '%s': linked to Benefits - Profiles %s") % (user.name, grant_info)
)
partners = self.mapped('partner_id')
res = super(ResUsers, self).unlink()
for partner in partners:
still_linked = self.env['res.users'].search([('partner_id', '=', partner.id)], limit=1)
if not still_linked:
try:
partner.unlink()
except Exception as e:
partner.message_post(
body=_(
"Failed to delete this partner after the related user was removed.<br/>Reason: %s") % str(
e),
)
return res

View File

@ -16,6 +16,7 @@ class ServiceRequest(models.Model):
benefit_type = fields.Selection(string='Benefit Type',selection=[('family', 'Family'),('member', 'Member')])
date = fields.Datetime(string='Request Date',default=fields.Datetime.now)
family_id = fields.Many2one('grant.benefit',string='Family',domain="['|','|',('state','=','second_approve'),('state','=','temporarily_suspended'),('state','=','suspended_first_approve')]")
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')
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)

View File

@ -9,7 +9,7 @@
<field name="view_mode">kanban,form,tree,activity,google_map</field>
<!-- <field name="domain">[('state','=','draft')]-->
<!-- </field>-->
<field name="context">{'is_benefit': True}</field>
<field name="context">{'is_benefit': True,'search_default_new': 1}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create the Benefit
</p>

View File

@ -914,16 +914,6 @@
<field name="expenses_type_custom"/>
<field name="note"/>
<field name="amount" sum="amount"/>
<button name="action_accept" type="object" string="Accept"
class="oe_highlight"
attrs="{'invisible':[('state','=','accepted')]}"
groups="odex_benefit.group_accept_income_and_expenses"/>
<button name="action_refuse" type="object" string="Refuse"
class="oe_highlight" attrs="{'invisible':[('state','=','refused')]}"
groups="odex_benefit.group_accept_income_and_expenses"/>
<field name="state" readonly="1" force_save="1" widget="badge"
decoration-success="state in ['accepted']"
decoration-danger="state in ['refused']"/>
<button name="action_accept" type="object" string="Accept" class="oe_highlight" attrs="{'invisible':[('state','=','accepted')]}" groups="odex_benefit.group_accept_income_and_expenses"/>
<button name="action_refuse" type="object" string="Refuse" class="oe_highlight" attrs="{'invisible':[('state','=','refused')]}" groups="odex_benefit.group_accept_income_and_expenses"/>
<field name="state" readonly="1" force_save="1" widget="badge" decoration-warning="state in ['waiting']" decoration-success="state in ['accepted']" decoration-danger="state in ['refused']"/>
@ -941,15 +931,6 @@
<field name="salary_attach" widget="many2many_attachment_preview"/>
<field name="attach_start_date"/>
<field name="attach_end_date"/>
<button name="action_accept" type="object" string="Accept" class="oe_highlight"
attrs="{'invisible':[('state','=','accepted')]}"
groups="odex_benefit.group_accept_income_and_expenses"/>
<button name="action_refuse" type="object" string="Refuse" class="oe_highlight"
attrs="{'invisible':[('state','=','refused')]}"
groups="odex_benefit.group_accept_income_and_expenses"/>
<field name="state" readonly="1" force_save="1" widget="badge"
decoration-success="state in ['accepted']"
decoration-danger="state in ['refused']"/>
<button name="action_accept" type="object" string="Accept" class="oe_highlight" attrs="{'invisible':[('state','=','accepted')]}" groups="odex_benefit.group_accept_income_and_expenses"/>
<button name="action_refuse" type="object" string="Refuse" class="oe_highlight" attrs="{'invisible':[('state','=','refused')]}" groups="odex_benefit.group_accept_income_and_expenses"/>
<field name="state" readonly="1" force_save="1" widget="badge" decoration-warning="state in ['waiting']" decoration-success="state in ['accepted']" decoration-danger="state in ['refused']"/>
@ -1414,6 +1395,8 @@
<separator/>
<filter string="Auto Suspended" name="auto_suspend" domain="[('suspend_method', '=', 'auto')]"/>
<separator/>
<filter string="New" name="new" domain="[('state', '=', 'new')]"/>
<separator/>
</search>
</field>
</record>

View File

@ -56,6 +56,7 @@
<field name="benefit_type" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" required="1"/>
<field name="family_id" attrs="{'readonly':[('state','not in',['draft','researcher','send_request'])]}" required="1"/>
<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" attrs="{'invisible':['|',('service_type','!=','eid_gift'),('benefit_type','!=','family')]}"/>
<field name="branch_custom_id" force_save="1"/>
@ -257,6 +258,7 @@
<field name="create_date"/>
<field name="create_uid" string="Request Creator"/>
<field name="family_id"/>
<field name="researcher_id"/>
<field name="need_status"/>
<field name="main_service_category"/>
<field name="sub_service_category"/>