From a375ff10f0e81f170e851da3d5889d0d401aee3b Mon Sep 17 00:00:00 2001 From: mohammed-alkhazrji Date: Tue, 9 Dec 2025 17:06:55 +0300 Subject: [PATCH] add custdy modul --- exp_employee_custody/__init__.py | 3 + exp_employee_custody/__manifest__.py | 20 + exp_employee_custody/i18n/ar_001.po | 753 ++++++++++++++++++ exp_employee_custody/models/__init__.py | 4 + .../models/employee_custody.py | 92 +++ .../models/receiving_employee_custody.py | 252 ++++++ .../security/custody_security.xml | 64 ++ .../security/ir.model.access.csv | 6 + .../views/employee_custody_views.xml | 126 +++ .../views/receiving_employee_custody.xml | 114 +++ 10 files changed, 1434 insertions(+) create mode 100644 exp_employee_custody/__init__.py create mode 100644 exp_employee_custody/__manifest__.py create mode 100644 exp_employee_custody/i18n/ar_001.po create mode 100644 exp_employee_custody/models/__init__.py create mode 100644 exp_employee_custody/models/employee_custody.py create mode 100644 exp_employee_custody/models/receiving_employee_custody.py create mode 100644 exp_employee_custody/security/custody_security.xml create mode 100644 exp_employee_custody/security/ir.model.access.csv create mode 100644 exp_employee_custody/views/employee_custody_views.xml create mode 100644 exp_employee_custody/views/receiving_employee_custody.xml diff --git a/exp_employee_custody/__init__.py b/exp_employee_custody/__init__.py new file mode 100644 index 0000000..5305644 --- /dev/null +++ b/exp_employee_custody/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models \ No newline at end of file diff --git a/exp_employee_custody/__manifest__.py b/exp_employee_custody/__manifest__.py new file mode 100644 index 0000000..4c5916d --- /dev/null +++ b/exp_employee_custody/__manifest__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'HR Custody', + 'category': 'Odex25-HR/Odex25-HR', + 'summary': 'Custody and receiving Employee custody', + 'version': '1.0', + 'sequence': 4, + 'website': 'http://exp-sa.com', + 'license': 'GPL-3', + 'author': 'Expert Co. Ltd.', + + 'depends': ['base','hr_base','employee_requests'], + + 'data': [ + 'security/ir.model.access.csv', + 'security/custody_security.xml', + 'views/employee_custody_views.xml', + 'views/receiving_employee_custody.xml', + ], + } diff --git a/exp_employee_custody/i18n/ar_001.po b/exp_employee_custody/i18n/ar_001.po new file mode 100644 index 0000000..20d2146 --- /dev/null +++ b/exp_employee_custody/i18n/ar_001.po @@ -0,0 +1,753 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * exp_employee_custody +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-31 10:22+0000\n" +"PO-Revision-Date: 2023-01-31 10:22+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_needaction +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_ids +msgid "Activities" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_exception_decoration +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_state +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_state +msgid "Activity State" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_type_icon +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Add Comments here ...." +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__advantage_line_id +msgid "Advantage Line" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__amount +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Amount" +msgstr "المبلغ" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_attachment_count +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__call_compute_function +msgid "Call Compute Function" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__create_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__create_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__create_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__create_uid +msgid "Created by" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__create_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__create_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__create_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__create_date +msgid "Created on" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__current_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__current_date +msgid "Current Date" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.ui.menu,name:exp_employee_custody.custody_submenu +msgid "Custody" +msgstr "العُهــده" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__custody_line_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__custody_line_id +msgid "Custody Line" +msgstr "عهد الموظف" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Custody Lines" +msgstr "عهد الموظفين" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_tree_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_tree_view +msgid "Date" +msgstr "التاريخ" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Date Delivering" +msgstr "تاريخ الاستلام" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__deduction_amount +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__deduction_amount +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Deduction Amount" +msgstr "قيمة الخصم" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__department_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__department_id +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_tree_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_tree_view +msgid "Department" +msgstr "الإدارة" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Description" +msgstr "الوصف" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#, python-format +msgid "Direct Manager" +msgstr "المدير المباشر" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Directed Manager" +msgstr "المدير المباشر" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__display_name +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__display_name +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__display_name +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__display_name +msgid "Display Name" +msgstr "" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#, python-format +msgid "Draft" +msgstr "مبدئي" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_tree_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_tree_view +msgid "Employee" +msgstr "الموظف" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#, python-format +msgid "Employee \"%s\" has not contract !" +msgstr "الموظف \"%s\" ليس لديه عقد!" + +#. module: exp_employee_custody +#: model:ir.actions.act_window,name:exp_employee_custody.employee_custody_action +#: model:ir.ui.menu,name:exp_employee_custody.employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_tree_view +msgid "Employee Custody" +msgstr "العهد الغير مالية" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__employee_custody_line +msgid "Employee Custody Line" +msgstr "عهد الموظف" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__employee_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__employee_id +msgid "Employee" +msgstr "الموظف" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Employee Info" +msgstr "معلومات الموظف" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Employee Number" +msgstr "رقم الموظف" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__employee_return_custody_line_id +msgid "Employee Return Custody Line" +msgstr "عهد الموظف المرجعة" + +#. module: exp_employee_custody +#: model:ir.model,name:exp_employee_custody.model_custom_employee_custody +msgid "Employee custody" +msgstr "العهد الغير مالية" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__employee_no +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__employee_no +msgid "Employee number" +msgstr "رقم الموظف" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_follower_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_channel_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_partner_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__activity_type_icon +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__from_hr_department +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__from_hr_department +msgid "From Hr Department" +msgstr "من موظف آخر" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "HR Manager" +msgstr "مدير الموارد البشرية" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__admin +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__admin +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#, python-format +msgid "Human Resources Manager" +msgstr "تصديق الموارد البشرية" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__id +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__id +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__id +msgid "ID" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_exception_icon +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__activity_exception_icon +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Identification code" +msgstr "رقم المتسلسل" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_needaction +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_unread +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_needaction +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_has_error +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_has_sms_error +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_has_error +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Invisible field to Call compute function" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_is_follower +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__job_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__job_id +msgid "Job Position" +msgstr "المناصب الوظيفية" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Job Title" +msgstr "الوظيفة" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody____last_update +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line____last_update +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line____last_update +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving____last_update +msgid "Last Modified on" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__write_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__write_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__write_uid +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__write_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__write_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__write_date +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__write_date +msgid "Last Updated on" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_main_attachment_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_has_error +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_ids +msgid "Messages" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__my_activity_date_deadline +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__name +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__name +msgid "Name" +msgstr "الاسم" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Nationality" +msgstr "الجنسية" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__country_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__country_id +msgid "Nationality (Country)" +msgstr "الجنسية (البلد)" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_date_deadline +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_summary +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_type_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__note +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__note +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__note +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__note +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Note" +msgstr "ملاحظات" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Notes" +msgstr "ملاحظات" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_needaction_counter +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_has_error_counter +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_needaction_counter +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_has_error_counter +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__message_unread_counter +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Other Employee" +msgstr "موظف آخر" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__quantity +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__quantity +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Quantity" +msgstr "الكمية" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Re-fill" +msgstr "تحديث عهد الموظف" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__receiving_custody +msgid "Receiving Custody" +msgstr "تسوية العهده" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__receiving_date +msgid "Receiving Date" +msgstr "تاريخ الاستلام" + +#. module: exp_employee_custody +#: model:ir.actions.act_window,name:exp_employee_custody.receiving_employee_custody_action +#: model:ir.ui.menu,name:exp_employee_custody.receiving_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_tree_view +msgid "Receiving Employee Custody" +msgstr "تسوية عهد الموظف" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Receiving Info" +msgstr "معلومات الارجاع" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__receiving_quantity +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Receiving Quantity" +msgstr "الكمية المرجعة" + +#. module: exp_employee_custody +#: model:ir.model,name:exp_employee_custody.model_hr_custody_receiving +msgid "Receiving custody" +msgstr "تسوية العهده" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#, python-format +msgid "Receiving quantity can not be greater than original quantity" +msgstr "الكمية المرجعة لا يمكن أن تكون أكبر من الكمية المستلمة" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#, python-format +msgid "Receiving quantity can not be negative value " +msgstr "لا يمكن أن تكون كمية الاستلام قيمة سالبة" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +#, python-format +msgid "Refuse" +msgstr "رفض" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__activity_user_id +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__activity_user_id +msgid "Responsible User" +msgstr "المستخدم المسؤول" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "Rest To Draft" +msgstr "إرجاع لمبدئي" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__return_custody_line_ids +msgid "Return Custody Line" +msgstr "عهد الموظف المرجعة" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__done +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__done +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +#, python-format +msgid "Return Done" +msgstr "تم ارجاع العهده" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Return Lines" +msgstr "عناصر العهد المرجعة" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_has_sms_error +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__salary_rule_id +msgid "Salary Rule" +msgstr "قاعده الراتب" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__salary_rule_flag +msgid "Salary Rule Flag" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Salary rule" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Salary rule flag" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Save contract advantage line" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_custody_line__serial +#: model:ir.model.fields,field_description:exp_employee_custody.field_employee_return_custody_line__serial +msgid "Serial" +msgstr "متسلسل" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Set to draft" +msgstr "إرجاع لمبدئي" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__state +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__state +msgid "State" +msgstr "الحالة" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Statement of Custody" +msgstr "العهد المرجعة" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_tree_view +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_tree_view +msgid "Status" +msgstr "الحالة" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__activity_state +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Submit" +msgstr "إرسال" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__activity_exception_decoration +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_unread +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__message_unread_counter +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__approve +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__approve +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +#, python-format +msgid "Warehouse Keeper" +msgstr "إعتماد مسؤول المخزن" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "Warehouse keeper" +msgstr "إعتماد مسؤول المخزن" + +#. module: exp_employee_custody +#: model:ir.model.fields,field_description:exp_employee_custody.field_custom_employee_custody__website_message_ids +#: model:ir.model.fields,field_description:exp_employee_custody.field_hr_custody_receiving__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields,help:exp_employee_custody.field_custom_employee_custody__website_message_ids +#: model:ir.model.fields,help:exp_employee_custody.field_hr_custody_receiving__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#, python-format +msgid "You can not delete record in state not in draft" +msgstr "لا يمكن حذف السجل اذا كان في حالة غير مبدئي" + +#. module: exp_employee_custody +#: model:ir.model,name:exp_employee_custody.model_employee_custody_line +msgid "employee.custody.line" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model,name:exp_employee_custody.model_employee_return_custody_line +msgid "employee.return.custody.line" +msgstr "" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.receiving_employee_custody_form_view +msgid "line" +msgstr "بند" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "receiving_custody" +msgstr "" + +#. module: exp_employee_custody +#: code:addons/exp_employee_custody/models/employee_custody.py:0 +#: code:addons/exp_employee_custody/models/receiving_employee_custody.py:0 +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__submit +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__submit +#, python-format +msgid "send" +msgstr "إرسال" + +#. module: exp_employee_custody +#: model_terms:ir.ui.view,arch_db:exp_employee_custody.employee_custody_form_view +msgid "submit" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__direct +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__direct +msgid "المدير المباشر" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__refuse +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__refuse +msgid "رفض" +msgstr "" + +#. module: exp_employee_custody +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__custom_employee_custody__state__draft +#: model:ir.model.fields.selection,name:exp_employee_custody.selection__hr_custody_receiving__state__draft +msgid "مسودة" +msgstr "" diff --git a/exp_employee_custody/models/__init__.py b/exp_employee_custody/models/__init__.py new file mode 100644 index 0000000..83c6eef --- /dev/null +++ b/exp_employee_custody/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import employee_custody +from . import receiving_employee_custody \ No newline at end of file diff --git a/exp_employee_custody/models/employee_custody.py b/exp_employee_custody/models/employee_custody.py new file mode 100644 index 0000000..4c3ea57 --- /dev/null +++ b/exp_employee_custody/models/employee_custody.py @@ -0,0 +1,92 @@ +from odoo import models, fields, api, _, exceptions +from odoo import SUPERUSER_ID +from odoo.exceptions import ValidationError + + +# from datetime import datetime , date + + +class EmployeeCustody(models.Model): + _name = 'custom.employee.custody' + _rec_name = 'employee_id' + _description = 'Employee custody' + _inherit = ['mail.thread', 'mail.activity.mixin'] + + current_date = fields.Date(default=lambda self: fields.Date.today()) + from_hr_department = fields.Boolean() + employee_no = fields.Char(related="employee_id.emp_no", readonly=True) + note = fields.Text() + state = fields.Selection(selection=[ + ("draft", _("Draft")), + ("submit", _("send")), + ("direct", _("Direct Manager")), + ("admin", _("Human Resources Manager")), + ("approve", _("Warehouse Keeper")), + ("done", _("Return Done")), + ("refuse", _("Refuse")) + ], default='draft') + + # Relational fields + receiving_custody = fields.Many2one('hr.custody.receiving') + custody_line_ids = fields.One2many('employee.custody.line', 'employee_custody_line') + employee_id = fields.Many2one('hr.employee', 'Employee', default=lambda item: item.get_user_id(), + domain=[('state', '=', 'open')]) + department_id = fields.Many2one(related="employee_id.department_id", readonly=True) + job_id = fields.Many2one(related="employee_id.job_id", readonly=True) + country_id = fields.Many2one(related="employee_id.country_id", readonly=True) + company_id = fields.Many2one(related="employee_id.company_id", store=True) + + def draft(self): + self.state = "draft" + + def submit(self): + self.state = "submit" + + def direct(self): + self.state = "direct" + + def admin(self): + self.state = "admin" + + def approve(self): + self.state = "approve" + + def done(self): + self.state = "done" + + def refuse(self): + self.state = "refuse" + + def get_user_id(self): + employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid), ('state', '=', 'open')], limit=1) + if employee_id: + return employee_id.id + else: + return False + + def unlink(self): + for i in self: + if i.state != 'draft': + raise ValidationError(_('You can not delete record in state not in draft')) + return super(EmployeeCustody, self).unlink() + + +# EmployeeCustody() + + +class EmployeeCustodyLine(models.Model): + _name = 'employee.custody.line' + + name = fields.Char() + serial = fields.Char() + quantity = fields.Float() + receiving_quantity = fields.Float() + note = fields.Char() + receiving_date = fields.Date() + amount = fields.Float() + + # Relational fields + employee_custody_line = fields.Many2one('custom.employee.custody') # Inverse field + + +# EmployeeCustodyLine() \ No newline at end of file diff --git a/exp_employee_custody/models/receiving_employee_custody.py b/exp_employee_custody/models/receiving_employee_custody.py new file mode 100644 index 0000000..16123bd --- /dev/null +++ b/exp_employee_custody/models/receiving_employee_custody.py @@ -0,0 +1,252 @@ +from odoo import models, fields, api, _, exceptions +from odoo import SUPERUSER_ID +from datetime import datetime, date +import calendar +from pprint import pprint +from odoo.exceptions import ValidationError + + +class EmployeeReceiveCustody(models.Model): + _name = 'hr.custody.receiving' + _inherit = ['mail.thread', 'mail.activity.mixin'] + _rec_name = 'employee_id' + _description = 'Receiving custody' + + current_date = fields.Date(default=lambda self: fields.Date.today()) + from_hr_department = fields.Boolean() + employee_no = fields.Char(related="employee_id.emp_no", readonly=True) + note = fields.Text() + deduction_amount = fields.Float() + salary_rule_flag = fields.Boolean() + state = fields.Selection(selection=[ + ("draft", _("Draft")), + ("submit", _("send")), + ("direct", _("Direct Manager")), + ("admin", _("Human Resources Manager")), + ("approve", _("Warehouse Keeper")), + ("done", _("Return Done")), + ("refuse", _("Refuse")) + ], default='draft') + call_compute_function = fields.Char(compute='_get_custody_line_domain') + + # Relational fields + department_id = fields.Many2one(related="employee_id.department_id", readonly=True) + job_id = fields.Many2one(related="employee_id.job_id", readonly=True) + country_id = fields.Many2one(related="employee_id.country_id", readonly=True) + return_custody_line_ids = fields.One2many('employee.return.custody.line', 'employee_return_custody_line_id', + store=True) + employee_id = fields.Many2one('hr.employee', 'Employee', default=lambda item: item.get_user_id()) + salary_rule_id = fields.Many2one('hr.salary.rule', domain=['|', ('category_id.rule_type', '=', 'deduction'), + ('category_id.name', '=', 'Deduction')]) + advantage_line_id = fields.Many2one('contract.advantage') # To save advantage line + + def get_user_id(self): + employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1) + if employee_id: + return employee_id.id + else: + return False + + + @api.depends('employee_id') + def _get_custody_line_domain(self): + for item in self: + item.return_custody_line_ids = [(0, 0, val) for val in []] + if item.employee_id: + employee_custody = self.env['custom.employee.custody'].search( + [('employee_id', '=', item.employee_id.id), ('state', 'in', ['approve', 'done'])]) + items = [] + for record in employee_custody: + if ((item.state == 'done' and record.state == 'done') and ( + record.receiving_custody.id == item.id)) or record.state == 'approve': + for line in record.custody_line_ids: + if line.quantity - line.receiving_quantity > 0 and line.amount == 0: + items.append({ + 'name': line.name, + 'serial': line.serial, + 'employee_return_custody_line_id': item.id, + 'quantity': line.quantity - line.receiving_quantity, + 'note': line.note, + 'custody_line_id': line.id}) + item.return_custody_line_ids = [(0, 0, val) for val in items] + + item.call_compute_function = "" + + # Re-fill receive custody lines + + def re_fill_receive_custody_lines(self): + for item in self: + item.return_custody_line_ids = False + if item.employee_id: + employee_custody = self.env['custom.employee.custody'].search( + [('employee_id', '=', item.employee_id.id), ('state', 'in', ['approve', 'done'])]) + items = [] + for record in employee_custody: + if ((item.state == 'done' and record.state == 'done') and ( + record.receiving_custody.id == item.id)) or record.state == 'approve': + for line in record.custody_line_ids: + if line.quantity - line.receiving_quantity > 0 and line.amount == 0: + items.append({ + 'name': line.name, + 'serial': line.serial, + 'employee_return_custody_line_id': item.id, + 'quantity': line.quantity - line.receiving_quantity, + 'note': line.note, + 'custody_line_id': line.id}) + item.return_custody_line_ids = [(0, 0, val) for val in items] + + @api.onchange('return_custody_line_ids') + def compute_deduction_amount(self): + total_amount = 0.0 + for item in self: + item.salary_rule_flag = False + for line in item.return_custody_line_ids: + total_amount += line.deduction_amount + item.deduction_amount = total_amount + + # salary_rule_flag Flag do visible salary rule + if item.deduction_amount > 0.0: + item.salary_rule_flag = True + + + def set_to_draft(self): + for item in self: + if item.employee_id and item.state == 'done': + employee_custody = self.env['custom.employee.custody'].search( + [('employee_id', '=', item.employee_id.id), ('state', 'in', ['done', 'approve'])]) + for line in employee_custody: + for element in self.return_custody_line_ids: + for custody in line.custody_line_ids: + if custody.receiving_quantity > 0.0: + line.state = 'approve' + if element.custody_line_id.id == custody.id: + if custody.receiving_quantity - element.quantity >= 0: + custody.receiving_quantity = custody.receiving_quantity - element.quantity + custody.amount = 0.0 + else: + raise ValidationError(_('Receiving quantity can not be negative value ')) + + # Remove contract advantage line when re-draft + if item.advantage_line_id: + item.advantage_line_id.unlink() + + self.state = 'draft' + + def send(self): + self.state = 'submit' + + def dr_manager(self): + self.state = 'direct' + + + def dr_hr_manager(self): + self.state = 'admin' + + + def done(self): + for item in self: + + # If return any custody quantity fill it in receiving quantity + for line in item.return_custody_line_ids: + if (line.custody_line_id.receiving_quantity + line.quantity) > line.custody_line_id.quantity: + raise ValidationError(_('Receiving quantity can not be greater than original quantity')) + else: + line.custody_line_id.receiving_quantity = line.custody_line_id.receiving_quantity + line.quantity + line.custody_line_id.amount = line.deduction_amount + + if line.custody_line_id.receiving_quantity < 0.0: + raise ValidationError(_('Receiving quantity can not be negative value ')) + + if item.employee_id: + custody_not_complete = 0.0 + employee_custody = self.env['custom.employee.custody'].search( + [('employee_id', '=', item.employee_id.id), ('state', '=', 'approve')]) + for record in employee_custody: + record.write({ + 'receiving_custody': item.id, + }) + + # Check all employee custody line are completed the change state to done + for record in employee_custody: + for line in record.custody_line_ids: + if line.receiving_quantity != line.quantity and line.amount == 0.0: + custody_not_complete += 1 + if custody_not_complete == 0: + record.state = 'done' + + # Move deduction amount to employee contract advantage lines + if item.employee_id.contract_id: + if item.deduction_amount and item.salary_rule_id: + contract = item.employee_id.contract_id + # get start and end date of the current month + current_date = date.today() + month_start = date(current_date.year, current_date.month, 1) + month_end = date(current_date.year, current_date.month, calendar.mdays[current_date.month]) + + advantage_line_id = self.env['contract.advantage'].create({ + 'benefits_discounts': item.salary_rule_id.id, + 'type': 'customize', + 'date_from': month_start, + 'date_to': month_end, + 'amount': item.deduction_amount, + 'contract_advantage_id': contract.id, + }) + item.advantage_line_id = advantage_line_id.id + else: + raise ValidationError(_('Employee "%s" has not contract !') % item.employee_id.name) + + item.state = 'done' + + + def warehouse_keeper(self): + self.state = 'approve' + + + def refuse(self): + self.state = 'refuse' + + # Override create function + # make sure the one2many return_custody_line_ids save changes when create and updates + # @api.model + # def create(self , values): + # deduction_amount = values.get('return_custody_line_ids') + # deduction_amount_list = [] + # quantity_list = [] + # + # for line in deduction_amount: + # deduction_amount_list.append(line[2]['deduction_amount']) + # quantity_list.append(line[2]['quantity']) + # print(deduction_amount) + # print(deduction_amount_list) + # res = super(EmployeeReceiveCustody ,self).create(values) + # + # index = 0 + # for element in res.return_custody_line_ids: + # element.deduction_amount = deduction_amount_list[index] + # element.quantity = quantity_list[index] + # index +=1 + # + # print(quantity_list) + # return res + + # Override unlink function + def unlink(self): + for i in self: + if i.state != 'draft': + raise ValidationError(_('You can not delete record in state not in draft')) + return super(EmployeeReceiveCustody, self).unlink() + + +class EmployeeReturnCustodyLine(models.Model): + _name = 'employee.return.custody.line' + _rec_name = 'name' + + name = fields.Char() + serial = fields.Char() + quantity = fields.Float() + note = fields.Char() + deduction_amount = fields.Float() + + # Relational fields + employee_return_custody_line_id = fields.Many2one(comodel_name='hr.custody.receiving') # inverse field + custody_line_id = fields.Many2one('employee.custody.line') # to save custody_id \ No newline at end of file diff --git a/exp_employee_custody/security/custody_security.xml b/exp_employee_custody/security/custody_security.xml new file mode 100644 index 0000000..df61107 --- /dev/null +++ b/exp_employee_custody/security/custody_security.xml @@ -0,0 +1,64 @@ + + + + + + Employee custody multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee: views custody + + [('employee_id.user_id','=', user.id)] + + + + + Division manager: views custody of its subordinates + + ['|',('employee_id.parent_id.user_id','=', user.id),('employee_id.coach_id.user_id','=', user.id)] + + + + + Allow HR : views custody of all employees + + [(1 ,'=', 1)] + + + + + Employee: views its custody receiving records + + [('employee_id.user_id','=', user.id)] + + + + + Division manager: views custody receiving records of its subordinates + + ['|',('employee_id.parent_id.user_id','=', user.id),('employee_id.coach_id.user_id','=', user.id)] + + + + + Allow HR : views custody receiving records of all employees + + [(1 ,'=', 1)] + + + + + + \ No newline at end of file diff --git a/exp_employee_custody/security/ir.model.access.csv b/exp_employee_custody/security/ir.model.access.csv new file mode 100644 index 0000000..ad766a9 --- /dev/null +++ b/exp_employee_custody/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +access_hr_custody_receiving,access_hr_custody_receiving,exp_employee_custody.model_hr_custody_receiving,base.group_user,1,0,0,0 +access_hr_custody_receiving_emp,hr.custody.receiving.emp,exp_employee_custody.model_hr_custody_receiving,base.group_user,1,1,1,1 +access_employee_custody,access_employee_custody,exp_employee_custody.model_custom_employee_custody,base.group_user,1,1,1,1 +access_employee_custody_line,access_employee_custody_line,exp_employee_custody.model_employee_custody_line,base.group_user,1,1,1,1 +access_employee_return_custody_emp,Employee.return.custody.line.emp,exp_employee_custody.model_employee_return_custody_line,base.group_user,1,1,1,1 diff --git a/exp_employee_custody/views/employee_custody_views.xml b/exp_employee_custody/views/employee_custody_views.xml new file mode 100644 index 0000000..517205f --- /dev/null +++ b/exp_employee_custody/views/employee_custody_views.xml @@ -0,0 +1,126 @@ + + + + + Employee Custody + custom.employee.custody + list,form + + + + Employee Custody + custom.employee.custody + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + Employee Custody + custom.employee.custody + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/exp_employee_custody/views/receiving_employee_custody.xml b/exp_employee_custody/views/receiving_employee_custody.xml new file mode 100644 index 0000000..b98294d --- /dev/null +++ b/exp_employee_custody/views/receiving_employee_custody.xml @@ -0,0 +1,114 @@ + + + + + Receiving Employee Custody + hr.custody.receiving + list,form + + + + Receiving Employee Custody + hr.custody.receiving + +
+
+
+ + + + + + + + + + + + + + + + + + + +