Browse Source

[ADD] Initial Commit

pull/45/head
SHEREEF PT 8 years ago
parent
commit
482c35ef9e
  1. 22
      front_office_management/README.rst
  2. 25
      front_office_management/__init__.py
  3. 49
      front_office_management/__manifest__.py
  4. 33
      front_office_management/models/__init__.py
  5. 59
      front_office_management/models/fo_property_counter.py
  6. 113
      front_office_management/models/fo_visit.py
  7. 53
      front_office_management/models/fo_visitor.py
  8. 57
      front_office_management/report/fo_property_label.xml
  9. 67
      front_office_management/report/fo_visitor_label.xml
  10. 30
      front_office_management/report/report.xml
  11. 63
      front_office_management/report/visitors_report.xml
  12. 15
      front_office_management/security/fo_security.xml
  13. 14
      front_office_management/security/ir.model.access.csv
  14. BIN
      front_office_management/static/description/banner.jpg
  15. BIN
      front_office_management/static/description/belongings.png
  16. BIN
      front_office_management/static/description/cybro_logo.png
  17. BIN
      front_office_management/static/description/icon.png
  18. 185
      front_office_management/static/description/index.html
  19. BIN
      front_office_management/static/description/label.png
  20. BIN
      front_office_management/static/description/pass.png
  21. BIN
      front_office_management/static/description/report.png
  22. BIN
      front_office_management/static/description/todays.png
  23. BIN
      front_office_management/static/description/user.png
  24. BIN
      front_office_management/static/description/visit.png
  25. BIN
      front_office_management/static/description/visitor.png
  26. 112
      front_office_management/views/fo_property_counter.xml
  27. 208
      front_office_management/views/fo_visit.xml
  28. 138
      front_office_management/views/fo_visitor.xml

22
front_office_management/README.rst

@ -0,0 +1,22 @@
===========================
Front Office Management v10
===========================
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

25
front_office_management/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <https://www.gnu.org/licenses/>.
#
##############################################################################
import models

49
front_office_management/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <https://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': "Front Office Management",
'version': '10.0.1.0.0',
'summary': """Manage Front Office Operations:Visitors, Devices Carrying Register, Actions""",
'description': """Helps You To Manage Front Office Operations""",
'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,
}

33
front_office_management/models/__init__.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Anusha P P(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <https://www.gnu.org/licenses/>.
#
##############################################################################
import fo_visitor
import fo_property_counter
import fo_visit

59
front_office_management/models/fo_property_counter.py

@ -0,0 +1,59 @@
# -*- 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', 'ir.needaction_mixin']
_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""')
@api.one
def action_cancel(self):
self.state = "cancel"
@api.one
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'
@api.multi
def action_prop_out(self):
self.state = "prop_out"

113
front_office_management/models/fo_visit.py

@ -0,0 +1,113 @@
# -*- 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
@api.one
def action_cancel(self):
self.state = "cancel"
@api.one
def action_check_in(self):
self.state = "check_in"
self.check_in_date = datetime.datetime.now()
@api.multi
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_emplyee_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.multi
@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.')

53
front_office_management/models/fo_visitor.py

@ -0,0 +1,53 @@
# -*- 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 !"),
]
@api.multi
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="report.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" t-att-src="'/web/static/src/img/placeholder.png'" height="120" border="1" width="120"/>
<img t-if="o.employee.image" t-att-src="'data:image/png;base64,%s' % o.employee.image" 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: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">
<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>

67
front_office_management/report/fo_visitor_label.xml

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_visitor_label">
<t t-call="report.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="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="'data:image/png;base64,%s' % o.visitor.visitor_image" 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>Visitor ID : </strong></p>
<p style="text-align:right;"><strong>Phone: </strong></p>
</td>
<td>
<p style="text-align:left;padding-top:30px;padding-left:30px;" t-field="o.visitor"/>
<p style="text-align:left;padding-left:30px;" t-field="o.phone"/>
</td>
</t>
</tr>
</table>
</td>
</tr>
</table>
</div>
</center>
</div>
</div>
</t>
</t>
</t>
</template>
</data>
</odoo>

30
front_office_management/report/report.xml

@ -0,0 +1,30 @@
<?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>

63
front_office_management/report/visitors_report.xml

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<template id="report_visitor_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="oe_structure"/>
<div class="page">
<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>
<h3 style="text-decoration:underline;text-align:center;"><b>Visitor Report</b></h3>
<br/>
<br/>
<table width="99%" 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"></p>
</t>
</t>
</t>
</template>
</data>
</odoo>

15
front_office_management/security/fo_security.xml

@ -0,0 +1,15 @@
<?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: 61 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/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

185
front_office_management/static/description/index.html

@ -0,0 +1,185 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Front Office Management</h2>
<h3 class="oe_slogan">Manages Visitors and Employee Belongings</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
<h4>Features:</h4>
<div>
<span style="color:green;"> &#9745; </span> Manage visitors.<br/>
<span style="color:green;"> &#9745; </span> Issue Visitor Pass.<br/>
<span style="color:green;"> &#9745; </span> Keep Check in, Check out Details of Visitors.<br/>
<span style="color:green;"> &#9745; </span> Manage Visitor Belongings.<br/>
<span style="color:green;"> &#9745; </span> Print Report Of visitor.<br/>
<span style="color:green;"> &#9745; </span> Manage Employee Belongings.<br/>
<span style="color:green;"> &#9745; </span> Print Property Label.<br/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32 text-justify" style="text-align: center;">
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.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Visitors</h3>
<p>
</div>
<div style="text-align: center">
<span class="oe_mt32 text-justify" style="text-align: center;">Create visitors.</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="visitor.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Visits</h3>
</p>
</div>
<div class="" style="text-align: center">
<span class="oe_mt32 text-justify" style="text-align: center;">Add visiting details.</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="visit.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Visitor Pass</h3>
</p>
</div>
<div class="" style="text-align: center">
<span>Go to Visitor Management -> Visits -> Print -> Visitor Pass</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="pass.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Visitor Report</h3>
</p>
</div>
<div class="" style="text-align: center">
<span>Go to Visitor Management -> Visits -> Print -> Visitors Report</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="report.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Today's Visits</h3>
</p>
</div>
<div class="" style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="todays.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Employee Belongings</h3>
</p>
</div>
<div class="" style="text-align: center">
<span>Here you can specify the field 'Permission' with the values of Allowed,Not Allowed and Allowed with permission.</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="belongings.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Property Label</h3>
</p>
</div>
<div class="" style="text-align: center">
<span class="oe_mt32 text-justify" style="text-align: center;">Print the properties name that are not allowed to enter to the office.</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="label.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div style="text-align: center">
<p>
<h3>Receptionist</h3>
</p>
</div>
<div class="" style="text-align: center">
<span>We can set 'Receptionist' access from users form.</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="user.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
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
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" 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;"></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;"></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;padding-left: 8px;"></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;"></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;"></i></a></td>
</div>
</div>
</section>

BIN
front_office_management/static/description/label.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
front_office_management/static/description/pass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
front_office_management/static/description/report.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
front_office_management/static/description/todays.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
front_office_management/static/description/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
front_office_management/static/description/visit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
front_office_management/static/description/visitor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

112
front_office_management/views/fo_property_counter.xml

@ -0,0 +1,112 @@
<?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 id="fo_property_counter_filter" model="ir.ui.view">
<field name="name">Property Counter</field>
<field name="model">fo.property.counter</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search">
<separator orientation="vertical"/>
<field name="employee" select="1"/>
<field name="date" select="1"/>
<field name="state" select="1"/>
<newline/>
<group expand="0" string="Group By..." colspan="11" col="11">
<filter string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee'}"/>
<filter string="Date" icon="terp-personal" domain="[]" context="{'group_by':'date'}"/>
<filter string="State" icon="terp-personal" domain="[]" context="{'group_by':'state'}"/>
</group>
</search>
</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_type">form</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>

208
front_office_management/views/fo_visit.xml

@ -0,0 +1,208 @@
<?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 id="fo_visit_filter" model="ir.ui.view">
<field name="name">Visits</field>
<field name="model">fo.visit</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Visits">
<separator orientation="vertical"/>
<field name="visitor" select="1"/>
<field name="state" select="1"/>
<field name="visiting_person"/>
<newline/>
<group expand="0" string="Group By..." colspan="11" col="11">
<filter string="Visitor" icon="terp-personal" domain="[]" context="{'group_by':'visitor'}"/>
<filter string="State" icon="terp-personal" domain="[]" context="{'group_by':'state'}"/>
<filter string="Visiting Person" icon="terp-personal" domain="[]" context="{'group_by':'visiting_person'}"/>
</group>
</search>
</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_type">form</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_type">form</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>

138
front_office_management/views/fo_visitor.xml

@ -0,0 +1,138 @@
<?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"/>
</button>
</div>
<field name="visitor_image" widget="image" class="oe_avatar"/>
<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>
<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 id="fo_visitor_filter" model="ir.ui.view">
<field name="name">Visitors</field>
<field name="model">fo.visitor</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Visitors">
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="company_info" select="1"/>
<field name="id_proof" select="1"/>
<field name="email" select="1"/>
<newline/>
<group expand="0" string="Group By..." colspan="11" col="11">
<filter string="Visitor" icon="terp-personal" domain="[]" context="{'group_by':'name'}"/>
<filter string="Company" icon="terp-personal" domain="[]" context="{'group_by':'company_info'}"/>
<filter string="State" icon="terp-personal" domain="[]" context="{'group_by':'state_id'}"/>
</group>
</search>
</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_type">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>
Loading…
Cancel
Save