Browse Source

Apr 06: [ADD] Initial Commit 'employee_purchase_requisition'

pull/254/merge
RisvanaCybro 1 year ago
parent
commit
3c378dbde2
  1. 53
      employee_purchase_requisition/README.rst
  2. 22
      employee_purchase_requisition/__init__.py
  3. 57
      employee_purchase_requisition/__manifest__.py
  4. 16
      employee_purchase_requisition/data/ir_actions_server_data.xml
  5. 15
      employee_purchase_requisition/data/ir_sequence_data.xml
  6. 7
      employee_purchase_requisition/doc/RELEASE_NOTES.md
  7. 27
      employee_purchase_requisition/models/__init__.py
  8. 234
      employee_purchase_requisition/models/employee_purchase_requistion.py
  9. 31
      employee_purchase_requisition/models/hr_department.py
  10. 31
      employee_purchase_requisition/models/hr_employee.py
  11. 30
      employee_purchase_requisition/models/purchase_order.py
  12. 72
      employee_purchase_requisition/models/requisition_order.py
  13. 30
      employee_purchase_requisition/models/stock_picking.py
  14. 11
      employee_purchase_requisition/report/employee_purchase_requisition_reports.xml
  15. 208
      employee_purchase_requisition/report/employee_purchase_requisition_templates.xml
  16. 59
      employee_purchase_requisition/security/employee_purchase_requisition_security.xml
  17. 5
      employee_purchase_requisition/security/ir.model.access.csv
  18. BIN
      employee_purchase_requisition/static/description/assets/icons/check.png
  19. BIN
      employee_purchase_requisition/static/description/assets/icons/chevron.png
  20. BIN
      employee_purchase_requisition/static/description/assets/icons/cogs.png
  21. BIN
      employee_purchase_requisition/static/description/assets/icons/consultation.png
  22. BIN
      employee_purchase_requisition/static/description/assets/icons/ecom-black.png
  23. BIN
      employee_purchase_requisition/static/description/assets/icons/education-black.png
  24. BIN
      employee_purchase_requisition/static/description/assets/icons/hotel-black.png
  25. BIN
      employee_purchase_requisition/static/description/assets/icons/license.png
  26. BIN
      employee_purchase_requisition/static/description/assets/icons/lifebuoy.png
  27. BIN
      employee_purchase_requisition/static/description/assets/icons/manufacturing-black.png
  28. BIN
      employee_purchase_requisition/static/description/assets/icons/pos-black.png
  29. BIN
      employee_purchase_requisition/static/description/assets/icons/puzzle.png
  30. BIN
      employee_purchase_requisition/static/description/assets/icons/restaurant-black.png
  31. BIN
      employee_purchase_requisition/static/description/assets/icons/service-black.png
  32. BIN
      employee_purchase_requisition/static/description/assets/icons/trading-black.png
  33. BIN
      employee_purchase_requisition/static/description/assets/icons/training.png
  34. BIN
      employee_purchase_requisition/static/description/assets/icons/update.png
  35. BIN
      employee_purchase_requisition/static/description/assets/icons/user.png
  36. BIN
      employee_purchase_requisition/static/description/assets/icons/wrench.png
  37. BIN
      employee_purchase_requisition/static/description/assets/misc/categories.png
  38. BIN
      employee_purchase_requisition/static/description/assets/misc/check-box.png
  39. BIN
      employee_purchase_requisition/static/description/assets/misc/compass.png
  40. BIN
      employee_purchase_requisition/static/description/assets/misc/corporate.png
  41. BIN
      employee_purchase_requisition/static/description/assets/misc/customer-support.png
  42. BIN
      employee_purchase_requisition/static/description/assets/misc/cybrosys-logo.png
  43. BIN
      employee_purchase_requisition/static/description/assets/misc/features.png
  44. BIN
      employee_purchase_requisition/static/description/assets/misc/logo.png
  45. BIN
      employee_purchase_requisition/static/description/assets/misc/pictures.png
  46. BIN
      employee_purchase_requisition/static/description/assets/misc/pie-chart.png
  47. BIN
      employee_purchase_requisition/static/description/assets/misc/right-arrow.png
  48. BIN
      employee_purchase_requisition/static/description/assets/misc/star.png
  49. BIN
      employee_purchase_requisition/static/description/assets/misc/support.png
  50. BIN
      employee_purchase_requisition/static/description/assets/misc/whatsapp.png
  51. BIN
      employee_purchase_requisition/static/description/assets/modules/1.png
  52. BIN
      employee_purchase_requisition/static/description/assets/modules/2.png
  53. BIN
      employee_purchase_requisition/static/description/assets/modules/3.png
  54. BIN
      employee_purchase_requisition/static/description/assets/modules/4.png
  55. BIN
      employee_purchase_requisition/static/description/assets/modules/5.png
  56. BIN
      employee_purchase_requisition/static/description/assets/modules/6.png
  57. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_action_print_report_19.png
  58. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_approved_13.png
  59. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_approved_14.png
  60. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_department_location_05.png
  61. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_employee_location_04.png
  62. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_internal_trasnfer_17.png
  63. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_new_state_07.png
  64. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_pdf_report_20.png
  65. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_created_15.png
  66. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_order_16.png
  67. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_requisition_06.png
  68. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_received_18.png
  69. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_department_head_02.png
  70. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_manager_01.png
  71. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_requisition_user_03.png
  72. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_08.png
  73. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_09.png
  74. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_10.png
  75. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_head_approval_11.png
  76. BIN
      employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_head_approval_12.png
  77. BIN
      employee_purchase_requisition/static/description/assets/screenshots/hero.gif
  78. BIN
      employee_purchase_requisition/static/description/banner.png
  79. BIN
      employee_purchase_requisition/static/description/icon.png
  80. 798
      employee_purchase_requisition/static/description/index.html
  81. 12
      employee_purchase_requisition/views/employee_purchase_requisition_menu_items.xml
  82. 247
      employee_purchase_requisition/views/employee_purchase_requisition_views.xml
  83. 15
      employee_purchase_requisition/views/hr_department_views.xml
  84. 24
      employee_purchase_requisition/views/hr_employee_views.xml
  85. 15
      employee_purchase_requisition/views/purchase_order_views.xml
  86. 22
      employee_purchase_requisition/views/requisition_order_views.xml
  87. 18
      employee_purchase_requisition/views/stock_picking_views.xml

53
employee_purchase_requisition/README.rst

@ -0,0 +1,53 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Employee Purchase Requisition
=============================
This app allows an employee to submit a request to the purchasing department or management for the purchase of goods or services.
Configuration
=============
- Need to set the Employee Purchase Requisition from the user configuration
Installation
============
- www.odoo.com/documentation/15.0/setup/install.html
- Install our custom addon
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL v3)
(https://www.odoo.com/documentation/16.0/legal/licenses.html)
Credits
-------
* Developers:
(V16) Cybrosys Techno Solutions,
(V15) Shonima,
Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

22
employee_purchase_requisition/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import models

57
employee_purchase_requisition/__manifest__.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Shonima(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Employee Purchase Requisition',
'version': '15.0.1.0.0',
'category': 'Purchases',
'summary': 'This app allows an employee to submit a request to the '
'purchasing department or management for the purchase of goods '
'or services.',
'description': 'This app allows employees to request purchases from the '
'company. They make requests for goods or services through '
'the purchasing department or management.',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['hr', 'stock', 'purchase'],
'data': [
'security/employee_purchase_requisition_security.xml',
'security/ir.model.access.csv',
'data/ir_sequence_data.xml',
'data/ir_actions_server_data.xml',
'views/employee_purchase_requisition_views.xml',
'views/employee_purchase_requisition_menu_items.xml',
'views/hr_employee_views.xml',
'views/hr_department_views.xml',
'views/purchase_order_views.xml',
'views/stock_picking_views.xml',
'views/requisition_order_views.xml',
'report/employee_purchase_requisition_templates.xml',
'report/employee_purchase_requisition_reports.xml',
],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': True,
}

16
employee_purchase_requisition/data/ir_actions_server_data.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- action print report-->
<record id="print_requisition_order_pdf" model="ir.actions.server">
<field name="name">Print Requisition Order</field>
<field name="model_id"
ref="employee_purchase_requisition.model_employee_purchase_requisition"/>
<field name="binding_model_id"
ref="employee_purchase_requisition.model_employee_purchase_requisition"/>
<field name="binding_view_types">form</field>
<field name="state">code</field>
<field name="code">action = records.action_print_report()</field>
</record>
</data>
</odoo>

15
employee_purchase_requisition/data/ir_sequence_data.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<!-- sequence for employee purchase requisition -->
<record id="sequence_purchase_requisition" model="ir.sequence">
<field name="name">Employee Purchase Requisition</field>
<field name="code">employee.purchase.requisition</field>
<field name="prefix">EPR</field>
<field name="padding">5</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="False" name="company_id"/>
</record>
</data>
</odoo>

7
employee_purchase_requisition/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <employee_purchase_requisition>
#### 29.02.2024
#### Version 15.0.1.0.0
#### ADD
- Initial commit for Employee Purchase Requisition

27
employee_purchase_requisition/models/__init__.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import employee_purchase_requistion
from . import hr_department
from . import hr_employee
from . import purchase_order
from . import requisition_order
from . import stock_picking

234
employee_purchase_requisition/models/employee_purchase_requistion.py

@ -0,0 +1,234 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class EmployeePurchaseRequisition(models.Model):
""" Model for storing purchase requisition """
_name = 'employee.purchase.requisition'
_description = 'Purchase Requisition'
_inherit = "mail.thread", "mail.activity.mixin"
name = fields.Char(string="Reference No", readonly=True,
help="Name of the purchase requisition")
employee_id = fields.Many2one('hr.employee', string='Employee',
required=True,
help='Employee of the purchase requisition')
dept_id = fields.Many2one('hr.department', string='Department',
related='employee_id.department_id', store=True,
help='Department of the purchase requisition')
user_id = fields.Many2one('res.users', string='Requisition Responsible',
required=True,
help='Requisition responsible user')
requisition_date = fields.Date(string="Requisition Date",
default=lambda self: fields.Date.today(),
help='Date of Requisition')
receive_date = fields.Date(string="Received Date", readonly=True,
help='Receive Date')
requisition_deadline = fields.Date(string="Requisition Deadline",
help="End date of Purchase requisition")
company_id = fields.Many2one('res.company', string='Company',
default=lambda self: self.env.company,
help='Company of the Purchase requisition '
'record')
requisition_order_ids = fields.One2many('requisition.order',
'requisition_product_id',
required=True,
string='Purchase Order',
help='The requested purchase '
'orders by the employee')
confirm_id = fields.Many2one('res.users', string='Confirmed By',
default=lambda self: self.env.uid,
readonly=True,
help='User who Confirmed the requisition.')
manager_id = fields.Many2one('res.users', string='Department Manager',
readonly=True, help='Department Manager')
requisition_head_id = fields.Many2one('res.users', string='Approved By',
readonly=True,
help='User who approved the '
'requisition.')
rejected_user_id = fields.Many2one('res.users', string='Rejected By',
readonly=True,
help='user who rejected the requisition')
confirmed_date = fields.Date(string='Confirmed Date', readonly=True,
help='Date of Requisition Confirmation')
department_approval_date = fields.Date(string='Department Approval Date',
readonly=True,
help='Department Approval Date')
approval_date = fields.Date(string='Approved Date', readonly=True,
help='Requisition Approval Date')
reject_date = fields.Date(string='Rejection Date', readonly=True,
help='Requisition Rejected Date')
source_location_id = fields.Many2one('stock.location',
string='Source Location',
help='Source location of requisition.')
destination_location_id = fields.Many2one('stock.location',
string="Destination Location",
help='Destination location of '
'requisition.')
delivery_type_id = fields.Many2one('stock.picking.type',
string='Delivery To',
help='Type of Delivery.')
internal_picking_id = fields.Many2one('stock.picking.type',
string="Internal Picking")
requisition_description = fields.Text(string="Reason For Requisition",
help='Reason for the requisition')
purchase_count = fields.Integer(string='Purchase Count',
help='Purchase Count',
compute='_compute_purchase_count')
internal_transfer_count = fields.Integer(string='Internal Transfer count',
help='Internal Transfer count',
compute='_compute_internal_transfer_count')
state = fields.Selection(
[('new', 'New'),
('waiting_department_approval', 'Waiting Department Approval'),
('waiting_head_approval', 'Waiting Head Approval'),
('approved', 'Approved'),
('purchase_order_created', 'Purchase Order Created'),
('received', 'Received'),
('cancelled', 'Cancelled')],
default='new', copy=False, tracking=True, string='state',
help='State of the purchase requisition')
@api.model
def create(self, vals):
"""generate purchase requisition sequence"""
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code(
'employee.purchase.requisition') or 'New'
result = super(EmployeePurchaseRequisition, self).create(vals)
return result
def action_confirm_requisition(self):
"""confirm purchase requisition"""
self.source_location_id = self.employee_id.department_id.department_location_id.id
self.destination_location_id = self.employee_id.employee_location_id.id
self.delivery_type_id = self.source_location_id.warehouse_id.in_type_id.id
self.internal_picking_id = self.source_location_id.warehouse_id.int_type_id.id
self.write({'state': 'waiting_department_approval'})
self.confirm_id = self.env.uid
self.confirmed_date = fields.Date.today()
def action_department_approval(self):
"""approval from department"""
self.write({'state': 'waiting_head_approval'})
self.manager_id = self.env.uid
self.department_approval_date = fields.Date.today()
def action_department_cancel(self):
"""cancellation from department """
self.write({'state': 'cancelled'})
self.rejected_user_id = self.env.uid
self.reject_date = fields.Date.today()
def action_head_approval(self):
"""approval from department head"""
self.write({'state': 'approved'})
self.requisition_head_id = self.env.uid
self.approval_date = fields.Date.today()
def action_head_cancel(self):
"""cancellation from department head"""
self.write({'state': 'cancelled'})
self.rejected_user_id = self.env.uid
self.reject_date = fields.Date.today()
def action_create_purchase_order(self):
"""create purchase order and internal transfer"""
for rec in self.requisition_order_ids:
if rec.requisition_type == 'internal_transfer':
self.env['stock.picking'].create({
'location_id': self.source_location_id.id,
'location_dest_id': self.employee_id.employee_location_id.id,
'picking_type_id': self.internal_picking_id.id,
'requisition_order': self.name,
'move_ids_without_package': [(0, 0, {
'name': rec.product_id.name,
'product_id': rec.product_id.id,
'product_uom': rec.product_id.uom_id,
'product_uom_qty': rec.quantity,
'location_id': self.source_location_id.id,
'location_dest_id': self.employee_id.employee_location_id.id,
})]
})
else:
self.env['purchase.order'].create({
'partner_id': rec.partner_id.id,
'requisition_order': self.name,
"order_line": [(0, 0, {
'product_id': rec.product_id.id,
'product_qty': rec.quantity,
})]})
self.write({'state': 'purchase_order_created'})
def _compute_internal_transfer_count(self):
"""Method _compute_internal_transfer_count to compute value to the field
internal_transfer_count"""
for rec in self:
rec.internal_transfer_count = self.env[
'stock.picking'].search_count([
('requisition_order', '=', rec.name)])
def _compute_purchase_count(self):
"""Method _compute_purchase_count to compute value to the field
purchase_count"""
for rec in self:
rec.purchase_count = self.env['purchase.order'].search_count([
('requisition_order', '=', rec.name)])
def action_receive(self):
"""receive purchase requisition"""
self.write({'state': 'received'})
self.receive_date = fields.Date.today()
def get_purchase_order(self):
"""purchase order smart button view"""
self.ensure_one()
return {
'type': 'ir.actions.act_window',
'name': 'Purchase Order',
'view_mode': 'tree,form',
'res_model': 'purchase.order',
'domain': [('requisition_order', '=', self.name)],
}
def get_internal_transfer(self):
"""internal transfer smart tab view"""
self.ensure_one()
return {
'type': 'ir.actions.act_window',
'name': 'Internal Transfers',
'view_mode': 'tree,form',
'res_model': 'stock.picking',
'domain': [('requisition_order', '=', self.name)],
}
def action_print_report(self):
"""print purchase requisition report"""
data = {
'employee': self.employee_id.name,
'records': self.read(),
'order_ids': self.requisition_order_ids.read(),
}
return self.env.ref(
'employee_purchase_requisition.action_report_purchase_requisition').report_action(
self, data=data)

31
employee_purchase_requisition/models/hr_department.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class Department(models.Model):
""" Inherit hr.department model"""
_inherit = 'hr.department'
department_location_id = fields.Many2one('stock.location',
string='Destination Location',
help='Department location')

31
employee_purchase_requisition/models/hr_employee.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class HrEmployee(models.Model):
""" inherit hr.employee model"""
_inherit = 'hr.employee'
employee_location_id = fields.Many2one('stock.location',
string="Destination Location",
help='Employee Destination location')

30
employee_purchase_requisition/models/purchase_order.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class PurchaseOrder(models.Model):
""" inherit purchase.order model """
_inherit = 'purchase.order'
requisition_order = fields.Char(string='Requisition Order',
help='Related Requisition Order')

72
employee_purchase_requisition/models/requisition_order.py

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class RequisitionProducts(models.Model):
_name = 'requisition.order'
_description = 'Requisition order'
requisition_product_id = fields.Many2one(
'employee.purchase.requisition', help='Product for the requisition',
string='Requisition Product')
state = fields.Selection(string='State',
related='requisition_product_id.state',
help='State for the requisition order')
requisition_type = fields.Selection(
string='Requisition Type',
selection=[
('purchase_order', 'Purchase Order'),
('internal_transfer', 'Internal Transfer'),
], help='Type of requisition', default='purchase_order')
product_id = fields.Many2one('product.product', required=True,
help='Product for the requisition',
string="Product")
description = fields.Text(
string="Description",
compute='_compute_description',
store=True, readonly=False,
precompute=True, help='Product Description')
quantity = fields.Integer(string='Quantity', help='Quantity', default=1)
uom = fields.Char(related='product_id.uom_id.name',
string='Unit of Measure', help='Product Uom')
partner_id = fields.Many2one('res.partner', string='Vendor',
help='Vendor for the requisition')
@api.depends('product_id')
def _compute_description(self):
"""compute product description"""
for option in self:
if not option.product_id:
continue
product_lang = option.product_id.with_context(
lang=self.requisition_product_id.employee_id.lang)
option.description = product_lang.get_product_multiline_description_sale()
@api.onchange('product_id')
def _onchange_product(self):
"""fetching product vendors"""
self.partner_id = False
vendors_list = [data.name.id for data in self.product_id.seller_ids]
if not vendors_list:
return False
return {'domain': {'partner_id': [('id', 'in', vendors_list)]}}

30
employee_purchase_requisition/models/stock_picking.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Vishnu P(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class StockPicking(models.Model):
""" inherit stock.picking model """
_inherit = 'stock.picking'
requisition_order = fields.Char(string='Requisition Order',
help='Related Requisition Order')

11
employee_purchase_requisition/report/employee_purchase_requisition_reports.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--purchase requisition report-->
<record id="action_report_purchase_requisition" model="ir.actions.report">
<field name="name">Material Purchase Requisition Report</field>
<field name="model">employee.purchase.requisition</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">employee_purchase_requisition.report_purchase_requisition</field>
<field name="report_file">employee_purchase_requisition.report_purchase_requisition</field>
</record>
</odoo>

208
employee_purchase_requisition/report/employee_purchase_requisition_templates.xml

@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- purchase requisition report template-->
<template id="report_purchase_requisition">
<t t-call="web.external_layout">
<t t-call="web.html_container">
<div class="page">
<t t-foreach="records" t-as="rec">
<h5>Purchase Requisition :
<t t-if="rec['name']">
<t t-esc="rec['name']"/>
</t>
</h5>
<table class="table table-striped">
<tr>
<th>Employee</th>
<td>
<t t-if="rec['employee_id']">
<t t-esc="rec['employee_id'][1]"/>
</t>
</td>
<th>Requisition Date</th>
<td>
<t t-if="rec['employee_id']">
<t t-esc="rec['requisition_date']"/>
</t>
</td>
</tr>
<tr>
<th>Department</th>
<td>
<t t-if="rec['dept_id']">
<t t-esc="rec['dept_id'][1]"/>
</t>
</td>
<th>Received Date</th>
<td>
<t t-if="rec['receive_date']">
<t t-esc="rec['receive_date']"/>
</t>
</td>
</tr>
<tr>
<th>Requisition Responsible</th>
<td>
<t t-if="rec['user_id']">
<t t-esc="rec['user_id'][1]"/>
</t>
</td>
<th>Requisition Deadline</th>
<td>
<t t-if="rec['requisition_deadline']">
<t t-esc="rec['requisition_deadline']"/>
</t>
</td>
</tr>
<tr>
<th>Company</th>
<td>
<t t-if="rec['company_id']">
<t t-esc="rec['company_id'][1]"/>
</t>
</td>
</tr>
</table>
<h5>Other Information</h5>
<table class="table table-sm">
<tr>
<th>Confirmed By</th>
<td>
<t t-if="rec['confirm_id']">
<t t-esc="rec['confirm_id'][1]"/>
</t>
</td>
<th>Confirmed Date</th>
<td>
<t t-if="rec['confirmed_date']">
<t t-esc="rec['confirmed_date']"/>
</t>
</td>
</tr>
<tr>
<th>Department Manager</th>
<td>
<t t-if="rec['manager_id']">
<t t-esc="rec['manager_id'][1]"/>
</t>
</td>
<th>Department Approval Date</th>
<td>
<t t-if="rec['department_approval_date']">
<t t-esc="rec['department_approval_date']"/>
</t>
</td>
</tr>
<tr>
<th>Approved By:</th>
<td>
<t t-if="rec['requisition_head_id']">
<t t-esc="rec['requisition_head_id'][1]"/>
</t>
</td>
<th>Approved Date:</th>
<td>
<t t-if="rec['approval_date']">
<t t-esc="rec['approval_date']"/>
</t>
</td>
</tr>
<tr>
<th>Rejected By</th>
<td>
<t t-if="rec['rejected_user_id']">
<t t-esc="rec['rejected_user_id'][1]"/>
</t>
</td>
<th>Rejected Date</th>
<td>
<t t-if="rec['reject_date']">
<t t-esc="rec['reject_date']"/>
</t>
</td>
</tr>
</table>
<h5>Picking Details</h5>
<table class="table table-sm">
<tr>
<th>Source Location</th>
<td>
<t t-if="rec['source_location_id']">
<t t-esc="rec['source_location_id'][1]"/>
</t>
</td>
<th>Destination Location</th>
<td>
<t t-if="rec['source_location_id']">
<t t-esc="rec['destination_location_id'][1]"/>
</t>
</td>
</tr>
<tr>
<t t-if="rec['delivery_type_id']">
<th>Delivery To</th>
<td>
<t t-esc="rec['delivery_type_id'][1]"/>
</td>
</t>
<t t-if="rec['internal_picking_id']">
<th>Internal Transfer</th>
<td>
<t t-esc="rec['internal_picking_id'][1]"/>
</td>
</t>
</tr>
</table>
</t>
<h5>Requisition Lines</h5>
<table class='table'>
<thead>
<th>Requisition Action</th>
<th>Product</th>
<th>Description</th>
<th>Quantity</th>
<th>Unit Of Measure</th>
</thead>
<t t-foreach="order_ids" t-as="order">
<tbody>
<td>
<t t-if="order['requisition_type']=='internal_transfer'">
Internal Transfer
</t>
<t t-if="order['requisition_type']=='purchase_order'">
Purchase Order
</t>
</td>
<td>
<t t-if="order['product_id']">
<t t-esc="order['product_id'][1]"/>
</t>
</td>
<td>
<t t-if="order['description']">
<t t-esc="order['description']"/>
</t>
</td>
<td>
<t t-if="order['quantity']">
<t t-esc="order['quantity']"/>
</t>
</td>
<td><t t-if="order['uom']">
<t t-esc="order['uom']"/>
</t>
</td>
</tbody>
</t>
</table>
<h5>Employee Signature :</h5>
<h5>Manager Signature :</h5>
<h5>Approve Signature :</h5>
</div>
</t>
</t>
</template>
</odoo>

59
employee_purchase_requisition/security/employee_purchase_requisition_security.xml

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.module.category" id="employee_requisition">
<field name="name">Employee Purchase Requisition</field>
<field name="description">User access level for Material Request
module
</field>
<field name="sequence">20</field>
</record>
<!--User groups-->
<record id="employee_requisition_user" model="res.groups">
<field name="name">Requisition Users</field>
<field name="category_id" ref="employee_requisition"/>
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
</record>
<record id="employee_requisition_head" model="res.groups">
<field name="name">Department Head</field>
<field name="category_id" ref="employee_requisition"/>
<field name="implied_ids"
eval="[(4, ref('employee_purchase_requisition.employee_requisition_user'))]"/>
</record>
<record id="employee_requisition_manager" model="res.groups">
<field name="name">Requisition Manager</field>
<field name="category_id" ref="employee_requisition"/>
<field name="implied_ids"
eval="[(4, ref('employee_purchase_requisition.employee_requisition_head'))]"/>
</record>
<!--Record rules-->
<record id="requisition_user_rule" model="ir.rule">
<field name="name">Requisition User Rule</field>
<field name="model_id" ref="model_employee_purchase_requisition"/>
<field name="domain_force">[('confirm_id', '=', user.id)]</field>
<field name="groups"
eval="[(4, ref('employee_purchase_requisition.employee_requisition_user'))]"/>
</record>
<record id="department_head_rule" model="ir.rule">
<field name="name">Department Head Rule</field>
<field ref="model_employee_purchase_requisition" name="model_id"/>
<field name="domain_force">[('user_id','=',user.id)]</field>
<field name="groups"
eval="[(4, ref('employee_purchase_requisition.employee_requisition_head'))]"/>
</record>
<record id="requisition_manager_rule" model="ir.rule">
<field name="name">Requisition Manager Rule</field>
<field ref="model_employee_purchase_requisition" name="model_id"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups"
eval="[(4, ref('employee_purchase_requisition.employee_requisition_manager'))]"/>
</record>
<record id="requisition_company_rule" model="ir.rule">
<field name="name">Purchase Requisition Company Rule</field>
<field ref="model_employee_purchase_requisition" name="model_id"/>
<field name="domain_force">[('company_id', '=', company_id)]</field>
</record>
</odoo>

5
employee_purchase_requisition/security/ir.model.access.csv

@ -0,0 +1,5 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_employee_purchase_requisition_manager,employee.purchase.requisition,model_employee_purchase_requisition,employee_purchase_requisition.employee_requisition_manager,1,1,0,0
access_employee_purchase_requisition_requisition_head,employee.purchase.requisition,model_employee_purchase_requisition,employee_purchase_requisition.employee_requisition_head,1,1,0,0
access_employee_purchase_requisition_user,employee.purchase.requisition,model_employee_purchase_requisition,employee_purchase_requisition.employee_requisition_user,1,1,1,1
access_requisition_order_user,employee.purchase.requisition.user,model_requisition_order,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_employee_purchase_requisition_manager employee.purchase.requisition model_employee_purchase_requisition employee_purchase_requisition.employee_requisition_manager 1 1 0 0
3 access_employee_purchase_requisition_requisition_head employee.purchase.requisition model_employee_purchase_requisition employee_purchase_requisition.employee_requisition_head 1 1 0 0
4 access_employee_purchase_requisition_user employee.purchase.requisition model_employee_purchase_requisition employee_purchase_requisition.employee_requisition_user 1 1 1 1
5 access_requisition_order_user employee.purchase.requisition.user model_requisition_order base.group_user 1 1 1 1

BIN
employee_purchase_requisition/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
employee_purchase_requisition/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
employee_purchase_requisition/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
employee_purchase_requisition/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
employee_purchase_requisition/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
employee_purchase_requisition/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
employee_purchase_requisition/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
employee_purchase_requisition/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
employee_purchase_requisition/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
employee_purchase_requisition/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
employee_purchase_requisition/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
employee_purchase_requisition/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
employee_purchase_requisition/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
employee_purchase_requisition/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
employee_purchase_requisition/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
employee_purchase_requisition/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
employee_purchase_requisition/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
employee_purchase_requisition/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_action_print_report_19.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_approved_13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_approved_14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_department_location_05.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_employee_location_04.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_internal_trasnfer_17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_new_state_07.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_pdf_report_20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_created_15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_order_16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_purchase_requisition_06.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_received_18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_department_head_02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_manager_01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_settings_requisition_user_03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_08.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_09.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_department_approval_10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_head_approval_11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/EPR_waiting_head_approval_12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
employee_purchase_requisition/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

BIN
employee_purchase_requisition/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
employee_purchase_requisition/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

798
employee_purchase_requisition/static/description/index.html

@ -0,0 +1,798 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Employee Purchase Requisition
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Manage Material Requisition of Employees and User.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module helps to manage Material Requisition for all Employees and
User by Purchase Order or Internal Transfer.By installing this module
you will get an extra field in Employee and Department form to select
their Destination Location.Based on requisition material and goods are
placed to the configured location
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Option to Create Material Requisition Request.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Multi Level Approvals.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Option to choose Employee and Department Destination Location.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Employee can request Multiple Material on a single Material Requisition Request.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Department Head have an option to Approve/Reject the Request.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Department Head can choose Purchase Order/Internal Transfer on each Material in the Request.</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Department Head have an option to choose the Vendors for each Material.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Requisition Manager can Approve/Reject the Request approved by Department Head.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">PDF Report for each Material Requisition.
</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Employee Purchase Requisition User Access
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to Settings -> User & Companies
->
Users. Hear we can set user access for the app.
"Requisition User" for Users "Department Head" for Department
Head and "Requisition Manager" for manager</p>
<img src="assets/screenshots/EPR_settings_manager_01.png"
class="img-thumbnail">
<img src="assets/screenshots/EPR_settings_department_head_02.png"
class="img-thumbnail">
<img src="assets/screenshots/EPR_settings_requisition_user_03.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Employee Purchase Requisition Configuration
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to Employees -> Selected Employee form view -> Purchase
Requisition Settings -> Have an option to select Destination
location of the Employee </p>
<img src="assets/screenshots/EPR_employee_location_04.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to Employees -> Department -> Selected Department form View
-> Have an option to select Destination location of the
Department </p>
<img src="assets/screenshots/EPR_department_location_05.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Create Material Requisition Order
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to Employee Purchase Requisition -> Purchase Requisition ->
Can see all created Purchase Requisition in tree view and can
create a new Material Request by clicking CREATE button </p>
<img src="assets/screenshots/EPR_purchase_requisition_06.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Requisition User can confirm the Purchase Requisition by
clicking Confirm button,After confirm the state changes
to"Waiting Department Approval"
</p>
<img src="assets/screenshots/EPR_new_state_07.png"
class="img-thumbnail">
<img src="assets/screenshots/EPR_waiting_department_approval_08.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Department Head can choose Requisition type either purchase
order and Internal transfer for each material and also have an
option to select Vendor for the material
</p>
<img src="assets/screenshots/EPR_waiting_department_approval_09.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Department Head can Approve/Reject Employee Purchase
Requisition.Under Picking Info Tab can see details about
Purchase Requisition.
</p>
<img src="assets/screenshots/EPR_waiting_department_approval_10.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After clicking Approve button state changes to "Waiting Head
Approval".
</p>
<img src="assets/screenshots/EPR_waiting_head_approval_11.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Requisition Head can Approve/Reject Employee Purchase
Requisition.
</p>
<img src="assets/screenshots/EPR_waiting_head_approval_12.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After Clicking Approve button state changes to "Approved".
Requisition Head can create Purchase Order/Internal Transfer by clicking "CREATE PICKING/PO" button.
</p>
<img src="assets/screenshots/EPR_approved_13.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Other Info tab can see Employee Purchase Requisition request history.
</p>
<img src="assets/screenshots/EPR_approved_14.png"
class="img-thumbnail">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After clicking "CREATE PICKING/PO" button state changes to "Purchase Order Created".Here can see Smart Tabs for Created Purchase order and Internal transfer.
</p>
<img src="assets/screenshots/EPR_purchase_created_15.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Purchase Order
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
User can see Created Purchase Order for Requisition</p>
<img src="assets/screenshots/EPR_purchase_order_16.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Internal Transfer
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
User can see Created Internal Transfer for Requisition</p>
<img src="assets/screenshots/EPR_internal_trasnfer_17.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Requisition Head can Receive the Purchase Requisition by clicking "Received" button,after clicking state changes to "Received"</p>
<img src="assets/screenshots/EPR_received_18.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Purchase Requisition Report
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Employee Can generate Purchase Requisition Report by clicking Actions ->Print Requisition Report </p>
<img src="assets/screenshots/EPR_action_print_report_19.png"
class="img-thumbnail">
<img src="assets/screenshots/EPR_pdf_report_20.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/vendor_portal_odoo/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/1.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/15.0/product_brand_purchase/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/2.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/15.0/purchase_order_delivery_status/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/purchase_recurring_orders/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/4.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/15.0/no_automatic_subscription/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/5.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/15.0/section_wise_subtotal/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="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="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

12
employee_purchase_requisition/views/employee_purchase_requisition_menu_items.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Employee Purchase Requisition menu -->
<menuitem id="employee_purchase_requisition_menu"
name="Employee Purchase Requisition"
web_icon="employee_purchase_requisition,static/description/icon.png"
action="employee_purchase_requisition.employee_purchase_requisition_action"/>
<menuitem id="purchase_requisition_menu"
name="Purchase Requisition"
parent="employee_purchase_requisition_menu"
action="employee_purchase_requisition.employee_purchase_requisition_action"/>
</odoo>

247
employee_purchase_requisition/views/employee_purchase_requisition_views.xml

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Employee Purchase Requisition action -->
<record id="employee_purchase_requisition_action"
model="ir.actions.act_window">
<field name="name">Employee Purchase Requisition</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">employee.purchase.requisition</field>
<field name="view_mode">tree,form,kanban</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new record!
</p>
</field>
</record>
<!--View form of the model employee purchase requisition-->
<record id="employee_purchase_requisition_view_form" model="ir.ui.view">
<field name="name">
employee.purchase.requisition.view.form
</field>
<field name="model">employee.purchase.requisition</field>
<field name="arch" type="xml">
<form>
<header>
<field name="state" widget='statusbar'
statusbar_visible='new,waiting_department_approval,
waiting_head_approval,approved,purchase_order_created,
received'/>
<button name="action_confirm_requisition"
class="oe_highlight"
states="new" string="Confirm" type="object"
help="Submit to Department Approval"
groups="employee_purchase_requisition.employee_requisition_user"/>
<button name="action_department_approval"
class="oe_highlight"
states="waiting_department_approval"
string="Approve" type="object"
help="Approve purchase requisition,Submit for Approval for Requisition Head"
groups="employee_purchase_requisition.employee_requisition_head"/>
<button name="action_department_cancel"
class="oe_highlight"
states="waiting_department_approval"
string="Reject" type="object"
help="Reject Purchase Requisition"
groups="employee_purchase_requisition.employee_requisition_head"/>
<button name="action_head_approval" class="oe_highlight"
states="waiting_head_approval" string="Approve"
type="object"
help="Approve Purchase requisition"
groups="employee_purchase_requisition.employee_requisition_manager"/>
<button name="action_head_cancel" class="oe_highlight"
states="waiting_head_approval" string="Reject"
type="object"
help="Reject Purchase Requisition"
groups="employee_purchase_requisition.employee_requisition_manager"/>
<button name="action_create_purchase_order"
class="oe_highlight"
states="approved" string="Create Picking and PO"
type="object"
help="Create Picking/Purchase order"
groups="employee_purchase_requisition.employee_requisition_manager"/>
<button name="action_receive" class="oe_highlight"
states="purchase_order_created" string="Received"
type="object"
groups="employee_purchase_requisition.employee_requisition_manager"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button class="oe_stat_button" type="object"
name="get_purchase_order"
icon="fa-book"
attrs="{'invisible': [('purchase_count', '=', 0)]}">
<field string="Purchase Order"
name="purchase_count" widget="statinfo"/>
</button>
<button class="oe_stat_button" type="object"
name="get_internal_transfer"
icon="fa-truck"
attrs="{'invisible': [('internal_transfer_count', '=', 0)]}">
<field string="Internal Transfer"
name="internal_transfer_count"
widget="statinfo"
/>
</button>
</div>
<div class="oe_title">
<h1>
<field name="name" placeholder="New"/>
</h1>
</div>
<group>
<group>
<field name="employee_id"/>
<field name="dept_id"/>
<field name="user_id"/>
</group>
<group>
<field name="requisition_date"/>
<field name="receive_date"/>
<field name="requisition_deadline"/>
<field name="company_id"/>
</group>
</group>
<notebook>
<page string="Requisition Orders ">
<field name="requisition_order_ids"
attrs="{'readonly': [('state', '!=', 'new')]}"/>
</page>
<page string="Picking Details"
groups="employee_purchase_requisition.employee_requisition_manager,
employee_purchase_requisition.employee_requisition_head">
<group>
<group>
<field name="source_location_id"/>
<field name="delivery_type_id"/>
</group>
<group>
<field name="destination_location_id"/>
<field name="internal_picking_id"/>
</group>
</group>
</page>
<page string="Other Info">
<group>
<group>
<field name="confirm_id"/>
<field name="manager_id"/>
<field name="requisition_head_id"/>
<field name="rejected_user_id"/>
</group>
<group>
<field name="confirmed_date"/>
<field name="department_approval_date"/>
<field name="approval_date"/>
<field name="reject_date"/>
</group>
</group>
</page>
</notebook>
<group>
<field name="requisition_description"/>
</group>
</sheet>
<div class="oe_chatter">
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<!--Tree view of the model employee purchase requisition-->
<record id="employee_purchase_requisition_view_tree" model="ir.ui.view">
<field name="name">
employee.purchase.requisition.view.tree
</field>
<field name="model">employee.purchase.requisition</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="employee_id"/>
<field name="dept_id"/>
<field name="user_id"/>
<field name="requisition_date"/>
<field name="state" widget="badge"
decoration-success="state in ('approved','received')"
decoration-warning="state in ('waiting_department_approval','waiting_head_approval')"
decoration-info="state =='purchase_order_created'"
decoration-danger="state =='cancelled'"/>
</tree>
</field>
</record>
<!--Kanban view of the model employee purchase requisition-->
<record id="employee_purchase_requisition_view_kanban" model="ir.ui.view">
<field name="name">
employee.purchase.requisition.view.kanban
</field>
<field name="model">employee.purchase.requisition</field>
<field name="arch" type="xml">
<kanban>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click">
<div class="oe_kanban_content">
<div class="oe_kanban_card">
<div>
<b>
<field name="name"/>
</b>
</div>
<div>
<b>
<field name="employee_id"/>
</b>
</div>
<div>
<b>
<field name="dept_id"/>
</b>
</div>
<div>
<b>
<field name="user_id"/>
</b>
</div>
<div>
<b>
<field name="requisition_date"/>
</b>
</div>
<div>
<b>
<field name="state" widget="badge"
decoration-success="state in
('approved','received')"
decoration-warning="state in
('waiting_department_approval','waiting_head_approval')"
decoration-info="state
=='purchase_order_created'"
decoration-danger="state
=='cancelled'"
/>
</b>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!--Search view of the model employee purchase requisition-->
<record id="employee_purchase_requisition_view_search" model="ir.ui.view">
<field name="name">employee.purchase.requisition.view.search</field>
<field name="model">employee.purchase.requisition</field>
<field name="arch" type="xml">
<search string="Search Tips">
<group expand="1" string="Group By">
<filter string="Employee" name="employee_id"
context="{'group_by':'employee_id', 'residual_visible':True}"/>
<filter string="Department" name="dept_id"
context="{'group_by':'dept_id', 'residual_visible':True}"/>
</group>
</search>
</field>
</record>
</odoo>

15
employee_purchase_requisition/views/hr_department_views.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- inherit view of hr department -->
<record id="view_department_form" model="ir.ui.view">
<field name="name">hr.department.view.form.inherit.employee.purchase.requisition</field>
<field name="model">hr.department</field>
<field name="inherit_id"
ref="hr.view_department_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='parent_id']" position="after">
<field name="department_location_id"/>
</xpath>
</field>
</record>
</odoo>

24
employee_purchase_requisition/views/hr_employee_views.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- inherit view of hr employee -->
<record id="view_employee_form" model="ir.ui.view">
<field name="name">
hr.employee.view.form.inherit.employee.purchase.requisition
</field>
<field name="model">hr.employee</field>
<field name="inherit_id"
ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='hr_settings']" position="after">
<page name="requisition_settings"
string="Purchase Requisition Settings">
<group>
<group>
<field name="employee_location_id"/>
</group>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

15
employee_purchase_requisition/views/purchase_order_views.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- inherit view of purchase -->
<record id="purchase_order_inherit" model="ir.ui.view">
<field name="name">purchase.order.view.form.inherit.employee.purchase.requisition</field>
<field name="model">purchase.order</field>
<field name="inherit_id"
ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='currency_id']" position="after">
<field name="requisition_order"/>
</xpath>
</field>
</record>
</odoo>

22
employee_purchase_requisition/views/requisition_order_views.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Requisition Order view -->
<record id="requisition_order_view_tree" model="ir.ui.view">
<field name="name">requisition.order.view.tree</field>
<field name="model">requisition.order</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="state" invisible="True"/>
<field name="requisition_type"
groups="employee_purchase_requisition.employee_requisition_head,employee_purchase_requisition.employee_requisition_manager"/>
<field name="product_id"/>
<field name="description"/>
<field name="quantity"/>
<field name="uom"/>
<field name="partner_id"
attrs="{'invisible': [('requisition_type', '=', 'internal_transfer')]}"
groups="employee_purchase_requisition.employee_requisition_head,employee_purchase_requisition.employee_requisition_manager"/>
</tree>
</field>
</record>
</odoo>

18
employee_purchase_requisition/views/stock_picking_views.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- inherit view of stock picking -->
<record id="stock_picking_inherit" model="ir.ui.view">
<field name="name">
stock.picking.view.form.inherit.employee.purchase.requisition
</field>
<field name="model">stock.picking</field>
<field name="inherit_id"
ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='location_dest_id']"
position="after">
<field name="requisition_order"/>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save