Browse Source
Merge pull request #258 from yelizariev/10.0-pre-commit
Merge pull request #258 from yelizariev/10.0-pre-commit
commit is created by 👷♂️ Merge Bot: https://odoo-devops.readthedocs.io/en/latest/git/github-merge-bot.htmlpull/262/head
Mitchell Admin
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
90 changed files with 1907 additions and 1406 deletions
-
6.DINAR/image/README.md
-
1.DINAR/image/src/addons.yaml
-
2.isort.cfg
-
21.travis.yml
-
24mail_all/__manifest__.py
-
1mail_all/models/__init__.py
-
93mail_all/static/src/js/mail_all.js
-
11mail_all/static/src/xml/menu.xml
-
7mail_all/tests/test_js.py
-
15mail_all/views/templates.xml
-
1mail_archives/__init__.py
-
25mail_archives/__manifest__.py
-
126mail_archives/static/src/js/archives.js
-
11mail_archives/static/src/xml/menu.xml
-
10mail_archives/tests/test_js.py
-
15mail_archives/views/templates.xml
-
21mail_attachment_popup/__manifest__.py
-
49mail_attachment_popup/static/src/css/jquery.arcticmodal.css
-
28mail_attachment_popup/static/src/css/simple.css
-
50mail_attachment_popup/static/src/xml/mail_attachment_popup.xml
-
28mail_attachment_popup/views/mail_attachment_popup_template.xml
-
18mail_base/__manifest__.py
-
1mail_base/controllers/__init__.py
-
6mail_base/controllers/main.py
-
18mail_base/models.py
-
12mail_base/views/templates.xml
-
26mail_check_immediately/__manifest__.py
-
49mail_check_immediately/models.py
-
53mail_check_immediately/static/src/js/main.js
-
14mail_check_immediately/static/src/xml/main.xml
-
11mail_check_immediately/views.xml
-
6mail_fix_553/__manifest__.py
-
2mail_fix_553/data.xml
-
157mail_fix_553/mail_fix_553.py
-
31mail_move_message/__manifest__.py
-
46mail_move_message/controllers/main.py
-
2mail_move_message/data/mail_move_message_data.xml
-
1mail_move_message/doc/index.rst
-
451mail_move_message/mail_move_message_models.py
-
170mail_move_message/mail_move_message_views.xml
-
5mail_move_message/static/src/css/mail_move_message.css
-
128mail_move_message/static/src/js/mail_move_message.js
-
10mail_move_message/static/src/xml/mail_move_message_main.xml
-
21mail_private/__manifest__.py
-
16mail_private/full_composer_wizard.xml
-
85mail_private/models.py
-
479mail_private/static/src/js/mail_private.js
-
43mail_private/static/src/js/test_private.js
-
23mail_private/static/src/xml/mail_private.xml
-
19mail_private/template.xml
-
16mail_private/tests/test_js.py
-
1mail_recovery/__init__.py
-
22mail_recovery/__manifest__.py
-
13mail_recovery/data.xml
-
15mail_recovery/static/src/js/mail_recovery.js
-
1mail_reply/__init__.py
-
18mail_reply/__manifest__.py
-
73mail_reply/static/src/js/mail_reply.js
-
14mail_reply/static/src/xml/reply_button.xml
-
15mail_reply/templates.xml
-
25mail_sent/__manifest__.py
-
30mail_sent/models.py
-
113mail_sent/static/src/js/sent.js
-
14mail_sent/static/src/xml/menu.xml
-
10mail_sent/tests/test_js.py
-
12mail_sent/views/templates.xml
-
16mail_to/__manifest__.py
-
13mail_to/models/mail_message.py
-
28mail_to/static/src/js/mail_to.js
-
18mail_to/static/src/js/test_mail_to.js
-
31mail_to/static/src/xml/recipient.xml
-
22mail_to/templates.xml
-
16mail_to/tests/test_default.py
-
18mailgun/__manifest__.py
-
16mailgun/controllers/main.py
-
2mailgun/data/cron.xml
-
3mailgun/doc/index.rst
-
35mailgun/models.py
-
22res_partner_company_messages/__manifest__.py
-
18res_partner_company_messages/models.py
-
2res_partner_company_messages/views.xml
-
16res_partner_mails_count/__manifest__.py
-
14res_partner_mails_count/models.py
-
44res_partner_mails_count/static/src/js/res_partner_mails_count_tour.js
-
35res_partner_mails_count/templates.xml
-
1res_partner_mails_count/tests/__init__.py
-
64res_partner_mails_count/tests/test_mail.py
-
17res_partner_mails_count/tests/test_phantom.py
-
2res_partner_mails_count/views/res_partner_mails_count.xml
@ -1,2 +1,4 @@ |
|||||
This folder is attached on image building as `custom/` folder in [doobba](https://github.com/Tecnativa/doodba#image-usage). |
|
||||
Few additional [files](https://github.com/itpp-labs/DINAR/tree/master/embedded-files/.DINAR/image) are attached temporary on image building. |
|
||||
|
This folder is attached on image building as `custom/` folder in |
||||
|
[doobba](https://github.com/Tecnativa/doodba#image-usage). Few additional |
||||
|
[files](https://github.com/itpp-labs/DINAR/tree/master/embedded-files/.DINAR/image) are |
||||
|
attached temporary on image building. |
@ -1 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
@ -1,65 +1,60 @@ |
|||||
odoo.define('mail_all.all', function (require) { |
|
||||
"use strict"; |
|
||||
|
odoo.define("mail_all.all", function(require) { |
||||
|
"use strict"; |
||||
|
|
||||
var base_obj = require('mail_base.base'); |
|
||||
|
var base_obj = require("mail_base.base"); |
||||
|
|
||||
//-------------------------------------------------------------------------------
|
|
||||
var bus = require('bus.bus').bus; |
|
||||
var config = require('web.config'); |
|
||||
var core = require('web.core'); |
|
||||
var data = require('web.data'); |
|
||||
var Model = require('web.Model'); |
|
||||
var session = require('web.session'); |
|
||||
var time = require('web.time'); |
|
||||
var web_client = require('web.web_client'); |
|
||||
|
// -------------------------------------------------------------------------------
|
||||
|
var core = require("web.core"); |
||||
|
|
||||
var _lt = core._lt; |
|
||||
//-------------------------------------------------------------------------------
|
|
||||
|
var _lt = core._lt; |
||||
|
// -------------------------------------------------------------------------------
|
||||
|
|
||||
var ChatAction = core.action_registry.get('mail.chat.instant_messaging'); |
|
||||
ChatAction.include({ |
|
||||
get_thread_rendering_options: function (messages) { |
|
||||
var options = this._super.apply(this, arguments); |
|
||||
options.display_subject = options.display_subject || this.channel.id === "channel_all"; |
|
||||
return options; |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
// Inherit class and override methods
|
|
||||
base_obj.MailTools.include({ |
|
||||
get_properties: function(msg){ |
|
||||
var properties = this._super.apply(this, arguments); |
|
||||
properties.is_all = this.property_descr("channel_all", msg, this); |
|
||||
return properties; |
|
||||
}, |
|
||||
|
|
||||
set_channel_flags: function(data, msg){ |
|
||||
this._super.apply(this, arguments); |
|
||||
msg.is_all = data.author_id != 'ODOOBOT'; |
|
||||
return msg; |
|
||||
}, |
|
||||
|
|
||||
get_channel_array: function(msg){ |
|
||||
var arr = this._super.apply(this, arguments); |
|
||||
return arr.concat('channel_all'); |
|
||||
}, |
|
||||
|
var ChatAction = core.action_registry.get("mail.chat.instant_messaging"); |
||||
|
ChatAction.include({ |
||||
|
get_thread_rendering_options: function(messages) { |
||||
|
var options = this._super.apply(this, arguments); |
||||
|
options.display_subject = |
||||
|
options.display_subject || this.channel.id === "channel_all"; |
||||
|
return options; |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
get_domain: function(channel){ |
|
||||
return (channel.id === "channel_all") ? [] : this._super.apply(this, arguments); |
|
||||
} |
|
||||
}); |
|
||||
|
// Inherit class and override methods
|
||||
|
base_obj.MailTools.include({ |
||||
|
get_properties: function(msg) { |
||||
|
var properties = this._super.apply(this, arguments); |
||||
|
properties.is_all = this.property_descr("channel_all", msg, this); |
||||
|
return properties; |
||||
|
}, |
||||
|
|
||||
|
set_channel_flags: function(data, msg) { |
||||
|
this._super.apply(this, arguments); |
||||
|
msg.is_all = data.author_id !== "ODOOBOT"; |
||||
|
return msg; |
||||
|
}, |
||||
|
|
||||
|
get_channel_array: function(msg) { |
||||
|
var arr = this._super.apply(this, arguments); |
||||
|
return arr.concat("channel_all"); |
||||
|
}, |
||||
|
|
||||
|
get_domain: function(channel) { |
||||
|
return channel.id === "channel_all" |
||||
|
? [] |
||||
|
: this._super.apply(this, arguments); |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
base_obj.chat_manager.is_ready.then(function(){ |
|
||||
|
base_obj.chat_manager.is_ready.then(function() { |
||||
// Add all channel
|
// Add all channel
|
||||
base_obj.chat_manager.mail_tools.add_channel({ |
base_obj.chat_manager.mail_tools.add_channel({ |
||||
id: "channel_all", |
id: "channel_all", |
||||
name: _lt("All messages"), |
name: _lt("All messages"), |
||||
type: "static" |
|
||||
|
type: "static", |
||||
}); |
}); |
||||
|
|
||||
return $.when(); |
return $.when(); |
||||
}); |
}); |
||||
|
|
||||
return base_obj.chat_manager; |
|
||||
|
|
||||
|
return base_obj.chat_manager; |
||||
}); |
}); |
@ -1,11 +1,16 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="mail_all_assets_backend" |
|
||||
name="mail_all_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="mail_all_assets_backend" |
||||
|
name="mail_all_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script src="/mail_all/static/src/js/mail_all.js" type="text/javascript"></script> |
|
||||
|
<script |
||||
|
src="/mail_all/static/src/js/mail_all.js" |
||||
|
type="text/javascript" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
@ -1,85 +1,85 @@ |
|||||
odoo.define('mail_archives.archives', function (require) { |
|
||||
"use strict"; |
|
||||
|
odoo.define("mail_archives.archives", function(require) { |
||||
|
"use strict"; |
||||
|
|
||||
var base_obj = require('mail_base.base'); |
|
||||
|
var base_obj = require("mail_base.base"); |
||||
|
|
||||
//-------------------------------------------------------------------------------
|
|
||||
var bus = require('bus.bus').bus; |
|
||||
var config = require('web.config'); |
|
||||
var core = require('web.core'); |
|
||||
var data = require('web.data'); |
|
||||
var Model = require('web.Model'); |
|
||||
var session = require('web.session'); |
|
||||
var time = require('web.time'); |
|
||||
var web_client = require('web.web_client'); |
|
||||
|
// -------------------------------------------------------------------------------
|
||||
|
var core = require("web.core"); |
||||
|
var session = require("web.session"); |
||||
|
|
||||
var _lt = core._lt; |
|
||||
//-------------------------------------------------------------------------------
|
|
||||
|
var _lt = core._lt; |
||||
|
// -------------------------------------------------------------------------------
|
||||
|
|
||||
var ChatAction = core.action_registry.get('mail.chat.instant_messaging'); |
|
||||
ChatAction.include({ |
|
||||
init: function(parent, action, options) { |
|
||||
this._super.apply(this, arguments); |
|
||||
var channel_name = 'channel_archive'; |
|
||||
// Add channel Archive for enable "display_subject" option
|
|
||||
this.channels_display_subject.push(channel_name); |
|
||||
}, |
|
||||
|
var ChatAction = core.action_registry.get("mail.chat.instant_messaging"); |
||||
|
ChatAction.include({ |
||||
|
init: function(parent, action, options) { |
||||
|
this._super.apply(this, arguments); |
||||
|
var channel_name = "channel_archive"; |
||||
|
// Add channel Archive for enable "display_subject" option
|
||||
|
this.channels_display_subject.push(channel_name); |
||||
|
}, |
||||
|
|
||||
update_message_on_current_channel: function(current_channel_id, message){ |
|
||||
var result = this._super.apply(this, arguments); |
|
||||
var archive = current_channel_id === "channel_archive" && !message.is_archive; |
|
||||
return archive || result; |
|
||||
} |
|
||||
}); |
|
||||
|
update_message_on_current_channel: function(current_channel_id, message) { |
||||
|
var result = this._super.apply(this, arguments); |
||||
|
var archive = |
||||
|
current_channel_id === "channel_archive" && !message.is_archive; |
||||
|
return archive || result; |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
// Inherit class and override methods
|
|
||||
base_obj.MailTools.include({ |
|
||||
get_properties: function(msg){ |
|
||||
var properties = this._super.apply(this, arguments); |
|
||||
properties.is_archive = this.property_descr("channel_archive", msg, this); |
|
||||
return properties; |
|
||||
}, |
|
||||
|
// Inherit class and override methods
|
||||
|
base_obj.MailTools.include({ |
||||
|
get_properties: function(msg) { |
||||
|
var properties = this._super.apply(this, arguments); |
||||
|
properties.is_archive = this.property_descr("channel_archive", msg, this); |
||||
|
return properties; |
||||
|
}, |
||||
|
|
||||
set_channel_flags: function(data, msg){ |
|
||||
this._super.apply(this, arguments); |
|
||||
// Get recipients ids
|
|
||||
var recipients_ids = []; |
|
||||
for (var i = 0; i < (data.partner_ids || []).length; i++){ |
|
||||
recipients_ids.push(data.partner_ids[i][0]); |
|
||||
} |
|
||||
|
set_channel_flags: function(data, msg) { |
||||
|
this._super.apply(this, arguments); |
||||
|
// Get recipients ids
|
||||
|
var recipients_ids = []; |
||||
|
for (var i = 0; i < (data.partner_ids || []).length; i++) { |
||||
|
recipients_ids.push(data.partner_ids[i][0]); |
||||
|
} |
||||
|
|
||||
// If author or recipient
|
|
||||
if (data.author_id[0] === session.partner_id || recipients_ids.indexOf(session.partner_id) != -1) { |
|
||||
msg.is_archive = true; |
|
||||
} |
|
||||
|
// If author or recipient
|
||||
|
if ( |
||||
|
data.author_id[0] === session.partner_id || |
||||
|
recipients_ids.indexOf(session.partner_id) !== -1 |
||||
|
) { |
||||
|
msg.is_archive = true; |
||||
|
} |
||||
|
|
||||
return msg; |
|
||||
}, |
|
||||
|
return msg; |
||||
|
}, |
||||
|
|
||||
get_channel_array: function(msg){ |
|
||||
var arr = this._super.apply(this, arguments); |
|
||||
return arr.concat('channel_archive'); |
|
||||
}, |
|
||||
|
get_channel_array: function(msg) { |
||||
|
var arr = this._super.apply(this, arguments); |
||||
|
return arr.concat("channel_archive"); |
||||
|
}, |
||||
|
|
||||
get_domain: function(channel){ |
|
||||
return (channel.id === "channel_archive") ? [ |
|
||||
'|', ['partner_ids', 'in', [openerp.session.partner_id]], |
|
||||
['author_id.user_ids', 'in', [openerp.session.uid]] |
|
||||
] : this._super.apply(this, arguments); |
|
||||
} |
|
||||
}); |
|
||||
|
get_domain: function(channel) { |
||||
|
return channel.id === "channel_archive" |
||||
|
? [ |
||||
|
"|", |
||||
|
["partner_ids", "in", [openerp.session.partner_id]], |
||||
|
["author_id.user_ids", "in", [openerp.session.uid]], |
||||
|
] |
||||
|
: this._super.apply(this, arguments); |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
base_obj.chat_manager.is_ready.then(function(){ |
|
||||
|
base_obj.chat_manager.is_ready.then(function() { |
||||
// Add archive channel
|
// Add archive channel
|
||||
base_obj.chat_manager.mail_tools.add_channel({ |
base_obj.chat_manager.mail_tools.add_channel({ |
||||
id: "channel_archive", |
id: "channel_archive", |
||||
name: _lt("Archive"), |
name: _lt("Archive"), |
||||
type: "static" |
|
||||
|
type: "static", |
||||
}); |
}); |
||||
|
|
||||
return $.when(); |
return $.when(); |
||||
}); |
}); |
||||
|
|
||||
return base_obj.chat_manager; |
|
||||
|
|
||||
|
return base_obj.chat_manager; |
||||
}); |
}); |
@ -1,11 +1,16 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="res_partner_mails_count_assets_backend" |
|
||||
name="res_partner_mails_count_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="res_partner_mails_count_assets_backend" |
||||
|
name="res_partner_mails_count_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script src="/mail_archives/static/src/js/archives.js" type="text/javascript"></script> |
|
||||
|
<script |
||||
|
src="/mail_archives/static/src/js/archives.js" |
||||
|
type="text/javascript" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,8 +1,43 @@ |
|||||
.arcticmodal-overlay, |
.arcticmodal-overlay, |
||||
.arcticmodal-container { position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 1010; } |
|
||||
.arcticmodal-container { overflow: auto; margin: 0; padding: 0; border: 0; border-collapse: collapse; } |
|
||||
*:first-child+html .arcticmodal-container { height: 100% } |
|
||||
.arcticmodal-container_i { height: 100%; margin: 0 auto; } |
|
||||
.arcticmodal-container_i2 { padding: 24px; margin: 0; border: 0; vertical-align: middle; padding-top: 50px;} |
|
||||
.arcticmodal-error { padding: 20px; border-radius: 10px; background: #000; color: #fff; } |
|
||||
.arcticmodal-loading { width: 80px; height: 80px; border-radius: 10px; background: #000 url(/mail_attachment_popup/static/src/img/loading.gif) no-repeat 50% 50%; } |
|
||||
|
.arcticmodal-container { |
||||
|
position: fixed; |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
right: 0; |
||||
|
bottom: 0; |
||||
|
z-index: 1010; |
||||
|
} |
||||
|
.arcticmodal-container { |
||||
|
overflow: auto; |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
border: 0; |
||||
|
border-collapse: collapse; |
||||
|
} |
||||
|
*:first-child + html .arcticmodal-container { |
||||
|
height: 100%; |
||||
|
} |
||||
|
.arcticmodal-container_i { |
||||
|
height: 100%; |
||||
|
margin: 0 auto; |
||||
|
} |
||||
|
.arcticmodal-container_i2 { |
||||
|
padding: 24px; |
||||
|
margin: 0; |
||||
|
border: 0; |
||||
|
vertical-align: middle; |
||||
|
padding-top: 50px; |
||||
|
} |
||||
|
.arcticmodal-error { |
||||
|
padding: 20px; |
||||
|
border-radius: 10px; |
||||
|
background: #000; |
||||
|
color: #fff; |
||||
|
} |
||||
|
.arcticmodal-loading { |
||||
|
width: 80px; |
||||
|
height: 80px; |
||||
|
border-radius: 10px; |
||||
|
background: #000 url(/mail_attachment_popup/static/src/img/loading.gif) no-repeat |
||||
|
50% 50%; |
||||
|
} |
@ -1,11 +1,21 @@ |
|||||
.box-modal { |
.box-modal { |
||||
position: relative; |
|
||||
padding: 16px; |
|
||||
background: #fff; |
|
||||
color: #3c3c3c; |
|
||||
font: 14px/18px Arial, "Helvetica CY", "Nimbus Sans L", sans-serif; |
|
||||
box-shadow: 0 0 0 6px rgba(153, 153, 153, .3); |
|
||||
border-radius: 6px; |
|
||||
|
position: relative; |
||||
|
padding: 16px; |
||||
|
background: #fff; |
||||
|
color: #3c3c3c; |
||||
|
font: 14px/18px Arial, "Helvetica CY", "Nimbus Sans L", sans-serif; |
||||
|
box-shadow: 0 0 0 6px rgba(153, 153, 153, 0.3); |
||||
|
border-radius: 6px; |
||||
|
} |
||||
|
.box-modal_close { |
||||
|
position: absolute; |
||||
|
right: -25px; |
||||
|
top: -25px; |
||||
|
font-size: 30px; |
||||
|
line-height: 15px; |
||||
|
color: #ffffff; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
.box-modal_close:hover { |
||||
|
color: #b1b1b1; |
||||
} |
} |
||||
.box-modal_close { position: absolute; right: -25px; top: -25px; font-size: 30px; line-height: 15px; color: #ffffff; cursor: pointer; } |
|
||||
.box-modal_close:hover { color: #B1B1B1; } |
|
@ -1,12 +1,28 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="assets_backend" name="mail attachment popup assets" inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="assets_backend" |
||||
|
name="mail attachment popup assets" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<link rel="stylesheet" href="/mail_attachment_popup/static/src/css/jquery.arcticmodal.css"/> |
|
||||
<link rel="stylesheet" href="/mail_attachment_popup/static/src/css/simple.css"/> |
|
||||
<link rel="stylesheet" href="/mail_attachment_popup/static/src/css/styles.css"/> |
|
||||
<script type="text/javascript" src="/mail_attachment_popup/static/lib/js/jquery.arcticmodal.js"></script> |
|
||||
|
<link |
||||
|
rel="stylesheet" |
||||
|
href="/mail_attachment_popup/static/src/css/jquery.arcticmodal.css" |
||||
|
/> |
||||
|
<link |
||||
|
rel="stylesheet" |
||||
|
href="/mail_attachment_popup/static/src/css/simple.css" |
||||
|
/> |
||||
|
<link |
||||
|
rel="stylesheet" |
||||
|
href="/mail_attachment_popup/static/src/css/styles.css" |
||||
|
/> |
||||
|
<script |
||||
|
type="text/javascript" |
||||
|
src="/mail_attachment_popup/static/lib/js/jquery.arcticmodal.js" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1 +1,2 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
from . import main |
from . import main |
@ -1,11 +1,13 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="mail_base_assets_backend" |
|
||||
name="mail_base_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="mail_base_assets_backend" |
||||
|
name="mail_base_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script src="/mail_base/static/lib/base.js" type="text/javascript"></script> |
|
||||
|
<script src="/mail_base/static/lib/base.js" type="text/javascript" /> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,20 +1,16 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
'name': 'Check mail immediately', |
|
||||
'version': '1.0.1', |
|
||||
'author': 'IT-Projects LLC, Ivan Yelizariev', |
|
||||
'license': 'LGPL-3', |
|
||||
|
"name": "Check mail immediately", |
||||
|
"vesion": "10.0.1.0.1", |
||||
|
"author": "IT-Projects LLC, Ivan Yelizariev", |
||||
|
"license": "LGPL-3", |
||||
"category": "Discuss", |
"category": "Discuss", |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
'website': 'https://twitter.com/yelizariev', |
|
||||
'price': 9.00, |
|
||||
'currency': 'EUR', |
|
||||
'depends': ['base', 'web', 'fetchmail', 'mail'], |
|
||||
'data': [ |
|
||||
'views.xml', |
|
||||
], |
|
||||
'qweb': [ |
|
||||
"static/src/xml/main.xml", |
|
||||
], |
|
||||
'installable': False |
|
||||
|
"website": "https://twitter.com/yelizariev", |
||||
|
"price": 9.00, |
||||
|
"currency": "EUR", |
||||
|
"depends": ["base", "web", "fetchmail", "mail"], |
||||
|
"data": ["views.xml"], |
||||
|
"qweb": ["static/src/xml/main.xml"], |
||||
|
"installable": False, |
||||
} |
} |
@ -1,8 +1,15 @@ |
|||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="assets_backend_inherited_check_mail" name="Check mail immediately bar" inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="assets_backend_inherited_check_mail" |
||||
|
name="Check mail immediately bar" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script type="text/javascript" src="/mail_check_immediately/static/src/js/main.js"></script> |
|
||||
|
<script |
||||
|
type="text/javascript" |
||||
|
src="/mail_check_immediately/static/src/js/main.js" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,13 +1,13 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
"name": "Fix mail error 553", |
"name": "Fix mail error 553", |
||||
"version": "0.3", |
|
||||
|
"version": "10.0.1.0.3", |
||||
"author": "IT-Projects LLC, Ivan Yelizariev", |
"author": "IT-Projects LLC, Ivan Yelizariev", |
||||
'license': 'LGPL-3', |
|
||||
|
"license": "LGPL-3", |
||||
"category": "Discuss", |
"category": "Discuss", |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
"website": "https://yelizariev.github.io", |
"website": "https://yelizariev.github.io", |
||||
"depends": ["base", "mail"], |
"depends": ["base", "mail"], |
||||
"data": ["data.xml"], |
"data": ["data.xml"], |
||||
'installable': False |
|
||||
|
"installable": False, |
||||
} |
} |
@ -1,22 +1,17 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
'name': 'Mail relocation', |
|
||||
'version': '10.0.1.0.6', |
|
||||
'author': 'IT-Projects LLC, Ivan Yelizariev, Pavel Romanchenko', |
|
||||
'license': 'LGPL-3', |
|
||||
'category': 'Discuss', |
|
||||
'images': ['images/m1.png'], |
|
||||
|
"name": "Mail relocation", |
||||
|
"version": "10.0.1.0.6", |
||||
|
"author": "IT-Projects LLC, Ivan Yelizariev, Pavel Romanchenko", |
||||
|
"license": "LGPL-3", |
||||
|
"category": "Discuss", |
||||
|
"images": ["images/m1.png"], |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
'website': 'https://twitter.com/yelizariev', |
|
||||
'price': 100.00, |
|
||||
'currency': 'EUR', |
|
||||
'depends': ['mail_all', 'web_polymorphic_field'], |
|
||||
'data': [ |
|
||||
'mail_move_message_views.xml', |
|
||||
'data/mail_move_message_data.xml', |
|
||||
], |
|
||||
'qweb': [ |
|
||||
'static/src/xml/mail_move_message_main.xml', |
|
||||
], |
|
||||
'installable': True, |
|
||||
|
"website": "https://twitter.com/yelizariev", |
||||
|
"price": 100.00, |
||||
|
"currency": "EUR", |
||||
|
"depends": ["mail_all", "web_polymorphic_field"], |
||||
|
"data": ["mail_move_message_views.xml", "data/mail_move_message_data.xml"], |
||||
|
"qweb": ["static/src/xml/mail_move_message_main.xml"], |
||||
|
"installable": True, |
||||
} |
} |
@ -1,4 +1,3 @@ |
|||||
================= |
================= |
||||
Mail relocation |
Mail relocation |
||||
================= |
================= |
||||
|
|
@ -1,9 +1,13 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<template> |
<template> |
||||
<t t-extend="mail.ChatThread.Message"> |
<t t-extend="mail.ChatThread.Message"> |
||||
<t t-jquery='p.o_mail_info>span>i:first-child' t-operation="before"> |
<t t-jquery='p.o_mail_info>span>i:first-child' t-operation="before"> |
||||
<i t-if="!message.is_system_notification" t-att-class="'fa fa-exchange oe_move' + (message.is_moved ? ' oe_moved' : '')" |
|
||||
t-att-data-message-id="message.id" title="Move to thread"/> |
|
||||
|
<i |
||||
|
t-if="!message.is_system_notification" |
||||
|
t-att-class="'fa fa-exchange oe_move' + (message.is_moved ? ' oe_moved' : '')" |
||||
|
t-att-data-message-id="message.id" |
||||
|
title="Move to thread" |
||||
|
/> |
||||
</t> |
</t> |
||||
</t> |
</t> |
||||
</template> |
</template> |
@ -1,48 +1,55 @@ |
|||||
/* Copyright 2018 Kolushov Alexandr <https://it-projects.info/team/KolushovAlexandr> |
/* Copyright 2018 Kolushov Alexandr <https://it-projects.info/team/KolushovAlexandr> |
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).*/
|
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).*/
|
||||
odoo.define('mail_private.tour', function (require) { |
|
||||
|
odoo.define("mail_private.tour", function(require) { |
||||
"use strict"; |
"use strict"; |
||||
|
|
||||
var tour = require("web_tour.tour"); |
var tour = require("web_tour.tour"); |
||||
var core = require('web.core'); |
|
||||
|
var core = require("web.core"); |
||||
var _t = core._t; |
var _t = core._t; |
||||
|
|
||||
var email = 'mail_private test email'; |
|
||||
var steps = [{ |
|
||||
|
var email = "mail_private test email"; |
||||
|
var steps = [ |
||||
|
{ |
||||
trigger: '.o_thread_message strong.o_mail_redirect:contains("Agrolait")', |
trigger: '.o_thread_message strong.o_mail_redirect:contains("Agrolait")', |
||||
content: _t("Open Partners Form"), |
content: _t("Open Partners Form"), |
||||
position: 'bottom', |
|
||||
}, { |
|
||||
|
position: "bottom", |
||||
|
}, |
||||
|
{ |
||||
trigger: "button.oe_compose_post_private", |
trigger: "button.oe_compose_post_private", |
||||
content: _t("Click on Private mail creating button"), |
content: _t("Click on Private mail creating button"), |
||||
position: "bottom" |
|
||||
}, { |
|
||||
// for some reason (due to tricky renderings) button.oe_composer_uncheck could not be find by the tour manager
|
|
||||
|
position: "bottom", |
||||
|
}, |
||||
|
{ |
||||
|
// For some reason (due to tricky renderings) button.oe_composer_uncheck could not be find by the tour manager
|
||||
trigger: ".o_control_panel.o_breadcrumb_full li.active", |
trigger: ".o_control_panel.o_breadcrumb_full li.active", |
||||
content: _t("Dummy action"), |
content: _t("Dummy action"), |
||||
}, { |
|
||||
|
}, |
||||
|
{ |
||||
trigger: "button.oe_composer_uncheck", |
trigger: "button.oe_composer_uncheck", |
||||
extra_trigger: "button.oe_composer_uncheck", |
extra_trigger: "button.oe_composer_uncheck", |
||||
content: _t("Uncheck all Followers"), |
content: _t("Uncheck all Followers"), |
||||
timeout: 22000, |
timeout: 22000, |
||||
}, { |
|
||||
|
}, |
||||
|
{ |
||||
trigger: "div.o_composer_suggested_partners input:first", |
trigger: "div.o_composer_suggested_partners input:first", |
||||
content: _t("Check the first one"), |
content: _t("Check the first one"), |
||||
}, { |
|
||||
|
}, |
||||
|
{ |
||||
trigger: "textarea.o_composer_text_field:first", |
trigger: "textarea.o_composer_text_field:first", |
||||
content: _t("Write some email"), |
content: _t("Write some email"), |
||||
run: function() { |
run: function() { |
||||
$('textarea.o_composer_text_field:first').val(email); |
|
||||
|
$("textarea.o_composer_text_field:first").val(email); |
||||
}, |
}, |
||||
}, { |
|
||||
|
}, |
||||
|
{ |
||||
trigger: ".o_composer_buttons .o_composer_button_send", |
trigger: ".o_composer_buttons .o_composer_button_send", |
||||
content: _t("Send email"), |
content: _t("Send email"), |
||||
}, { |
|
||||
|
}, |
||||
|
{ |
||||
trigger: ".o_mail_thread .o_thread_message:contains(" + email + ")", |
trigger: ".o_mail_thread .o_thread_message:contains(" + email + ")", |
||||
content: _t("Send email"), |
content: _t("Send email"), |
||||
} |
|
||||
|
}, |
||||
]; |
]; |
||||
|
|
||||
tour.register('mail_private_tour', { test: true, url: '/web' }, steps); |
|
||||
|
|
||||
|
tour.register("mail_private_tour", {test: true, url: "/web"}, steps); |
||||
}); |
}); |
@ -1,19 +1,22 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
<!--Copyright 2016 x620 <https://github.com/x620> |
<!--Copyright 2016 x620 <https://github.com/x620> |
||||
License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html).--> |
License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html).--> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template |
<template |
||||
id="assets_backend" |
|
||||
name="mail_private_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
id="assets_backend" |
||||
|
name="mail_private_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script |
<script |
||||
type="text/javascript" |
|
||||
src="/mail_private/static/src/js/mail_private.js"></script> |
|
||||
|
type="text/javascript" |
||||
|
src="/mail_private/static/src/js/mail_private.js" |
||||
|
/> |
||||
<script |
<script |
||||
type="text/javascript" |
|
||||
src="/mail_private/static/src/js/test_private.js"></script> |
|
||||
|
type="text/javascript" |
||||
|
src="/mail_private/static/src/js/test_private.js" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
@ -1,19 +1,17 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
'name': "Mail Recovery", |
|
||||
'summary': """Backup and recover unsent message""", |
|
||||
'author': "IT-Projects LLC, Ildar Nasyrov", |
|
||||
'license': 'LGPL-3', |
|
||||
|
"name": "Mail Recovery", |
||||
|
"summary": """Backup and recover unsent message""", |
||||
|
"author": "IT-Projects LLC, Ildar Nasyrov", |
||||
|
"license": "LGPL-3", |
||||
"price": 190.00, |
"price": 190.00, |
||||
"currency": "EUR", |
"currency": "EUR", |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
'website': "https://twitter.com/nasyrov_ildar", |
|
||||
'category': 'Discuss', |
|
||||
'images': ['images/mail_recovery.png'], |
|
||||
'version': '1.0.0', |
|
||||
'depends': ['mail'], |
|
||||
'data': [ |
|
||||
'data.xml', |
|
||||
], |
|
||||
|
"website": "https://twitter.com/nasyrov_ildar", |
||||
|
"category": "Discuss", |
||||
|
"images": ["images/mail_recovery.png"], |
||||
|
"vesion": "10.0.1.0.0", |
||||
|
"depends": ["mail"], |
||||
|
"data": ["data.xml"], |
||||
"installable": True, |
"installable": True, |
||||
} |
} |
@ -1,9 +1,16 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="assets_backend" name="message storage" inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="assets_backend" |
||||
|
name="message storage" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script type="text/javascript" src="/mail_recovery/static/src/js/mail_recovery.js"></script> |
|
||||
|
<script |
||||
|
type="text/javascript" |
||||
|
src="/mail_recovery/static/src/js/mail_recovery.js" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
@ -1,46 +1,47 @@ |
|||||
odoo.define('mail_reply.reply', function (require) { |
|
||||
"use strict"; |
|
||||
|
odoo.define("mail_reply.reply", function(require) { |
||||
|
"use strict"; |
||||
|
|
||||
var core = require('web.core'); |
|
||||
var base_obj = require('mail_base.base'); |
|
||||
|
var core = require("web.core"); |
||||
|
var base_obj = require("mail_base.base"); |
||||
|
|
||||
var ChatAction = core.action_registry.get('mail.chat.instant_messaging'); |
|
||||
ChatAction.include({ |
|
||||
select_message: function(message_id) { |
|
||||
this._super.apply(this, arguments); |
|
||||
var message = base_obj.chat_manager.get_message(message_id); |
|
||||
var subject = ''; |
|
||||
if (message.record_name){ |
|
||||
subject = "Re: " + message.record_name; |
|
||||
} else if (message.subject){ |
|
||||
subject = "Re: " + message.subject; |
|
||||
} |
|
||||
this.extended_composer.set_subject(subject); |
|
||||
}, |
|
||||
on_post_message: function(message){ |
|
||||
var self = this; |
|
||||
var options = this.selected_message ? {} : {channel_id: this.channel.id}; |
|
||||
if (this.selected_message) { |
|
||||
message.subtype = 'mail.mt_comment'; |
|
||||
message.subtype_id = false; |
|
||||
message.message_type = 'comment'; |
|
||||
message.content_subtype = 'html'; |
|
||||
|
var ChatAction = core.action_registry.get("mail.chat.instant_messaging"); |
||||
|
ChatAction.include({ |
||||
|
select_message: function(message_id) { |
||||
|
this._super.apply(this, arguments); |
||||
|
var message = base_obj.chat_manager.get_message(message_id); |
||||
|
var subject = ""; |
||||
|
if (message.record_name) { |
||||
|
subject = "Re: " + message.record_name; |
||||
|
} else if (message.subject) { |
||||
|
subject = "Re: " + message.subject; |
||||
|
} |
||||
|
this.extended_composer.set_subject(subject); |
||||
|
}, |
||||
|
on_post_message: function(message) { |
||||
|
var self = this; |
||||
|
var options = this.selected_message ? {} : {channel_id: this.channel.id}; |
||||
|
if (this.selected_message) { |
||||
|
message.subtype = "mail.mt_comment"; |
||||
|
message.subtype_id = false; |
||||
|
message.message_type = "comment"; |
||||
|
message.content_subtype = "html"; |
||||
|
|
||||
options.model = this.selected_message.model; |
|
||||
options.res_id = this.selected_message.res_id; |
|
||||
options.parent_id = this.selected_message.id; |
|
||||
} |
|
||||
base_obj.chat_manager |
|
||||
.post_message(message, options) |
|
||||
.then(function() { |
|
||||
|
options.model = this.selected_message.model; |
||||
|
options.res_id = this.selected_message.res_id; |
||||
|
options.parent_id = this.selected_message.id; |
||||
|
} |
||||
|
base_obj.chat_manager.post_message(message, options).then(function() { |
||||
if (self.selected_message) { |
if (self.selected_message) { |
||||
self.render_snackbar('mail.chat.MessageSentSnackbar', {record_name: self.selected_message.record_name}, 5000); |
|
||||
|
self.render_snackbar( |
||||
|
"mail.chat.MessageSentSnackbar", |
||||
|
{record_name: self.selected_message.record_name}, |
||||
|
5000 |
||||
|
); |
||||
self.unselect_message(); |
self.unselect_message(); |
||||
} else { |
} else { |
||||
self.thread.scroll_to(); |
self.thread.scroll_to(); |
||||
} |
} |
||||
}); |
}); |
||||
} |
|
||||
}); |
|
||||
|
|
||||
|
}, |
||||
|
}); |
||||
}); |
}); |
@ -1,10 +1,16 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<template> |
<template> |
||||
<t t-extend="mail.ChatThread.Message"> |
<t t-extend="mail.ChatThread.Message"> |
||||
<t t-jquery='i[class="fa fa-reply o_thread_message_reply"]' t-operation="replace"> |
|
||||
<i t-if="message.author_id != 'ODOOBOT' && message.model != 'mail.channel' && options.display_reply_icon" |
|
||||
|
<t |
||||
|
t-jquery='i[class="fa fa-reply o_thread_message_reply"]' |
||||
|
t-operation="replace" |
||||
|
> |
||||
|
<i |
||||
|
t-if="message.author_id != 'ODOOBOT' && message.model != 'mail.channel' && options.display_reply_icon" |
||||
class="fa fa-reply o_thread_message_reply" |
class="fa fa-reply o_thread_message_reply" |
||||
t-att-data-message-id="message.id" title="Reply"/> |
|
||||
|
t-att-data-message-id="message.id" |
||||
|
title="Reply" |
||||
|
/> |
||||
</t> |
</t> |
||||
</t> |
</t> |
||||
</template> |
</template> |
@ -1,11 +1,16 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="mail_reply_assets_backend" |
|
||||
name="mail_reply_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="mail_reply_assets_backend" |
||||
|
name="mail_reply_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script src="/mail_reply/static/src/js/mail_reply.js" type="text/javascript"></script> |
|
||||
|
<script |
||||
|
src="/mail_reply/static/src/js/mail_reply.js" |
||||
|
type="text/javascript" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,36 +1,40 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
from openerp import api, models, fields |
|
||||
|
from openerp import api, fields, models |
||||
|
|
||||
|
|
||||
class MailMessage(models.Model): |
class MailMessage(models.Model): |
||||
_inherit = 'mail.message' |
|
||||
|
_inherit = "mail.message" |
||||
|
|
||||
sent = fields.Boolean('Sent', compute="_compute_sent", help='Was message sent to someone', store=True) |
|
||||
|
sent = fields.Boolean( |
||||
|
"Sent", compute="_compute_sent", help="Was message sent to someone", store=True |
||||
|
) |
||||
|
|
||||
@api.depends('author_id', 'partner_ids') |
|
||||
|
@api.depends("author_id", "partner_ids") |
||||
def _compute_sent(self): |
def _compute_sent(self): |
||||
for r in self: |
for r in self: |
||||
r_sudo = r.sudo() |
r_sudo = r.sudo() |
||||
sent = len(r_sudo.partner_ids) > 1 \ |
|
||||
or len(r_sudo.partner_ids) == 1 \ |
|
||||
and r_sudo.author_id \ |
|
||||
and r_sudo.partner_ids[0].id != r_sudo.author_id.id \ |
|
||||
or r_sudo.model == 'mail.channel' \ |
|
||||
|
sent = ( |
||||
|
len(r_sudo.partner_ids) > 1 |
||||
|
or len(r_sudo.partner_ids) == 1 |
||||
|
and r_sudo.author_id |
||||
|
and r_sudo.partner_ids[0].id != r_sudo.author_id.id |
||||
|
or r_sudo.model == "mail.channel" |
||||
and r_sudo.res_id |
and r_sudo.res_id |
||||
|
) |
||||
r.sent = sent |
r.sent = sent |
||||
|
|
||||
@api.multi |
@api.multi |
||||
def message_format(self): |
def message_format(self): |
||||
message_values = super(MailMessage, self).message_format() |
message_values = super(MailMessage, self).message_format() |
||||
message_index = {message['id']: message for message in message_values} |
|
||||
|
message_index = {message["id"]: message for message in message_values} |
||||
for item in self: |
for item in self: |
||||
msg = message_index.get(item.id) |
msg = message_index.get(item.id) |
||||
if msg: |
if msg: |
||||
msg['sent'] = item.sent |
|
||||
|
msg["sent"] = item.sent |
||||
return message_values |
return message_values |
||||
|
|
||||
|
|
||||
class MailComposeMessage(models.TransientModel): |
class MailComposeMessage(models.TransientModel): |
||||
|
|
||||
_inherit = 'mail.compose.message' |
|
||||
sent = fields.Boolean('Sent', help='dummy field to fix inherit error') |
|
||||
|
_inherit = "mail.compose.message" |
||||
|
sent = fields.Boolean("Sent", help="dummy field to fix inherit error") |
@ -1,79 +1,74 @@ |
|||||
odoo.define('mail_sent.sent', function (require) { |
|
||||
"use strict"; |
|
||||
|
odoo.define("mail_sent.sent", function(require) { |
||||
|
"use strict"; |
||||
|
|
||||
var base_obj = require('mail_base.base'); |
|
||||
|
var base_obj = require("mail_base.base"); |
||||
|
|
||||
//-------------------------------------------------------------------------------
|
|
||||
var bus = require('bus.bus').bus; |
|
||||
var config = require('web.config'); |
|
||||
var core = require('web.core'); |
|
||||
var data = require('web.data'); |
|
||||
var Model = require('web.Model'); |
|
||||
var session = require('web.session'); |
|
||||
var time = require('web.time'); |
|
||||
var web_client = require('web.web_client'); |
|
||||
|
// -------------------------------------------------------------------------------
|
||||
|
var core = require("web.core"); |
||||
|
var session = require("web.session"); |
||||
|
|
||||
var _lt = core._lt; |
|
||||
//-------------------------------------------------------------------------------
|
|
||||
|
var _lt = core._lt; |
||||
|
// -------------------------------------------------------------------------------
|
||||
|
|
||||
var ChatAction = core.action_registry.get('mail.chat.instant_messaging'); |
|
||||
ChatAction.include({ |
|
||||
init: function(parent, action, options) { |
|
||||
this._super.apply(this, arguments); |
|
||||
var channel_name = 'channel_sent'; |
|
||||
// Add channel Sent for show "Send message" button
|
|
||||
this.channels_show_send_button.push(channel_name); |
|
||||
// Add channel Sent for enable "display_subject" option
|
|
||||
this.channels_display_subject.push(channel_name); |
|
||||
}, |
|
||||
|
var ChatAction = core.action_registry.get("mail.chat.instant_messaging"); |
||||
|
ChatAction.include({ |
||||
|
init: function(parent, action, options) { |
||||
|
this._super.apply(this, arguments); |
||||
|
var channel_name = "channel_sent"; |
||||
|
// Add channel Sent for show "Send message" button
|
||||
|
this.channels_show_send_button.push(channel_name); |
||||
|
// Add channel Sent for enable "display_subject" option
|
||||
|
this.channels_display_subject.push(channel_name); |
||||
|
}, |
||||
|
|
||||
update_message_on_current_channel: function(current_channel_id, message){ |
|
||||
var result = this._super.apply(this, arguments); |
|
||||
var sent = current_channel_id === "channel_sent" && !message.is_sent; |
|
||||
return sent || result; |
|
||||
} |
|
||||
}); |
|
||||
|
update_message_on_current_channel: function(current_channel_id, message) { |
||||
|
var result = this._super.apply(this, arguments); |
||||
|
var sent = current_channel_id === "channel_sent" && !message.is_sent; |
||||
|
return sent || result; |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
// Inherit class and override methods
|
|
||||
base_obj.MailTools.include({ |
|
||||
get_properties: function(msg){ |
|
||||
var properties = this._super.apply(this, arguments); |
|
||||
properties.is_sent = this.property_descr("channel_sent", msg, this); |
|
||||
return properties; |
|
||||
}, |
|
||||
|
// Inherit class and override methods
|
||||
|
base_obj.MailTools.include({ |
||||
|
get_properties: function(msg) { |
||||
|
var properties = this._super.apply(this, arguments); |
||||
|
properties.is_sent = this.property_descr("channel_sent", msg, this); |
||||
|
return properties; |
||||
|
}, |
||||
|
|
||||
set_channel_flags: function(data, msg){ |
|
||||
this._super.apply(this, arguments); |
|
||||
if (data.sent && data.author_id[0] == session.partner_id) { |
|
||||
msg.is_sent = true; |
|
||||
} |
|
||||
return msg; |
|
||||
}, |
|
||||
|
set_channel_flags: function(data, msg) { |
||||
|
this._super.apply(this, arguments); |
||||
|
if (data.sent && data.author_id[0] === session.partner_id) { |
||||
|
msg.is_sent = true; |
||||
|
} |
||||
|
return msg; |
||||
|
}, |
||||
|
|
||||
get_channel_array: function(msg){ |
|
||||
var arr = this._super.apply(this, arguments); |
|
||||
return arr.concat('channel_sent'); |
|
||||
}, |
|
||||
|
get_channel_array: function(msg) { |
||||
|
var arr = this._super.apply(this, arguments); |
||||
|
return arr.concat("channel_sent"); |
||||
|
}, |
||||
|
|
||||
get_domain: function(channel){ |
|
||||
return (channel.id === "channel_sent") ? [ |
|
||||
['sent', '=', true], |
|
||||
['author_id.user_ids', 'in', [openerp.session.uid]] |
|
||||
] : this._super.apply(this, arguments); |
|
||||
} |
|
||||
}); |
|
||||
|
get_domain: function(channel) { |
||||
|
return channel.id === "channel_sent" |
||||
|
? [ |
||||
|
["sent", "=", true], |
||||
|
["author_id.user_ids", "in", [openerp.session.uid]], |
||||
|
] |
||||
|
: this._super.apply(this, arguments); |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
base_obj.chat_manager.is_ready.then(function(){ |
|
||||
|
base_obj.chat_manager.is_ready.then(function() { |
||||
// Add sent channel
|
// Add sent channel
|
||||
base_obj.chat_manager.mail_tools.add_channel({ |
base_obj.chat_manager.mail_tools.add_channel({ |
||||
id: "channel_sent", |
id: "channel_sent", |
||||
name: _lt("Sent"), |
name: _lt("Sent"), |
||||
type: "static" |
|
||||
|
type: "static", |
||||
}); |
}); |
||||
|
|
||||
return $.when(); |
return $.when(); |
||||
}); |
}); |
||||
|
|
||||
return base_obj.chat_manager; |
|
||||
|
|
||||
|
return base_obj.chat_manager; |
||||
}); |
}); |
@ -1,11 +1,13 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="mail_sent_assets_backend" |
|
||||
name="mail_sent_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="mail_sent_assets_backend" |
||||
|
name="mail_sent_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<script src="/mail_sent/static/src/js/sent.js" type="text/javascript"></script> |
|
||||
|
<script src="/mail_sent/static/src/js/sent.js" type="text/javascript" /> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,18 +1,21 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# Copyright 2019 Artem Rafailov <https://it-projects.info/team/Ommo73/> |
# Copyright 2019 Artem Rafailov <https://it-projects.info/team/Ommo73/> |
||||
# License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html). |
# License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html). |
||||
from odoo import models, api |
|
||||
|
from odoo import api, models |
||||
|
|
||||
|
|
||||
class MailMessage(models.Model): |
class MailMessage(models.Model): |
||||
_inherit = 'mail.message' |
|
||||
|
_inherit = "mail.message" |
||||
|
|
||||
@api.multi |
@api.multi |
||||
def message_format(self): |
def message_format(self): |
||||
messages_values = super(MailMessage, self).message_format() |
messages_values = super(MailMessage, self).message_format() |
||||
for i in messages_values: |
for i in messages_values: |
||||
if i['channel_ids']: |
|
||||
i['channel_names'] = self.env['mail.channel'].browse(i['channel_ids']).mapped( |
|
||||
lambda r: [r.id, '#' + r.display_name]) |
|
||||
|
if i["channel_ids"]: |
||||
|
i["channel_names"] = ( |
||||
|
self.env["mail.channel"] |
||||
|
.browse(i["channel_ids"]) |
||||
|
.mapped(lambda r: [r.id, "#" + r.display_name]) |
||||
|
) |
||||
|
|
||||
return messages_values |
return messages_values |
@ -1,20 +1,20 @@ |
|||||
/* Copyright 2018 Artem Rafailov <https://it-projects.info/team/KolushovAlexandr> |
/* Copyright 2018 Artem Rafailov <https://it-projects.info/team/KolushovAlexandr> |
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).*/
|
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).*/
|
||||
odoo.define('mail_to.tour', function (require) { |
|
||||
|
odoo.define("mail_to.tour", function(require) { |
||||
"use strict"; |
"use strict"; |
||||
|
|
||||
var tour = require("web_tour.tour"); |
var tour = require("web_tour.tour"); |
||||
var core = require('web.core'); |
|
||||
|
var core = require("web.core"); |
||||
var _t = core._t; |
var _t = core._t; |
||||
|
|
||||
var email = 'mail_private test email'; |
|
||||
var steps = [{ |
|
||||
trigger: 'a.recipient_link:first', |
|
||||
|
var steps = [ |
||||
|
{ |
||||
|
trigger: "a.recipient_link:first", |
||||
content: _t("Open Partners Form From Recipient Link"), |
content: _t("Open Partners Form From Recipient Link"), |
||||
position: 'bottom', |
|
||||
|
position: "bottom", |
||||
timeout: 70000, |
timeout: 70000, |
||||
}]; |
|
||||
|
|
||||
tour.register('mail_to_tour', { test: true, url: '/web' }, steps); |
|
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
tour.register("mail_to_tour", {test: true, url: "/web"}, steps); |
||||
}); |
}); |
@ -1,17 +1,25 @@ |
|||||
<?xml version="1.0"?> |
|
||||
|
<?xml version="1.0" ?> |
||||
<!--Copyright 2016 x620 <https://github.com/x620> |
<!--Copyright 2016 x620 <https://github.com/x620> |
||||
Copyright 2017 Ivan Yelizariev <https://it-projects.info/team/yelizariev> |
Copyright 2017 Ivan Yelizariev <https://it-projects.info/team/yelizariev> |
||||
Copyright 2019 Artem Rafailov <https://it-projects.info/team/Ommo73/> |
Copyright 2019 Artem Rafailov <https://it-projects.info/team/Ommo73/> |
||||
License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html).--> |
License LGPL-3.0 (https://www.gnu.org/licenses/lgpl.html).--> |
||||
<openerp> |
<openerp> |
||||
<data> |
<data> |
||||
<template id="mail_to_assets_backend" |
|
||||
name="mail_to_assets_backend" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
|
<template |
||||
|
id="mail_to_assets_backend" |
||||
|
name="mail_to_assets_backend" |
||||
|
inherit_id="web.assets_backend" |
||||
|
> |
||||
<xpath expr="." position="inside"> |
<xpath expr="." position="inside"> |
||||
<link rel="stylesheet" href="/mail_to/static/src/css/mail_to.css"/> |
|
||||
<script src="/mail_to/static/src/js/mail_to.js" type="text/javascript"></script> |
|
||||
<script src="/mail_to/static/src/js/test_mail_to.js" type="text/javascript"></script> |
|
||||
|
<link rel="stylesheet" href="/mail_to/static/src/css/mail_to.css" /> |
||||
|
<script |
||||
|
src="/mail_to/static/src/js/mail_to.js" |
||||
|
type="text/javascript" |
||||
|
/> |
||||
|
<script |
||||
|
src="/mail_to/static/src/js/test_mail_to.js" |
||||
|
type="text/javascript" |
||||
|
/> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</data> |
</data> |
||||
|
@ -1,14 +1,12 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
'name': "Mailgun", |
|
||||
'author': "IT-Projects LLC, Ildar Nasyrov", |
|
||||
'license': 'LGPL-3', |
|
||||
|
"name": "Mailgun", |
||||
|
"author": "IT-Projects LLC, Ildar Nasyrov", |
||||
|
"license": "LGPL-3", |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
'website': "https://twitter.com/nasyrov_ildar", |
|
||||
'category': 'Discuss', |
|
||||
'version': '1.1.0', |
|
||||
'depends': ['mail'], |
|
||||
'data': [ |
|
||||
'data/cron.xml', |
|
||||
], |
|
||||
|
"website": "https://twitter.com/nasyrov_ildar", |
||||
|
"category": "Discuss", |
||||
|
"vesion": "10.0.1.1.0", |
||||
|
"depends": ["mail"], |
||||
|
"data": ["data/cron.xml"], |
||||
} |
} |
@ -1,17 +1,17 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
import re |
||||
|
|
||||
from odoo import http |
from odoo import http |
||||
from odoo.http import request |
from odoo.http import request |
||||
import re |
|
||||
|
|
||||
|
|
||||
class MailMailgun(http.Controller): |
class MailMailgun(http.Controller): |
||||
|
|
||||
@http.route('/mailgun/notify', auth='public', type='http', csrf=False) |
|
||||
|
@http.route("/mailgun/notify", auth="public", type="http", csrf=False) |
||||
def mailgun_notify(self, **kw): |
def mailgun_notify(self, **kw): |
||||
# mailgun notification in json format |
# mailgun notification in json format |
||||
message_url = kw.get('message-url') |
|
||||
if not re.match('^https://[^/]*api.mailgun.net/', message_url): |
|
||||
|
message_url = kw.get("message-url") |
||||
|
if not re.match("^https://[^/]*api.mailgun.net/", message_url): |
||||
# simple security check failed |
# simple security check failed |
||||
raise Exception('wrong message-url') |
|
||||
request.env['mail.thread'].sudo().mailgun_fetch_message(message_url) |
|
||||
return 'ok' |
|
||||
|
raise Exception("wrong message-url") |
||||
|
request.env["mail.thread"].sudo().mailgun_fetch_message(message_url) |
||||
|
return "ok" |
@ -1,36 +1,43 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
import logging |
||||
|
|
||||
import requests |
import requests |
||||
import simplejson |
import simplejson |
||||
|
from openerp import api, models |
||||
|
|
||||
from openerp import models, api |
|
||||
|
|
||||
|
|
||||
import logging |
|
||||
_logger = logging.getLogger(__name__) |
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
class MailThread(models.AbstractModel): |
class MailThread(models.AbstractModel): |
||||
_inherit = 'mail.thread' |
|
||||
|
_inherit = "mail.thread" |
||||
|
|
||||
@api.model |
@api.model |
||||
def mailgun_fetch_message(self, message_url): |
def mailgun_fetch_message(self, message_url): |
||||
api_key = self.env['ir.config_parameter'].sudo().get_param('mailgun.apikey') |
|
||||
res = requests.get(message_url, headers={'Accept': 'message/rfc2822'}, auth=('api', api_key), verify=False) |
|
||||
self.message_process(False, res.json().get('body-mime')) |
|
||||
|
api_key = self.env["ir.config_parameter"].sudo().get_param("mailgun.apikey") |
||||
|
res = requests.get( |
||||
|
message_url, |
||||
|
headers={"Accept": "message/rfc2822"}, |
||||
|
auth=("api", api_key), |
||||
|
verify=False, |
||||
|
) |
||||
|
self.message_process(False, res.json().get("body-mime")) |
||||
|
|
||||
|
|
||||
class IrConfigParameter(models.Model): |
class IrConfigParameter(models.Model): |
||||
_inherit = ['ir.config_parameter'] |
|
||||
|
_inherit = ["ir.config_parameter"] |
||||
|
|
||||
@api.model |
@api.model |
||||
def mailgun_verify(self): |
def mailgun_verify(self): |
||||
verified = self.get_param('mailgun.verified') |
|
||||
|
verified = self.get_param("mailgun.verified") |
||||
if verified: |
if verified: |
||||
return |
return |
||||
api_key = self.get_param('mailgun.apikey') |
|
||||
mail_domain = self.get_param('mail.catchall.domain') |
|
||||
|
api_key = self.get_param("mailgun.apikey") |
||||
|
mail_domain = self.get_param("mail.catchall.domain") |
||||
if api_key and mail_domain: |
if api_key and mail_domain: |
||||
url = "https://api.mailgun.net/v3/domains/%s/verify" % mail_domain |
url = "https://api.mailgun.net/v3/domains/%s/verify" % mail_domain |
||||
res = requests.put(url, auth=("api", api_key)) |
res = requests.put(url, auth=("api", api_key)) |
||||
if res.status_code == 200 and simplejson.loads(res.text)["domain"]["state"] == "active": |
|
||||
self.set_param('mailgun.verified', '1') |
|
||||
|
if ( |
||||
|
res.status_code == 200 |
||||
|
and simplejson.loads(res.text)["domain"]["state"] == "active" |
||||
|
): |
||||
|
self.set_param("mailgun.verified", "1") |
@ -1,18 +1,16 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
{ |
{ |
||||
'name': "Aggregate messages from company's contacts", |
|
||||
'version': '1.0.0', |
|
||||
'author': 'IT-Projects LLC, Ivan Yelizariev', |
|
||||
'license': 'LGPL-3', |
|
||||
|
"name": "Aggregate messages from company's contacts", |
||||
|
"vesion": "10.0.1.0.0", |
||||
|
"author": "IT-Projects LLC, Ivan Yelizariev", |
||||
|
"license": "LGPL-3", |
||||
"price": 70.00, |
"price": 70.00, |
||||
"currency": "EUR", |
"currency": "EUR", |
||||
'category': 'Discuss', |
|
||||
|
"category": "Discuss", |
||||
"support": "apps@it-projects.info", |
"support": "apps@it-projects.info", |
||||
'website': 'https://twitter.com/yelizariev', |
|
||||
'images': ['images/child.png', 'images/parent.png'], |
|
||||
'depends': ['mail'], |
|
||||
'data': [ |
|
||||
'views.xml', |
|
||||
], |
|
||||
'installable': True |
|
||||
|
"website": "https://twitter.com/yelizariev", |
||||
|
"images": ["images/child.png", "images/parent.png"], |
||||
|
"depends": ["mail"], |
||||
|
"data": ["views.xml"], |
||||
|
"installable": True, |
||||
} |
} |
@ -1,19 +1,21 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
from openerp import api |
|
||||
from openerp import models |
|
||||
|
from openerp import api, models |
||||
|
|
||||
|
|
||||
class Partner(models.Model): |
class Partner(models.Model): |
||||
_inherit = 'res.partner' |
|
||||
|
_inherit = "res.partner" |
||||
|
|
||||
@api.multi |
@api.multi |
||||
def read(self, fields=None, load='_classic_read'): |
|
||||
|
def read(self, fields=None, load="_classic_read"): |
||||
res = super(Partner, self).read(fields=fields, load=load) |
res = super(Partner, self).read(fields=fields, load=load) |
||||
if fields and 'message_ids' in fields: |
|
||||
|
if fields and "message_ids" in fields: |
||||
for vals in res: |
for vals in res: |
||||
partner = self.browse(vals['id']) |
|
||||
|
partner = self.browse(vals["id"]) |
||||
if not partner.is_company: |
if not partner.is_company: |
||||
continue |
continue |
||||
domain = [('model', '=', 'res.partner'), ('res_id', 'in', [partner.id] + partner.child_ids.ids)] |
|
||||
vals['message_ids'] = self.env['mail.message'].search(domain).ids |
|
||||
|
domain = [ |
||||
|
("model", "=", "res.partner"), |
||||
|
("res_id", "in", [partner.id] + partner.child_ids.ids), |
||||
|
] |
||||
|
vals["message_ids"] = self.env["mail.message"].search(domain).ids |
||||
return res |
return res |
@ -1,3 +1,3 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
<openerp><data> |
<openerp><data> |
||||
</data></openerp> |
</data></openerp> |
@ -1,19 +1,25 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from openerp import models, fields, api |
|
||||
|
from openerp import api, fields, models |
||||
|
|
||||
|
|
||||
class ResPartner(models.Model): |
class ResPartner(models.Model): |
||||
_inherit = 'res.partner' |
|
||||
|
_inherit = "res.partner" |
||||
mails_to = fields.Integer(compute="_compute_mails_to") |
mails_to = fields.Integer(compute="_compute_mails_to") |
||||
mails_from = fields.Integer(compute="_compute_mails_from") |
mails_from = fields.Integer(compute="_compute_mails_from") |
||||
|
|
||||
@api.multi |
@api.multi |
||||
def _compute_mails_to(self): |
def _compute_mails_to(self): |
||||
for r in self: |
for r in self: |
||||
r.mails_to = self.env['mail.message'].sudo().search_count([('partner_ids', 'in', r.id)]) |
|
||||
|
r.mails_to = ( |
||||
|
self.env["mail.message"] |
||||
|
.sudo() |
||||
|
.search_count([("partner_ids", "in", r.id)]) |
||||
|
) |
||||
|
|
||||
@api.multi |
@api.multi |
||||
def _compute_mails_from(self): |
def _compute_mails_from(self): |
||||
for r in self: |
for r in self: |
||||
r.mails_from = self.env['mail.message'].sudo().search_count([('author_id', '=', r.id)]) |
|
||||
|
r.mails_from = ( |
||||
|
self.env["mail.message"].sudo().search_count([("author_id", "=", r.id)]) |
||||
|
) |
@ -1,36 +1,38 @@ |
|||||
odoo.define('res_partner_mails_count.res_partner_mails_count_tour', function (require) { |
|
||||
'use strict'; |
|
||||
var Core = require('web.core'); |
|
||||
var Tour = require('web.Tour'); |
|
||||
|
odoo.define("res_partner_mails_count.res_partner_mails_count_tour", function(require) { |
||||
|
"use strict"; |
||||
|
var Core = require("web.core"); |
||||
|
var Tour = require("web.Tour"); |
||||
var _t = Core._t; |
var _t = Core._t; |
||||
|
|
||||
Tour.register({ |
Tour.register({ |
||||
id: 'mails_count_tour', |
|
||||
|
id: "mails_count_tour", |
||||
name: _t("Mails count Tour"), |
name: _t("Mails count Tour"), |
||||
mode: 'test', |
|
||||
path: '/web?res_partner_mails_count=tutorial#id=3&view_type=form&model=res.partner', |
|
||||
|
mode: "test", |
||||
|
path: |
||||
|
"/web?res_partner_mails_count=tutorial#id=3&view_type=form&model=res.partner", |
||||
steps: [ |
steps: [ |
||||
{ |
{ |
||||
title: _t("Mails count tutorial"), |
|
||||
content: _t("Let's see how mails count work."), |
|
||||
popover: { next: _t("Start Tutorial"), end: _t("Skip") }, |
|
||||
|
title: _t("Mails count tutorial"), |
||||
|
content: _t("Let's see how mails count work."), |
||||
|
popover: {next: _t("Start Tutorial"), end: _t("Skip")}, |
||||
}, |
}, |
||||
{ |
{ |
||||
title: _t("New fields"), |
|
||||
content: _t("Here is new fields with mails counters. Press one of it."), |
|
||||
element: '.mails_to', |
|
||||
waitFor: '.mails_to:visible', |
|
||||
|
title: _t("New fields"), |
||||
|
content: _t("Here is new fields with mails counters. Press one of it."), |
||||
|
element: ".mails_to", |
||||
|
waitFor: ".mails_to:visible", |
||||
}, |
}, |
||||
{ |
{ |
||||
title: _t("Done"), |
title: _t("Done"), |
||||
placement: 'top', |
|
||||
waitNot: '.mails_to:visible', |
|
||||
waitFor: '.o_mail_thread', |
|
||||
element: '.o_mail_thread', |
|
||||
content: _t("Message are found. <br/>Enjoy your day! <br/> <br/><a href='https://www.it-projects.info/apps' target='_blank'>IT-Projects LLC</a> team "), |
|
||||
|
placement: "top", |
||||
|
waitNot: ".mails_to:visible", |
||||
|
waitFor: ".o_mail_thread", |
||||
|
element: ".o_mail_thread", |
||||
|
content: _t( |
||||
|
"Message are found. <br/>Enjoy your day! <br/> <br/><a href='https://www.it-projects.info/apps' target='_blank'>IT-Projects LLC</a> team " |
||||
|
), |
||||
popover: {next: _t("Close Tutorial")}, |
popover: {next: _t("Close Tutorial")}, |
||||
}, |
}, |
||||
] |
|
||||
|
], |
||||
}); |
}); |
||||
|
|
||||
}); |
}); |
@ -1,4 +1,5 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
|
|
||||
from . import test_mail |
from . import test_mail |
||||
|
|
||||
# from . import test_phantom |
# from . import test_phantom |
Write
Preview
Loading…
Cancel
Save
Reference in new issue