Merge pull request #6080 from expsa/yoikr

Yoikr
This commit is contained in:
kchyounes19 2026-01-08 15:25:39 +01:00 committed by GitHub
commit 905ed408f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 91 additions and 114 deletions

View File

@ -33,16 +33,6 @@
<field name="binding_type">action</field> <field name="binding_type">action</field>
</record> </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"> <record id="action_assign_specialist_mass" model="ir.actions.server">
<field name="name">Assign Specialist (Mass)</field> <field name="name">Assign Specialist (Mass)</field>
<field name="model_id" ref="odex_benefit.model_grant_benefit"/> <field name="model_id" ref="odex_benefit.model_grant_benefit"/>

View File

@ -2260,6 +2260,7 @@ msgstr "فئات الاسرة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_category_amount_line__benefit_category_id #: model:ir.model.fields,field_description:odex_benefit.field_category_amount_line__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__benefit_category_id #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__benefit_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_rent_lines__benefit_category_id #: model:ir.model.fields,field_description:odex_benefit.field_rent_lines__benefit_category_id
msgid "Benefit Category" msgid "Benefit Category"
msgstr "فئة الأسرة" msgstr "فئة الأسرة"
@ -5361,13 +5362,18 @@ msgstr "سيارات الأسرة"
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_search #: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_search
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_expense_line__family_category_id #: model:ir.model.fields,field_description:odex_benefit.field_benefit_expense_line__family_category_id
#: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__family_category_ids #: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__family_category_ids
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Family Category" msgid "Family Category"
msgstr "فئة الأسرة" msgstr "فئة الأسرة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_account_move_line__family_code #: model:ir.model.fields,field_description:odex_benefit.field_account_move_line__family_code
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__benefit_code
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__family_code
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_search
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_tree
msgid "Family Code" msgid "Family Code"
msgstr "" msgstr "رقم الأسرة"
#. module: odex_benefit #. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.visits_form #: model_terms:ir.ui.view,arch_db:odex_benefit.visits_form
@ -7891,7 +7897,6 @@ msgstr "المرفقات الرئيسية"
#. module: odex_benefit #. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.main_service_form #: 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" msgid "Main Service"
msgstr "نوع الخدمة الرئيسية" msgstr "نوع الخدمة الرئيسية"
@ -9873,7 +9878,6 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__ref #: 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_external_benefits__ref
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__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_visit_location__name
#: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__name #: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__name
#, fuzzy #, fuzzy
@ -9886,6 +9890,11 @@ msgstr ""
"#-#-#-#-# catalog.po (Odoo Server 14.0) #-#-#-#-#\n" "#-#-#-#-# 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 #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_entity_refuse_reason__date #: model:ir.model.fields,field_description:odex_benefit.field_entity_refuse_reason__date
msgid "Refuse Date" msgid "Refuse Date"
@ -10291,6 +10300,12 @@ msgstr ""
"#-#-#-#-# catalog.po (Odoo Server 14.0) #-#-#-#-#\n" "#-#-#-#-# catalog.po (Odoo Server 14.0) #-#-#-#-#\n"
"بانتظار الأخصائي" "بانتظار الأخصائي"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__researcher_id
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Researcher"
msgstr "اخصائي اجتماعي"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__gender_researcher_id #: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__gender_researcher_id
#: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__researcher_id #: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__researcher_id
@ -11117,7 +11132,6 @@ msgstr "يدرس خارج السعودية"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__sub_service_category #: 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" msgid "Sub Service Category"
msgstr "الخدمة الفرعية" msgstr "الخدمة الفرعية"
@ -12558,12 +12572,6 @@ msgstr ""
msgid "You cannot benefit from this service (property type not ownership)" msgid "You cannot benefit from this service (property type not ownership)"
msgstr "لا يمكنك الاستفادة من هذه الخدمة (نوع العقار ايجار وليس ملك)" msgstr "لا يمكنك الاستفادة من هذه الخدمة (نوع العقار ايجار وليس ملك)"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "You cannot benefit from this service (property type not rent)"
msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0 #: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0 #: code:addons/odex_benefit/models/family_members.py:0
@ -12687,11 +12695,6 @@ msgstr ""
msgid "bad" msgid "bad"
msgstr "سيء" msgstr "سيء"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.banks_view_tree
msgid "banks_tree"
msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__generate_reports__qualification_type__behavior #: model:ir.model.fields.selection,name:odex_benefit.selection__generate_reports__qualification_type__behavior
msgid "behavior" msgid "behavior"
@ -17095,6 +17098,7 @@ msgstr "الترحيل المالي"
#: model:ir.model.fields,field_description:odex_benefit.field_payment_orders__accountant_id #: model:ir.model.fields,field_description:odex_benefit.field_payment_orders__accountant_id
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__accountant_id #: model:ir.model.fields,field_description:odex_benefit.field_service_request__accountant_id
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__accountant_id #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__accountant_id
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_search
msgid "Accountant" msgid "Accountant"
msgstr "المحاسب" msgstr "المحاسب"

View File

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

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging import logging
from datetime import datetime, date from datetime import datetime, date
from dateutil.relativedelta import relativedelta as rd from dateutil.relativedelta import relativedelta as rd
from odoo import models, fields, api, _ from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
@ -38,8 +39,11 @@ class FamilyMemberProfile(models.Model):
name = fields.Char(string="Name", compute='get_partner_name', store=True, readonly=False) name = fields.Char(string="Name", compute='get_partner_name', store=True, readonly=False)
member_id_number = fields.Char(string="Member Id Number") member_id_number = fields.Char(string="Member Id Number")
benefit_id = fields.Many2one("grant.benefit", string="Responsable", default=_default_benefit) 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", branch_custom_id = fields.Many2one('branch.settings', string="Branch", related="benefit_id.branch_custom_id",
search="_search_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") gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], string="Gender")
member_phone = fields.Char(string="Member Phone") member_phone = fields.Char(string="Member Phone")
member_location = fields.Selection(selection=[('with_family', 'With Family'), ('with_relative', 'with a relative'), member_location = fields.Selection(selection=[('with_family', 'With Family'), ('with_relative', 'with a relative'),
@ -307,6 +311,12 @@ class FamilyMemberProfile(models.Model):
def _search_branch_custom_id(self, operator, value): def _search_branch_custom_id(self, operator, value):
return [('benefit_id.branch_custom_id', 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 @api.model
def name_search(self, name='', args=None, operator='ilike', limit=100): def name_search(self, name='', args=None, operator='ilike', limit=100):
if self._context.get('members_domain_force_all'): 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", researcher_id = fields.Many2one("committees.line", string="Researcher", related="family_id.researcher_id",
store=True) store=True)
family_category = fields.Many2one('benefit.category', string='Family Category', 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') 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', branch_custom_id = fields.Many2one('branch.settings', string="Branch", related='family_id.branch_custom_id',
store=True) 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_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_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 = 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( payment_type = fields.Selection(
[ [
('1', 'Yearly'), ('1', 'Yearly'),
@ -204,6 +205,9 @@ class ServiceRequest(models.Model):
compute='_compute_related_information_html', store=True, ) compute='_compute_related_information_html', store=True, )
researcher_opinion = fields.Html(string='Specialist Opinion', tracking=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): def action_create_project(self):
pass pass
@ -758,11 +762,6 @@ class ServiceRequest(models.Model):
rec.service_cat = False rec.service_cat = False
rec.available_service_cats = 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') @api.onchange('start', 'end', 'rent_start_date', 'rent_end_date', 'payment_type')
def _check_date_range(self): def _check_date_range(self):
for rec in self: for rec in self:
@ -979,7 +978,7 @@ class ServiceRequest(models.Model):
else: else:
if service_type in special_services: if service_type in special_services:
if service_type == 'electrical_devices': 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: if rec.device_id:
rec.service_max_amount = rec.device_id.price_unit * rec.requested_quantity rec.service_max_amount = rec.device_id.price_unit * rec.requested_quantity
rec.requested_service_amount = rec.service_max_amount rec.requested_service_amount = rec.service_max_amount

View File

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

View File

@ -544,38 +544,6 @@
</form> </form>
</field> </field>
</record> </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">--> <!-- <record id="grant_benefit_tree" model="ir.ui.view">-->
<!-- <field name="name">grant.benefit.tree</field>--> <!-- <field name="name">grant.benefit.tree</field>-->
<!-- <field name="model">grant.benefit</field>--> <!-- <field name="model">grant.benefit</field>-->

View File

@ -2083,7 +2083,7 @@
<field name="model">grant.benefit</field> <field name="model">grant.benefit</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string=" Benefit" create="0"> <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_partner_name"/>
<field name="benefit_category_id"/> <field name="benefit_category_id"/>
<field name="create_date" optional="hide"/> <field name="create_date" optional="hide"/>
@ -2125,12 +2125,12 @@
<field name="model">grant.benefit</field> <field name="model">grant.benefit</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search> <search>
<field name="code" string="Family Code"/>
<field name="name"/> <field name="name"/>
<field name="id_number"/> <field name="id_number"/>
<field name="email"/> <field name="email"/>
<field name="sms_phone"/> <field name="sms_phone"/>
<field name="phone"/> <field name="phone"/>
<field name="code"/>
<field name="branch_custom_id"/> <field name="branch_custom_id"/>
<field name="branch_family_id"/> <field name="branch_family_id"/>
<group string="Group By"> <group string="Group By">
@ -2351,16 +2351,5 @@
</form> </form>
</field> </field>
</record> </record>
<record id="set_lines_action" model="ir.actions.server">
<field name="name">Update Lines State</field>
<field name="type">ir.actions.server</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.action_set_waiting_if_needed()
</field>
</record>
</data> </data>
</odoo> </odoo>

View File

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

View File

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

View File

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