Browse Source
Merge pull request #109 from akretion/10-mig-generic-modules
Merge pull request #109 from akretion/10-mig-generic-modules
[10.0] Port most modules and fix bug 117pull/132/head
Alexis de Lattre
8 years ago
committed by
GitHub
66 changed files with 498 additions and 649 deletions
-
3.travis.yml
-
2asterisk_click2dial/__init__.py
-
10asterisk_click2dial/__manifest__.py
-
2asterisk_click2dial/controller.py
-
4asterisk_click2dial/demo/asterisk_click2dial_demo.xml
-
5asterisk_click2dial/models/__init__.py
-
177asterisk_click2dial/models/asterisk_server.py
-
73asterisk_click2dial/models/phone_common.py
-
108asterisk_click2dial/models/res_users.py
-
4asterisk_click2dial/scripts/odoo_popup_timeout.sh
-
62asterisk_click2dial/scripts/set_name_agi.py
-
2asterisk_click2dial/scripts/set_name_incoming_timeout.sh
-
2asterisk_click2dial/scripts/set_name_outgoing_timeout.sh
-
25asterisk_click2dial/static/src/js/asterisk_click2dial.js
-
4asterisk_click2dial/static/src/xml/asterisk_click2dial.xml
-
3asterisk_click2dial/views/asterisk_server.xml
-
3asterisk_click2dial/views/res_users.xml
-
2asterisk_click2dial/web_asterisk_click2dial.xml
-
8base_phone/common.py
-
16base_phone/controllers/main.py
-
1base_phone/models/__init__.py
-
17base_phone/models/ir_fields_converter.py
-
4base_phone/static/src/js/phone_widget.js
-
18base_phone/static/src/xml/phone.xml
-
16base_phone/tests/test_phone.py
-
3crm_claim_phone/__init__.py
-
50crm_claim_phone/__manifest__.py
-
12crm_claim_phone/crm_claim_phone.py
-
22crm_claim_phone/crm_claim_view.xml
-
2crm_phone/__init__.py
-
5crm_phone/__manifest__.py
-
4crm_phone/demo/crm_phonecall.xml
-
7crm_phone/models/__init__.py
-
49crm_phone/models/crm_lead.py
-
96crm_phone/models/crm_phonecall.py
-
22crm_phone/models/phone_common.py
-
26crm_phone/models/res_partner.py
-
16crm_phone/models/res_users.py
-
4crm_phone/security/ir.model.access.csv
-
8crm_phone/security/phonecall_security.xml
-
4crm_phone/tests/test_crm_phone.py
-
25crm_phone/view/crm_lead.xml
-
8crm_phone/view/crm_phonecall.xml
-
4crm_phone/view/res_partner.xml
-
2crm_phone/view/res_users.xml
-
8crm_phone/wizard/create_crm_phonecall.py
-
11crm_phone/wizard/create_crm_phonecall_view.xml
-
9crm_phone/wizard/number_not_found.py
-
7crm_phone/wizard/number_not_found_view.xml
-
2event_phone/__init__.py
-
9event_phone/__manifest__.py
-
24event_phone/event_view.xml
-
3event_phone/models/__init__.py
-
4event_phone/models/event_registration.py
-
2hr_phone/__init__.py
-
9hr_phone/__manifest__.py
-
49hr_phone/hr_view.xml
-
3hr_phone/models/__init__.py
-
4hr_phone/models/hr_employee.py
-
2hr_recruitment_phone/__init__.py
-
9hr_recruitment_phone/__manifest__.py
-
38hr_recruitment_phone/hr_recruitment_view.xml
-
3hr_recruitment_phone/models/__init__.py
-
4hr_recruitment_phone/models/hr_applicant.py
-
3requirements.txt
@ -1,4 +1,4 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import asterisk_click2dial |
|
||||
|
from . import models |
||||
from . import controller |
from . import controller |
@ -0,0 +1,5 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from . import asterisk_server |
||||
|
from . import res_users |
||||
|
from . import phone_common |
@ -0,0 +1,73 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2010-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, api, _ |
||||
|
from odoo.exceptions import UserError |
||||
|
import logging |
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class PhoneCommon(models.AbstractModel): |
||||
|
_inherit = 'phone.common' |
||||
|
|
||||
|
@api.model |
||||
|
def click2dial(self, erp_number): |
||||
|
res = super(PhoneCommon, self).click2dial(erp_number) |
||||
|
if not erp_number: |
||||
|
raise UserError(_('Missing phone number')) |
||||
|
|
||||
|
user, ast_server, ast_manager = \ |
||||
|
self.env['asterisk.server']._connect_to_asterisk() |
||||
|
ast_number = self.convert_to_dial_number(erp_number) |
||||
|
# Add 'out prefix' |
||||
|
if ast_server.out_prefix: |
||||
|
_logger.debug('Out prefix = %s', ast_server.out_prefix) |
||||
|
ast_number = '%s%s' % (ast_server.out_prefix, ast_number) |
||||
|
_logger.debug('Number to be sent to Asterisk = %s', ast_number) |
||||
|
|
||||
|
# The user should have a CallerID |
||||
|
if not user.callerid: |
||||
|
raise UserError(_('No callerID configured for the current user')) |
||||
|
|
||||
|
variable = [] |
||||
|
if user.asterisk_chan_type == 'SIP': |
||||
|
# We can only have one alert-info header in a SIP request |
||||
|
if user.alert_info: |
||||
|
variable.append( |
||||
|
'SIPAddHeader=Alert-Info: %s' % user.alert_info) |
||||
|
elif ast_server.alert_info: |
||||
|
variable.append( |
||||
|
'SIPAddHeader=Alert-Info: %s' % ast_server.alert_info) |
||||
|
if user.variable: |
||||
|
for user_variable in user.variable.split('|'): |
||||
|
variable.append(user_variable.strip()) |
||||
|
channel = '%s/%s' % (user.asterisk_chan_type, user.resource) |
||||
|
if user.dial_suffix: |
||||
|
channel += '/%s' % user.dial_suffix |
||||
|
|
||||
|
try: |
||||
|
ast_manager.Originate( |
||||
|
channel, |
||||
|
context=ast_server.context, |
||||
|
extension=ast_number, |
||||
|
priority=unicode(ast_server.extension_priority), |
||||
|
timeout=unicode(ast_server.wait_time * 1000), |
||||
|
caller_id=user.callerid, |
||||
|
account=user.cdraccount, |
||||
|
variable=variable) |
||||
|
except Exception, e: |
||||
|
_logger.error( |
||||
|
"Error in the Originate request to Asterisk server %s", |
||||
|
ast_server.ip_address) |
||||
|
_logger.error( |
||||
|
"Here are the details of the error: '%s'", unicode(e)) |
||||
|
raise UserError( |
||||
|
_("Click to dial with Asterisk failed.\nHere is the error: " |
||||
|
"'%s'") |
||||
|
% unicode(e)) |
||||
|
finally: |
||||
|
ast_manager.Logoff() |
||||
|
|
||||
|
res['dialed_number'] = ast_number |
||||
|
return res |
@ -0,0 +1,108 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2010-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, fields, api, _ |
||||
|
from odoo.exceptions import UserError, ValidationError |
||||
|
|
||||
|
|
||||
|
class ResUsers(models.Model): |
||||
|
_inherit = "res.users" |
||||
|
|
||||
|
internal_number = fields.Char( |
||||
|
string='Internal Number', copy=False, |
||||
|
help="User's internal phone number.") |
||||
|
dial_suffix = fields.Char( |
||||
|
string='User-specific Dial Suffix', |
||||
|
help="User-specific dial suffix such as aa=2wb for SCCP auto answer.") |
||||
|
callerid = fields.Char( |
||||
|
string='Caller ID', copy=False, |
||||
|
help="Caller ID used for the calls initiated by this user.") |
||||
|
# You'd probably think: Asterisk should reuse the callerID of sip.conf! |
||||
|
# But it cannot, cf |
||||
|
# http://lists.digium.com/pipermail/asterisk-users/ |
||||
|
# 2012-January/269787.html |
||||
|
cdraccount = fields.Char( |
||||
|
string='CDR Account', |
||||
|
help="Call Detail Record (CDR) account used for billing this user.") |
||||
|
asterisk_chan_type = fields.Selection([ |
||||
|
('SIP', 'SIP'), |
||||
|
('IAX2', 'IAX2'), |
||||
|
('DAHDI', 'DAHDI'), |
||||
|
('Zap', 'Zap'), |
||||
|
('Skinny', 'Skinny'), |
||||
|
('MGCP', 'MGCP'), |
||||
|
('mISDN', 'mISDN'), |
||||
|
('H323', 'H323'), |
||||
|
('SCCP', 'SCCP'), |
||||
|
# Local works for click2dial, but it won't work in |
||||
|
# _get_calling_number() when trying to identify the |
||||
|
# channel of the user, so it's better not to propose it |
||||
|
# ('Local', 'Local'), |
||||
|
], string='Asterisk Channel Type', default='SIP', |
||||
|
help="Asterisk channel type, as used in the Asterisk dialplan. " |
||||
|
"If the user has a regular IP phone, the channel type is 'SIP'.") |
||||
|
resource = fields.Char( |
||||
|
string='Resource Name', copy=False, |
||||
|
help="Resource name for the channel type selected. For example, " |
||||
|
"if you use 'Dial(SIP/phone1)' in your Asterisk dialplan to ring " |
||||
|
"the SIP phone of this user, then the resource name for this user " |
||||
|
"is 'phone1'. For a SIP phone, the phone number is often used as " |
||||
|
"resource name, but not always.") |
||||
|
alert_info = fields.Char( |
||||
|
string='User-specific Alert-Info SIP Header', |
||||
|
help="Set a user-specific Alert-Info header in SIP request to " |
||||
|
"user's IP Phone for the click2dial feature. If empty, the " |
||||
|
"Alert-Info header will not be added. You can use it to have a " |
||||
|
"special ring tone for click2dial (a silent one !) or to " |
||||
|
"activate auto-answer for example.") |
||||
|
variable = fields.Char( |
||||
|
string='User-specific Variable', |
||||
|
help="Set a user-specific 'Variable' field in the Asterisk " |
||||
|
"Manager Interface 'originate' request for the click2dial " |
||||
|
"feature. If you want to have several variable headers, separate " |
||||
|
"them with '|'.") |
||||
|
asterisk_server_id = fields.Many2one( |
||||
|
'asterisk.server', string='Asterisk Server', |
||||
|
help="Asterisk server on which the user's phone is connected. " |
||||
|
"If you leave this field empty, it will use the first Asterisk " |
||||
|
"server of the user's company.") |
||||
|
|
||||
|
@api.multi |
||||
|
@api.constrains('resource', 'internal_number', 'callerid') |
||||
|
def _check_validity(self): |
||||
|
for user in self: |
||||
|
strings_to_check = [ |
||||
|
(_('Resource Name'), user.resource), |
||||
|
(_('Internal Number'), user.internal_number), |
||||
|
(_('Caller ID'), user.callerid), |
||||
|
] |
||||
|
for check_string in strings_to_check: |
||||
|
if check_string[1]: |
||||
|
try: |
||||
|
check_string[1].encode('ascii') |
||||
|
except UnicodeEncodeError: |
||||
|
raise ValidationError(_( |
||||
|
"The '%s' for the user '%s' should only have " |
||||
|
"ASCII caracters") |
||||
|
% (check_string[0], user.name)) |
||||
|
|
||||
|
@api.multi |
||||
|
def get_asterisk_server_from_user(self): |
||||
|
'''Returns an asterisk.server recordset''' |
||||
|
self.ensure_one() |
||||
|
# We check if the user has an Asterisk server configured |
||||
|
if self.asterisk_server_id: |
||||
|
ast_server = self.asterisk_server_id |
||||
|
else: |
||||
|
asterisk_servers = self.env['asterisk.server'].search( |
||||
|
[('company_id', '=', self.company_id.id)]) |
||||
|
# If the user doesn't have an asterisk server, |
||||
|
# we take the first one of the user's company |
||||
|
if not asterisk_servers: |
||||
|
raise UserError( |
||||
|
_("No Asterisk server configured for the company '%s'.") |
||||
|
% self.company_id.name) |
||||
|
else: |
||||
|
ast_server = asterisk_servers[0] |
||||
|
return ast_server |
@ -0,0 +1,17 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, api |
||||
|
|
||||
|
|
||||
|
class IrFieldsConverter(models.AbstractModel): |
||||
|
_inherit = 'ir.fields.converter' |
||||
|
|
||||
|
@api.model |
||||
|
def _str_to_phone(self, model, field, value): |
||||
|
return super(IrFieldsConverter, self)._str_to_char(model, field, value) |
||||
|
|
||||
|
@api.model |
||||
|
def _str_to_fax(self, model, field, value): |
||||
|
return super(IrFieldsConverter, self)._str_to_char(model, field, value) |
@ -1,3 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
|
|
||||
from . import crm_claim_phone |
|
@ -1,50 +0,0 @@ |
|||||
# -*- encoding: utf-8 -*- |
|
||||
############################################################################## |
|
||||
# |
|
||||
# CRM Claim Phone module for Odoo/OpenERP |
|
||||
# Copyright (C) 2014 Alexis de Lattre <alexis@via.ecp.fr> |
|
||||
# |
|
||||
# This program is free software: you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU Affero General Public License as |
|
||||
# published by the Free Software Foundation, either version 3 of the |
|
||||
# License, or (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU Affero General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU Affero General Public License |
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
|
||||
|
|
||||
{ |
|
||||
'name': 'CRM Claim Phone', |
|
||||
'version': '8.0.0.1.0', |
|
||||
'category': 'Phone', |
|
||||
'license': 'AGPL-3', |
|
||||
'summary': 'Validate phone numbers in CRM Claims', |
|
||||
'description': """ |
|
||||
CRM Claims Phone |
|
||||
================ |
|
||||
|
|
||||
This module validate phone numbers in the CRM Claim module, just like the |
|
||||
*base_phone* module valide phone numbers in the Partner form. Please refer to |
|
||||
the description of the *base_phone* module for more information. |
|
||||
|
|
||||
This module is independant from the Asterisk connector. |
|
||||
|
|
||||
Please contact Alexis de Lattre from Akretion <alexis.delattre@akretion.com> |
|
||||
for any help or question about this module. |
|
||||
""", |
|
||||
'author': "Akretion,Odoo Community Association (OCA)", |
|
||||
'website': 'http://www.akretion.com/', |
|
||||
'depends': ['base_phone', 'crm_claim'], |
|
||||
'data': ['crm_claim_view.xml'], |
|
||||
'images': [], |
|
||||
'installable': False, |
|
||||
'auto_install': True, |
|
||||
'active': False, |
|
||||
} |
|
@ -1,12 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# © 2012-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from openerp import models |
|
||||
from openerp.addons.base_phone.fields import Phone |
|
||||
|
|
||||
|
|
||||
class CrmClaim(models.Model): |
|
||||
_inherit = 'crm.claim' |
|
||||
|
|
||||
partner_phone = Phone(partner_field='partner_id') |
|
@ -1,22 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2014-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo> |
|
||||
<data> |
|
||||
|
|
||||
<record id="crm_case_claims_form_view" model="ir.ui.view"> |
|
||||
<field name="name">crm_claim_phone.crm_claim.form</field> |
|
||||
<field name="model">crm.claim</field> |
|
||||
<field name="inherit_id" ref="crm_claim.crm_case_claims_form_view"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="partner_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
</data> |
|
||||
</odoo> |
|
@ -1,4 +1,4 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import crm_phone |
|
||||
|
from . import models |
||||
from . import wizard |
from . import wizard |
@ -0,0 +1,7 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from . import crm_phonecall |
||||
|
from . import crm_lead |
||||
|
from . import res_partner |
||||
|
from . import res_users |
||||
|
from . import phone_common |
@ -0,0 +1,49 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2012-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, fields, api |
||||
|
from odoo.addons.base_phone.fields import Phone, Fax |
||||
|
|
||||
|
|
||||
|
class CrmLead(models.Model): |
||||
|
_inherit = 'crm.lead' |
||||
|
_phone_name_sequence = 20 |
||||
|
|
||||
|
phone = Phone(country_field='country_id', partner_field='partner_id') |
||||
|
mobile = Phone(country_field='country_id', partner_field='partner_id') |
||||
|
fax = Fax(country_field='country_id', partner_field='partner_id') |
||||
|
phonecall_ids = fields.One2many( |
||||
|
'crm.phonecall', 'opportunity_id', string='Phone Calls') |
||||
|
phonecall_count = fields.Integer( |
||||
|
compute='_count_phonecalls', string='Number of Phonecalls', |
||||
|
readonly=True) |
||||
|
|
||||
|
@api.multi |
||||
|
def name_get(self): |
||||
|
if self._context.get('callerid'): |
||||
|
res = [] |
||||
|
for lead in self: |
||||
|
if lead.partner_name and lead.contact_name: |
||||
|
name = u'%s (%s)' % (lead.contact_name, lead.partner_name) |
||||
|
elif lead.partner_name: |
||||
|
name = lead.partner_name |
||||
|
elif lead.contact_name: |
||||
|
name = lead.contact_name |
||||
|
else: |
||||
|
name = lead.name |
||||
|
res.append((lead.id, name)) |
||||
|
return res |
||||
|
else: |
||||
|
return super(CrmLead, self).name_get() |
||||
|
|
||||
|
@api.multi |
||||
|
@api.depends('phonecall_ids') |
||||
|
def _count_phonecalls(self): |
||||
|
cpo = self.env['crm.phonecall'] |
||||
|
for lead in self: |
||||
|
try: |
||||
|
lead.phonecall_count = cpo.search_count( |
||||
|
[('opportunity_id', '=', lead.id)]) |
||||
|
except: |
||||
|
lead.phonecall_count = 0 |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2012-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, api, _ |
||||
|
|
||||
|
|
||||
|
class PhoneCommon(models.AbstractModel): |
||||
|
_inherit = 'phone.common' |
||||
|
|
||||
|
@api.model |
||||
|
def click2dial(self, erp_number): |
||||
|
res = super(PhoneCommon, self).click2dial(erp_number) |
||||
|
if ( |
||||
|
self.env.user.context_propose_creation_crm_call and |
||||
|
self.env.context.get('click2dial_model') |
||||
|
in ('res.partner', 'crm.lead')): |
||||
|
res.update({ |
||||
|
'action_name': _('Create Call in CRM'), |
||||
|
'action_model': 'wizard.create.crm.phonecall', |
||||
|
}) |
||||
|
return res |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2012-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, fields, api |
||||
|
|
||||
|
|
||||
|
class ResPartner(models.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
phonecall_ids = fields.One2many( |
||||
|
'crm.phonecall', 'partner_id', string='Phone Calls') |
||||
|
phonecall_count = fields.Integer( |
||||
|
compute='_count_phonecalls', string='Number of Phonecalls', |
||||
|
readonly=True) |
||||
|
|
||||
|
@api.multi |
||||
|
@api.depends('phonecall_ids') |
||||
|
def _count_phonecalls(self): |
||||
|
cpo = self.env['crm.phonecall'] |
||||
|
for partner in self: |
||||
|
try: |
||||
|
partner.phonecall_count = cpo.search_count( |
||||
|
[('partner_id', 'child_of', partner.id)]) |
||||
|
except: |
||||
|
partner.phonecall_count = 0 |
@ -0,0 +1,16 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2012-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import models, fields |
||||
|
|
||||
|
|
||||
|
class ResUsers(models.Model): |
||||
|
_inherit = "res.users" |
||||
|
|
||||
|
# Field name starts with 'context_' to allow modification by the user |
||||
|
# in his preferences, cf odoo/odoo/addons/base/res/res_users.py |
||||
|
# in "def write()" of "class res_users(osv.osv)" |
||||
|
context_propose_creation_crm_call = fields.Boolean( |
||||
|
string='Propose to create a call in CRM after a click2dial', |
||||
|
default=True) |
@ -1,5 +1,5 @@ |
|||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
||||
callerid_crm_lead_read,Read access on crm.lead,crm.model_crm_lead,base_phone.group_callerid,1,0,0,0 |
callerid_crm_lead_read,Read access on crm.lead,crm.model_crm_lead,base_phone.group_callerid,1,0,0,0 |
||||
access_crm_phonecall_partner_manager,Full access on crm.phonecall to Contact mgr,model_crm_phonecall,base.group_partner_manager,1,1,1,1 |
access_crm_phonecall_partner_manager,Full access on crm.phonecall to Contact mgr,model_crm_phonecall,base.group_partner_manager,1,1,1,1 |
||||
access_crm_phonecall_sale_manager,Full access on crm.phonecall to Sale mgr,model_crm_phonecall,base.group_sale_manager,1,1,1,1 |
|
||||
access_crm_phonecall_sale_user,Read/Write/Create access on crm.phonecall to Sale users,model_crm_phonecall,base.group_sale_salesman,1,1,1,0 |
|
||||
|
access_crm_phonecall_sale_manager,Full access on crm.phonecall to Sale mgr,model_crm_phonecall,sales_team.group_sale_manager,1,1,1,1 |
||||
|
access_crm_phonecall_sale_user,Read/Write/Create access on crm.phonecall to Sale users,model_crm_phonecall,sales_team.group_sale_salesman,1,1,1,0 |
@ -1,3 +1,3 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import event_phone |
|
||||
|
from . import models |
@ -1,24 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2014-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) |
|
||||
--> |
|
||||
|
|
||||
<odoo> |
|
||||
<data> |
|
||||
|
|
||||
|
|
||||
<record id="view_event_registration_form" model="ir.ui.view"> |
|
||||
<field name="name">event_phone.event_registration.form</field> |
|
||||
<field name="model">event.registration</field> |
|
||||
<field name="inherit_id" ref="event.view_event_registration_form"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
|
|
||||
</data> |
|
||||
</odoo> |
|
@ -0,0 +1,3 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from . import event_registration |
@ -1,3 +1,3 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import hr_phone |
|
||||
|
from . import models |
@ -1,49 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2014-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo> |
|
||||
<data> |
|
||||
|
|
||||
|
|
||||
<record id="view_employee_form" model="ir.ui.view"> |
|
||||
<field name="name">hr_phone.hr_employee.form</field> |
|
||||
<field name="model">hr.employee</field> |
|
||||
<field name="inherit_id" ref="hr.view_employee_form"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="work_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
<field name="mobile_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="view_employee_tree" model="ir.ui.view"> |
|
||||
<field name="name">hr_phone.hr_employee.tree</field> |
|
||||
<field name="model">hr.employee</field> |
|
||||
<field name="inherit_id" ref="hr.view_employee_tree"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="work_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="view_partner_tree2" model="ir.ui.view"> |
|
||||
<field name="name">hr_phone.hr.employee.tree2</field> |
|
||||
<field name="model">hr.employee</field> |
|
||||
<field name="inherit_id" ref="hr.view_partner_tree2"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="work_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
|
|
||||
</data> |
|
||||
</odoo> |
|
@ -0,0 +1,3 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from . import hr_employee |
@ -1,3 +1,3 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import hr_recruitment_phone |
|
||||
|
from . import models |
@ -1,38 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2014-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) |
|
||||
--> |
|
||||
|
|
||||
<odoo> |
|
||||
<data> |
|
||||
|
|
||||
|
|
||||
<record id="crm_case_form_view_job" model="ir.ui.view"> |
|
||||
<field name="name">hr_recruitment_phone.hr_applicant.form</field> |
|
||||
<field name="model">hr.applicant</field> |
|
||||
<field name="inherit_id" ref="hr_recruitment.crm_case_form_view_job"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="partner_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
<field name="partner_mobile" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="crm_case_tree_view_job" model="ir.ui.view"> |
|
||||
<field name="name">hr_recruitment_phone.hr_applicant.tree</field> |
|
||||
<field name="model">hr.applicant</field> |
|
||||
<field name="inherit_id" ref="hr_recruitment.crm_case_tree_view_job"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="partner_phone" position="attributes"> |
|
||||
<attribute name="widget">phone</attribute> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
|
|
||||
</data> |
|
||||
</odoo> |
|
@ -0,0 +1,3 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from . import hr_applicant |
@ -0,0 +1,3 @@ |
|||||
|
phonenumbers |
||||
|
py-Asterisk |
||||
|
SOAPpy |
Write
Preview
Loading…
Cancel
Save
Reference in new issue