Modifications to the Entities page in the Transactions app and permissions for the Transactions Department Manager

This commit is contained in:
younes 2025-06-01 11:25:33 +01:00
parent 4d76fdcf53
commit f81c9f2e44
6 changed files with 91 additions and 75 deletions

View File

@ -2122,6 +2122,7 @@ msgid "It has all the powers on internal transactions only"
msgstr "وله كافة الصلاحيات على المعاملات الداخلية فقط" msgstr "وله كافة الصلاحيات على المعاملات الداخلية فقط"
#. module: exp_transaction_documents #. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__job_title
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__job_title_id #: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__job_title_id
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_job_title__name #: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_job_title__name
msgid "Job Title" msgid "Job Title"
@ -2436,7 +2437,12 @@ msgstr "صفحة: <span class=\"page\"/> / <span class=\"topage\"/>"
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__parent_id #: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__parent_id
#: model_terms:ir.ui.view,arch_db:exp_transaction_documents.cm_entity_search #: model_terms:ir.ui.view,arch_db:exp_transaction_documents.cm_entity_search
msgid "Parent Entity" msgid "Parent Entity"
msgstr "القسم الرئيسي" msgstr "الإدارة الرئيسية"
#. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__is_employee
msgid "Is Employee"
msgstr "هل هو موظف؟"
#. module: exp_transaction_documents #. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__partner_id #: model:ir.model.fields,field_description:exp_transaction_documents.field_cm_entity__partner_id
@ -3048,7 +3054,7 @@ msgstr "مدة المعاملة"
#. module: exp_transaction_documents #. module: exp_transaction_documents
#: model:res.groups,name:exp_transaction_documents.group_transaction_manager #: model:res.groups,name:exp_transaction_documents.group_transaction_manager
msgid "Transaction Manager" msgid "Transaction Manager"
msgstr "مدير المعاملة" msgstr "مدير نظام المعاملات"
#. module: exp_transaction_documents #. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_incoming_transaction__name #: model:ir.model.fields,field_description:exp_transaction_documents.field_incoming_transaction__name
@ -3653,21 +3659,6 @@ msgstr "فترة إنجاز"
msgid "Response Days" msgid "Response Days"
msgstr "فترة الإنجاز (أيام)" msgstr "فترة الإنجاز (أيام)"
#. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_internal_transaction__response_hours
msgid "Response Hours"
msgstr "فترة الإنجاز (ساعات)"
#. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_internal_transaction__response_minutes
msgid "Response Minutes"
msgstr "فترة الإنجاز (دقائق)"
#. module: exp_transaction_documents
#: model:ir.model.fields,field_description:exp_transaction_documents.field_internal_transaction__response_seconds
msgid "Response Seconds"
msgstr "فترة الإنجاز (ثواني)"
#. module: exp_transaction_documents #. module: exp_transaction_documents
#: code:addons/exp_transaction_documents/models/internal_transaction.py:0 #: code:addons/exp_transaction_documents/models/internal_transaction.py:0
#, python-format #, python-format

View File

@ -71,9 +71,11 @@ class Entity(models.Model):
department_id = fields.Many2one('hr.department') department_id = fields.Many2one('hr.department')
manager_id = fields.Many2one(comodel_name='cm.entity', string='Unit Manager') manager_id = fields.Many2one(comodel_name='cm.entity', string='Unit Manager')
secretary_id = fields.Many2one(comodel_name='cm.entity', string='Employee in charge of transactions') secretary_id = fields.Many2one(comodel_name='cm.entity', string='Employee in charge of transactions')
user_id = fields.Many2one(comodel_name='res.users', string='Related User', related='employee_id.user_id', store=True) # user_id = fields.Many2one(comodel_name='res.users', string='Related User', related='employee_id.user_id', store=True, readonly=False)
user_id = fields.Many2one('res.users', string='Related User', compute='_compute_user_id',store=True, readonly=False)
# job_title_id = fields.Many2one(comodel_name='cm.job.title', string='Job Title') # job_title_id = fields.Many2one(comodel_name='cm.job.title', string='Job Title')
job_title_id = fields.Many2one(comodel_name='hr.job', string='Job Title') job_title_id = fields.Many2one(comodel_name='hr.job', string='Job Title')
job_title = fields.Char(string='Job Title')
need_approve = fields.Boolean(string='Need Aprove') need_approve = fields.Boolean(string='Need Aprove')
executive_direction = fields.Boolean(string='Executive direction') executive_direction = fields.Boolean(string='Executive direction')
is_secret = fields.Boolean(string='Is Secret') is_secret = fields.Boolean(string='Is Secret')
@ -81,6 +83,7 @@ class Entity(models.Model):
person_id_issue_date = fields.Date(string='Person ID Issue Date') person_id_issue_date = fields.Date(string='Person ID Issue Date')
employee_assignment_date = fields.Date(string='Employee Assignment Date') employee_assignment_date = fields.Date(string='Employee Assignment Date')
employee_id = fields.Many2one('hr.employee') employee_id = fields.Many2one('hr.employee')
is_employee = fields.Boolean(string="Is Employee")
phone = fields.Char() phone = fields.Char()
email = fields.Char() email = fields.Char()
child_ids = fields.Many2many(comodel_name='cm.entity', relation='employee_entity_rel', column1='employee_id', child_ids = fields.Many2many(comodel_name='cm.entity', relation='employee_entity_rel', column1='employee_id',
@ -98,6 +101,12 @@ class Entity(models.Model):
to_date = fields.Datetime(string='Delegation To Date') to_date = fields.Datetime(string='Delegation To Date')
to_delegate = fields.Boolean(string='To Delegate?', compute="_compute_to_delegate") to_delegate = fields.Boolean(string='To Delegate?', compute="_compute_to_delegate")
@api.depends('employee_id')
def _compute_user_id(self):
for rec in self:
if rec.is_employee:
rec.user_id = rec.employee_id.user_id if rec.employee_id else False
def unlink(self): def unlink(self):
for rec in self: for rec in self:
internal_transaction_id = self.env['internal.transaction'].search(['|','|','|','|','|',('to_ids', '=', rec.id),('cc_ids', 'in', rec.id),('preparation_id', '=', rec.id),('employee_id', '=', rec.id),('entity_id', '=', rec.id),('archive_user_id', '=', rec.id)]).ids internal_transaction_id = self.env['internal.transaction'].search(['|','|','|','|','|',('to_ids', '=', rec.id),('cc_ids', 'in', rec.id),('preparation_id', '=', rec.id),('employee_id', '=', rec.id),('entity_id', '=', rec.id),('archive_user_id', '=', rec.id)]).ids
@ -121,15 +130,27 @@ class Entity(models.Model):
def onchange_department_id(self): def onchange_department_id(self):
self.name = self.department_id.name self.name = self.department_id.name
@api.onchange('employee_id') @api.onchange('is_employee','employee_id')
def onchange_employee_id(self): def onchange_employee_id(self):
self.job_title_id = self.employee_id.job_id
self.name = self.employee_id.name self.name = self.employee_id.name
self.person_id = self.employee_id.iqama_number.iqama_id self.person_id = self.employee_id.iqama_number.iqama_id
self.email = self.employee_id.personal_email self.email = self.employee_id.personal_email
self.phone = self.employee_id.mobile_phone self.phone = self.employee_id.mobile_phone
self.person_id_issue_date = self.employee_id.iqama_number.expiry_date self.person_id_issue_date = self.employee_id.iqama_number.expiry_date
# self.employee_assignment_date = self.employee_id.job_id # self.employee_assignment_date = self.employee_id.job_id
if self.is_employee and self.employee_id:
self.job_title_id = self.employee_id.job_id
self.image = self.employee_id.image_1920
else:
self.job_title_id = False
used_user_ids = self.env['cm.entity'].search([('user_id', '!=', False),]).mapped('user_id.id')
return {
'domain': {
'user_id': [('id', 'not in', used_user_ids)]
}
}
@api.onchange('partner_id') @api.onchange('partner_id')
def onchange_partner_id(self): def onchange_partner_id(self):

View File

@ -27,9 +27,6 @@ class InternalTransaction(models.Model):
last_response_date = fields.Datetime(string="Last Response Date") last_response_date = fields.Datetime(string="Last Response Date")
response_time_str = fields.Char(string="Response Time", compute="_compute_response_time", store=True) response_time_str = fields.Char(string="Response Time", compute="_compute_response_time", store=True)
response_days = fields.Integer(string="Response Days", compute="_compute_response_time", store=True ,group_operator='avg') response_days = fields.Integer(string="Response Days", compute="_compute_response_time", store=True ,group_operator='avg')
response_hours = fields.Integer(string="Response Hours", compute="_compute_response_time", store=True, group_operator='avg')
response_minutes = fields.Integer(string="Response Minutes", compute="_compute_response_time", store=True, group_operator='avg')
response_seconds = fields.Integer(string="Response Seconds", compute="_compute_response_time", store=True, group_operator='avg')
@api.depends('last_response_date', 'create_date') @api.depends('last_response_date', 'create_date')
def _compute_response_time(self): def _compute_response_time(self):
@ -40,28 +37,25 @@ class InternalTransaction(models.Model):
rec.response_days = total_seconds // 86400 rec.response_days = total_seconds // 86400
remainder = total_seconds % 86400 remainder = total_seconds % 86400
rec.response_hours = remainder // 3600 hours = remainder // 3600
remainder = remainder % 3600 remainder = remainder % 3600
rec.response_minutes = remainder // 60 minutes = remainder // 60
rec.response_seconds = remainder % 60 seconds = remainder % 60
parts = [] parts = []
if rec.response_days: if rec.response_days:
parts.append(_("%s day") % rec.response_days) parts.append(_("%s day") % rec.response_days)
if rec.response_hours: if hours:
parts.append(_("%s hour") % rec.response_hours) parts.append(_("%s hour") % hours)
if rec.response_minutes: if minutes:
parts.append(_("%s minute") % rec.response_minutes) parts.append(_("%s minute") % minutes)
if rec.response_seconds or not parts: if seconds or not parts:
parts.append(_("%s second") % rec.response_seconds) parts.append(_("%s second") % seconds)
rec.response_time_str = ", ".join(parts) rec.response_time_str = ", ".join(parts)
else: else:
rec.response_time_str = "" rec.response_time_str = ""
rec.response_days = 0 rec.response_days = 0
rec.response_hours = 0
rec.response_minutes = 0
rec.response_seconds = 0
# to_ids = fields.Many2one(comodel_name='cm.entity', string='Send To') # to_ids = fields.Many2one(comodel_name='cm.entity', string='Send To')
# delegate_employee_id = fields.Many2one('cm.entity', related='to_ids.delegate_employee_id',store=True) # delegate_employee_id = fields.Many2one('cm.entity', related='to_ids.delegate_employee_id',store=True)

View File

@ -75,7 +75,7 @@ cm_job_title_exective_man,excetive_cm_job_title,model_cm_job_title,group_cm_exec
cm_entity,employee_cm_entity,model_cm_entity,group_cm_employee_group,1,1,0,0 cm_entity,employee_cm_entity,model_cm_entity,group_cm_employee_group,1,1,0,0
cm_entity_out,employee_out_cm_entity,model_cm_entity,group_cm_user,1,1,1,0 cm_entity_out,employee_out_cm_entity,model_cm_entity,group_cm_user,1,1,1,0
cm_entity_reviwer,reviwer_cm_entity,model_cm_entity,group_cm_reviewer,1,1,0,0 cm_entity_reviwer,reviwer_cm_entity,model_cm_entity,group_cm_reviewer,1,1,0,0
cm_entity_manager,manager_cm_entity,model_cm_entity,group_transaction_manager,1,1,0,0 cm_entity_manager,manager_cm_entity,model_cm_entity,group_transaction_manager,1,1,1,0
cm_entity_dep_man,dep_cm_entity,model_cm_entity,group_cm_department_manager,1,1,0,0 cm_entity_dep_man,dep_cm_entity,model_cm_entity,group_cm_department_manager,1,1,0,0
cm_entity_exective_man,excetive_cm_entity,model_cm_entity,group_cm_executive_manager,1,1,0,0 cm_entity_exective_man,excetive_cm_entity,model_cm_entity,group_cm_executive_manager,1,1,0,0
cm_entity_delete,delete_cm_entity,model_cm_entity,group_delete_transactions_configuration,1,1,1,1 cm_entity_delete,delete_cm_entity,model_cm_entity,group_delete_transactions_configuration,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
75 internal_transaction_exective_man excetive_internal_transaction model_internal_transaction group_cm_executive_manager 1 1 1 1
76 incoming_transaction employee_incoming_transaction model_incoming_transaction group_cm_employee_group 0 0 0 0
77 incoming_transaction_out employee_out_incoming_transaction model_incoming_transaction group_cm_user 1 1 1 1
78 incoming_transaction_reviwer reviwer_incoming_transaction model_incoming_transaction group_cm_reviewer 1 1 1 1
79 incoming_transaction_dep_man dep_incoming_transaction model_incoming_transaction group_cm_department_manager 0 0 0 0
80 incoming_transaction_exective_man excetive_incoming_transaction model_incoming_transaction group_cm_executive_manager 1 1 1 1
81 outgoing_transaction employee_outgoing_transaction model_outgoing_transaction group_cm_employee_group 1 1 1 1

View File

@ -24,11 +24,24 @@
<group> <group>
<group> <group>
<field name="type" required="True"/> <field name="type" required="True"/>
<field name="is_employee" attrs="{'invisible':[('type','not in',['employee'])]}"/>
<field name="to_delegate" attrs="{'invisible':[('type','not in',['employee'])]}"/> <field name="to_delegate" attrs="{'invisible':[('type','not in',['employee'])]}"/>
<field name="employee_id" attrs="{'invisible':[('type','not in',['employee'])]}"/> <field name="employee_id"
<field name="delegate_employee_id" attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}"/> attrs="{'invisible':[('type','not in',['employee'])],'required':[('type','=','employee')]}"
<field name="from_date" attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}" readonly="1" force_save="1"/> options="{'no_create':True,'no_open':True,'no_create_edit': True,'no_quick_create': True}"/>
<field name="to_date" attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}" readonly="1" force_save="1"/> <field name="job_title_id" readonly="1" force_save="1"
attrs="{'invisible': ['|',('type','not in',['employee']),('is_employee', '=', False)]}"
widget="selection"/>
<field name="user_id" readonly="1" force_save="1"
attrs="{'required':[('type', 'in', ['employee'])],'invisible': ['|',('type','not in',['employee']),('is_employee', '=', False)]}"/>
<field name="delegate_employee_id"
attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}"/>
<field name="from_date"
attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}"
readonly="1" force_save="1"/>
<field name="to_date"
attrs="{'invisible':['|',('type','not in',['employee']),('to_delegate','=',False)]}"
readonly="1" force_save="1"/>
<field name="department_id" attrs="{'invisible': [('type','not in',['unit'])]}"/> <field name="department_id" attrs="{'invisible': [('type','not in',['unit'])]}"/>
<field name="partner_id" <field name="partner_id"
attrs="{'invisible': [('type','not in',['external'])]}"/> attrs="{'invisible': [('type','not in',['external'])]}"/>
@ -40,42 +53,42 @@
<field name="need_approve" <field name="need_approve"
attrs="{'invisible': [('type','in',['employee','external'])]}"/> attrs="{'invisible': [('type','in',['employee','external'])]}"/>
<field name="manager_id" <field name="manager_id"
attrs="{'invisible': [('type','!=','unit')], 'required': [('type','=','unit')]}" attrs="{'invisible': [('type','!=','unit')], 'required': [('type','=','unit')]}"
domain="[('type','in',['employee'])]"/> domain="[('type','in',['employee'])]"/>
<field name="secretary_id" attrs="{'invisible': [('type','not in',['unit'])]}" <field name="secretary_id" attrs="{'invisible': [('type','not in',['unit'])]}"
domain="[('type','in',['employee'])]"/> domain="[('type','in',['employee'])]"/>
<field name="child_ids" attrs="{'invisible': [('type', '!=', 'employee')]}" <field name="child_ids" attrs="{'invisible': [('type', '!=', 'employee')]}"
widget="many2many_tags" domain="[('type', 'in', ['unit'])]"/> widget="many2many_tags" domain="[('type', 'in', ['unit'])]"/>
<field name="image" attrs="{'invisible': [('type', '!=', 'employee')]}" widget="image" options="{'max_width': 200, 'max_height': 200}"/> <field name="name" force_save="1"
attrs="{'invisible': [('type','=','employee'),('is_employee', '=', True)],'readonly': [('type','=','employee')],'required':[('type','!=','employee')]}"/>
<field name="job_title" attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
</group> <field name="user_id"
<group> attrs="{'required':[('type', 'in', ['employee'])],'invisible': ['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="name" force_save ="1" attrs="{'readonly': [('type','=','employee')],'required':[('type','!=','employee')]}"/>
<field name="establish_date" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> <field name="establish_date" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="unit_location" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> <field name="unit_location" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="email" <field name="email"
attrs="{'invisible': [('type','not in',['external'])]}"/> attrs="{'invisible': [('type','not in',['external'])]}"/>
<field name="sketch_attachment_id" widget="many2one_binary" <field name="sketch_attachment_id" widget="many2one_binary"
attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="person_id" attrs="{'invisible':[('type','not in',['employee'])]}"/> <field name="person_id"
<field name="email" attrs="{'invisible':[('type','not in',['employee'])]}"/> attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="phone" attrs="{'invisible':[('type','not in',['employee'])]}"/> <field name="email"
attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="phone"
attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="person_id_issue_date" <field name="person_id_issue_date"
attrs="{'invisible':[('type','not in',['employee'])]}"/> attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="employee_assignment_date" <field name="employee_assignment_date"
attrs="{'invisible':[('type','not in',['employee'])]}"/> attrs="{'invisible':['|',('type','not in',['employee']),('is_employee', '=', True)]}"/>
<field name="is_secret" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> <field name="is_secret" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="dynamic_year" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> <field name="dynamic_year" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="year_increment" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/> <field name="year_increment" attrs="{'invisible': [('type', 'not in', ['unit'])]}"/>
<field name="job_title_id" </group>
attrs="{'required':[('type', 'in', ['employee'])],'invisible': [('type','not in',['employee'])]}" <group>
widget="selection"/> <field name="image" nolabel="1" attrs="{'invisible': [('type', '!=', 'employee')]}" widget="image"
<field name="user_id" class="oe_avatar" options="{'size': [250, 250]}"/>
attrs="{'required':[('type', 'in', ['employee'])],'invisible': [('type','not in',['employee'])]}"/>
</group> </group>
</group> </group>
</sheet> </sheet>
@ -101,15 +114,15 @@
</search> </search>
</field> </field>
</record> </record>
<!-- <record id="extend_view_partner_form" model="ir.ui.view">--> <!-- <record id="extend_view_partner_form" model="ir.ui.view">-->
<!-- <field name="name">extend.view.partner.form</field>--> <!-- <field name="name">extend.view.partner.form</field>-->
<!-- <field name="model">res.partner</field>--> <!-- <field name="model">res.partner</field>-->
<!-- <field name="inherit_id" ref="base.view_partner_form"/>--> <!-- <field name="inherit_id" ref="base.view_partner_form"/>-->
<!-- <field name="arch" type="xml">--> <!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='lang']" position="after">--> <!-- <xpath expr="//field[@name='lang']" position="after">-->
<!-- <field name="is_transaction_entity"/>--> <!-- <field name="is_transaction_entity"/>-->
<!-- </xpath>--> <!-- </xpath>-->
<!-- </field>--> <!-- </field>-->
<!-- </record>--> <!-- </record>-->
</data> </data>
</odoo> </odoo>

View File

@ -54,8 +54,8 @@
<field name="create_uid" string="Send From"/> <field name="create_uid" string="Send From"/>
<field name="to_ids"/> <field name="to_ids"/>
<field name="due_date"/> <field name="due_date"/>
<field name="response_time_str" invisible="not context.get('show_response_fields', False)" optional="hide"/> <field name="response_time_str" optional="hide"/>
<field name="response_days" invisible="not context.get('show_response_fields', False)"/> <field name="response_days" optional="hide"/>
<!--avg="avg response_days"--> <!--avg="avg response_days"-->
<field name="state" optional="show"/> <field name="state" optional="show"/>
<field name="is_favorite" string=" " widget="priority"/> <field name="is_favorite" string=" " widget="priority"/>
@ -122,9 +122,6 @@
<field name="last_response_date" invisible="1"/> <field name="last_response_date" invisible="1"/>
<field name="response_time_str"/> <field name="response_time_str"/>
<field name="response_days"/> <field name="response_days"/>
<field name="response_hours" invisible="1"/>
<field name="response_minutes" invisible="1"/>
<field name="response_seconds" invisible="1"/>
</xpath> </xpath>
<xpath expr="//field[@name='tran_tag']" position="after"> <xpath expr="//field[@name='tran_tag']" position="after">
<field name="to_delegate" readonly="1" force_save="1"/> <field name="to_delegate" readonly="1" force_save="1"/>