Browse Source

[ADD] Initial Commit

pull/134/merge
Ajmalcybrosys 6 years ago
parent
commit
397e7a1480
  1. 2
      base_account_budget/static/description/index.html
  2. 39
      export_stockinfo_xls/README.rst
  3. 24
      export_stockinfo_xls/__init__.py
  4. 48
      export_stockinfo_xls/__manifest__.py
  5. 22
      export_stockinfo_xls/controllers/__init__.py
  6. 56
      export_stockinfo_xls/controllers/main.py
  7. 9
      export_stockinfo_xls/doc/RELEASE_NOTES.md
  8. 24
      export_stockinfo_xls/models/__init__.py
  9. 41
      export_stockinfo_xls/models/res_partner.py
  10. 257
      export_stockinfo_xls/models/wizard.py
  11. BIN
      export_stockinfo_xls/static/description/banner.jpg
  12. BIN
      export_stockinfo_xls/static/description/cybro_logo.png
  13. BIN
      export_stockinfo_xls/static/description/cybrosys-current-stock-1.png
  14. BIN
      export_stockinfo_xls/static/description/cybrosys-current-stock-2.png
  15. BIN
      export_stockinfo_xls/static/description/cybrosys-current-stock-3.png
  16. BIN
      export_stockinfo_xls/static/description/icon.png
  17. 370
      export_stockinfo_xls/static/description/index.html
  18. 50
      export_stockinfo_xls/static/src/js/action_manager.js
  19. 9
      export_stockinfo_xls/views/action_manager.xml
  20. 66
      export_stockinfo_xls/views/wizard_view.xml
  21. 22
      front_office_management/README.rst
  22. 23
      front_office_management/__init__.py
  23. 49
      front_office_management/__manifest__.py
  24. 6
      front_office_management/doc/RELEASE_NOTES.md
  25. 30
      front_office_management/models/__init__.py
  26. 56
      front_office_management/models/fo_property_counter.py
  27. 109
      front_office_management/models/fo_visit.py
  28. 52
      front_office_management/models/fo_visitor.py
  29. 57
      front_office_management/report/fo_property_label.xml
  30. 70
      front_office_management/report/fo_visitor_label.xml
  31. 32
      front_office_management/report/report.xml
  32. 64
      front_office_management/report/visitors_report.xml
  33. 17
      front_office_management/security/fo_security.xml
  34. 14
      front_office_management/security/ir.model.access.csv
  35. BIN
      front_office_management/static/description/banner.jpg
  36. BIN
      front_office_management/static/description/belongings.png
  37. BIN
      front_office_management/static/description/cybro_logo.png
  38. BIN
      front_office_management/static/description/cybrosys-front-office-1.png
  39. BIN
      front_office_management/static/description/cybrosys-front-office-2.png
  40. BIN
      front_office_management/static/description/cybrosys-front-office-3.png
  41. BIN
      front_office_management/static/description/cybrosys-front-office-4.png
  42. BIN
      front_office_management/static/description/cybrosys-front-office-5.png
  43. BIN
      front_office_management/static/description/cybrosys-front-office-6.png
  44. BIN
      front_office_management/static/description/cybrosys-front-office-7.png
  45. BIN
      front_office_management/static/description/cybrosys-front-office-8.png
  46. BIN
      front_office_management/static/description/icon.png
  47. 398
      front_office_management/static/description/index.html
  48. BIN
      front_office_management/static/description/label.png
  49. BIN
      front_office_management/static/description/pass.png
  50. BIN
      front_office_management/static/description/report.png
  51. BIN
      front_office_management/static/description/todays.png
  52. BIN
      front_office_management/static/description/user.png
  53. BIN
      front_office_management/static/description/visit.png
  54. BIN
      front_office_management/static/description/visitor.png
  55. 90
      front_office_management/views/fo_property_counter.xml
  56. 186
      front_office_management/views/fo_visit.xml
  57. 119
      front_office_management/views/fo_visitor.xml
  58. 2
      hr_payroll_community/__manifest__.py
  59. 40
      medical_lab_management/README.rst
  60. 23
      medical_lab_management/__init__.py
  61. 56
      medical_lab_management/__manifest__.py
  62. 9
      medical_lab_management/doc/RELEASE_NOTES.md
  63. 33
      medical_lab_management/models/__init__.py
  64. 37
      medical_lab_management/models/account_invoice.py
  65. 198
      medical_lab_management/models/lab_appointment.py
  66. 78
      medical_lab_management/models/lab_patient.py
  67. 128
      medical_lab_management/models/lab_request.py
  68. 37
      medical_lab_management/models/lab_test_content_type.py
  69. 46
      medical_lab_management/models/lab_test_type.py
  70. 35
      medical_lab_management/models/physician_speciality.py
  71. 34
      medical_lab_management/models/res_partner.py
  72. 32
      medical_lab_management/models/testing_unit.py
  73. 63
      medical_lab_management/report/lab_patient_card.xml
  74. 50
      medical_lab_management/report/lab_test_report.xml
  75. 23
      medical_lab_management/report/report.xml
  76. 19
      medical_lab_management/security/ir.model.access.csv
  77. 20
      medical_lab_management/security/lab_users.xml
  78. BIN
      medical_lab_management/static/description/app.png
  79. BIN
      medical_lab_management/static/description/banner.jpg
  80. BIN
      medical_lab_management/static/description/card.png
  81. BIN
      medical_lab_management/static/description/content.png
  82. BIN
      medical_lab_management/static/description/cybro_logo.png
  83. BIN
      medical_lab_management/static/description/icon.png
  84. 446
      medical_lab_management/static/description/index.html
  85. BIN
      medical_lab_management/static/description/invoice.png
  86. BIN
      medical_lab_management/static/description/lab-management-cybrosys-1.png
  87. BIN
      medical_lab_management/static/description/lab-management-cybrosys-10.png
  88. BIN
      medical_lab_management/static/description/lab-management-cybrosys-11.png
  89. BIN
      medical_lab_management/static/description/lab-management-cybrosys-12.png
  90. BIN
      medical_lab_management/static/description/lab-management-cybrosys-13.png
  91. BIN
      medical_lab_management/static/description/lab-management-cybrosys-2.png
  92. BIN
      medical_lab_management/static/description/lab-management-cybrosys-3.png
  93. BIN
      medical_lab_management/static/description/lab-management-cybrosys-4.png
  94. BIN
      medical_lab_management/static/description/lab-management-cybrosys-5.png
  95. BIN
      medical_lab_management/static/description/lab-management-cybrosys-6.png
  96. BIN
      medical_lab_management/static/description/lab-management-cybrosys-7.png
  97. BIN
      medical_lab_management/static/description/lab-management-cybrosys-8.png
  98. BIN
      medical_lab_management/static/description/lab-management-cybrosys-9.png
  99. BIN
      medical_lab_management/static/description/mail.png
  100. BIN
      medical_lab_management/static/description/patient.png

2
base_account_budget/static/description/index.html

@ -155,7 +155,7 @@ color: #fff;">Screenshots </a></li>
</div>
</div>
</div>
<div class="carousel-item active" style="min-height: 0px;">
<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"

39
export_stockinfo_xls/README.rst

@ -0,0 +1,39 @@
Export Product Stock in Excel v12
=================================
This module helps you to take current stock report for all products in each warehouse.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developers: Cybrosys Techno Solutions 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 `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

24
export_stockinfo_xls/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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
from . import controllers

48
export_stockinfo_xls/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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': 'Export Product Stock in Excel',
'version': '13.0.1.0.0',
'summary': "Current Stock Report for all Products in each Warehouse",
'description': "Current Stock Report for all Products in each Warehouse, Odoo 13,Odoo13",
'category': 'Warehouse',
'author': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': [
'base',
'stock',
'sale',
'purchase',
],
'data': [
'views/wizard_view.xml',
'views/action_manager.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'auto_install': False,
}

22
export_stockinfo_xls/controllers/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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 main

56
export_stockinfo_xls/controllers/main.py

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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/>.
#
#############################################################################
import json
from odoo import http
from odoo.http import content_disposition, request
from odoo.addons.web.controllers.main import _serialize_exception
from odoo.tools import html_escape
class XLSXReportController(http.Controller):
@http.route('/xlsx_reports', type='http', auth='user', methods=['POST'], csrf=False)
def get_report_xlsx(self, model, options, output_format, token, report_name, **kw):
uid = request.session.uid
report_obj = request.env[model].sudo(uid)
options = json.loads(options)
try:
if output_format == 'xlsx':
response = request.make_response(
None,
headers=[
('Content-Type', 'application/vnd.ms-excel'),
('Content-Disposition', content_disposition(report_name + '.xlsx'))
]
)
report_obj.get_xlsx_report(options, response)
response.set_cookie('fileToken', token)
return response
except Exception as e:
se = _serialize_exception(e)
error = {
'code': 200,
'message': 'Odoo Server Error',
'data': se
}
return request.make_response(html_escape(json.dumps(error)))

9
export_stockinfo_xls/doc/RELEASE_NOTES.md

@ -0,0 +1,9 @@
## Module <export_stockinfo_xls>
#### 01.11.2019
#### Version 13.0.1.0.0
#### Migration
Migration Of Export Product Stock in Excel

24
export_stockinfo_xls/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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 res_partner
from . import wizard

41
export_stockinfo_xls/models/res_partner.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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 Partner(models.Model):
_inherit = 'res.partner'
supplier_id = fields.Many2many('wizard.stock.history', 'supp_wiz_rel', 'wiz', 'supp', invisible=True)
class Category(models.Model):
_inherit = 'product.category'
obj = fields.Many2many('wizard.stock.history', 'categ_wiz_rel', 'wiz', 'categ', invisible=True)
class Warehouse(models.Model):
_inherit = 'stock.warehouse'
obj = fields.Many2many('wizard.stock.history', 'wh_wiz_rel', 'wiz', 'wh', invisible=True)

257
export_stockinfo_xls/models/wizard.py

@ -0,0 +1,257 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author:Cybrosys Techno Solutions(odoo@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 datetime import datetime
from datetime import date, datetime
from odoo import models, fields, api
import time
import pytz
import json
import datetime
import io
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.exceptions import ValidationError
from odoo.tools import date_utils
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
import xlsxwriter
class StockReport(models.TransientModel):
_name = "wizard.stock.history"
_description = "Current Stock History"
warehouse = fields.Many2many('stock.warehouse', 'wh_wiz_rel', 'wh', 'wiz', string='Warehouse', required=True)
category = fields.Many2many('product.category', 'categ_wiz_rel', 'categ', 'wiz', string='Warehouse')
def export_xls(self):
# context = self._context
# data = {'ids': context.get('active_ids', [])}
# data['model'] = 'wizard.stock.history'
# data['form'] = self.read()[0]
# for field in data['form'].keys():
# if isinstance(data['form'][field], tuple):
# data['form'][field] = data['form'][field][0]
# if context.get('xls_export'):
# return self.env.ref('export_stockinfo_xls.stock_xlsx').report_action(self, data=datas)
data = {
'ids': self.ids,
'model': self._name,
'warehouse': self.warehouse.id,
'category': self.category.id,
# 'date_start': self.date_start,
# 'date_end': self.date_end,
# 'state': self.state,
# 'product_id': self.product_id.id,
# 'usage': self.usage,
}
return {
'type': 'ir_actions_xlsx_download',
'data': {'model': 'wizard.stock.history',
'options': json.dumps(data, default=date_utils.json_default),
'output_format': 'xlsx',
'report_name': 'Current Stock History',
}
}
def get_warehouse(self, data):
wh = data.warehouse.mapped('id')
obj = self.env['stock.warehouse'].search([('id', 'in', wh)])
l1 = []
l2 = []
for j in obj:
l1.append(j.name)
l2.append(j.id)
return l1, l2
def get_lines(self, data, warehouse):
lines = []
categ_id = data.mapped('id')
if categ_id:
stock_history = self.env['product.product'].search([('categ_id', 'in', categ_id)])
else:
stock_history = self.env['product.product'].search([])
for obj in stock_history:
sale_value = 0
purchase_value = 0
product = self.env['product.product'].browse(obj.id)
sale_obj = self.env['sale.order.line'].search([('order_id.state', 'in', ('sale', 'done')),
('product_id', '=', product.id),
('order_id.warehouse_id', '=', warehouse)])
for i in sale_obj:
sale_value = sale_value + i.product_uom_qty
purchase_obj = self.env['purchase.order.line'].search([('order_id.state', 'in', ('purchase', 'done')),
('product_id', '=', product.id),
('order_id.picking_type_id', '=', warehouse)])
for i in purchase_obj:
purchase_value = purchase_value + i.product_qty
available_qty = product.with_context({'warehouse': warehouse}).virtual_available + \
product.with_context({'warehouse': warehouse}).outgoing_qty - \
product.with_context({'warehouse': warehouse}).incoming_qty
value = available_qty * product.standard_price
vals = {
'sku': product.default_code,
'name': product.name,
'category': product.categ_id.name,
'cost_price': product.standard_price,
'available': available_qty,
'virtual': product.with_context({'warehouse': warehouse}).virtual_available,
'incoming': product.with_context({'warehouse': warehouse}).incoming_qty,
'outgoing': product.with_context({'warehouse': warehouse}).outgoing_qty,
'net_on_hand': product.with_context({'warehouse': warehouse}).qty_available,
'total_value': value,
'sale_value': sale_value,
'purchase_value': purchase_value,
}
lines.append(vals)
print(lines)
return lines
def get_xlsx_report(self, data, response):
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
lines = self.browse(data['ids'])
print("lines",lines)
d = lines.category
get_warehouse = self.get_warehouse(lines)
print("get_warehouse",get_warehouse)
count = len(get_warehouse[0]) * 11 + 6
print("count",count)
comp = self.env.user.company_id.name
print("comp",comp)
sheet = workbook.add_worksheet('Stock Info')
format0 = workbook.add_format({'font_size': 20, 'align': 'center', 'bold': True})
format1 = workbook.add_format({'font_size': 14, 'align': 'vcenter', 'bold': True})
format11 = workbook.add_format({'font_size': 12, 'align': 'center', 'bold': True})
format21 = workbook.add_format({'font_size': 10, 'align': 'center', 'bold': True})
format3 = workbook.add_format({'bottom': True, 'top': True, 'font_size': 12})
format4 = workbook.add_format({'font_size': 12, 'align': 'left', 'bold': True})
font_size_8 = workbook.add_format({'font_size': 8, 'align': 'center'})
font_size_8_l = workbook.add_format({'font_size': 8, 'align': 'left'})
font_size_8_r = workbook.add_format({'font_size': 8, 'align': 'right'})
red_mark = workbook.add_format({'font_size': 8, 'bg_color': 'red'})
justify = workbook.add_format({'font_size': 12})
format3.set_align('center')
justify.set_align('justify')
format1.set_align('center')
red_mark.set_align('center')
sheet.merge_range(1, 7, 2, 10, 'Product Stock Info', format0)
sheet.merge_range(3, 7, 3, 10, comp, format11)
w_house = ', '
cat = ', '
c = []
d1 = d.mapped('id')
if d1:
for i in d1:
c.append(self.env['product.category'].browse(i).name)
cat = cat.join(c)
sheet.merge_range(4, 0, 4, 1, 'Category(s) : ', format4)
sheet.merge_range(4, 2, 4, 3 + len(d1), cat, format4)
sheet.merge_range(5, 0, 5, 1, 'Warehouse(s) : ', format4)
w_house = w_house.join(get_warehouse[0])
sheet.merge_range(5, 2, 5, 3+len(get_warehouse[0]), w_house, format4)
user = self.env['res.users'].browse(self.env.uid)
tz = pytz.timezone(user.tz)
time = pytz.utc.localize(datetime.datetime.now()).astimezone(tz)
# print("tz", time)
sheet.merge_range('A8:G8', 'Report Date: ' + str(time.strftime("%Y-%m-%d %H:%M %p")), format1)
sheet.merge_range(7, 7, 7, count, 'Warehouses', format1)
sheet.merge_range('A9:G9', 'Product Information', format11)
w_col_no = 6
w_col_no1 = 7
for i in get_warehouse[0]:
w_col_no = w_col_no + 11
sheet.merge_range(8, w_col_no1, 8, w_col_no, i, format11)
w_col_no1 = w_col_no1 + 11
sheet.write(9, 0, 'SKU', format21)
sheet.merge_range(9, 1, 9, 3, 'Name', format21)
sheet.merge_range(9, 4, 9, 5, 'Category', format21)
sheet.write(9, 6, 'Cost Price', format21)
p_col_no1 = 7
for i in get_warehouse[0]:
sheet.write(9, p_col_no1, 'Available', format21)
sheet.write(9, p_col_no1 + 1, 'Virtual', format21)
sheet.write(9, p_col_no1 + 2, 'Incoming', format21)
sheet.write(9, p_col_no1 + 3, 'Outgoing', format21)
sheet.merge_range(9, p_col_no1 + 4, 9, p_col_no1 + 5, 'Net On Hand', format21)
sheet.merge_range(9, p_col_no1 + 6, 9, p_col_no1 + 7, 'Total Sold', format21)
sheet.merge_range(9, p_col_no1 + 8, 9, p_col_no1 + 9, 'Total Purchased', format21)
sheet.write(9, p_col_no1 + 10, 'Valuation', format21)
p_col_no1 = p_col_no1 + 11
prod_row = 10
prod_col = 0
for i in get_warehouse[1]:
get_line = self.get_lines(d, i)
for each in get_line:
sheet.write(prod_row, prod_col, each['sku'], font_size_8)
sheet.merge_range(prod_row, prod_col + 1, prod_row, prod_col + 3, each['name'], font_size_8_l)
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['category'], font_size_8_l)
sheet.write(prod_row, prod_col + 6, each['cost_price'], font_size_8_r)
prod_row = prod_row + 1
break
prod_row = 10
prod_col = 7
for i in get_warehouse[1]:
get_line = self.get_lines(d, i)
for each in get_line:
if each['available'] < 0:
sheet.write(prod_row, prod_col, each['available'], red_mark)
else:
sheet.write(prod_row, prod_col, each['available'], font_size_8)
if each['virtual'] < 0:
sheet.write(prod_row, prod_col + 1, each['virtual'], red_mark)
else:
sheet.write(prod_row, prod_col + 1, each['virtual'], font_size_8)
if each['incoming'] < 0:
sheet.write(prod_row, prod_col + 2, each['incoming'], red_mark)
else:
sheet.write(prod_row, prod_col + 2, each['incoming'], font_size_8)
if each['outgoing'] < 0:
sheet.write(prod_row, prod_col + 3, each['outgoing'], red_mark)
else:
sheet.write(prod_row, prod_col + 3, each['outgoing'], font_size_8)
if each['net_on_hand'] < 0:
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], red_mark)
else:
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], font_size_8)
if each['sale_value'] < 0:
sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'], red_mark)
else:
sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'], font_size_8)
if each['purchase_value'] < 0:
sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'], red_mark)
else:
sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'], font_size_8)
if each['total_value'] < 0:
sheet.write(prod_row, prod_col + 10, each['total_value'], red_mark)
else:
sheet.write(prod_row, prod_col + 10, each['total_value'], font_size_8_r)
prod_row = prod_row + 1
prod_row = 10
prod_col = prod_col + 11
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()

BIN
export_stockinfo_xls/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
export_stockinfo_xls/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
export_stockinfo_xls/static/description/cybrosys-current-stock-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
export_stockinfo_xls/static/description/cybrosys-current-stock-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

BIN
export_stockinfo_xls/static/description/cybrosys-current-stock-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

BIN
export_stockinfo_xls/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

370
export_stockinfo_xls/static/description/index.html

@ -0,0 +1,370 @@
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;">
Current Stock XLS
</h2>
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;">
Current Stock Report for all Products in each Warehouse
</h3>
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;">
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a>
</h5>
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;">
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 180px;"/>
</div>
</a>
</div>
</section>
<section class="oe_container" style="padding: 3% 0% 3% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Overview
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
This module helps to print Current Stock Report for all Products in each Warehouse with XLS.
</h3>
</div>
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 300;margin: 0px !important;">
Installation
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
To install this module, you need also the report_xlsx module.
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
You need to set the Timezone in odoo.
</h3>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Features
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Select category for products
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Get your stock valuation details</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Negative stock will be highlighted in "red" cells.
</h3>
</div>
</section>
<section class="oe_container" style="padding: 3% 0% 0% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Screenshots
</h2>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Inventory -> Reports -> Current stock in Excel.<br/>
<img src="https://www.cybrosys.com/images/ico-tick.png">
Now a wizard will appear on your screen.
<!--<img src="https://www.cybrosys.com/images/ico-tick.png">-->
Please enter the warehouses which you want to take the report.<br/>
<img src="https://www.cybrosys.com/images/ico-tick.png">
You can also select category for products(It is Optional).<br/>
<img src="https://www.cybrosys.com/images/ico-tick.png">
Then Click "Export Product with Stock Info" button.
<!--<img src="https://www.cybrosys.com/images/ico-tick.png">-->
Then You will get the corresponding report in XLS.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-current-stock-1.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Per warehouse you can get Available Qty, Virtual Qty, Incoming Qty, Outgoing Qty, Net On Hand Qty,
Total Sold & Total Purchased Qty.<br/>
<img src="https://www.cybrosys.com/images/ico-tick.png">
You can get your stock valuation details too. In below screen-shot you
can see stock details of 2 warehouse exported in single spreadsheet.<br/>
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-current-stock-2.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Negative stock will be highlighted in "red" cells.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-current-stock-3.png" alt="" style="width: 95%;"/>
</div>
</div>
</section>
<section class="oe_container" style="padding: 7px 0% 0% 3%;">
<div class="oe_row oe_spaced">
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Services
</h2>
<div style="display:flex;padding-top: 20px;justify-content: space-between;">
<div style="flex-basis: 18%;">
<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">
Odoo Customization
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Implementation </a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Integration
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Support</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Hire Odoo Developers</a>
</h3>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Industries
</h2>
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;">
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Trading
</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easily procure and sell your products.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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;">
<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">
Manufacturing</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Plan, track and schedule your operations.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Restaurant</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Run your bar or restaurant methodical.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
POS</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easy configuring and convivial selling.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
E-commerce & Website</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Mobile friendly, awe-inspiring product pages.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Hotel Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
An all-inclusive hotel management application.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Education</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
A Collaborative platform for educational management.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Service Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Keep track of services and invoice accordingly.
</h3>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;">
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;">
<div>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-phone"></i> Contact Us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block">
<div>
<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;padding-left: 3px;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://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
</div>
</div>
</section>

50
export_stockinfo_xls/static/src/js/action_manager.js

@ -0,0 +1,50 @@
odoo.define('export_stockinfo_xls.action_manager', function (require) {
"use strict";
/**
* The purpose of this file is to add the actions of type
* 'ir_actions_xlsx_download' to the ActionManager.
*/
var ActionManager = require('web.ActionManager');
var framework = require('web.framework');
var session = require('web.session');
ActionManager.include({
/**
* Executes actions of type 'ir_actions_xlsx_download'.
*
* @private
* @param {Object} action the description of the action to execute
* @returns {Deferred} resolved when the report has been downloaded ;
* rejected if an error occurred during the report generation
*/
_executexlsxReportDownloadAction: function (action) {
framework.blockUI();
var def = $.Deferred();
session.get_file({
url: '/xlsx_reports',
data: action.data,
success: def.resolve.bind(def),
error: (error) => this.call('crash_manager', 'rpc_error', error),
complete: framework.unblockUI,
});
return def;
},
/**
* Overrides to handle the 'ir_actions_xlsx_download' actions.
*
* @override
* @private
*/
_handleAction: function (action, options) {
if (action.type === 'ir_actions_xlsx_download') {
return this._executexlsxReportDownloadAction(action, options);
}
return this._super.apply(this, arguments);
},
});
});

9
export_stockinfo_xls/views/action_manager.xml

@ -0,0 +1,9 @@
<odoo>
<data>
<template id="assets_backend" name="xls_assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/export_stockinfo_xls/static/src/js/action_manager.js"/>
</xpath>
</template>
</data>
</odoo>

66
export_stockinfo_xls/views/wizard_view.xml

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model='ir.ui.view' id='wizard_form'>
<field name="name">wizard.stock.history.form</field>
<field name="model">wizard.stock.history</field>
<field name="arch" type="xml">
<form string="Wizard">
<group string="Warehouse">
<field name="warehouse" widget="many2many_tags"/>
</group>
<notebook>
<page string="Category">
<field name="category">
<tree>
<field name="name"/>
</tree>
</field>
</page>
</notebook>
<footer>
<button name="export_xls" type="object" default_focus="1"
string="Export Product with Stock Info" class="oe_highlight"
context="{'xls_export':1}" icon="fa-download"/>
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</form>
</field>
</record>
<record model='ir.actions.act_window' id='wizard_act'>
<field name="name">Export product stock in Excel</field>
<field name="res_model">wizard.stock.history</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_form"/>
<field name="target">new</field>
</record>
<!-- <report-->
<!-- id="stock_xlsx"-->
<!-- model="wizard.stock.history"-->
<!-- string="Product Stock Info"-->
<!-- report_type="xlsx"-->
<!-- name="export_stockinfo_xls.stock_report_xls.xlsx"-->
<!-- file="export_stockinfo_xls.stock_report_xls.xlsx"-->
<!-- menu="False"-->
<!-- attachment_use="False"/>-->
<menuitem name="Current stock in Excel"
parent="stock.menu_warehouse_report"
id="export_excel"
action="wizard_act"
sequence="3"/>
</data>
<!-- <record id="action_stock_move_report_wizard" model="ir.actions.act_window">-->
<!-- <field name="name">Stock Move Report Report</field>-->
<!-- <field name="res_model">stock.moves.report.wizard</field>-->
<!-- <field name="type">ir.actions.act_window</field>-->
<!-- <field name="view_mode">form</field>-->
<!-- <field name="view_id" ref="stock_move_report_wizard_view"/>-->
<!-- <field name="target">new</field>-->
<!-- </record>-->
<!-- <menuitem id="stock_move_report_child_menu" name="Stock Move Report" action="action_stock_move_report_wizard" parent="stock.menu_warehouse_report"/>-->
</odoo>

22
front_office_management/README.rst

@ -0,0 +1,22 @@
===========================
Front Office Management v11
===========================
Helps You To Manage Front Office Operations.
Installation
============
Just install the module.
Configuration
=============
Nothing to configure.
Credits
=======
Anusha P P @ cybrosys, anusha@cybrosys.in
Niyas Raphy @ cybrosys, niyas@cybrosys.in

23
front_office_management/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P (odoo@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

49
front_office_management/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P (odoo@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': "Front Office Management",
'version': '13.0.1.0.0',
'summary': """Manage Front Office Operations:Visitors, Devices Carrying Register, Actions""",
'description': """Helps You To Manage Front Office Operations, Odoo13, Odoo 13""",
'author': "Cybrosys Techno Solutions",
'maintainer': 'Cybrosys Techno Solutions',
'company': "Cybrosys Techno Solutions",
'website': "https://www.cybrosys.com",
'category': 'Industries',
'depends': ['base', 'hr'],
'data': [
'views/fo_visit.xml',
'views/fo_visitor.xml',
'views/fo_property_counter.xml',
'report/report.xml',
'report/fo_property_label.xml',
'report/fo_visitor_label.xml',
'report/visitors_report.xml',
'security/fo_security.xml',
'security/ir.model.access.csv',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
}

6
front_office_management/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <front_office_management>
#### 28.10.2019
#### Version 13.0.1.0.0
##### ADD
- Migrated to version 13

30
front_office_management/models/__init__.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P (odoo@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 fo_visitor
from . import fo_property_counter
from . import fo_visit

56
front_office_management/models/fo_property_counter.py

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Maintainer: Cybrosys Technologies (<https://www.cybrosys.com>)
##############################################################################
from odoo import models, fields, api,_
from odoo.exceptions import UserError
class VisitDetails(models.Model):
_name = 'fo.property.counter'
_inherit = 'mail.thread'
_rec_name = 'employee'
_description = 'Property Details'
employee = fields.Many2one('hr.employee', string="Employee", required=True)
date = fields.Date(string="Date", required=True)
visitor_belongings = fields.One2many('fo.belongings', 'belongings_id_fov_employee', string="Personal Belongings",
copy=False)
state = fields.Selection([
('draft', 'Draft'),
('prop_in', 'Taken In'),
('prop_out', 'Taken out'),
('cancel', 'Cancelled'),
], track_visibility='onchange', default='draft',
help='If the employee taken the belongings to the company change state to ""Taken In""'
'when he/she leave office change the state to ""Taken out""')
def action_cancel(self):
self.state = "cancel"
def action_prop_in(self):
count = 0
number = 0
for data in self.visitor_belongings:
if not data.property_count:
raise UserError(_('Please Add the Count.'))
if data.permission == '1':
count += 1
number = data.number
if number == count:
raise UserError(_('No property can be taken in.'))
else:
self.state = 'prop_in'
def action_prop_out(self):
self.state = "prop_out"

109
front_office_management/models/fo_visit.py

@ -0,0 +1,109 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Maintainer: Cybrosys Technologies (<https://www.cybrosys.com>)
##############################################################################
import datetime
from odoo import models, fields, api, _
class VisitDetails(models.Model):
_name = 'fo.visit'
_inherit = ['mail.thread']
_description = 'Visit'
name = fields.Char(string="sequence", default=lambda self: _('New'))
visitor = fields.Many2one("fo.visitor", string='Visitor')
phone = fields.Char(string="Phone", required=True)
email = fields.Char(string="Email", required=True)
reason = fields.Many2many('fo.purpose', string='Purpose Of Visit', required=True,
help='Enter the reason for visit')
visitor_belongings = fields.One2many('fo.belongings', 'belongings_id_fov_visitor', string="Personal Belongings",
help='Add the belongings details here.')
check_in_date = fields.Datetime(string="Check In Time", help='Visitor check in time automatically'
' fills when he checked in to the office.')
check_out_date = fields.Datetime(string="Check Out Time", help='Visitor check out time automatically '
'fills when he checked out from the office.')
visiting_person = fields.Many2one('hr.employee', string="Meeting With")
department = fields.Many2one('hr.department', string="Department")
state = fields.Selection([
('draft', 'Draft'),
('check_in', 'Checked In'),
('check_out', 'Checked Out'),
('cancel', 'Cancelled'),
], track_visibility='onchange', default='draft')
@api.model
def create(self, vals):
if vals:
vals['name'] = self.env['ir.sequence'].next_by_code('fo.visit') or _('New')
result = super(VisitDetails, self).create(vals)
return result
def action_cancel(self):
self.state = "cancel"
def action_check_in(self):
self.state = "check_in"
self.check_in_date = datetime.datetime.now()
def action_check_out(self):
self.state = "check_out"
self.check_out_date = datetime.datetime.now()
@api.onchange('visitor')
def visitor_details(self):
if self.visitor:
if self.visitor.phone:
self.phone = self.visitor.phone
if self.visitor.email:
self.email = self.visitor.email
@api.onchange('visiting_person')
def get_employee_dpt(self):
if self.visiting_person:
self.department = self.visiting_person.department_id
class PersonalBelongings(models.Model):
_name = 'fo.belongings'
property_name = fields.Char(string="Property", help='Employee belongings name')
property_count = fields.Char(string="Count", help='Count of property')
number = fields.Integer(compute='get_number', store=True, string="Sl")
belongings_id_fov_visitor = fields.Many2one('fo.visit', string="Belongings")
belongings_id_fov_employee = fields.Many2one('fo.property.counter', string="Belongings")
permission = fields.Selection([
('0', 'Allowed'),
('1', 'Not Allowed'),
('2', 'Allowed With Permission'),
], 'Permission', required=True, index=True, default='0', track_visibility='onchange')
@api.depends('belongings_id_fov_visitor', 'belongings_id_fov_employee')
def get_number(self):
for visit in self.mapped('belongings_id_fov_visitor'):
number = 1
for line in visit.visitor_belongings:
line.number = number
number += 1
for visit in self.mapped('belongings_id_fov_employee'):
number = 1
for line in visit.visitor_belongings:
line.number = number
number += 1
class VisitPurpose(models.Model):
_name = 'fo.purpose'
name = fields.Char(string='Purpose', required=True, help='Meeting purpose in short term.eg:Meeting.')
description = fields.Text(string='Description Of Purpose', help='Description for the Purpose.')

52
front_office_management/models/fo_visitor.py

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Maintainer: Cybrosys Technologies (<https://www.cybrosys.com>)
##############################################################################
from odoo import models, fields, api
class VisitorDetails(models.Model):
_name = 'fo.visitor'
name = fields.Char(string="Visitor", required=True)
visitor_image = fields.Binary(string='Image', attachment=True)
street = fields.Char(string="Street")
street2 = fields.Char(string="Street2")
zip = fields.Char(change_default=True)
city = fields.Char()
state_id = fields.Many2one("res.country.state", string='State', ondelete='restrict')
country_id = fields.Many2one('res.country', string='Country', ondelete='restrict')
phone = fields.Char(string="Phone", required=True)
email = fields.Char(string="Email", required=True)
id_proof = fields.Many2one('id.proof', string="ID Proof")
id_proof_no = fields.Char(string="ID Number", help='Id proof number')
company_info = fields.Many2one('res.partner', string="Company", help='Visiting persons company details')
visit_count = fields.Integer(compute='_no_visit_count', string='# Visits')
_sql_constraints = [
('field_uniq_email_and_id_proof', 'unique (email,id_proof)', "Please give the correct data !"),
]
def _no_visit_count(self):
data = self.env['fo.visit'].search([('visitor', '=', self.ids), ('state', '!=', 'cancel')]).ids
self.visit_count = len(data)
class VisitorProof(models.Model):
_name = 'id.proof'
_rec_name = 'id_proof'
id_proof = fields.Char(string="Name")
code = fields.Char(string="Code")

57
front_office_management/report/fo_property_label.xml

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_property_label">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t>
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-xs-2" style="margin:auto;">
</div>
<center>
<div class="col-xs-8" style="margin:auto">
<table class="table table-condensed" style="border: 3px solid black !important;">
<tr>
<td width="100%">
<p style="text-align:center;padding-top:10px;">
<img t-if="not o.employee.image_1920" t-att-src="'/web/static/src/img/placeholder.png'" height="120" border="1" width="120"/>
<img t-if="o.employee.image_1920" t-att-src="image_data_uri( o.employee.image_1920)" class="float-left" alt="Logo" height="120" border="1" width="120" />
</p>
<p style="text-align:center;">
Name : <strong><span t-field="o.employee.name"/></strong>
</p>
<p style="text-align:center;">
Department : <strong><span t-field="o.employee.department_id.name"/></strong>
</p>
<h4 style="margin-left:50px"><b>Personal Belongings</b></h4>
<table width="90%" style="border:1px solid black;margin-left:15px">
<thead>
<th style="border:1px solid black;" width="13%" >Name</th>
<th style="border:1px solid black;" width="13%" >Count</th>
</thead>
<tbody>
<t t-foreach="o.visitor_belongings" t-as="l">
<t t-if="l.permission=='1'">
<tr>
<td style="border:1px solid black;"><span t-esc="l.property_name" style="font-size:16px;"/></td>
<td style="border:1px solid black;"><span t-esc="l.property_count" style="font-size:16px;"/></td>
</tr>
</t>
</t>
</tbody>
</table>
</td>
</tr>
</table>
</div>
</center>
</div>
</div>
</t>
</t>
</t>
</template>
</data>
</odoo>

70
front_office_management/report/fo_visitor_label.xml

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_visitor_label">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<t t-foreach="docs" t-as="o">
<t>
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-xs-2" style="margin:auto;">
</div>
<center>
<div class="col-xs-8" style="margin:auto">
<br />
<table class="table table-condensed" style="border: 2px solid black !important;">
<tr>
<td width="40%">
<p style="text-align:center;padding-top:10px;">
<img t-if="not o.visitor.visitor_image" t-att-src="'/web/static/src/img/placeholder.png'" height="120" border="1" width="120"/>
<img t-if="o.visitor.visitor_image" t-att-src="image_data_uri(o.visitor.visitor_image)" class="float-left" alt="Logo" height="120" border="1" width="120" />
</p>
<p style="text-align:center;">
<strong><span t-field="o.visitor"/></strong>
</p>
</td>
<td width="60%">
<table>
<tr>
<t t-if="o.visiting_person">
<td>
<p style="text-align:right;padding-top:10px;"><strong>Visitor ID: </strong></p>
<p style="text-align:right;"><strong>Phone: </strong></p>
<t t-if="o.visiting_person"><p style="text-align:right;"><strong>Meeting With : </strong></p></t>
<t t-if="o.visiting_person"><p style="text-align:right;"><strong>Department : </strong></p></t>
</td>
<td>
<p style="text-align:left;padding-top:10px;padding-left:10px;" t-field="o.name"/>
<p style="text-align:left;padding-left:10px;" t-field="o.phone"/>
<t t-if="o.visiting_person"><p style="text-align:left;padding-left:10px;" t-field="o.visiting_person"/></t>
<t t-if="o.visiting_person"><p style="text-align:left;padding-left:10px;" t-field="o.department"/></t>
</td>
</t>
<t t-if="not o.visiting_person">
<td>
<p style="text-align:right;padding-top:30px;"><strong>VisitorID: </strong></p>
<p style="text-align:right;padding-top:30px;"><strong>Phone: </strong></p>
</td>
<td>
<p style="text-align:left;padding-top:30px;" t-field="o.visitor"/>
<p style="text-align:left;padding-top:30px;" t-field="o.phone"/>
</td>
</t>
</tr>
</table>
</td>
</tr>
</table>
</div>
</center>
</div>
</div>
</t>
</t>
</t>
</t>
</template>
</data>
</odoo>

32
front_office_management/report/report.xml

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<report
string="Visitor Pass"
id="action_print_visit_card"
model="fo.visit"
report_type="qweb-pdf"
name="front_office_management.report_visitor_label"
file="front_office_management.report_visitor_label"
/>
<report
string="Visitors Report"
id="action_print_visit_report"
model="fo.visit"
report_type="qweb-pdf"
name="front_office_management.report_visitor_report"
file="front_office_management.report_visitor_report"
/>
<report
string="Property Label"
id="action_print_property_label"
model="fo.property.counter"
report_type="qweb-pdf"
name="front_office_management.report_property_label"
file="front_office_management.report_property_label"
/>
</data>
</odoo>

64
front_office_management/report/visitors_report.xml

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<template id="report_visitor_report">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<t t-foreach="docs" t-as="o">
<div class="page">
<div class="oe_structure" />
<t t-if="o and 'company_id' in o">
<t t-set="company" t-value="o.company_id"> </t>
</t>
<t t-if="not o or not 'company_id' in o">
<t t-set="company" t-value="res_company"> </t>
</t>
<br />
<h3 style="text-align:center;margin-top:50;"><b>Visitor Report</b></h3>
<br/>
<table width="100%" style="margin-left:50px;margin-top:5px;border: None solid black;">
<tr class="tr2">
<td style="width:50px;height:25px;" ><span>Visitor: </span><span t-att-style="style" t-esc="o.visitor.name"/></td>
<td style="width:50px;height:25px;" ><span>Email: </span><span t-att-style="style" t-esc="o.email"/></td>
<td style="width:50px;height:25px;" ><span>phone: </span><span t-att-style="style" t-esc="o.phone"/></td>
</tr>
<tr class="tr2">
<t t-if ="o.visiting_person"><td style="width:50px;height:25px;" ><span>Meeting With : </span><span t-att-style="style" t-esc="o.visiting_person.name"/></td></t>
<t t-if ="o.visiting_person"><td style="width:50px;height:25px;" ><span>Department : </span><span t-att-style="style" t-esc="o.department.name"/></td></t>
</tr>
</table>
<br/>
<br/>
<h4 style="margin-left:50px"><b>In Out Details</b></h4>
<table width="99%" style="margin-left:50px;margin-top:5px;border: None solid black;">
<tr class="tr2">
<td style="width:50px;height:25px;" ><span>Check In : </span><span t-att-style="style" t-esc="o.check_in_date"/></td>
<td style="width:50px;height:25px;" ><span>Check Out : </span><span t-att-style="style" t-esc="o.check_out_date"/></td>
</tr>
</table>
<br/>
<br/>
<h4 style="margin-left:50px"><b>Personal Belongings</b></h4>
<table width="90%" style="border:1px solid black;margin-left:50px">
<thead>
<th style="border:1px solid black;" width="13%" >Name</th>
<th style="border:1px solid black;" width="13%" >Count</th>
</thead>
<tbody>
<t t-foreach="o.visitor_belongings" t-as="l">
<tr>
<td style="border:1px solid black;"><span t-esc="l.property_name" style="font-size:16px;"/></td>
<td style="border:1px solid black;"><span t-esc="l.property_count" style="font-size:16px;"/></td>
</tr>
</t>
</tbody>
</table>
</div>
<p style="page-break-after:always"/>
</t>
</t>
</t>
</template>
</data>
</odoo>

17
front_office_management/security/fo_security.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.module.category" id="module_fo_front_office">
<field name="name">Reception</field>
<field name="sequence">0</field>
<field name="visible" eval="0" />
</record>
<record id="group_receptionist" model="res.groups">
<field name="name">Receptionist</field>
<field name="category_id" ref="module_fo_front_office"/>
</record>
</data>
</odoo>

14
front_office_management/security/ir.model.access.csv

@ -0,0 +1,14 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_fo_visit_receptionist,fo.visit,model_fo_visit,front_office_management.group_receptionist,1,1,1,1
access_fo_visitor_receptionist,fo_visitor,model_fo_visitor,front_office_management.group_receptionist,1,1,1,1
access_fo_belongings_receptionist,fo.belongings,model_fo_belongings,front_office_management.group_receptionist,1,1,1,1
access_id_proof_receptionist,id.proof,model_id_proof,front_office_management.group_receptionist,1,1,1,1
access_fo_property_counter_receptionist,fo.property.counter,model_fo_property_counter,front_office_management.group_receptionist,1,1,1,1
access_fo_purpose_receptionist,fo.purpose,model_fo_purpose,front_office_management.group_receptionist,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_fo_visit_receptionist fo.visit model_fo_visit front_office_management.group_receptionist 1 1 1 1
3 access_fo_visitor_receptionist fo_visitor model_fo_visitor front_office_management.group_receptionist 1 1 1 1
4 access_fo_belongings_receptionist fo.belongings model_fo_belongings front_office_management.group_receptionist 1 1 1 1
5 access_id_proof_receptionist id.proof model_id_proof front_office_management.group_receptionist 1 1 1 1
6 access_fo_property_counter_receptionist fo.property.counter model_fo_property_counter front_office_management.group_receptionist 1 1 1 1
7 access_fo_purpose_receptionist fo.purpose model_fo_purpose front_office_management.group_receptionist 1 1 1 1

BIN
front_office_management/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
front_office_management/static/description/belongings.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
front_office_management/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
front_office_management/static/description/cybrosys-front-office-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

BIN
front_office_management/static/description/cybrosys-front-office-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
front_office_management/static/description/cybrosys-front-office-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
front_office_management/static/description/cybrosys-front-office-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
front_office_management/static/description/cybrosys-front-office-5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
front_office_management/static/description/cybrosys-front-office-6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
front_office_management/static/description/cybrosys-front-office-7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
front_office_management/static/description/cybrosys-front-office-8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

BIN
front_office_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

398
front_office_management/static/description/index.html

@ -0,0 +1,398 @@
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;">
Front Office Management
</h2>
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;">
Manages Visitors and Employee Belongings
</h3>
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;">
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a>
</h5>
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;">
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 180px;"/>
</div>
</a>
</div>
</section>
<section class="oe_container" style="padding: 3% 0% 3% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Overview
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
This app will help you to manage the visitors coming to your office by issuing entry passes and handling their belongings.
The app can also manage the belongings of your employees.
</h3>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Features
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage visitors.
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Issue Visitor Pass.
</h3><h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Keep Check in, Check out Details of Visitors.
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Visitor Belongings.</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Print Report Of visitor.</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Employee Belongings.</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Print Property Label.</h3>
</div>
</section>
<section class="oe_container" style="padding: 3% 0% 0% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Screenshots
</h2>
<h3>Visitors</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Create visitors.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-1.png" alt="" style="width: 95%;"/>
</div>
<h3>Visits</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Add visiting details.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-2.png" alt="" style="width: 95%;"/>
</div>
<h3>Visitor Pass</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Visitor Management -> Visits -> Print -> Visitor Pass
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-3.png" alt="" style="width: 95%;"/>
</div>
<h3>Visitor Report</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Visitor Management -> Visits -> Print -> Visitors Report
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-4.png" alt="" style="width: 95%;"/>
</div>
<h3>Today's Visits</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-5.png" alt="" style="width: 95%;"/>
</div>
<h3>Employee Belongings</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Here you can specify the field 'Permission' with the values of Allowed,Not Allowed and Allowed with permission.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-6.png" alt="" style="width: 95%;"/>
</div>
<h3>Property Label</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Print the properties name that are not allowed to enter to the office.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-7.png" alt="" style="width: 95%;"/>
</div>
<h3>Receptionist</h3>
<h3 class="oe_slogan" style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
We can set 'Receptionist' access from users form.
</h3>
<div class="oe_row oe_spaced">
<img src="cybrosys-front-office-8.png" alt="" style="width: 95%;"/>
</div>
</div>
</section>
<section class="oe_container" style="padding: 7px 0% 0% 3%;">
<div class="oe_row oe_spaced">
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Services
</h2>
<div style="display:flex;padding-top: 20px;justify-content: space-between;">
<div style="flex-basis: 18%;">
<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">
Odoo Customization
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Implementation </a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Integration
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Support</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Hire Odoo Developers</a>
</h3>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Industries
</h2>
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;">
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Trading
</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easily procure and sell your products.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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;">
<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">
Manufacturing</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Plan, track and schedule your operations.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Restaurant</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Run your bar or restaurant methodical.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
POS</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easy configuring and convivial selling.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
E-commerce & Website</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Mobile friendly, awe-inspiring product pages.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Hotel Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
An all-inclusive hotel management application.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Education</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
A Collaborative platform for educational management.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Service Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Keep track of services and invoice accordingly.
</h3>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;">
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;">
<div>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-phone"></i> Contact Us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block">
<div>
<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;padding-left: 3px;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://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
</div>
</div>
</section>

BIN
front_office_management/static/description/label.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
front_office_management/static/description/pass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
front_office_management/static/description/report.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
front_office_management/static/description/todays.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
front_office_management/static/description/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

BIN
front_office_management/static/description/visit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
front_office_management/static/description/visitor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

90
front_office_management/views/fo_property_counter.xml

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="fo_property_counter_form_view">
<field name="name">Property Counter</field>
<field name="model">fo.property.counter</field>
<field name="arch" type="xml">
<form string="Visits">
<header>
<button name="action_prop_in"
string="Take In"
type="object"
states="draft"
class="oe_highlight"
/>
<button name="action_prop_out"
string="Take Out"
type="object"
states="prop_in"
class="oe_highlight"
/>
<button name="action_cancel"
string="Cancel"
type="object"
states="draft"
attrs = "{'invisible': [('state', 'in', ('prop_in','prop_out'))]}"/>
<field name="state"
widget="statusbar"
statusbar_visible="draft,prop_in,prop_out,cancel"
/>
</header>
<sheet>
<group>
<group>
<field name="employee"/>
<field name="date"/>
</group>
<group>
</group>
</group>
<notebook>
<page string="Personal belongings">
<field name="visitor_belongings" widget="one2many_list" nolabel="1">
<tree decoration-success="permission == '0' or permission == '2'" decoration-danger="permission == '1'" string="Items" editable="bottom">
<field name="number"/>
<field name="property_name"/>
<field name="property_count"/>
<field name="permission"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="fo_property_counter_tree_view">
<field name="name">Property Counter</field>
<field name="model">fo.property.counter</field>
<field name="arch" type="xml">
<tree string="Visits" decoration-success="state == 'prop_in'" decoration-muted="state == 'prop_out'">
<field name="employee"/>
<field name="date"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="fo_property_counter_action">
<field name="name">Property Counter</field>
<field name="res_model">fo.property.counter</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Record Personal Belongings.
</p>
</field>
</record>
<menuitem id="fo_property_counter_menu" name="Property Counter" parent="front_office_mgmnt_main"
sequence="4"/>
<menuitem id="fo_property_counter_menu_child" name="Property Counter" parent="fo_property_counter_menu" action="fo_property_counter_action"
groups="base.group_user" sequence="2"/>
</data>
</odoo>

186
front_office_management/views/fo_visit.xml

@ -0,0 +1,186 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="fo_visit_form_view">
<field name="name">Visits</field>
<field name="model">fo.visit</field>
<field name="arch" type="xml">
<form string="Visits">
<header>
<button name="action_check_in"
string="Check In"
type="object"
states="draft"
class="oe_highlight"
/>
<button name="action_check_out"
string="Check Out"
type="object"
states="check_in"
class="oe_highlight"
/>
<button name="action_cancel"
string="Cancel"
type="object"
states="draft"
attrs = "{'invisible': [('state', 'in', ('check_in','check_out'))]}"/>
<field name="state"
widget="statusbar"
statusbar_visible="draft,check_in,check_out,cancel"
/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="visitor"/>
<field name="phone"/>
<field name="email"/>
</group>
<group string="Check In/Out Details">
<field name="check_in_date" />
<field name="check_out_date" />
</group>
</group>
<group string="Purpose Of Visit">
<group>
<field name="visiting_person"/>
<field name="department"/>
<field name="reason" widget="many2many_tags"/>
</group>
<group>
</group>
</group>
<notebook>
<page string="Personal Belongings">
<field name="visitor_belongings" widget="one2many_list" nolabel="1">
<tree decoration-success="permission == '0' or permission == '2'" decoration-danger="permission == '1'" string="Items" editable="bottom">
<field name="number"/>
<field name="property_name"/>
<field name="property_count"/>
<field name="permission"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="fo_visit_tree_view">
<field name="name">Visits</field>
<field name="model">fo.visit</field>
<field name="arch" type="xml">
<tree string="Visits" decoration-success="state == 'check_in'" decoration-muted="state == 'check_out'">
<field name="visitor"/>
<field name="reason"/>
<field name="visiting_person"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="fo_visit_action">
<field name="name">Visits</field>
<field name="res_model">fo.visit</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create Visits.
</p>
<p>
The check in time will be automatically filled when the visitor check in to the office.
</p>
<p>
The check out time automatically filled when the visitor check out from office.
</p>
</field>
</record>
<record id="fo_today_visit_action" model="ir.actions.act_window">
<field name="name">Today's Visits</field>
<field name="res_model">fo.visit</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('check_in_date', '&gt;=',((context_today()-datetime.timedelta(days=0)).strftime('%Y-%m-%d 00:00:00'))),
('check_in_date', '&lt;=',((context_today()-datetime.timedelta(days=0)).strftime('%Y-%m-%d 23:59:59')))]
</field>
</record>
<record model="ir.sequence" id="seq_lab_visit">
<field name="name">Visits</field>
<field name="code">fo.visit</field>
<field name="prefix">VID</field>
<field name="padding">3</field>
<field name="company_id" eval="False" />
</record>
<record model="ir.ui.view" id="fo_belongings_form_view">
<field name="name">Belongings</field>
<field name="model">fo.belongings</field>
<field name="arch" type="xml">
<form string="Belongings">
<sheet>
<group>
<group>
<field name="property_name"/>
</group>
<group>
<field name="property_count"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!--Proof Form view-->
<record model="ir.ui.view" id="fo_id_proof_form_view">
<field name="name">ID Proof</field>
<field name="model">id.proof</field>
<field name="arch" type="xml">
<form string="ID Proof">
<sheet>
<group>
<group>
<field name="id_proof"/>
</group>
<group>
<field name="code"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!--visiting purpose view-->
<record model="ir.ui.view" id="fo_visiting_purpose_form_view">
<field name="name">Visiting Purpose</field>
<field name="model">fo.purpose</field>
<field name="arch" type="xml">
<form string="Visiting Purpose">
<sheet>
<group>
<group>
<field name="name"/>
</group>
<group>
<field name="description"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>

119
front_office_management/views/fo_visitor.xml

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="fo_visitor_form_view">
<field name="name">Visitors</field>
<field name="model">fo.visitor</field>
<field name="arch" type="xml">
<form string="Visitors">
<sheet>
<div class="oe_right oe_button_box" name="button_box">
<button class="oe_inline oe_stat_button" name="%(fo_visit_action)d" type="action" icon="fa-arrows-v"
context="{'default_visitor': [active_id],'search_default_visitor': [active_id]}">
<field name="visit_count" widget="statinfo" string="Visits" style="margin-right:50px"/>
</button>
</div>
<field name="visitor_image" widget="image" class="oe_avatar" style="margin-right:50px"/>
<div name="title_name" class="oe_title">
<h1>
<table>
<tr>
<td>
<field name="name"
placeholder="FullName"
style="padding-right:10px" />
</td>
</tr>
</table>
</h1>
</div>
<group>
<group>
<label for="street" string="Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
<field name="company_info"/>
</group>
<group>
<field name="phone"/>
<field name="email"/>
<field name="id_proof" />
<field name="id_proof_no"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="fo_visitor_kanban_view" model="ir.ui.view">
<field name="name">fo.visitor.kanban</field>
<field name="model">fo.visitor</field>
<field name="arch" type="xml">
<kanban>
<field name="id"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click">
<div class="o_kanban_image">
<img t-att-src="kanban_image('fo.visitor', 'visitor_image', record.id.value)"/>
</div>
<div class="oe_kanban_details">
<strong>
<ul>
<li>Name :<field name="name"/></li>
<li>Phone:<field name="phone"/></li>
</ul>
</strong>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record model="ir.ui.view" id="fo_visitor_tree_view">
<field name="name">Visitors</field>
<field name="model">fo.visitor</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string='Visitors'>
<field name="name"/>
<field name="phone"/>
<field name="company_info"/>
</tree>
</field>
</record>
<record id="fo_visitor_action" model="ir.actions.act_window">
<field name="name">Visitors</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fo.visitor</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_id" ref="fo_visitor_kanban_view"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to Create New Visitor.
</p>
</field>
</record>
<menuitem id="front_office_mgmnt_main" name="Front Office" sequence="2"/>
<menuitem id="visitor_mgmnt_menu" name="Visitor Management" parent="front_office_mgmnt_main" sequence="1"/>
<menuitem id="visitor_menu" name="Visitor" parent="visitor_mgmnt_menu" action="fo_visitor_action"
groups="base.group_user" sequence="1"/>
<menuitem id="fo_visit_menu" name="Visits" parent="visitor_mgmnt_menu" action="fo_visit_action"
sequence="2"/>
<menuitem id="fo_today_visit_menu" name="Today's Visits" parent="front_office_mgmnt_main" sequence="2"/>
<menuitem id="fo_today_visit_menu_child" name="Today's Visits" parent="fo_today_visit_menu" action="fo_today_visit_action"
groups="base.group_user" sequence="2"/>
</data>
</odoo>

2
hr_payroll_community/__manifest__.py

@ -3,7 +3,7 @@
{
'name': 'Odoo13 Payroll',
'category': 'Generic Modules/Human Resources',
'version': '13.0.1.1.1',
'version': '13.0.1.2.1',
'author': 'Odoo SA,Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',

40
medical_lab_management/README.rst

@ -0,0 +1,40 @@
Medical Lab Management v12
==========================
Helps You To Manage Medical Lab Operations.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developers: Anusha P P @ cybrosys
Niyas Raphy @ cybrosys
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 `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
medical_lab_management/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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

56
medical_lab_management/__manifest__.py

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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': "Medical Lab Management",
'version': '13.0.1.0.1',
'summary': """Manage Medical Lab Operations.""",
'description': """Manage Medical Lab General Operations, Odoo13, Odoo 13""",
'author': "Cybrosys Techno Solutions",
'maintainer': 'Cybrosys Techno Solutions',
'company': "Cybrosys Techno Solutions",
'website': "https://www.cybrosys.com",
'category': 'Industries',
'depends': ['base', 'mail', 'account'],
'data': [
'security/lab_users.xml',
'security/ir.model.access.csv',
'views/res_partner.xml',
'views/lab_patient_view.xml',
'views/test_unit_view.xml',
'views/lab_test_type.xml',
'views/lab_test_content_type.xml',
'views/physician_specialty.xml',
'views/physician_details.xml',
'views/lab_request.xml',
'views/lab_appointment.xml',
'views/account_invoice.xml',
'report/report.xml',
'report/lab_test_report.xml',
'report/lab_patient_card.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': True,
}

9
medical_lab_management/doc/RELEASE_NOTES.md

@ -0,0 +1,9 @@
## Module <medical_lab_management>
#### 01.11.2019
#### Version 13.0.1.0.0
#### Migration
Migration Of Medical Lab Management

33
medical_lab_management/models/__init__.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 physician_speciality
from . import res_partner
from . import lab_patient
from . import testing_unit
from . import lab_test_type
from . import lab_test_content_type
from . import lab_appointment
from . import lab_request
from . import account_invoice

37
medical_lab_management/models/account_invoice.py

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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, api
class LabRequestInvoices(models.Model):
_inherit = 'account.move'
is_lab_invoice = fields.Boolean(string="Is Lab Invoice")
lab_request = fields.Many2one('lab.appointment', string="Lab Appointment", help="Source Document")
def action_invoice_paid(self):
res = super(LabRequestInvoices, self).action_invoice_paid()
lab_app_obj = self.env['lab.appointment'].search([('id', '=', self.lab_request.id)])
for obj in lab_app_obj:
obj.write({'state': 'invoiced'})
return res

198
medical_lab_management/models/lab_appointment.py

@ -0,0 +1,198 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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/>.
#
#############################################################################
import datetime
from odoo.exceptions import UserError
from odoo import fields, models, api, _
class Appointment(models.Model):
_name = 'lab.appointment'
_inherit = ['mail.thread']
_rec_name = 'name'
_description = "Appointment"
_order = 'appointment_date'
user_id = fields.Many2one('res.users', 'Responsible', readonly=True)
patient_id = fields.Many2one('lab.patient', string='Patient', required=True, select=True,
help='Patient Name')
name = fields.Char(string='Appointment ID', readonly=True, default=lambda self: _('New'))
date = fields.Datetime(string='Requested Date', default=lambda s: fields.Datetime.now(),
help="This is the date in which patient appointment is noted")
appointment_date = fields.Datetime(string='Appointment Date', default=lambda s: fields.Datetime.now(),
help="This is the appointment date")
physician_id = fields.Many2one('res.partner', string='Referred By', select=True)
comment = fields.Text(string='Comments')
appointment_lines = fields.One2many('lab.appointment.lines', 'test_line_appointment', string="Test Request")
request_count = fields.Integer(compute="_compute_state", string='# of Requests', copy=False, default=0)
inv_count = fields.Integer(compute="_compute_state", string='# of Invoices', copy=False, default=0)
state = fields.Selection([
('draft', 'Draft'),
('confirm', 'Confirmed'),
('request_lab', 'Lab Requested'),
('completed', 'Test Result'),
('to_invoice', 'To Invoice'),
('invoiced', 'Done'),
('cancel', 'Cancelled'),
], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft',
)
priority = fields.Selection([
('0', 'Low'),
('1', 'Normal'),
('2', 'High')
], size=1)
_defaults = {
'priority': '0',
}
@api.model
def create(self, vals):
if vals:
vals['name'] = self.env['ir.sequence'].next_by_code('lab.appointment') or _('New')
result = super(Appointment, self).create(vals)
return result
def _compute_state(self):
for obj in self:
obj.request_count = self.env['lab.request'].search_count([('app_id', '=', obj.id)])
obj.inv_count = self.env['account.move'].search_count([('lab_request', '=', obj.id)])
def create_invoice(self):
invoice_obj = self.env["account.move"]
invoice_line_obj = self.env["account.move.line"]
journal = self.env['account.journal'].search([('type', '=', 'sale')], limit=1)
prd_account_id = journal.default_credit_account_id.id
for lab in self:
lab.write({'state': 'to_invoice'})
if lab.patient_id:
curr_invoice = {
'partner_id': lab.patient_id.patient.id,
# 'account_id': lab.patient_id.patient.property_account_receivable_id.id,
'state': 'draft',
'type': 'out_invoice',
'invoice_date': str(datetime.datetime.now()),
'invoice_origin': "Lab Test# : " + lab.name,
# 'target': 'new',
'lab_request': lab.id,
'is_lab_invoice': True,
}
inv_ids = invoice_obj.create(curr_invoice)
inv_id = inv_ids.id
if inv_ids:
journal = self.env['account.journal'].search([('type', '=', 'sale')], limit=1)
prd_account_id = journal.default_credit_account_id.id
list_value = []
if lab.appointment_lines:
for line in lab.appointment_lines:
list_value.append((0,0, {
'name': line.lab_test.lab_test,
'price_unit': line.cost,
'quantity': 1.0,
'account_id': prd_account_id,
'move_id': inv_id,
}))
print(list_value)
inv_ids.write({'invoice_line_ids': list_value})
# invoice_line_obj.update({
# 'name': line.lab_test.lab_test,
# 'price_unit': line.cost,
# 'quantity': 1.0,
# 'account_id': prd_account_id,
# 'move_id': inv_id,
# })
self.write({'state': 'invoiced'})
view_id = self.env.ref('account.view_move_form').id
return {
'view_mode': 'form',
'res_model': 'account.move',
'view_id': view_id,
'type': 'ir.actions.act_window',
'name': _('Lab Invoices'),
'res_id': inv_id
}
def action_request(self):
if self.appointment_lines:
for line in self.appointment_lines:
data = self.env['lab.test'].search([('lab_test', '=', line.lab_test.lab_test)])
self.env['lab.request'].create({'lab_request_id': self.name,
'app_id': self.id,
'lab_requestor': self.patient_id.id,
'lab_requesting_date': self.appointment_date,
'test_request': line.lab_test.id,
'request_line': [(6, 0, [x.id for x in data.test_lines])],
})
self.state = 'request_lab'
else:
raise UserError(_('Please Select Lab Test.'))
def confirm_appointment(self):
message_body = "Dear " + self.patient_id.patient.name + "," + "<br>Your Appointment Has been Confirmed " \
+ "<br>Appointment ID : " + self.name + "<br>Date : " + str(self.appointment_date) + \
'<br><br>Thank you'
template_obj = self.env['mail.mail']
template_data = {
'subject': 'Appointment Confirmation',
'body_html': message_body,
'email_from': self.env.user.company_id.email,
'email_to': self.patient_id.email
}
template_id = template_obj.create(template_data)
template_obj.send(template_id)
self.write({'state': 'confirm'})
def cancel_appointment(self):
return self.write({'state': 'cancel'})
class LabAppointmentLines(models.Model):
_name = 'lab.appointment.lines'
lab_test = fields.Many2one('lab.test', string="Test")
cost = fields.Float(string="Cost")
requesting_date = fields.Date(string="Date")
test_line_appointment = fields.Many2one('lab.appointment', string="Appointment")
@api.onchange('lab_test')
def cost_update(self):
if self.lab_test:
self.cost = self.lab_test.test_cost
class LabPatientInherit(models.Model):
_inherit = 'lab.patient'
app_count = fields.Integer(compute="_compute_state", string='# of Appointments', copy=False, default=0)
def _compute_state(self):
for obj in self:
obj.app_count = self.env['lab.appointment'].search_count([('patient_id', '=', obj.id)])

78
medical_lab_management/models/lab_patient.py

@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 dateutil.relativedelta import relativedelta
from odoo import models, fields, api, _
class LabPatient(models.Model):
_name = 'lab.patient'
_rec_name = 'patient'
_description = 'Patient'
patient = fields.Many2one('res.partner', string='Partner', required=True)
patient_image = fields.Binary(string='Photo')
patient_id = fields.Char(string='Patient ID', readonly=True)
name = fields.Char(string='Patient ID', default=lambda self: _('New'))
title = fields.Selection([
('ms', 'Miss'),
('mister', 'Mister'),
('mrs', 'Mrs'),
], string='Title', default='mister', required=True)
emergency_contact = fields.Many2one(
'res.partner', string='Emergency Contact')
gender = fields.Selection(
[('m', 'Male'), ('f', 'Female'),
('ot', 'Other')], 'Gender', required=True)
dob = fields.Date(string='Date Of Birth', required=True)
age = fields.Char(string='Age', compute='compute_age')
blood_group = fields.Selection(
[('A+', 'A+ve'), ('B+', 'B+ve'), ('O+', 'O+ve'), ('AB+', 'AB+ve'),
('A-', 'A-ve'), ('B-', 'B-ve'), ('O-', 'O-ve'), ('AB-', 'AB-ve')],
'Blood Group')
visa_info = fields.Char(string='Visa Info', size=64)
id_proof_number = fields.Char(string='ID Proof Number')
note = fields.Text(string='Note')
date = fields.Datetime(string='Date Requested', default=lambda s: fields.Datetime.now(), invisible=True)
phone = fields.Char(string="Phone", required=True)
email = fields.Char(string="Email", required=True)
def compute_age(self):
for data in self:
if data.dob:
dob = fields.Datetime.from_string(data.dob)
date = fields.Datetime.from_string(data.date)
delta = relativedelta(date, dob)
data.age = str(delta.years) + ' years'
@api.model
def create(self, vals):
sequence = self.env['ir.sequence'].next_by_code('lab.patient')
vals['name'] = sequence or _('New')
result = super(LabPatient, self).create(vals)
return result
@api.onchange('patient')
def detail_get(self):
self.phone = self.patient.phone
self.email = self.patient.email

128
medical_lab_management/models/lab_request.py

@ -0,0 +1,128 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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/>.
#
#############################################################################
import datetime
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class LabRequest(models.Model):
_name = 'lab.request'
_inherit = ['mail.thread']
_rec_name = 'lab_request_id'
_description = 'Lab Request'
name = fields.Char(string='Lab Test', size=16, readonly=True, required=True, help="Lab result ID", default=lambda *a: '#')
lab_request_id = fields.Char(string='Appointment ID', help="Lab appointment ID")
app_id = fields.Many2one('lab.appointment', string='Appointment')
lab_requestor = fields.Many2one('lab.patient', string='Patient', required=True, select=True,
help='Patient Name')
test_request = fields.Many2one('lab.test', string='Test')
lab_requesting_date = fields.Datetime(string='Requested Date')
comment = fields.Text('Comment')
request_line = fields.One2many('lab.test.attribute', 'test_request_reverse', string="Test Lines")
state = fields.Selection([
('draft', 'Draft'),
('sample_collection', 'Sample Collected'),
('test_in_progress', 'Test In Progress'),
('completed', 'Completed'),
('cancel', 'Cancelled'),
], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft')
@api.model
def create(self, vals):
sequence = self.env['ir.sequence'].next_by_code('lab.request')
vals['name'] = sequence or '/'
return super(LabRequest, self).create(vals)
def set_to_sample_collection(self):
return self.write({'state': 'sample_collection'})
def set_to_test_in_progress(self):
return self.write({'state': 'test_in_progress'})
def cancel_lab_test(self):
return self.write({'state': 'cancel'})
def set_to_test_completed(self):
if not self.request_line:
raise ValidationError(_("No Result Lines Entered !"))
req_obj = self.env['lab.request'].search_count([('app_id', '=', self.app_id.id),
('id', '!=', self.id)])
req_obj_count = self.env['lab.request'].search_count([('app_id', '=', self.app_id.id),
('id', '!=', self.id),
('state', '=', 'completed')])
if req_obj == req_obj_count:
app_obj = self.env['lab.appointment'].search([('id', '=', self.app_id.id)])
app_obj.write({'state': 'completed'})
return self.write({'state': 'completed'})
def print_lab_test(self):
return self.env.ref('medical_lab_management.print_lab_test').report_action(self)
def lab_invoice_create(self):
invoice_obj = self.env["account.move"]
invoice_line_obj = self.env["account.move.line"]
for lab in self:
if lab.lab_requestor:
curr_invoice = {
'partner_id': lab.lab_requestor.patient.id,
'account_id': lab.lab_requestor.patient.property_account_receivable_id.id,
'state': 'draft',
'type': 'out_invoice',
'date_invoice': datetime.datetime.now(),
'origin': "Lab Test# : " + lab.name,
'target': 'new',
'lab_request': lab.id,
'is_lab_invoice': True
}
inv_ids = invoice_obj.create(curr_invoice)
inv_id = inv_ids.id
if inv_ids:
journal = self.env['account.journal'].search([('type', '=', 'sale')], limit=1)
prd_account_id = journal.default_credit_account_id.id
if lab.test_request:
curr_invoice_line = {
'name': "Charge for lab test",
'price_unit': lab.test_request.test_cost or 0,
'quantity': 1.0,
'account_id': prd_account_id,
'invoice_id': inv_id,
}
invoice_line_obj.create(curr_invoice_line)
self.write({'state': 'invoiced'})
form_view_ref = self.env.ref('account.view_move_form', False)
tree_view_ref = self.env.ref('account.view_move_tree', False)
return {
'domain': "[('id', '=', " + str(inv_id) + ")]",
'name': 'Lab Invoices',
'view_mode': 'form',
'res_model': 'account.move',
'type': 'ir.actions.act_window',
'views': [(tree_view_ref.id, 'tree'), (form_view_ref.id, 'form')],
}

37
medical_lab_management/models/lab_test_content_type.py

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 LabTestContentType(models.Model):
_name = 'lab.test.content_type'
_rec_name = 'content_type_name'
_description = "Content"
content_type_name = fields.Char(string="Name", required=True, help="Content type name")
content_type_code = fields.Char(string="Code")
parent_test = fields.Many2one('lab.test', string="Test Category")

46
medical_lab_management/models/lab_test_type.py

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 LabTestType(models.Model):
_name = 'lab.test'
_description = "Lab Test"
_rec_name = 'lab_test'
_inherit = ['mail.thread']
lab_test = fields.Char(string="Test Name", required=True, help="Name of lab test ")
lab_test_code = fields.Char(string="Test Code", required=True)
test_lines = fields.One2many('lab.test.attribute', 'test_line_reverse', string="Attribute")
test_cost = fields.Float(string="Cost", required=True)
class LabTestAttribute(models.Model):
_name = 'lab.test.attribute'
test_content = fields.Many2one('lab.test.content_type', string="Content")
result = fields.Char(string="Result")
unit = fields.Many2one('test.unit', string="Unit")
interval = fields.Char(string="Reference Intervals")
test_line_reverse = fields.Many2one('lab.test', string="Attribute")
test_request_reverse = fields.Many2one('lab.request', string="Request")

35
medical_lab_management/models/physician_speciality.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 PhysicianSpeciality(models.Model):
_name = 'physician.speciality'
_description = 'Medical Specialty'
code = fields.Char(string='ID')
name = fields.Char(string='Specialty', help='Name of the specialty', required=True)
_sql_constraints = [
('name_uniq', 'UNIQUE(name)', 'Name must be unique!'),
]

34
medical_lab_management/models/res_partner.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 ResPartnerPatient(models.Model):
_inherit = 'res.partner'
is_patient = fields.Boolean(string='Is Patient')
is_physician = fields.Boolean(string='Is Physician')
speciality = fields.Many2one('physician.speciality', string='Speciality')
hospital = fields.Many2one('res.partner', string='Hospital')

32
medical_lab_management/models/testing_unit.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P @ cybrosys and Niyas Raphy @ cybrosys(odoo@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 TestingUnit(models.Model):
_name = 'test.unit'
_rec_name = 'code'
_description = "Test Unit"
unit = fields.Char(string="Unit", required=True)
code = fields.Char(string="code", required=True)

63
medical_lab_management/report/lab_patient_card.xml

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_patient_label">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<t t-foreach="docs" t-as="o">
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-xs-2" style="margin:auto;">
</div>
<center>
<br/>
<div class="col-xs-8" style="margin:auto">
<table class="table table-condensed" style="border: 3px solid black !important;">
<tr>
<td width="40%">
<p style="text-align:center;padding-top:10px;">
<img t-if="not o.patient_image" t-att-src="'/web/static/src/img/placeholder.png'" height="120" border="1" width="120"/>
<img t-if="o.patient_image" t-att-src="'data:image/png;base64,%s' %o.patient_image" height="120" border="1" width="120"/>
</p>
<p style="text-align:center;">
<strong><span t-field="o.patient.name"/></strong>
</p>
</td>
<td width="60%">
<table>
<tr>
<td>
<p style="text-align:right;"><strong>Patient ID :</strong></p>
<p style="text-align:right;"><strong>Sex :</strong></p>
<p style="text-align:right;"><strong>Age :</strong></p>
</td>
<td>
<p style="text-align:left;" t-field="o.name"/>
<t t-if="o.gender=='m'">
<p style="text-align:left;">Male</p>
</t>
<t t-if="o.gender=='ot'">
<p style="text-align:left;">Other</p>
</t>
<t t-if="o.gender=='f'">
<p style="text-align:left;">Female</p>
</t>
<p style="text-align:left;" t-field="o.age"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</center>
</div>
</div>
<p style="page-break-after:always"></p>
</t>
</t>
</t>
</template>
</data>
</odoo>

50
medical_lab_management/report/lab_test_report.xml

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_patient_labtest">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<t t-foreach="docs" t-as="o">
<div class="page">
<br />
<h3 style="text-decoration:underline;text-align:center;"><b>Lab Test Report</b></h3>
<br/>
<br/>
<table width="99%" style="margin-left:50px;margin-top:5px;border: None solid black;">
<tr>
<td style="width:50px;height:25px" ><span>Patient: </span><span t-att-style="style" t-esc="o.lab_requestor.patient.name"/></td>
<td style="width:50px;height:25px" ><span>Test : </span><span t-att-style="style" t-esc="o.test_request.lab_test"/></td>
<td style="width:50px;height:25px" ><span>Date: </span><span t-att-style="style" t-esc="o.lab_requesting_date"/></td>
</tr>
</table>
<br/>
<br/>
<table width="99%" style="border:1px solid black;padding-left:1.16cm;">
<thead>
<th style="border:1px solid black;text-align:center;" width="13%" class="td4">Content</th>
<th style="border:1px solid black;text-align:center;" width="13%" class="td4">Unit</th>
<th style="border:1px solid black;text-align:center;" width="13%" class="td4">Normal Range</th>
<th style="border:1px solid black;text-align:center;" width="13%" class="td4">Result</th>
</thead>
<tbody>
<t t-foreach="o.request_line" t-as="l">
<tr style="border:1px solid black">
<td style="border:1px solid black;text-align:center;"><span t-esc="l.test_content.content_type_name" style="font-size:16px;"/></td>
<td style="border:1px solid black;text-align:center;"><span t-esc="l.unit.code" style="font-size:16px;"/></td>
<td style="border:1px solid black;text-align:center;"><span t-esc="l.interval" style="font-size:16px;"/></td>
<td style="border:1px solid black;text-align:center;"><span t-esc="l.result" style="font-size:16px;"/></td>
</tr>
</t>
</tbody>
</table>
<br/>
<br/>
</div>
<p style="page-break-after:always"></p>
</t>
</t>
</t>
</template>
</data>
</odoo>

23
medical_lab_management/report/report.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<report
string="Lab Test Result"
id="print_lab_test"
model="lab.request"
report_type="qweb-pdf"
name="medical_lab_management.report_patient_labtest"
file="medical_lab_management.report_patient_labtest"
/>
<report
string="Patient Card"
id="action_report_patient_label"
model="lab.patient"
report_type="qweb-pdf"
name="medical_lab_management.report_patient_label"
file="medical_lab_management.report_patient_label"
/>
</data>
</odoo>

19
medical_lab_management/security/ir.model.access.csv

@ -0,0 +1,19 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_lab_request_user,lab.request,model_lab_request,group_lab_management_user,1,1,1,1
access_lab_patient_user,lab.patient,model_lab_patient,group_lab_management_user,1,1,1,1
access_lab_appointment_user,lab.appointment,model_lab_appointment,group_lab_management_user,1,1,1,1
access_test_unit_user,test.unit,model_test_unit,group_lab_management_user,1,0,0,0
access_lab_physician_user,physician.speciality,model_physician_speciality,group_lab_management_user,1,1,1,1
access_lab_test_user,lab.test,model_lab_test,group_lab_management_user,1,0,0,0
access_lab_appointment_line_user,lab.appointment.lines,model_lab_appointment_lines,group_lab_management_user,1,1,1,1
access_lab_test_content_type_user,lab.test.content_type,model_lab_test_content_type,group_lab_management_user,1,0,0,0
access_lab_test_attribute_user,lab.test.attribute,model_lab_test_attribute,group_lab_management_user,1,1,1,1
access_lab_request_technician,lab.request,model_lab_request,group_lab_management_technician,1,1,1,1
access_lab_patient_technician,lab.patient,model_lab_patient,group_lab_management_technician,1,1,1,1
access_lab_appointment_technician,lab.appointment,model_lab_appointment,group_lab_management_technician,1,1,1,1
access_test_unit_technician,test.unit,model_test_unit,group_lab_management_technician,1,1,1,1
access_lab_physician_technician,physician.speciality,model_physician_speciality,group_lab_management_technician,1,0,0,0
access_lab_test_technician,lab.test,model_lab_test,group_lab_management_technician,1,1,1,1
access_lab_test_content_type_technician,lab.test.content_type,model_lab_test_content_type,group_lab_management_technician,1,1,1,1
access_lab_appointment_line_technician,lab.appointment.lines,model_lab_appointment_lines,group_lab_management_technician,1,1,1,1
access_lab_test_attribute_technician,lab.test.attribute,model_lab_test_attribute,group_lab_management_technician,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_lab_request_user lab.request model_lab_request group_lab_management_user 1 1 1 1
3 access_lab_patient_user lab.patient model_lab_patient group_lab_management_user 1 1 1 1
4 access_lab_appointment_user lab.appointment model_lab_appointment group_lab_management_user 1 1 1 1
5 access_test_unit_user test.unit model_test_unit group_lab_management_user 1 0 0 0
6 access_lab_physician_user physician.speciality model_physician_speciality group_lab_management_user 1 1 1 1
7 access_lab_test_user lab.test model_lab_test group_lab_management_user 1 0 0 0
8 access_lab_appointment_line_user lab.appointment.lines model_lab_appointment_lines group_lab_management_user 1 1 1 1
9 access_lab_test_content_type_user lab.test.content_type model_lab_test_content_type group_lab_management_user 1 0 0 0
10 access_lab_test_attribute_user lab.test.attribute model_lab_test_attribute group_lab_management_user 1 1 1 1
11 access_lab_request_technician lab.request model_lab_request group_lab_management_technician 1 1 1 1
12 access_lab_patient_technician lab.patient model_lab_patient group_lab_management_technician 1 1 1 1
13 access_lab_appointment_technician lab.appointment model_lab_appointment group_lab_management_technician 1 1 1 1
14 access_test_unit_technician test.unit model_test_unit group_lab_management_technician 1 1 1 1
15 access_lab_physician_technician physician.speciality model_physician_speciality group_lab_management_technician 1 0 0 0
16 access_lab_test_technician lab.test model_lab_test group_lab_management_technician 1 1 1 1
17 access_lab_test_content_type_technician lab.test.content_type model_lab_test_content_type group_lab_management_technician 1 1 1 1
18 access_lab_appointment_line_technician lab.appointment.lines model_lab_appointment_lines group_lab_management_technician 1 1 1 1
19 access_lab_test_attribute_technician lab.test.attribute model_lab_test_attribute group_lab_management_technician 1 1 1 1

20
medical_lab_management/security/lab_users.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.module.category" id="module_category_lab_management">
<field name="name">Lab Management</field>
</record>
<record id="group_lab_management_user" model="res.groups">
<field name="name">Lab User</field>
<field name="category_id" ref="module_category_lab_management"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_lab_management_technician" model="res.groups">
<field name="name">Lab Manager</field>
<field name="category_id" ref="module_category_lab_management"/>
<field name="implied_ids" eval="[(4, ref('group_lab_management_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
</odoo>

BIN
medical_lab_management/static/description/app.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
medical_lab_management/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
medical_lab_management/static/description/card.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
medical_lab_management/static/description/content.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
medical_lab_management/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
medical_lab_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

446
medical_lab_management/static/description/index.html

@ -0,0 +1,446 @@
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;">
Medical Lab Management
</h2>
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;">
Manage Lab Activities
</h3>
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;">
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a>
</h5>
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;">
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 180px;"/>
</div>
</a>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 3% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Overview
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
This app helps the user to systematically perform the activities of a Medical Laboratory.
The app simplifies the activities like Patient Management, Appointment Management, Test Requests Management, Lab Results Management, and so on.
</h3>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 10% 0% 25% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Features
</h2>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Patients
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Issue Patient Card
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Referrals of Patients
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Appointments
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Mail Notification For Appointments
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Manage Lab Requests
</h3>
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;">
<img src="https://www.cybrosys.com/images/ico-tick.png">
Print Lab Test Result Of Patient
</h3>
</div>
</section>
<section class="oe_container" style="padding: 3% 0% 0% 15%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Screenshots
</h2>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div>
<img src="https://www.cybrosys.com/images/ico-tick.png">
Create patients.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-1.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div>
<img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Laboratory -> Patient -> Print -> Patient Card.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-2.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Laboratory -> Appointments->Create Appointments.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-3.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
When we confirm the appointment the appointment details will be sent through E-Mail.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-4.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Lab Request
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-5.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Lab Test Result
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-6.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Create invoice for lab test.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-7.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
You can see today's appointments here.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-8.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Laboratory -> Configuration -> Lab test.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-9.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Laboratory -> Configuration -> Test Contents.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-10.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
Go to Laboratory -> Configuration -> Testing Unit.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-11.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
We can add referral physician details.
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-12.png" alt="" style="width: 95%;"/>
</div>
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;">
<div><img src="https://www.cybrosys.com/images/ico-tick.png">
There are two type <users class=""></users>
</div>
</h3>
<div class="oe_row oe_spaced">
<img src="lab-management-cybrosys-13.png" alt="" style="width: 95%;"/>
</div>
</div>
</section>
<section class="oe_container" style="padding: 7px 0% 0% 3%;">
<div class="oe_row oe_spaced">
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Services
</h2>
<div style="display:flex;padding-top: 20px;justify-content: space-between;">
<div style="flex-basis: 18%;">
<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">
Odoo Customization
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Implementation </a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Integration
</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Odoo Support</a>
</h3>
</div>
<div style="flex-basis: 18%;">
<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">
Hire Odoo Developers</a>
</h3>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 1% 0% 0% 3%;">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;">
Our Industries
</h2>
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;">
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Trading
</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easily procure and sell your products.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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;">
<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">
Manufacturing</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Plan, track and schedule your operations.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Restaurant</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Run your bar or restaurant methodical.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
POS</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Easy configuring and convivial selling.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
E-commerce & Website</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Mobile friendly, awe-inspiring product pages.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Hotel Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
An all-inclusive hotel management application.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Education</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
A Collaborative platform for educational management.
</h3>
</div>
</div>
<div style="flex-basis: 32%;padding-top: 20px;">
<div style="width:30%; float:left;">
<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">
Service Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;">
Keep track of services and invoice accordingly.
</h3>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;">
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;">
<div>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-phone"></i> Contact Us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block">
<div>
<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;padding-left: 3px;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://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
</div>
</div>
</section>

BIN
medical_lab_management/static/description/invoice.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
medical_lab_management/static/description/lab-management-cybrosys-9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
medical_lab_management/static/description/mail.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
medical_lab_management/static/description/patient.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save