@ -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 |
|||
|
|||
|
@ -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 |
@ -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, |
|||
} |
@ -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 |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -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" |
|||
|
|||
|
|||
|
|||
|
|||
|
@ -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.') |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -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") |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -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> |
@ -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> |
@ -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> |
@ -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> |
@ -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> |
|
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 32 KiB |
@ -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;"> ☑ </span> Manage visitors.<br/> |
|||
<span style="color:green;"> ☑ </span> Issue Visitor Pass.<br/> |
|||
<span style="color:green;"> ☑ </span> Keep Check in, Check out Details of Visitors.<br/> |
|||
<span style="color:green;"> ☑ </span> Manage Visitor Belongings.<br/> |
|||
<span style="color:green;"> ☑ </span> Print Report Of visitor.<br/> |
|||
<span style="color:green;"> ☑ </span> Manage Employee Belongings.<br/> |
|||
<span style="color:green;"> ☑ </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> |
|||
|
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 70 KiB |
@ -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> |
@ -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', '>=',((context_today()-datetime.timedelta(days=0)).strftime('%Y-%m-%d 00:00:00'))), |
|||
('check_in_date', '<=',((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> |
@ -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> |