add new module
47
hr_custody/README.rst
Normal file
@@ -0,0 +1,47 @@
|
||||
Open HRMS Custody Management
|
||||
============================
|
||||
|
||||
Functionality to give and track the assets of a company to employees.
|
||||
- Creates a new menu item Custody Management under Employees
|
||||
- Can create custody contract with an employee
|
||||
- Can take the report of custody
|
||||
|
||||
Depends
|
||||
=======
|
||||
[hr, mail, hr_employee_updation] addon Odoo
|
||||
|
||||
Tech
|
||||
====
|
||||
* [Python] - Models
|
||||
* [XML] - Odoo views
|
||||
|
||||
Installation
|
||||
============
|
||||
- www.odoo.com/documentation/13.0/setup/install.html
|
||||
- Install our custom addon
|
||||
|
||||
License
|
||||
=======
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
|
||||
(http://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
|
||||
|
||||
Credits
|
||||
=======
|
||||
* Cybrosys Techno Solutions <https://www.cybrosys.com>
|
||||
|
||||
Author
|
||||
------
|
||||
|
||||
Developers: Avinash Nk <odoo@cybrosys.com>
|
||||
Jesni Banu <odoo@cybrosys.com>
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
This module is maintained by Cybrosys Technologies.
|
||||
|
||||
For support and more information, please visit https://www.cybrosys.com.
|
||||
24
hr_custody/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###################################################################################
|
||||
# A part of OpenHRMS Project <https://www.openhrms.com>
|
||||
#
|
||||
# Cybrosys Technologies Pvt. Ltd.
|
||||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
|
||||
# Authors: Avinash Nk, Jesni Banu (<https://www.cybrosys.com>)
|
||||
#
|
||||
# This program is free software: you can modify
|
||||
# it under the terms of the GNU Affero General Public License (AGPL) as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
###################################################################################
|
||||
from . import models
|
||||
from . import reports
|
||||
50
hr_custody/__manifest__.py
Normal file
@@ -0,0 +1,50 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###################################################################################
|
||||
# A part of Open HRMS Project <https://www.openhrms.com>
|
||||
#
|
||||
# Cybrosys Technologies Pvt. Ltd.
|
||||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
|
||||
# Authors: Avinash Nk, Jesni Banu (<https://www.cybrosys.com>)
|
||||
#
|
||||
# This program is free software: you can modify
|
||||
# it under the terms of the GNU Affero General Public License (AGPL) as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
###################################################################################
|
||||
{
|
||||
'name': 'Open HRMS Custody',
|
||||
'version': '13.0.1.0.0',
|
||||
'summary': """Manage the company properties when it is in the custody of an employee""",
|
||||
'description': 'Manage the company properties when it is in the custody of an employee',
|
||||
'category': 'Generic Modules/Human Resources',
|
||||
'author': 'Cybrosys Techno Solutions',
|
||||
'company': 'Cybrosys Techno Solutions',
|
||||
'maintainer': 'Cybrosys Techno Solutions',
|
||||
'website': "https://www.openhrms.com",
|
||||
'depends': ['hr', 'mail', 'hr_employee_updation', 'product'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'security/custody_security.xml',
|
||||
'views/wizard_reason_view.xml',
|
||||
'views/custody_view.xml',
|
||||
'views/hr_custody_notification.xml',
|
||||
'views/hr_employee_view.xml',
|
||||
'views/notification_mail.xml',
|
||||
'reports/custody_report.xml'
|
||||
],
|
||||
'demo': ['data/demo_data.xml'],
|
||||
'images': ['static/description/banner.png'],
|
||||
'license': 'AGPL-3',
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': False,
|
||||
}
|
||||
37
hr_custody/data/demo_data.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="property_one" model="custody.property">
|
||||
<field name="name">Laptop</field>
|
||||
</record>
|
||||
|
||||
<record id="property_two" model="custody.property">
|
||||
<field name="name">Seminar hall</field>
|
||||
</record>
|
||||
|
||||
<record id="property_three" model="custody.property">
|
||||
<field name="name">Car</field>
|
||||
</record>
|
||||
|
||||
<record id="employee_custody" model="hr.employee">
|
||||
<field name="name">Juliet </field>
|
||||
<field name="job_title">Odoo Developer</field>
|
||||
<field name="work_location">Building 3, Fifth Floor</field>
|
||||
<field name="work_phone">(956)-3852-7863</field>
|
||||
<field name="work_email">juliet123@example.com</field>
|
||||
<field name="image_1920" type="base64" file="hr_custody/static/images/hr_custody_employee.jpg"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="custody_demo_one" model="hr.custody">
|
||||
<field name="custody_name" ref="property_one"/>
|
||||
<field name="employee" ref="employee_custody"/>
|
||||
<field name="purpose">Projectwork</field>
|
||||
<field name="date_request">2020-03-02</field>
|
||||
<field name="return_date">2020-03-02</field>
|
||||
<field name="state">draft</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
6
hr_custody/doc/RELEASE_NOTES.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Module hr_custody
|
||||
|
||||
#### 01.03.2019
|
||||
#### Version 13.0.1.0.0
|
||||
##### ADD
|
||||
- Initial commit for Open Hrms Project
|
||||
691
hr_custody/i18n/ar_001.po
Normal file
@@ -0,0 +1,691 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_custody
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-02-12 06:59+0000\n"
|
||||
"PO-Revision-Date: 2020-02-12 06:59+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: hr_custody
|
||||
#: model:mail.template,body_html:hr_custody.custody_email_notification_template
|
||||
msgid ""
|
||||
"\n"
|
||||
" \n"
|
||||
" <p>Dear ${(object.employee.name)},<br/><br/>\n"
|
||||
" You are in possession of the company asset\n"
|
||||
" <strong>\"${(object.custody_name.name)}\"</strong>\n"
|
||||
" since <strong>${(object.return_date)}.</strong><br/><br/>\n"
|
||||
" Please kindly return the property as soon as possible.<br/><br/></p>\n"
|
||||
" Regards,<br/><br/>\n"
|
||||
" ${(object.company_id.name)}\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_employee__custody_count
|
||||
msgid "# Custody"
|
||||
msgstr "عهدة #"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_employee__equipment_count
|
||||
msgid "# Equipments"
|
||||
msgstr "المعدات #"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#, python-format
|
||||
msgid "/web#id=%s&view_type=form&model=hr.custody&menu_id="
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "الإجراءات اللازمة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr "أنشطة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr "نشاط استثناء الديكور"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr "حالة النشاط"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Approve"
|
||||
msgstr "يوافق"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__hr_custody__state__approved
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__report_custody__state__approved
|
||||
msgid "Approved"
|
||||
msgstr "وافق"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__asset_true
|
||||
msgid "Asset Exists"
|
||||
msgstr "الأصول موجود"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__asset_id
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__custody_property__property_selection__asset
|
||||
msgid "Assets"
|
||||
msgstr "الأصول"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "عدد المرفقات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_reason_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_return_date_form
|
||||
msgid "Cancel"
|
||||
msgstr "إلغاء"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.actions.act_window,help:hr_custody.action_hr_custody
|
||||
#: model_terms:ir.actions.act_window,help:hr_custody.action_hr_property
|
||||
msgid "Click to Create a New Record."
|
||||
msgstr ".انقر لإنشاء سجل جديد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__name
|
||||
msgid "Code"
|
||||
msgstr "الشفرة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__company_id
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__company_id
|
||||
msgid "Company"
|
||||
msgstr "شركة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "انشأ من قبل"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__create_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__create_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__create_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__create_date
|
||||
msgid "Created on"
|
||||
msgstr "تم إنشاؤها على"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/hr_employee.py:0
|
||||
#: code:addons/hr_custody/models/hr_employee.py:0
|
||||
#: model:ir.actions.act_window,name:hr_custody.action_hr_custody
|
||||
#: model:ir.ui.menu,name:hr_custody.hr_custody_main_menu
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.custody_hr_employee_inherit_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_search_view
|
||||
#, python-format
|
||||
msgid "Custody"
|
||||
msgstr "عهدة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.actions.act_window,name:hr_custody.action_report_custody
|
||||
#: model:ir.model,name:hr_custody.model_report_custody
|
||||
#: model:ir.ui.menu,name:hr_custody.menu_custody_analysis
|
||||
msgid "Custody Analysis"
|
||||
msgstr "تحليل الحراسة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_search_view
|
||||
msgid "Custody Name"
|
||||
msgstr "اسم الحراسة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.actions.act_window,name:hr_custody.wizard_return_date_act
|
||||
#: model:ir.ui.menu,name:hr_custody.hr_custody_menu
|
||||
msgid "Custody Request"
|
||||
msgstr "طلب حضانة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#, python-format
|
||||
msgid "Custody is not available now"
|
||||
msgstr "الحراسة غير متوفرة الآن"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__desc
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.custody_custody_form_view
|
||||
msgid "Description"
|
||||
msgstr "وصف"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__display_name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__display_name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__display_name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__display_name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "اسم العرض"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__hr_custody__state__draft
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__report_custody__state__draft
|
||||
msgid "Draft"
|
||||
msgstr "مشروع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model,name:hr_custody.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__employee
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__employee
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_search_view
|
||||
msgid "Employee"
|
||||
msgstr "الموظف"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/hr_employee.py:0
|
||||
#: code:addons/hr_custody/models/hr_employee.py:0
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.custody_custody_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.custody_hr_employee_inherit_form_view
|
||||
#, python-format
|
||||
msgid "Equipments"
|
||||
msgstr "المعدات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "متابعون"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "(المتابعون (القنوات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "(المتابعون (الشركاء"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_search_view
|
||||
msgid "Group By"
|
||||
msgstr "مجموعة من"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.actions.server,name:hr_custody.hr_custody_data_reminders_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_custody.hr_custody_data_reminders
|
||||
#: model:ir.cron,name:hr_custody.hr_custody_data_reminders
|
||||
msgid "HR Custody Return Notification"
|
||||
msgstr "الموارد البشرية إشعار عودة الحفظ"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Hi %s,<br>As per the %s you took %s on %s for the reason of %s. S0 here we "
|
||||
"remind you that you have to return that on or before %s. Otherwise, you can "
|
||||
"renew the reference number(%s) by extending the return date through "
|
||||
"following link.<br> <div style = \"text-align: center; margin-top: "
|
||||
"16px;\"><a href = \"%s\"style = \"padding: 5px 10px; font-size: 12px; line-"
|
||||
"height: 18px; color: #FFFFFF; border-color:#875A7B;text-decoration: none; "
|
||||
"display: inline-block; margin-bottom: 0px; font-weight: 400;text-align: "
|
||||
"center; vertical-align: middle; cursor: pointer; white-space: nowrap; "
|
||||
"background-image: none; background-color: #875A7B; border: 1px solid "
|
||||
"#875A7B; border-radius:3px;\">Renew %s</a></div>"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model,name:hr_custody.model_hr_custody
|
||||
msgid "Hr Custody Management"
|
||||
msgstr "إدارة حراسة الموارد البشرية"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model,name:hr_custody.model_wizard_return_date
|
||||
msgid "Hr Custody Name"
|
||||
msgstr "اسم حراسة الموارد البشرية"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__id
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__id
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__id
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__id
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__id
|
||||
msgid "ID"
|
||||
msgstr "هوية شخصية"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr "أيقونة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ".أيقونة للإشارة إلى نشاط استثناء"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_needaction
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ".إذا تم تحديد ذلك ، فإن الرسائل الجديدة تتطلب اهتمامك"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_has_error
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ".إذا تم التحقق ، فبعض الرسائل بها خطأ في التسليم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__image
|
||||
msgid "Image"
|
||||
msgstr "صورة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "هو تابع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property____last_update
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody____last_update
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody____last_update
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason____last_update
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "آخر تعديل في"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "آخر تحديث بواسطة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__write_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__write_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__write_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "آخر تحديث في"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__mail_send
|
||||
msgid "Mail Send"
|
||||
msgstr "إرسال البريد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "المرفق الرئيسي"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__image_medium
|
||||
msgid "Medium-sized image"
|
||||
msgstr "صورة متوسطة الحجم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_custody_property__image_medium
|
||||
msgid ""
|
||||
"Medium-sized image of this provider. It is automatically resized as a "
|
||||
"128x128px image, with aspect ratio preserved. Use this field in form views "
|
||||
"or some kanban views."
|
||||
msgstr ""
|
||||
"صورة متوسطة الحجم لهذا المزود. يتم تغيير حجمها تلقائيًا ك"
|
||||
"صورة بحجم 128 × 128 بكسل ، مع الحفاظ على نسبة العرض إلى الارتفاع. استخدم هذا الحقل في طرق عرض النماذج"
|
||||
"أو بعض وجهات النظر kanban"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "خطأ في تسليم الرسالة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "رسائل"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.custody_custody_form_view
|
||||
msgid "Name"
|
||||
msgstr "اسم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr "آخر نشاط الموعد النهائي"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr "ملخص النشاط التالي"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr "نوع النشاط التالي"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__custody_property__property_selection__empty
|
||||
msgid "No Connection"
|
||||
msgstr "لا يوجد اتصال"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#, python-format
|
||||
msgid "No asset module found. Kindly install the asset module."
|
||||
msgstr ".لم يتم العثور على وحدة الأصول. يرجى تثبيت وحدة الأصول"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__notes
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Notes"
|
||||
msgstr "ملاحظات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:mail.template,subject:hr_custody.custody_email_notification_template
|
||||
msgid "Notification to return company asset-${object.custody_name.name}"
|
||||
msgstr " ${object.custody_name.name}-إشعار للعودة أصول الشركة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "عدد الإجراءات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "عدد الاخطاء"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "عدد الرسائل التي تتطلب إجراء"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "عدد الرسائل مع خطأ التسليم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "عدد الرسائل غير المقروءة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_reason_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_return_date_form
|
||||
msgid "Proceed"
|
||||
msgstr "تقدم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__product_id
|
||||
msgid "Product"
|
||||
msgstr "المنتج"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__custody_property__property_selection__product
|
||||
msgid "Products"
|
||||
msgstr "منتجات"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.actions.act_window,name:hr_custody.action_hr_property
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__custody_name
|
||||
#: model:ir.ui.menu,name:hr_custody.hr_property_menu
|
||||
msgid "Property"
|
||||
msgstr "خاصية"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model,name:hr_custody.model_custody_property
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__name
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__custody_name
|
||||
msgid "Property Name"
|
||||
msgstr "اسم الخاصية"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__property_selection
|
||||
msgid "Property from"
|
||||
msgstr "الملكية من"
|
||||
|
||||
#. module: hr_custody
|
||||
#: code:addons/hr_custody/models/custody.py:0
|
||||
#, python-format
|
||||
msgid "REMINDER On %s"
|
||||
msgstr "%s تذكير في"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__purpose
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__purpose
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_reason__reason
|
||||
msgid "Reason"
|
||||
msgstr "السبب"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Refuse"
|
||||
msgstr "رفض"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__hr_custody__state__rejected
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__report_custody__state__rejected
|
||||
msgid "Refused"
|
||||
msgstr "رفض"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__rejected_reason
|
||||
msgid "Rejected Reason"
|
||||
msgstr "رفض السبب"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Renew"
|
||||
msgstr "جدد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__renew_reject
|
||||
msgid "Renew Reject"
|
||||
msgstr "تجديد رفض"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__renew_rejected_reason
|
||||
msgid "Renew Rejected Reason"
|
||||
msgstr "تجديد رفض السبب"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__renew_return_date
|
||||
msgid "Renew Return Date"
|
||||
msgstr "تجديد تاريخ العودة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Renewal Approval"
|
||||
msgstr "موافقة التجديد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_wizard_return_date__returned_date
|
||||
msgid "Renewal Date"
|
||||
msgstr "تاريخ التجديد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_return_date_form
|
||||
msgid "Renewal Request"
|
||||
msgstr "طلب تجديد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__renew_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__renew_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__renew_return_date
|
||||
msgid "Renewal Return Date"
|
||||
msgstr "تاريخ العودة التجديد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.ui.menu,name:hr_custody.menu_custody_report
|
||||
msgid "Report"
|
||||
msgstr "نقل"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__date_request
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__date_request
|
||||
msgid "Requested Date"
|
||||
msgstr "التاريخ المطلوب"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr "المستخدم المسؤول"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Return"
|
||||
msgstr "إرجاع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__return_date
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__return_date
|
||||
msgid "Return Date"
|
||||
msgstr "تاريخ العودة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__hr_custody__state__returned
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__report_custody__state__returned
|
||||
msgid "Returned"
|
||||
msgstr "عاد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr "خطأ في تسليم الرسائل القصيرة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Send For Approval"
|
||||
msgstr "إرسال للموافقة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Send Mail"
|
||||
msgstr "ارسل بريد"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_form_view
|
||||
msgid "Set to Draft"
|
||||
msgstr "تعيين إلى مشروع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_custody_property__image_small
|
||||
msgid "Small-sized image"
|
||||
msgstr "صورة صغيرة الحجم"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_custody_property__image_small
|
||||
msgid ""
|
||||
"Small-sized image of this provider. It is automatically resized as a 64x64px"
|
||||
" image, with aspect ratio preserved. Use this field anywhere a small image "
|
||||
"is required."
|
||||
msgstr ""
|
||||
"صورة صغيرة الحجم لهذا المزود. يتم تغيير حجمها تلقائيًا على أنها 64 × 64 بكسل"
|
||||
"الصورة ، مع الحفاظ على نسبة العرض إلى الارتفاع. استخدم هذا الحقل في أي مكان صورة صغيرة"
|
||||
"مطلوب."
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__state
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_report_custody__state
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.hr_custody_search_view
|
||||
msgid "Status"
|
||||
msgstr "الحالة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__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 ""
|
||||
"الحالة على أساس الأنشطة\n"
|
||||
"المتأخرة: تاريخ الاستحقاق مر\n"
|
||||
"اليوم: تاريخ النشاط هو اليوم\n"
|
||||
"المخطط: الأنشطة المستقبلية."
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_custody_property__image
|
||||
msgid ""
|
||||
"This field holds the image used for this provider, limited to 1024x1024px"
|
||||
msgstr ""
|
||||
"يحتفظ هذا الحقل بالصورة المستخدمة لهذا الموفر ، مقيدًا بدقة 1024 × 1024 بكسل"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.actions.act_window,help:hr_custody.action_report_custody
|
||||
msgid "This report allows you to analyse all Custody Requests."
|
||||
msgstr ".يسمح لك هذا التقرير بتحليل جميع طلبات الحراسة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.view_report_custody
|
||||
msgid "Ticket Analysis"
|
||||
msgstr "تحليل التذاكر"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr ".نوع نشاط الاستثناء في السجل"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "رسائل غير مقروءة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "عداد الرسائل غير المقروءة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.actions.act_window,name:hr_custody.wizard_reason_act
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_reason_form
|
||||
msgid "Update Reason"
|
||||
msgstr "تحديث السبب"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__hr_custody__state__to_approve
|
||||
#: model:ir.model.fields.selection,name:hr_custody.selection__report_custody__state__to_approve
|
||||
msgid "Waiting For Approval"
|
||||
msgstr "بانتظار الموافقة"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,field_description:hr_custody.field_hr_custody__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "رسائل الموقع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model.fields,help:hr_custody.field_hr_custody__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "سجل اتصالات الموقع"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_reason_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_custody.wizard_return_date_form
|
||||
msgid "or"
|
||||
msgstr "أو"
|
||||
|
||||
#. module: hr_custody
|
||||
#: model:ir.model,name:hr_custody.model_wizard_reason
|
||||
msgid "wizard.reason"
|
||||
msgstr ""
|
||||
4
hr_custody/models/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import custody
|
||||
from . import hr_employee
|
||||
from . import wizard_reason
|
||||
219
hr_custody/models/custody.py
Normal file
@@ -0,0 +1,219 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import date, datetime, timedelta
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import Warning, UserError
|
||||
|
||||
|
||||
class HrCustody(models.Model):
|
||||
"""
|
||||
Hr custody contract creation model.
|
||||
"""
|
||||
_name = 'hr.custody'
|
||||
_description = 'Hr Custody Management'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
|
||||
read_only = fields.Boolean(string="check field")
|
||||
|
||||
@api.onchange('employee')
|
||||
def _compute_read_only(self):
|
||||
""" Use this function to check weather the user has the permission to change the employee"""
|
||||
res_user = self.env['res.users'].search([('id', '=', self._uid)])
|
||||
print(res_user.has_group('hr.group_hr_user'))
|
||||
if res_user.has_group('hr.group_hr_user'):
|
||||
self.read_only = True
|
||||
else:
|
||||
self.read_only = False
|
||||
|
||||
def mail_reminder(self):
|
||||
now = datetime.now() + timedelta(days=1)
|
||||
date_now = now.date()
|
||||
match = self.search([('state', '=', 'approved')])
|
||||
for i in match:
|
||||
if i.return_date:
|
||||
exp_date = fields.Date.from_string(i.return_date)
|
||||
if exp_date <= date_now:
|
||||
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
|
||||
url = base_url + _('/web#id=%s&view_type=form&model=hr.custody&menu_id=') % i.id
|
||||
mail_content = _('Hi %s,<br>As per the %s you took %s on %s for the reason of %s. S0 here we '
|
||||
'remind you that you have to return that on or before %s. Otherwise, you can '
|
||||
'renew the reference number(%s) by extending the return date through following '
|
||||
'link.<br> <div style = "text-align: center; margin-top: 16px;"><a href = "%s"'
|
||||
'style = "padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; '
|
||||
'border-color:#875A7B;text-decoration: none; display: inline-block; '
|
||||
'margin-bottom: 0px; font-weight: 400;text-align: center; vertical-align: middle; '
|
||||
'cursor: pointer; white-space: nowrap; background-image: none; '
|
||||
'background-color: #875A7B; border: 1px solid #875A7B; border-radius:3px;">'
|
||||
'Renew %s</a></div>') % \
|
||||
(i.employee.name, i.name, i.custody_name.name, i.date_request, i.purpose,
|
||||
date_now, i.name, url, i.name)
|
||||
main_content = {
|
||||
'subject': _('REMINDER On %s') % i.name,
|
||||
'author_id': self.env.user.partner_id.id,
|
||||
'body_html': mail_content,
|
||||
'email_to': i.employee.work_email,
|
||||
}
|
||||
mail_id = self.env['mail.mail'].create(main_content)
|
||||
mail_id.mail_message_id.body = mail_content
|
||||
mail_id.send()
|
||||
if i.employee.user_id:
|
||||
mail_id.mail_message_id.write(
|
||||
{'needaction_partner_ids': [(4, i.employee.user_id.partner_id.id)]})
|
||||
mail_id.mail_message_id.write({'partner_ids': [(4, i.employee.user_id.partner_id.id)]})
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
vals['name'] = self.env['ir.sequence'].next_by_code('hr.custody')
|
||||
return super(HrCustody, self).create(vals)
|
||||
|
||||
def sent(self):
|
||||
self.state = 'to_approve'
|
||||
|
||||
def send_mail(self):
|
||||
template = self.env.ref('hr_custody.custody_email_notification_template')
|
||||
self.env['mail.template'].browse(template.id).send_mail(self.id)
|
||||
self.mail_send = True
|
||||
|
||||
def set_to_draft(self):
|
||||
self.state = 'draft'
|
||||
|
||||
def renew_approve(self):
|
||||
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
|
||||
if custody.state == "approved":
|
||||
raise UserError(_("Custody is not available now"))
|
||||
self.return_date = self.renew_date
|
||||
self.renew_date = ''
|
||||
self.state = 'approved'
|
||||
|
||||
def renew_refuse(self):
|
||||
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
|
||||
if custody.state == "approved":
|
||||
raise UserError(_("Custody is not available now"))
|
||||
self.renew_date = ''
|
||||
self.state = 'approved'
|
||||
|
||||
def approve(self):
|
||||
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
|
||||
if custody.state == "approved":
|
||||
raise UserError(_("Custody is not available now"))
|
||||
self.state = 'approved'
|
||||
|
||||
def set_to_return(self):
|
||||
self.state = 'returned'
|
||||
self.return_date = date.today()
|
||||
|
||||
# return date validation
|
||||
@api.constrains('return_date')
|
||||
def validate_return_date(self):
|
||||
if self.return_date < self.date_request:
|
||||
raise Warning('Please Give Valid Return Date')
|
||||
|
||||
name = fields.Char(string='Code', copy=False, help="Code")
|
||||
company_id = fields.Many2one('res.company', 'Company', readonly=True, help="Company",
|
||||
default=lambda self: self.env.user.company_id)
|
||||
rejected_reason = fields.Text(string='Rejected Reason', copy=False, readonly=1, help="Reason for the rejection")
|
||||
renew_rejected_reason = fields.Text(string='Renew Rejected Reason', copy=False, readonly=1,
|
||||
help="Renew rejected reason")
|
||||
date_request = fields.Date(string='Requested Date', required=True, track_visibility='always', readonly=True,
|
||||
help="Requested date",
|
||||
states={'draft': [('readonly', False)]}, default=datetime.now().strftime('%Y-%m-%d'))
|
||||
employee = fields.Many2one('hr.employee', string='Employee', required=True, readonly=True, help="Employee",
|
||||
default=lambda self: self.env.user.employee_id.id,
|
||||
states={'draft': [('readonly', False)]})
|
||||
purpose = fields.Char(string='Reason', track_visibility='always', required=True, readonly=True, help="Reason",
|
||||
states={'draft': [('readonly', False)]})
|
||||
custody_name = fields.Many2one('custody.property', string='Property', required=True, readonly=True,
|
||||
help="Property name",
|
||||
states={'draft': [('readonly', False)]})
|
||||
return_date = fields.Date(string='Return Date', required=True, track_visibility='always', readonly=True,
|
||||
help="Return date",
|
||||
states={'draft': [('readonly', False)]})
|
||||
renew_date = fields.Date(string='Renewal Return Date', track_visibility='always',
|
||||
help="Return date for the renewal", readonly=True, copy=False)
|
||||
notes = fields.Html(string='Notes')
|
||||
renew_return_date = fields.Boolean(default=False, copy=False)
|
||||
renew_reject = fields.Boolean(default=False, copy=False)
|
||||
state = fields.Selection([('draft', 'Draft'), ('to_approve', 'Waiting For Approval'), ('approved', 'Approved'),
|
||||
('returned', 'Returned'), ('rejected', 'Refused')], string='Status', default='draft',
|
||||
track_visibility='always')
|
||||
mail_send = fields.Boolean(string="Mail Send")
|
||||
|
||||
|
||||
class HrPropertyName(models.Model):
|
||||
"""
|
||||
Hr property creation model.
|
||||
"""
|
||||
_name = 'custody.property'
|
||||
_description = 'Property Name'
|
||||
|
||||
name = fields.Char(string='Property Name', required=True)
|
||||
image = fields.Image(string="Image",
|
||||
help="This field holds the image used for this provider, limited to 1024x1024px")
|
||||
image_medium = fields.Binary(
|
||||
"Medium-sized image", attachment=True,
|
||||
help="Medium-sized image of this provider. It is automatically "
|
||||
"resized as a 128x128px image, with aspect ratio preserved. "
|
||||
"Use this field in form views or some kanban views.")
|
||||
image_small = fields.Binary(
|
||||
"Small-sized image", attachment=True,
|
||||
help="Small-sized image of this provider. It is automatically "
|
||||
"resized as a 64x64px image, with aspect ratio preserved. "
|
||||
"Use this field anywhere a small image is required.")
|
||||
desc = fields.Html(string='Description', help="Description")
|
||||
company_id = fields.Many2one('res.company', 'Company', help="Company",
|
||||
default=lambda self: self.env.user.company_id)
|
||||
property_selection = fields.Selection([('empty', 'No Connection'),
|
||||
('asset', 'Assets'),
|
||||
('product', 'Products')],
|
||||
default='empty',
|
||||
string='Property From', help="Select the property")
|
||||
asset_true = fields.Boolean('Asset Exists', default=False)
|
||||
asset_id = fields.Many2one('account.asset', string="Assets", help="Assets")
|
||||
product_id = fields.Many2one('product.product', string='Product', help="Product")
|
||||
|
||||
|
||||
# def _compute_read_only(self):
|
||||
# """ Use this function to check weather the user has the permission to change the employee"""
|
||||
# res_user = self.env['res.users'].search([('id', '=', self._uid)])
|
||||
# print(res_user.has_group('hr.group_hr_user'))
|
||||
# if res_user.has_group('hr.group_hr_user'):
|
||||
# self.read_only = True
|
||||
# else:
|
||||
# self.read_only = False
|
||||
|
||||
@api.onchange('property_selection')
|
||||
def onchange_property_selection(self):
|
||||
if self.property_selection == 'asset':
|
||||
asset_obj = self.env['ir.module.module'].search([('name', '=', 'account_asset')])
|
||||
if asset_obj.state != 'installed':
|
||||
self.asset_true = False
|
||||
raise UserError(_('No asset module found. Kindly install the asset module.'))
|
||||
else:
|
||||
self.asset_true = True
|
||||
|
||||
@api.onchange('product_id')
|
||||
def onchange_product(self):
|
||||
self.name = self.product_id.name
|
||||
|
||||
|
||||
class HrReturnDate(models.TransientModel):
|
||||
"""Hr custody contract renewal wizard"""
|
||||
_name = 'wizard.return.date'
|
||||
_description = 'Hr Custody Name'
|
||||
|
||||
returned_date = fields.Date(string='Renewal Date', required=1)
|
||||
|
||||
# renewal date validation
|
||||
@api.constrains('returned_date')
|
||||
def validate_return_date(self):
|
||||
context = self._context
|
||||
custody_obj = self.env['hr.custody'].search([('id', '=', context.get('custody_id'))])
|
||||
if self.returned_date <= custody_obj.date_request:
|
||||
raise Warning('Please Give Valid Renewal Date')
|
||||
|
||||
def proceed(self):
|
||||
context = self._context
|
||||
custody_obj = self.env['hr.custody'].search([('id', '=', context.get('custody_id'))])
|
||||
custody_obj.write({'renew_return_date': True,
|
||||
'renew_date': self.returned_date,
|
||||
'state': 'to_approve'})
|
||||
94
hr_custody/models/hr_employee.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
|
||||
|
||||
class HrCustody(models.Model):
|
||||
_inherit = 'hr.employee'
|
||||
|
||||
custody_count = fields.Integer(compute='_custody_count', string='# Custody')
|
||||
equipment_count = fields.Integer(compute='_equipment_count', string='# Equipments')
|
||||
|
||||
# count of all custody contracts
|
||||
|
||||
def _custody_count(self):
|
||||
for each in self:
|
||||
custody_ids = self.env['hr.custody'].search([('employee', '=', each.id)])
|
||||
each.custody_count = len(custody_ids)
|
||||
|
||||
# count of all custody contracts that are in approved state
|
||||
|
||||
def _equipment_count(self):
|
||||
for each in self:
|
||||
equipment_obj = self.env['hr.custody'].search([('employee', '=', each.id), ('state', '=', 'approved')])
|
||||
equipment_ids = []
|
||||
for each1 in equipment_obj:
|
||||
if each1.custody_name.id not in equipment_ids:
|
||||
equipment_ids.append(each1.custody_name.id)
|
||||
each.equipment_count = len(equipment_ids)
|
||||
|
||||
# smart button action for returning the view of all custody contracts related to the current employee
|
||||
|
||||
def custody_view(self):
|
||||
for each1 in self:
|
||||
custody_obj = self.env['hr.custody'].search([('employee', '=', each1.id)])
|
||||
custody_ids = []
|
||||
for each in custody_obj:
|
||||
custody_ids.append(each.id)
|
||||
view_id = self.env.ref('hr_custody.hr_custody_form_view').id
|
||||
if custody_ids:
|
||||
if len(custody_ids) <= 1:
|
||||
value = {
|
||||
'view_mode': 'form',
|
||||
'res_model': 'hr.custody',
|
||||
'view_id': view_id,
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Custody'),
|
||||
'res_id': custody_ids and custody_ids[0]
|
||||
}
|
||||
else:
|
||||
value = {
|
||||
'domain': str([('id', 'in', custody_ids)]),
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'hr.custody',
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Custody'),
|
||||
'res_id': custody_ids
|
||||
}
|
||||
|
||||
return value
|
||||
|
||||
# smart button action for returning the view of all custody contracts that are in approved state,
|
||||
# related to the current employee
|
||||
|
||||
def equipment_view(self):
|
||||
for each1 in self:
|
||||
equipment_obj = self.env['hr.custody'].search([('employee', '=', each1.id), ('state', '=', 'approved')])
|
||||
equipment_ids = []
|
||||
for each in equipment_obj:
|
||||
if each.custody_name.id not in equipment_ids:
|
||||
equipment_ids.append(each.custody_name.id)
|
||||
view_id = self.env.ref('hr_custody.custody_custody_form_view').id
|
||||
if equipment_ids:
|
||||
if len(equipment_ids) <= 1:
|
||||
value = {
|
||||
'view_mode': 'form',
|
||||
'res_model': 'custody.property',
|
||||
'view_id': view_id,
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Equipments'),
|
||||
'res_id': equipment_ids and equipment_ids[0]
|
||||
}
|
||||
else:
|
||||
value = {
|
||||
'domain': str([('id', 'in', equipment_ids)]),
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'custody.property',
|
||||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Equipments'),
|
||||
'res_id': equipment_ids
|
||||
}
|
||||
|
||||
return value
|
||||
26
hr_custody/models/wizard_reason.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, fields, api, _
|
||||
|
||||
|
||||
class WizardReason(models.TransientModel):
|
||||
"""
|
||||
Hr custody contract refuse wizard.
|
||||
"""
|
||||
_name = 'wizard.reason'
|
||||
|
||||
def send_reason(self):
|
||||
context = self._context
|
||||
reject_obj = self.env[context.get('model_id')].search([('id', '=', context.get('reject_id'))])
|
||||
if 'renew' in context.keys():
|
||||
reject_obj.write({'state': 'approved',
|
||||
'renew_reject': True,
|
||||
'renew_rejected_reason': self.reason})
|
||||
else:
|
||||
if context.get('model_id') == 'hr.holidays':
|
||||
reject_obj.write({'rejected_reason': self.reason})
|
||||
reject_obj.action_refuse()
|
||||
else:
|
||||
reject_obj.write({'state': 'rejected',
|
||||
'rejected_reason': self.reason})
|
||||
|
||||
reason = fields.Text(string="Reason", help="Reason")
|
||||
3
hr_custody/reports/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import custody_report
|
||||
63
hr_custody/reports/custody_report.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, fields, tools
|
||||
|
||||
|
||||
class CustodyHistory(models.Model):
|
||||
_name = "report.custody"
|
||||
_description = "Custody Analysis"
|
||||
_auto = False
|
||||
|
||||
name = fields.Char(string='Code')
|
||||
date_request = fields.Date(string='Requested Date')
|
||||
employee = fields.Many2one('hr.employee', string='Employee')
|
||||
purpose = fields.Char(string='Reason')
|
||||
custody_name = fields.Many2one('custody.property', string='Property Name')
|
||||
return_date = fields.Date(string='Return Date')
|
||||
renew_date = fields.Date(string='Renewal Return Date')
|
||||
renew_return_date = fields.Boolean(string='Renewal Return Date')
|
||||
state = fields.Selection([('draft', 'Draft'), ('to_approve', 'Waiting For Approval'), ('approved', 'Approved'),
|
||||
('returned', 'Returned'), ('rejected', 'Refused')], string='Status')
|
||||
|
||||
_order = 'name desc'
|
||||
|
||||
def _select(self):
|
||||
select_str = """
|
||||
SELECT
|
||||
(select 1 ) AS nbr,
|
||||
t.id as id,
|
||||
t.name as name,
|
||||
t.date_request as date_request,
|
||||
t.employee as employee,
|
||||
t.purpose as purpose,
|
||||
t.custody_name as custody_name,
|
||||
t.return_date as return_date,
|
||||
t.renew_date as renew_date,
|
||||
t.renew_return_date as renew_return_date,
|
||||
t.state as state
|
||||
"""
|
||||
return select_str
|
||||
|
||||
def _group_by(self):
|
||||
group_by_str = """
|
||||
GROUP BY
|
||||
t.id,
|
||||
name,
|
||||
date_request,
|
||||
employee,
|
||||
purpose,
|
||||
custody_name,
|
||||
return_date,
|
||||
renew_date,
|
||||
renew_return_date,
|
||||
state
|
||||
"""
|
||||
return group_by_str
|
||||
|
||||
def init(self):
|
||||
tools.sql.drop_view_if_exists(self._cr, 'report_custody')
|
||||
self._cr.execute("""
|
||||
CREATE view report_custody as
|
||||
%s
|
||||
FROM hr_custody t
|
||||
%s
|
||||
""" % (self._select(), self._group_by()))
|
||||
30
hr_custody/reports/custody_report.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_report_custody" model="ir.ui.view">
|
||||
<field name="name">report.custody.pivot</field>
|
||||
<field name="model">report.custody</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Ticket Analysis" display_quantity="true" disable_linking="True">
|
||||
<field name="name" type="row"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_custody" model="ir.actions.act_window">
|
||||
<field name="name">Custody Analysis</field>
|
||||
<field name="res_model">report.custody</field>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="help">This report allows you to analyse all Custody Requests. </field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Report" id="menu_custody_report"
|
||||
groups="hr.group_hr_manager"
|
||||
parent="hr_custody_main_menu" sequence="1"/>
|
||||
|
||||
<menuitem name="Custody Analysis" action="action_report_custody" id="menu_custody_analysis"
|
||||
groups="hr.group_hr_manager"
|
||||
parent="menu_custody_report" sequence="1"/>
|
||||
</data>
|
||||
</odoo>
|
||||
35
hr_custody/security/custody_security.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
<record id="property_rule_custody" model="ir.rule">
|
||||
<field name="name">Custody Multi Company</field>
|
||||
<field name="model_id" ref="model_custody_property"/>
|
||||
<field eval="True" name="global"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
<record id="property_rule_custody_req" model="ir.rule">
|
||||
<field name="name">Custody Request Multi Company</field>
|
||||
<field name="model_id" ref="model_hr_custody"/>
|
||||
<field eval="True" name="global"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_custody_personal_rule_manager" model="ir.rule">
|
||||
<field name="name">Employee Resignation Manager</field>
|
||||
<field ref="hr_custody.model_hr_custody" name="model_id"/>
|
||||
<field name="domain_force">[('employee.user_id.id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- <record model="ir.ui.view" id="view_hr_custody_inherit_form">-->
|
||||
<!-- <field name="model">hr.custody</field>-->
|
||||
<!-- <field name="inherit_id" ref="hr_custody.hr_custody_form_view"/>-->
|
||||
<!-- <field name="groups_id" eval="[(6, 0, [ref('hr.group_hr_user')])]"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <field name="employee" position="attributes">-->
|
||||
<!-- <attribute name="readonly">False</attribute>-->
|
||||
<!-- </field>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
</odoo>
|
||||
13
hr_custody/security/ir.model.access.csv
Normal file
@@ -0,0 +1,13 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_custody_hr","hr.custody.hr","model_hr_custody","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_custody_hr_manager","hr.custody.user","model_hr_custody","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_custody_hr_employee","hr.custody.employee","model_hr_custody","base.group_user",1,1,1,0
|
||||
"access_hr_custody_hr1","hr.custody.hr1","model_custody_property","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_custody_hr_manager1","hr.custody.user1","model_custody_property","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_custody_hr_employee1","hr.custody.employee1","model_custody_property","base.group_user",1,0,0,0
|
||||
"access_hr_custody_hr2","hr.custody.hr2","model_wizard_return_date","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_custody_hr3","hr.custody.hr3","model_report_custody","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_custody_hr_manager2","hr.custody.user2","model_wizard_return_date","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_custody_hr_manager3","hr.custody.user3","model_report_custody","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_custody_hr_employee2","hr.custody.employee2","model_wizard_return_date","base.group_user",1,1,1,0
|
||||
|
||||
|
BIN
hr_custody/static/description/banner.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
hr_custody/static/description/custody_icon.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
hr_custody/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
hr_custody/static/description/images/1custody.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
hr_custody/static/description/images/2custody.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
hr_custody/static/description/images/appraisal_image.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
hr_custody/static/description/images/bio_image.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
hr_custody/static/description/images/checked.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
hr_custody/static/description/images/checked.psd
Normal file
BIN
hr_custody/static/description/images/core_image.gif
Normal file
|
After Width: | Height: | Size: 612 KiB |
BIN
hr_custody/static/description/images/custody.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
hr_custody/static/description/images/dash_image.gif
Normal file
|
After Width: | Height: | Size: 408 KiB |
BIN
hr_custody/static/description/images/openhrms.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
hr_custody/static/description/images/salary_image.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
hr_custody/static/description/images/shift_image.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
531
hr_custody/static/description/index.html
Normal file
@@ -0,0 +1,531 @@
|
||||
<div class="row"
|
||||
style="margin: 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4;text-align: center; margin: auto; display: flex;justify-content: center;">
|
||||
<a href="https://www.openhrms.com/" target="_blank"><img src="images/openhrms.png"
|
||||
style=" width: 293px; padding: 1rem 0rem; margin: auto"
|
||||
alt="cybrosys-logo"></a>
|
||||
</div>
|
||||
<div class="row"
|
||||
style="margin:75px 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4; padding-bottom: 30px;">
|
||||
<div class="col-md-7 col-sm-12 col-xs-12" style="padding: 0px">
|
||||
<div style=" margin: 0 0 0px;padding: 20px 0 10;font-size: 23px;line-height: 35px;font-weight: 400;color: #000;border-top: 1px solid rgba(255,255,255,0.1);border-bottom: 1px solid rgba(255,255,255,0.11);text-align: left;">
|
||||
<h1 style="font-size: 39px;font-weight: 600;margin: 0px !important;">Open HRMS Custody Management </h1>
|
||||
<h3 style="font-size: 21px;margin-top: 8px;position: relative;"> Manages Custody Handling Process </h3>
|
||||
</div>
|
||||
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">Key Highlights</h2>
|
||||
<ul style=" padding: 0 1px; list-style: none; ">
|
||||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png"
|
||||
style=" width: 22px; margin-right: 6px; "
|
||||
alt="check">
|
||||
Managing custody handling process.
|
||||
</li>
|
||||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png"
|
||||
style=" width: 22px; margin-right: 6px; "
|
||||
alt="check">
|
||||
Option to renewal.
|
||||
</li>
|
||||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png"
|
||||
style=" width: 22px; margin-right: 6px; "
|
||||
alt="check">
|
||||
Option to take reports.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-5 col-sm-12 col-xs-12"><img src="images/custody.png" class="img-responsive" alt=""></div>
|
||||
</div>
|
||||
<div>
|
||||
<section class="oe_container" style="padding: 1rem 0rem 1rem; background-color: #ffffff !important;">
|
||||
<div class="row py-4 px-3">
|
||||
<div class="w-100" style="padding-top:30px;padding-bottom:45px;border-radius: 10px;">
|
||||
<ul role="tablist" class="nav nav-pills justify-content-center" data-tabs="tabs" id="pills-tab"
|
||||
style="border: none;background: unset;">
|
||||
<li class="nav-item mr-1 mb-3"
|
||||
style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #00438b;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;">
|
||||
<a id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab"
|
||||
aria-controls="pills-home" aria-selected="true" class="nav-link active show"
|
||||
style="color: #fff;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;">Overview </a>
|
||||
</li>
|
||||
<li class="nav-item mr-1 mb-3"
|
||||
style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #00438b;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;">
|
||||
<a id="pills-home-tab" data-toggle="pill" href="#pills-features" role="tab"
|
||||
aria-controls="pills-home" aria-selected="true" class="nav-link "
|
||||
style="color: #fff;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;">Features </a>
|
||||
</li>
|
||||
<li class="nav-item mr-1 mb-3"
|
||||
style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #00438b;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;">
|
||||
<a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab"
|
||||
aria-controls="pills-profile" aria-selected="false"
|
||||
style="color: #fff;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;">Screenshots </a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content" id="pills-tabContent"
|
||||
style="padding-top: 30px; padding-bottom: 30px; padding: 30px;">
|
||||
<div class="px-3 pt-1 tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby="
|
||||
pills-home-tab">
|
||||
<!-- Overview-->
|
||||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Overview</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<h3 class="oe_slogan"
|
||||
style="text-align: center;font-size: 19px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 31px;font-weight: 400;letter-spacing: .5px;margin-bottom: 21px;">
|
||||
Blues over resource tracking? No more worries. OHRMS Custody Management system constitutes the ultimate solution for a transparent custody of company resources.
|
||||
</h3>
|
||||
</div>
|
||||
<div class="px-3 pt-1 tab-pane fade " id="pills-features" role="tabpanel" aria-labelledby="
|
||||
pills-home-tab">
|
||||
<!-- feature tab-->
|
||||
<h2 style="font-weight: 600;text-align: center;width: 100%;"> Open HRMS Custody Management </h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<ul>
|
||||
<li class="mb8"
|
||||
style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
|
||||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">
|
||||
Managing custody handling process.
|
||||
</li>
|
||||
<li class="mb8"
|
||||
style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
|
||||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">
|
||||
Option to renewal.
|
||||
</li>
|
||||
<li class="mb8"
|
||||
style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
|
||||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">
|
||||
Option to take reports.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Screenshot tab-->
|
||||
<div class="px-3 tab-pane fade" id="pills-profile" role="tabpanel"
|
||||
aria-labelledby="pills-profile-tab">
|
||||
<div class="tab-pane">
|
||||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Screenshots</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<div>
|
||||
<section class="oe_container">
|
||||
<div id="demo" class="row carousel slide mb32" data-ride="carousel">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active" style="min-height: 0px;">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
|
||||
style="float: left;">
|
||||
<h3 class="alert"
|
||||
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;">
|
||||
<img src="images/checked.png"
|
||||
style=" width: 22px; margin-right: 6px; " alt="check">
|
||||
Custody Request
|
||||
</h3>
|
||||
<p> Create a Custody Request and send for Approval. </p>
|
||||
<div style=""><img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/1custody.png"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item" style="min-height: 0px;">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
|
||||
style="float: left;">
|
||||
<h3 class="alert"
|
||||
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;">
|
||||
<img src="images/checked.png"
|
||||
style=" width: 22px; margin-right: 6px; " alt="check">
|
||||
Property
|
||||
</h3>
|
||||
<p> Create a Property of Company. </p>
|
||||
<div style=""><img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/2custody.png"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next" href="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- faq tab-->
|
||||
<div class="px-2 px-lg-4 pt-3 tab-pane fade" id="pills-contact"
|
||||
role="tabpanel"
|
||||
aria-labelledby="pills-contact-tab">
|
||||
<ul class="list-unstyled">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
|
||||
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Suggested Products</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<div id="demo1" class="row carousel slide" data-ride="carousel">
|
||||
<!-- The slideshow -->
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active" style="min-height: 0px;">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/ohrms_core/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/core_image.gif">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/hrms_dashboard/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/dash_image.gif">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/oh_hr_zk_attendance/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/bio_image.png">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item" style="min-height: 0px;">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/oh_appraisal/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/appraisal_image.png">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/hr_employee_shift/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/shift_image.png">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a
|
||||
href="https://apps.odoo.com/apps/modules/13.0/ohrms_salary_advance/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="images/salary_image.png">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Left and right controls -->
|
||||
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
|
||||
style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i
|
||||
class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next"
|
||||
href="#demo1"
|
||||
data-slide="next"
|
||||
style="right:-25px;width: 35px;color: #000;">
|
||||
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
|
||||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Service</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<div class="row" style=" display: flex; justify-content: center; flex-wrap: wrap;width: 100%; ">
|
||||
<!-- <div style="display:flex;padding-top: 20px;justify-content: space-between;"> -->
|
||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"><a
|
||||
href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-customization.png"
|
||||
style="width: 100%;border-radius: 100%;"/> </a></div>
|
||||
<h3 class="oe_slogan"
|
||||
style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
|
||||
<a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Odoo Customization </a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"><a
|
||||
href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-erp-implementation.png"
|
||||
style="width: 100%;border-radius: 100%;"/> </a></div>
|
||||
<h3 class="oe_slogan"
|
||||
style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
|
||||
<a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Odoo Implementation </a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"><a
|
||||
href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-erp-integration.png"
|
||||
style="width: 100%;border-radius: 100%;"/> </a></div>
|
||||
<h3 class="oe_slogan"
|
||||
style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
|
||||
<a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Odoo Integration </a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"><a
|
||||
href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-erp-support.png"
|
||||
style="width: 100%;border-radius: 100%;"/> </a></div>
|
||||
<h3 class="oe_slogan"
|
||||
style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
|
||||
<a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Odoo Support</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"><a
|
||||
href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/hire-odoo-developer.png"
|
||||
style="width: 100%;border-radius: 100%;"/> </a></div>
|
||||
<h3 class="oe_slogan"
|
||||
style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
|
||||
<a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Hire Odoo Developers</a>
|
||||
</h3>
|
||||
</a>
|
||||
</div>
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
|
||||
<div class="row" style="margin: 0">
|
||||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Industries</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<!-- <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> -->
|
||||
<div class="row" style="width: 100%">
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
|
||||
Trading </a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
|
||||
Easily procure and sell your products.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/"
|
||||
target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-2.png"
|
||||
alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;" style=" margin-bottom: 10px; ">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/"
|
||||
target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
|
||||
Manufacturing</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
|
||||
Plan, track and schedule your operations.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank">
|
||||
<img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
|
||||
Restaurant</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
|
||||
Run your bar or restaurant methodical.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
|
||||
POS</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
|
||||
Easy configuring and convivial selling.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
E-commerce & Website</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
|
||||
Mobile friendly, awe-inspiring product pages.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank">
|
||||
<img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Hotel Management</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
|
||||
An all-inclusive hotel management application.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank">
|
||||
<img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Education</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
|
||||
A Collaborative platform for educational management.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
|
||||
<div>
|
||||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> <img
|
||||
src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry"
|
||||
style=" border-radius: 100%;width:100%;"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:70%;float:left;">
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
|
||||
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"
|
||||
style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
|
||||
Service Management</a>
|
||||
</h3>
|
||||
<h3 class="oe_slogan"
|
||||
style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
|
||||
Keep track of services and invoice accordingly.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container" style="padding: 0% 0% 6% 0%;">
|
||||
<center>
|
||||
<div class="col-md-12" style="margin: auto !important;
|
||||
width: 70%;
|
||||
padding: 30px;">
|
||||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Need Any Help?</h2>
|
||||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
|
||||
<h4 style="font-size:16px;"> If you have anything to share with us based on your use of this module, please
|
||||
let us know. We are ready to offer our support.
|
||||
</h4>
|
||||
<div class="col-md-6" style="float:left; padding:20px;">
|
||||
<h4><i class="fa fa-envelope"></i>Email us </h4>
|
||||
<p>odoo@cybrosys.com / info@cybrosys.com</p>
|
||||
</div>
|
||||
<div class="col-md-6" style="float:left; padding:20px;">
|
||||
<h4><i class="fa fa-phone"></i> Contact Us </h4>
|
||||
<a href="https://www.cybrosys.com/contact/" target="_blank"> www.cybrosys.com</a>
|
||||
</div>
|
||||
</div>
|
||||
Suggested Products
|
||||
</center>
|
||||
</section>
|
||||
<section class="oe_container" style="padding: 0% 0% 6% 0%;">
|
||||
<div class="oe_slogan" style="margin-bottom: 0px;">
|
||||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; ">
|
||||
</div>
|
||||
<br>
|
||||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;"
|
||||
class="center-block">
|
||||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "><a href="https://twitter.com/cybrosys"
|
||||
target="_blank"><i
|
||||
class="fa fa-2x fa-twitter"
|
||||
style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
|
||||
</td>
|
||||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i
|
||||
class="fa fa-2x fa-linkedin"
|
||||
style="color:white;background: #31a3d6;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
|
||||
</td>
|
||||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook"
|
||||
style="color:white;background: #3b5998;width:35px; height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
|
||||
</td>
|
||||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest"
|
||||
style="color:white;background: #ac0f18;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
|
||||
</td>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
BIN
hr_custody/static/images/hr_custody_employee.jpg
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
243
hr_custody/views/custody_view.xml
Normal file
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="seq_hr_custody_seq" model="ir.sequence">
|
||||
<field name="name">Custody Code</field>
|
||||
<field name="code">hr.custody</field>
|
||||
<field name="prefix">CR</field>
|
||||
<field eval="4" name="padding"/>
|
||||
<field eval="False" name="company_id"/>
|
||||
</record>
|
||||
|
||||
<record model='ir.ui.view' id='wizard_return_date_form'>
|
||||
<field name="name">wizard.return.date.form</field>
|
||||
<field name="model">wizard.return.date</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Renewal Request">
|
||||
<group>
|
||||
<group>
|
||||
<field name="returned_date"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="proceed" string="Proceed" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model='ir.ui.view' id='custody_custody_form_view'>
|
||||
<field name="name">custody.property.form</field>
|
||||
<field name="model">custody.property</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Equipments">
|
||||
<sheet>
|
||||
<field name="image" widget='image' class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="Name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="property_selection" widget="radio"/>
|
||||
<field name="asset_true" invisible="1"/>
|
||||
<field name="asset_id" attrs="{'invisible': [('asset_true', '=', False)]}"/>
|
||||
<field name="product_id"
|
||||
attrs="{'invisible': [('property_selection', '!=', 'product')]}"/>
|
||||
<field name="company_id" options="{'no_create': True}"
|
||||
groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="desc" string="Description">
|
||||
<field name="desc"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model='ir.actions.act_window' id='wizard_return_date_act'>
|
||||
<field name="name">Custody Request</field>
|
||||
<field name="res_model">wizard.return.date</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="wizard_return_date_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_custody_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.custody.form</field>
|
||||
<field name="model">hr.custody</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Custody">
|
||||
<header>
|
||||
<button string="Send For Approval" type="object" name="sent"
|
||||
class="oe_highlight"
|
||||
attrs="{'invisible': [('state','not in',('draft'))]}"/>
|
||||
<button string="Approve" groups="hr.group_hr_manager" type="object" name="approve"
|
||||
class="oe_highlight"
|
||||
attrs="{'invisible': ['|',('state','not in',('to_approve')),
|
||||
('renew_return_date','=',True)]}"/>
|
||||
<button string="Renewal Approval" groups="hr.group_hr_manager" type="object"
|
||||
name="renew_approve"
|
||||
class="oe_highlight"
|
||||
attrs="{'invisible': ['|',('state','not in',('to_approve')),
|
||||
('renew_return_date','=',False)]}"/>
|
||||
<button string="Refuse" groups="hr.group_hr_manager" type="action"
|
||||
name="%(hr_custody.wizard_reason_act)d"
|
||||
attrs="{'invisible': ['|',('state','not in',('to_approve')),
|
||||
('renew_return_date','=',True)]}" class="btn-primary"
|
||||
context="{'reject_id':id,'model_id':'hr.custody'}"/>
|
||||
<button class="btn-primary" name="%(hr_custody.wizard_reason_act)d" string="Refuse"
|
||||
groups="hr.group_hr_manager" type="action"
|
||||
attrs="{'invisible': ['|',('state','not in',('to_approve')),
|
||||
('renew_return_date','=',False)]}"
|
||||
context="{'reject_id':id,'model_id':'hr.custody','renew': 'renew'}"/>
|
||||
<button string="Set to Draft" type="object" name="set_to_draft"
|
||||
attrs="{'invisible': [('state','not in',('rejected'))]}"/>
|
||||
<button string="Return" type="object" name="set_to_return" groups="hr.group_hr_manager"
|
||||
attrs="{'invisible': [('state','not in',('approved'))]}"/>
|
||||
<button string="Send Mail" type="object" name="send_mail" groups="hr.group_hr_manager"
|
||||
attrs="{'invisible': ['|',('mail_send', '=', False),('state','not in',('approved'))]}"/>
|
||||
<button string="Send Mail" type="object" class="oe_highlight" name="send_mail"
|
||||
groups="hr.group_hr_manager"
|
||||
attrs="{'invisible': ['|',('mail_send', '=', True),('state','not in',('approved'))]}"/>
|
||||
<button string="Renew" type="action" name="%(wizard_return_date_act)d"
|
||||
context="{'custody_id':id}" class="oe_highlight"
|
||||
attrs="{'invisible': ['|',('state','not in',('approved')),
|
||||
('renew_return_date','=',True)]}"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,to_approve,approved,returned"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<h1>
|
||||
<field name="name" readonly="1" nolabel="1"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="read_only" invisible="1"/>
|
||||
<field name="employee" attrs="{'readonly': [('read_only','=',False)]}"/>
|
||||
<field name="custody_name" options="{'no_open':True,'no_create':True}"
|
||||
domain="[('company_id','child_of',[company_id])]"/>
|
||||
<field name="renew_return_date" invisible="1"/>
|
||||
<field name="renew_reject" invisible="1"/>
|
||||
<field name="mail_send" invisible="1"/>
|
||||
<field name="purpose"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_request"/>
|
||||
<field name="return_date" attrs="{'invisible': [('renew_return_date','=',True),
|
||||
('renew_date','not in',[None,False]),('renew_reject','=',False)]}"/>
|
||||
<field name="renew_date" attrs="{'invisible': ['|',('renew_return_date','=',False),
|
||||
('state','!=','to_approve')]}"/>
|
||||
<field name="rejected_reason" attrs="{'invisible': [('state','not in',('rejected'))]}"/>
|
||||
<field name="renew_rejected_reason"
|
||||
attrs="{'invisible': ['|',('renew_reject','=',False),('state','not in',('approved'))]}"/>
|
||||
<field name="company_id" options="{'no_create': True}"
|
||||
groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Notes">
|
||||
<field name="notes"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_custody_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr.custody.tree</field>
|
||||
<field name="model">hr.custody</field>
|
||||
<field name="arch" type="xml">
|
||||
<!-- <tree decoration-info="state == 'draft'" colors="red:current_date > return_date;grey:state == 'rejected';green:state == 'approved';-->
|
||||
<!-- black:state == 'to_approve';grey:state == 'returned';">-->
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="employee"/>
|
||||
<field name="custody_name"/>
|
||||
<field name="purpose"/>
|
||||
<field name="date_request"/>
|
||||
<field name="return_date"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_property_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr_property_tree_view.tree</field>
|
||||
<field name="model">custody.property</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_custody_search_view" model="ir.ui.view">
|
||||
<field name="name">hr.custody.search</field>
|
||||
<field name="model">hr.custody</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Custody">
|
||||
<field name="name"/>
|
||||
<field name="employee"/>
|
||||
<field name="custody_name"/>
|
||||
<field name="purpose"/>
|
||||
<field name="date_request"/>
|
||||
<field name="return_date"/>
|
||||
<field name="state"/>
|
||||
<separator/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Status" name="status" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Employee" name="employee" domain="[]" context="{'group_by':'employee'}"/>
|
||||
<filter string="Custody Name" name="custody" domain="[]" context="{'group_by':'custody_name'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_custody" model="ir.actions.act_window">
|
||||
<field name="name">Custody</field>
|
||||
<field name="res_model">hr.custody</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="hr_custody_search_view"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to Create a New Record.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_property" model="ir.actions.act_window">
|
||||
<field name="name">Property</field>
|
||||
<field name="res_model">custody.property</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to Create a New Record.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="hr_custody_main_menu"
|
||||
web_icon="hr_custody,static/description/custody_icon.png"
|
||||
name="Custody" sequence="20"/>
|
||||
|
||||
<menuitem id="hr_custody_menu" parent="hr_custody_main_menu"
|
||||
name="Custody Management" sequence="20"/>
|
||||
|
||||
<menuitem action="action_hr_custody" id="hr_custody_menu" parent="hr_custody.hr_custody_main_menu"
|
||||
name="Custody Request" sequence="1"/>
|
||||
|
||||
<menuitem action="action_hr_property" id="hr_property_menu" parent="hr_custody.hr_custody_main_menu"
|
||||
name="Property" sequence="5" groups="hr.group_hr_manager"/>
|
||||
</data>
|
||||
</odoo>
|
||||
15
hr_custody/views/hr_custody_notification.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model="ir.cron" id="hr_custody_data_reminders">
|
||||
<field name="name">HR Custody Return Notification</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
<field name="model_id" ref="model_hr_custody"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.mail_reminder()</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
20
hr_custody/views/hr_employee_view.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="custody_hr_employee_inherit_form_view">
|
||||
<field name="name">hr.employee.form.inherit.view</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="inherit_id" ref="hr.view_employee_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<div class="oe_button_box" position="inside">
|
||||
<button class="oe_stat_button" name="custody_view" type="object" icon="fa-list-ol">
|
||||
<field string="Custody" name="custody_count" widget="statinfo"/>
|
||||
</button>
|
||||
<button class="oe_stat_button" name="equipment_view" type="object" icon="fa-tablet">
|
||||
<field string="Equipments" name="equipment_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
24
hr_custody/views/notification_mail.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="custody_email_notification_template" model="mail.template">
|
||||
<field name="name">Custody e-mail template</field>
|
||||
<field name="email_from">${object.company_id and object.company_id.email or ''}</field>
|
||||
<field name="subject">Notification to return company asset-${object.custody_name.name}</field>
|
||||
<field name="email_to">${object.email|safe}</field>
|
||||
<field name="lang">${object.lang}</field>
|
||||
<field name="model_id" ref="hr_custody.model_hr_custody"/>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
<field name="body_html">
|
||||
<![CDATA[
|
||||
<p>Dear ${(object.employee.name)},<br/><br/>
|
||||
You are in possession of the company asset
|
||||
<strong>"${(object.custody_name.name)}"</strong>
|
||||
since <strong>${(object.return_date)}.</strong><br/><br/>
|
||||
Please kindly return the property as soon as possible.<br/><br/></p>
|
||||
Regards,<br/><br/>
|
||||
${(object.company_id.name)}]]>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
29
hr_custody/views/wizard_reason_view.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model='ir.ui.view' id='wizard_reason_form'>
|
||||
<field name="name">wizard.reason.form</field>
|
||||
<field name="model">wizard.reason</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Update Reason">
|
||||
<group>
|
||||
<field name="reason" required="True"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="send_reason" string="Proceed" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model='ir.actions.act_window' id='wizard_reason_act'>
|
||||
<field name="name">Update Reason</field>
|
||||
<field name="res_model">wizard.reason</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="wizard_reason_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||