@ -0,0 +1,46 @@ |
|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Email Management in Odoo |
|||
========================== |
|||
This Module will help to manage mails in odoo |
|||
|
|||
Configuration |
|||
============= |
|||
* Configure outgoing mail server |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (AGPL v3). |
|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developers: (V15) Hafeesul ALi, Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import models |
@ -0,0 +1,58 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
{ |
|||
'name': 'Email Management in Odoo', |
|||
'version': '15.0.1.0.0', |
|||
'category': 'Productivity', |
|||
'summary': 'This Module will help to manage all type of mails in Odoo', |
|||
'description': """Email Management in Odoo is a comprehensive module that |
|||
enhances the email handling capabilities of Odoo.This module is designed |
|||
to streamline and improve the management of all types of emails, providing |
|||
a user-friendly interface and additional functionalities for increased |
|||
productivity.""", |
|||
'author': "Cybrosys Techno Solutions", |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['mail', 'calendar', 'note'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'data/mail_icon_data.xml', |
|||
'views/res_config_views.xml', |
|||
'views/inbox_menu_views.xml', |
|||
'views/mail_attachment_views.xml' |
|||
], |
|||
'assets': { |
|||
'web.assets_backend': [ |
|||
"/odoo_mail_management/static/src/css/main.css", |
|||
"/odoo_mail_management/static/src/js/mail_home.js", |
|||
], |
|||
'web.assets_qweb': [ |
|||
"/odoo_mail_management/static/src/xml/mail_page_view.xml", |
|||
], |
|||
}, |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- This XML file defines a record with the id "main_icon" for the Odoo mail.icon model. --> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
<record id="main_icon" model="mail.icon"> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,6 @@ |
|||
## Module <odoo_mail_management> |
|||
|
|||
#### 01.02.2024 |
|||
#### Version 15.0.1.0.0 |
|||
#### ADD |
|||
- Initial commit for Email Management in Odoo |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import mail_attachment |
|||
from . import mail_icon |
|||
from . import mail_mail |
|||
from . import res_config_settings |
@ -0,0 +1,33 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class MailAttachment(models.TransientModel): |
|||
"""Model representing for a mail attachment.""" |
|||
_name = "mail.attachment" |
|||
_description = "Mail Attachment" |
|||
|
|||
mail_attachment = fields.Binary(string="Attachment", |
|||
help="Binary data of the attached file.") |
|||
file_name = fields.Char(string='File Name', |
|||
help="Name of the attached file.") |
@ -0,0 +1,73 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
import base64 |
|||
from odoo import api, fields, models, tools |
|||
from odoo.modules.module import get_resource_path |
|||
|
|||
|
|||
class MailIcon(models.Model): |
|||
"""Model representing a mail icon.""" |
|||
_name = "mail.icon" |
|||
_description = "Mail Icon" |
|||
|
|||
def _get_default_logo(self): |
|||
"""Method to load default logo |
|||
Returns: |
|||
byte:default logo""" |
|||
img_path = get_resource_path('odoo_mail_management', |
|||
'static/src/img/logo.png') |
|||
with tools.file_open(img_path, 'rb') as f: |
|||
return base64.b64encode(f.read()) |
|||
|
|||
mail_icon = fields.Binary(string="Mail Icon", help="Mail Icon", |
|||
default=_get_default_logo) |
|||
|
|||
@api.model_create_multi |
|||
def create(self, vals_list): |
|||
"""Method to super create function and call _handle_icon() function""" |
|||
for vals in vals_list: |
|||
self._handle_icon(vals) |
|||
mail_settings = super().create(vals_list) |
|||
return mail_settings |
|||
|
|||
def write(self, values): |
|||
"""Method to super write function and call _handle_icon() function""" |
|||
self._handle_icon(values) |
|||
mail_settings = super().create(values) |
|||
return mail_settings |
|||
|
|||
@api.model |
|||
def _handle_icon(self, vals): |
|||
"""Method to handle the icon""" |
|||
if 'mail_icon' in vals: |
|||
vals['mail_icon'] = tools.image_process(vals['mail_icon'], |
|||
size=(256, 256), |
|||
crop='center', |
|||
output_format='ICO') |
|||
|
|||
@api.model |
|||
def load_logo(self): |
|||
"""Method to load logo into mail view |
|||
Returns: |
|||
byte:logo to load in mail view""" |
|||
return self.env['mail.icon'].search([], order="id desc", limit=1). \ |
|||
mail_icon |
@ -0,0 +1,331 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import api, fields, models |
|||
|
|||
|
|||
class MailMail(models.Model): |
|||
""" Inherited model representing an extended mail module.""" |
|||
_inherit = "mail.mail" |
|||
|
|||
is_starred = fields.Boolean(string="Starred Mail", default=False, |
|||
help="Flag indicating whether the mail is " |
|||
"starred.") |
|||
is_active = fields.Boolean(default=True, string="Active", |
|||
help="Flag indicating whether the mail is active.") |
|||
|
|||
|
|||
|
|||
@api.model |
|||
def get_all_mails(self): |
|||
""" Method to load all mail. |
|||
Returns: |
|||
dict: A dictionary of all mails""" |
|||
mail_dict = {} |
|||
mails = self.sudo().search([('create_uid', '=', self.env.user.id)], |
|||
order="create_date desc") |
|||
for i in mails: |
|||
if i.email_to: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.email_to, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
elif i.recipient_ids: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.recipient_ids.name, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def get_mail_count(self): |
|||
"""Method to get count of all mails,sent mails |
|||
,mails in outbox,starred mails and archived mails. |
|||
Returns: |
|||
dict: A dictionary of count of all mails,sent mails,mails in outbox |
|||
,starred mails and archived mails""" |
|||
all_count = self.sudo().search_count( |
|||
[('create_uid', '=', self.env.user.id)]) |
|||
sent_count = self.sudo().search_count( |
|||
[('create_uid', '=', self.env.user.id), ('state', '=', 'sent')]) |
|||
outbox_count = self.sudo().search_count( |
|||
[('state', '=', 'exception'), |
|||
('create_uid', '=', self.env.user.id)]) |
|||
stared_count = self.sudo().search_count( |
|||
[('is_starred', '=', True), ('create_uid', '=', self.env.user.id)]) |
|||
archived_count = self.sudo().search_count( |
|||
[('is_active', '=', False), ('create_uid', '=', self.env.user.id)]) |
|||
mail_dict = {'all_count': all_count, |
|||
'sent_count': sent_count, |
|||
'outbox_count': outbox_count, |
|||
'starred_count': stared_count, |
|||
"archived_count": archived_count, } |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def get_sent_mail(self): |
|||
"""Method to get all sent mail. |
|||
Returns: |
|||
dict: A dictionary of all sent mails""" |
|||
mail_dict = {} |
|||
mails = self.sudo().search([('state', '=', 'sent'), |
|||
('create_uid', '=', self.env.user.id)], |
|||
order="create_date desc") |
|||
for i in mails: |
|||
if i.email_to: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.email_to, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
elif i.recipient_ids: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.recipient_ids.name, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
else: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": "", |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def get_outbox_mail(self): |
|||
"""Method to get all mails in outbox. |
|||
Return: |
|||
dict:A dictionary of all mails in outbox """ |
|||
mail_dict = {} |
|||
mails = self.sudo().search( |
|||
[('state', '=', 'exception'), |
|||
('create_uid', '=', self.env.user.id)], |
|||
order="create_date desc") |
|||
for i in mails: |
|||
if i.email_to: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.email_to, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
elif i.recipient_ids: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.recipient_ids.name, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
else: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": "", |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def get_starred_mail(self): |
|||
"""Method to fetch all starred mails. |
|||
Return: |
|||
dict:A dictionary of starred mails""" |
|||
mail_dict = {} |
|||
mails = self.sudo().search( |
|||
[('is_starred', '=', True), ('create_uid', '=', self.env.user.id)]) |
|||
for i in mails: |
|||
if i.email_to: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.email_to, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
elif i.recipient_ids: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.recipient_ids.name, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
else: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": "", |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def delete_mail(self, *args): |
|||
"""Method to unlink mail.""" |
|||
self.sudo().search( |
|||
[('id', '=', *args), ('create_uid', '=', self.env.user.id), '|', |
|||
('is_active', '=', False), ('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]).sudo().unlink() |
|||
|
|||
@api.model |
|||
def open_mail(self, *args): |
|||
"""Method to open a mail and show its content. |
|||
Args: |
|||
*args(int):ID of the mail that want to open. |
|||
Returns: |
|||
text: body_html of a chosen mail. """ |
|||
return self.sudo().search( |
|||
[('id', '=', *args), ('create_uid', '=', self.env.user.id), '|', |
|||
('is_active', '=', False), ('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]).body_html |
|||
|
|||
@api.model |
|||
def star_mail(self, *args): |
|||
"""Method to make a mail starred. |
|||
Args: |
|||
*args(int):ID of the mail that want to star.""" |
|||
self.search([('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]). \ |
|||
write({"is_starred": True}) |
|||
|
|||
@api.model |
|||
def unstar_mail(self, *args): |
|||
"""Method to make a mail not starred. |
|||
Args: |
|||
*args(int):ID of the mail that want to make not starred. """ |
|||
self.sudo().search([('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]). \ |
|||
write({"is_starred": False}) |
|||
|
|||
@api.model |
|||
def archive_mail(self, *args): |
|||
"""Method to archive mail. |
|||
Args: |
|||
*args(int):ID of the mail that want to archive. """ |
|||
self.sudo().search([('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]). \ |
|||
write({"is_active": False}) |
|||
|
|||
@api.model |
|||
def get_archived_mail(self): |
|||
"""Method to get archived mails |
|||
Returns: |
|||
dict:A dictionary of archived mails. """ |
|||
mail_dict = {} |
|||
mails = self.sudo().search([('is_active', '=', False), |
|||
('create_uid', '=', self.env.user.id)]) |
|||
for i in mails: |
|||
if i.email_to: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.email_to, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
elif i.recipient_ids: |
|||
mail_dict[str(i.mail_message_id)] = ({ |
|||
"id": i.id, |
|||
"sender": i.recipient_ids.name, |
|||
"subject": i.subject, |
|||
"date": fields.Date.to_date(i.create_date), |
|||
}) |
|||
return mail_dict |
|||
|
|||
@api.model |
|||
def unarchive_mail(self, *args): |
|||
"""Method to make mail unarchived. |
|||
Args: |
|||
*args(int):The id of the mail to be unarchived.""" |
|||
self.sudo().search([('is_active', '=', False), ('id', '=', *args), |
|||
('create_uid', '=', self.env.user.id)]). \ |
|||
write({'is_active': True}) |
|||
|
|||
@api.model |
|||
def delete_checked_mail(self, *args): |
|||
"""Method to delete checked mails. |
|||
Args: |
|||
*args(int):I'd of the mail to be deleted.""" |
|||
self.search( |
|||
[('id', 'in', *args), '|', ('id', 'in', *args), |
|||
('is_active', '=', False)]).sudo().unlink() |
|||
|
|||
@api.model |
|||
def archive_checked_mail(self, *args): |
|||
"""Method to archive checked mails. |
|||
Args: |
|||
*args(int):ID of the checked mails to be archived.""" |
|||
self.sudo().search([('id', 'in', *args), |
|||
('create_uid', '=', self.env.user.id)]). \ |
|||
write({"is_active": False}) |
|||
|
|||
@api.model |
|||
def sent_mail(self, *args): |
|||
"""Method to compose and send mail. |
|||
Args: |
|||
*args(dict):A dictionary of mail subject content and recipient.""" |
|||
mail_from = self.env.user.email |
|||
for item in args: |
|||
subject = item.get("subject") |
|||
recipient = item.get("recipient") |
|||
content = item.get("content") |
|||
attachment_id = self.env['mail.attachment']. \ |
|||
search([], order="id desc", limit=1).id |
|||
if attachment_id: |
|||
mail_attachment = self.env['ir.attachment']. \ |
|||
sudo().search( |
|||
[('res_id', '=', attachment_id), |
|||
('res_field', '=', 'mail_attachment')], limit=1) |
|||
file_name = self.env['mail.attachment']. \ |
|||
sudo().search([], order="id desc", limit=1) |
|||
mail_attachment.sudo().write({ |
|||
"name": file_name.file_name |
|||
}) |
|||
self.sudo().create({ |
|||
"subject": subject, |
|||
"email_to": recipient, |
|||
"email_from": mail_from, |
|||
"body_html": content, |
|||
"attachment_ids": mail_attachment |
|||
}) |
|||
self.sudo().search([], limit=1).send() |
|||
self.env['mail.attachment'].sudo().search([]).unlink() |
|||
else: |
|||
self.sudo().create({ |
|||
"subject": subject, |
|||
"email_to": recipient, |
|||
"email_from": mail_from, |
|||
"body_html": content, |
|||
}) |
|||
self.sudo().search([], limit=1).send() |
|||
|
|||
@api.model |
|||
def retry_mail(self, *args): |
|||
"""Method to retry failed messages""" |
|||
mail = self.search([('id', '=', int(*args)), |
|||
('create_uid', '=', self.env.user.id)]) |
|||
mail.mark_outgoing() |
|||
mail.send() |
@ -0,0 +1,48 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Hafeesul Ali(<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class ResConfigSettings(models.TransientModel): |
|||
"""Transient model for Odoo configuration settings.""" |
|||
_inherit = "res.config.settings" |
|||
|
|||
def _default_mail_icon_id(self): |
|||
"""Method to return default mail_icon model |
|||
Returns: |
|||
record:A record of mail_icon""" |
|||
return self.env['mail.icon'].search([], order='id desc', limit=1) |
|||
|
|||
mail_icon_id = fields.Many2one("mail.icon", |
|||
default=_default_mail_icon_id, |
|||
ondelete='cascade', |
|||
string="Mail Icon Id", |
|||
help="Select the mail icon for" |
|||
" customization.") |
|||
icon = fields.Binary('Mail Icon', |
|||
related='mail_icon_id.mail_icon', |
|||
readonly=False, |
|||
help="Binary data of the selected mail icon.") |
|||
custom_mail_logo = fields.Boolean(string="Custom Mail Logo", |
|||
help="Enable to customize your mail logo", |
|||
config_parameter="odoo_mail_management" |
|||
".custom_mail_logo") |
|
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 305 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 8.9 KiB |
@ -0,0 +1,784 @@ |
|||
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;"> |
|||
<!-- TITLE BAR --> |
|||
|
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" |
|||
style="border-bottom: 1px solid #d5d5d5;"> |
|||
<div class="my-3"> |
|||
<img src="./assets/icons/logo.png" style="width: auto !important; height: 40px !important;"> |
|||
</div> |
|||
<div class="my-3 d-flex align-items-center"> |
|||
<div |
|||
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
|||
<i class="fa fa-check mr-1"></i>Community |
|||
</div> |
|||
<div |
|||
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
|||
<i class="fa fa-check mr-1"></i>Enterprise |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF TITLE BAR --> |
|||
|
|||
<!-- APP HERO --> |
|||
<div class="container" style="padding: 0rem 1.5rem 4rem !important"> |
|||
<div class="row" style="height: 900px !important;"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12" |
|||
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;"> |
|||
<h1 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;"> |
|||
Email Management in Odoo</h1> |
|||
<p |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;"> |
|||
Odoo Mail Management |
|||
</p> |
|||
<!-- END OF APP HERO --> |
|||
|
|||
<img src="./assets/screenshots/SChero.gif" class="img-responsive" width="100%" height="auto" /> |
|||
</div> |
|||
</div> |
|||
<!-- NAVIGATION SECTION --> |
|||
|
|||
<div class="row"> |
|||
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important"> |
|||
<h2 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
<i class="fa fa-compass mr-2"></i>Explore this module |
|||
</h2> |
|||
</div> |
|||
<div class="col-md-6"> |
|||
<a href="#overview" style="text-decoration: none !important;"> |
|||
<div class="row" |
|||
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
|||
<div class="col-8"> |
|||
<h3 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
|||
Overview</h3> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
|||
Learn more about this module</p> |
|||
</div> |
|||
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
|||
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
|||
</div> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="col-md-6"> |
|||
<a href="#configuration" style="text-decoration: none !important;"> |
|||
<div class="row" |
|||
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
|||
<div class="col-8"> |
|||
<h3 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
|||
Configuration</h3> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
|||
View configurations for this module</p> |
|||
</div> |
|||
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
|||
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
|||
</div> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="col-md-6"> |
|||
<a href="#features" style="text-decoration: none !important;"> |
|||
<div class="row" |
|||
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
|||
<div class="col-8"> |
|||
<h3 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
|||
Features</h3> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
|||
View features of this module</p> |
|||
</div> |
|||
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
|||
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
|||
</div> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-md-6"> |
|||
<a href="#screenshots" style="text-decoration: none !important;"> |
|||
<div class="row" |
|||
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
|||
<div class="col-8"> |
|||
<h3 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
|||
Screenshots</h3> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
|||
See key screenshots of this module</p> |
|||
</div> |
|||
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
|||
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
|||
</div> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<!-- END OF NAVIGATION SECTION --> |
|||
|
|||
<!-- OVERVIEW SECTION --> |
|||
|
|||
<div class="row" id="overview"> |
|||
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
|||
<h2 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
<i class="fa fa-pie-chart mr-2"></i>Overview |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="col-mg-12 pl-3"> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> |
|||
This module helps to manage mails in Odoo.Here we can |
|||
compose,search,star,archive,delete mail.We can view the |
|||
outgoing mail,sent |
|||
mail,archived mail ,starred mail in separate tabs. |
|||
</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<!-- END OF OVERVIEW SECTION --> |
|||
|
|||
<!-- FEATURES SECTION --> |
|||
<div class="row" id="configuration"> |
|||
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
|||
<h2 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
<i class="fa fa-pie-chart mr-2"></i>Configuration |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="col-mg-12 pl-3"> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> |
|||
Configure outgoing mail server</p> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<div class="row" id="features"> |
|||
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
|||
<h2 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
<i class="fa fa-star mr-2"></i>Features |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="col-md-6 pl-3 py-3 d-flex"> |
|||
<div> |
|||
<img src="assets/icons/check.png"> |
|||
</div> |
|||
<div> |
|||
<h4 |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Community & Enterprise Support</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Available in Odoo 15.0 Community and Enterprise.</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-md-6 pl-3 py-3 d-flex"> |
|||
<div> |
|||
<img src="assets/icons/check.png"> |
|||
</div> |
|||
<div> |
|||
<h4 |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Odoo Mail</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Manage mails in Odoo</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-md-6 pl-3 py-3 d-flex"> |
|||
<div> |
|||
<img src="assets/icons/check.png"> |
|||
</div> |
|||
<div> |
|||
<h4 |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Mail Management</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
This module helps to manage mails in Odoo.Here we can |
|||
compose,search,star,archive,delete mail.We can view the |
|||
outgoing mail,sent |
|||
mail,archived mail ,starred mail in separate tabs.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF FEATURES SECTION --> |
|||
|
|||
<!-- SCREENSHOTS SECTION --> |
|||
<div class="row" id="screenshots"> |
|||
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
|||
<h2 |
|||
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
|||
<i class="fa fa-image mr-2"></i>Screenshots |
|||
</h2> |
|||
</div> |
|||
<div class="col-lg-12 my-2"> |
|||
<h4 class="my-2" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Manage mails in Odoo.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
We can see all mails in Odoo. |
|||
</p> |
|||
<img src="assets/screenshots/scimg01.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-2"> |
|||
<h4 class="my-2" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Search bar.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
We can search a mail easily using this search bar. |
|||
</p> |
|||
<img src="assets/screenshots/scimg02.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-2"> |
|||
<h4 class="mt-2" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Checkbox.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Checkbox that can select all mail,multiple mail to delete and |
|||
archive multiple |
|||
mail together. |
|||
</p> |
|||
<img src="assets/screenshots/scimg03.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Make mails starred.</h4> |
|||
<img src="assets/screenshots/scimg04.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Delete and archive mail.</h4> |
|||
<img src="assets/screenshots/scimg05.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Calendar,Notes and Contacts button.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Calendar,Notes and Contacts button to redirect into respective |
|||
modules. |
|||
</p> |
|||
<img src="assets/screenshots/scimg06.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Compose a mail</h4> |
|||
<img src="assets/screenshots/scimg07.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Compose mail window.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
we can compose mail easily here and have an option to attach |
|||
file,button to extend |
|||
compose mail window. |
|||
</p> |
|||
|
|||
<img src="assets/screenshots/scimg08.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Large window to compose mail.</h4> |
|||
<img src="assets/screenshots/scimg09.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Sent mails.</h4> |
|||
<img src="assets/screenshots/scimg10.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Starred mails.</h4> |
|||
<img src="assets/screenshots/scimg11.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Archived mails.</h4> |
|||
<img src="assets/screenshots/scimg12.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Outbox.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Failed mails can be seen here |
|||
</p> |
|||
<img src="assets/screenshots/scimg13.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Resend.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
One can resend the failed mail |
|||
</p> |
|||
<img src="assets/screenshots/scimg14.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Custom mail logo.</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
The logo can be changed in the settings |
|||
</p> |
|||
<img src="assets/screenshots/scimg15.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Custom logo</h4> |
|||
<img src="assets/screenshots/scimg16.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-12 my-3"> |
|||
<h4 class="mt-3" |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
|||
Custom logo</h4> |
|||
<p |
|||
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
|||
Custom logo added to UI |
|||
</p> |
|||
<img src="assets/screenshots/scimg17.png" class="img-responsive img-thumbnail border" width="100%" |
|||
height="auto" /> |
|||
</div> |
|||
|
|||
</div> |
|||
<!-- END OF SCREENSHOTS SECTION --> |
|||
|
|||
<!-- SUGGESTED PRODUCTS --> |
|||
<div class="row"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center" |
|||
style="text-align: center; padding: 2.5rem 1rem !important;"> |
|||
<h2 style="color: #212529 !important;">Suggested Products</h2> |
|||
<hr |
|||
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
|||
|
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner" style="padding: 30px;"> |
|||
<div class="carousel-item active" style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/inventory_stock_dashboard_odoo/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module01.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/inventory_barcode_scanning/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module02.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module03.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item active" style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/sale_discount_total/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module04.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module05.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_account_community/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" style="border-radius: 0px;" |
|||
src="./assets/modules/module06.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span |
|||
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" |
|||
style="font-size:24px"></i></span> |
|||
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000"> |
|||
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" |
|||
style="font-size:24px"></i></span> |
|||
</a> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF SUGGESTED PRODUCTS --> |
|||
|
|||
<!-- OUR SERVICES --> |
|||
<section class="container" style="margin-top: 6rem !important;"> |
|||
<div class="row"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
|||
<h2 style="color: #212529 !important;">Our Services</h2> |
|||
<hr |
|||
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Customization</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Support</h6> |
|||
</div> |
|||
|
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Hire |
|||
Odoo |
|||
Developer</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Integration</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Migration</h6> |
|||
</div> |
|||
|
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Consultancy</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Licensing Consultancy</h6> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- END OF OUR SERVICES --> |
|||
|
|||
<!-- OUR INDUSTRIES --> |
|||
<section class="container" style="margin-top: 6rem !important;"> |
|||
<div class="row"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
|||
<h2 style="color: #212529 !important;">Our Industries</h2> |
|||
<hr |
|||
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Trading |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easily procure |
|||
and |
|||
sell your products</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
POS |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easy |
|||
configuration |
|||
and convivial experience</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px" |
|||
width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Education |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
A platform for |
|||
educational management</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" |
|||
width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Manufacturing |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Plan, track and |
|||
schedule your operations</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
E-commerce & Website |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Mobile |
|||
friendly, |
|||
awe-inspiring product pages</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Service Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Keep track of |
|||
services and invoice</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" |
|||
width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Restaurant |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Run your bar or |
|||
restaurant methodically</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 |
|||
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Hotel Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
An |
|||
all-inclusive |
|||
hotel management application</p> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</section> |
|||
|
|||
<!-- END OF OUR INDUSTRIES --> |
|||
|
|||
<!-- FOOTER --> |
|||
<!-- Footer Section --> |
|||
<section class="container" style="margin: 5rem auto 2rem;"> |
|||
<div class="row" style="max-width:1540px;"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
|||
<h2 style="color: #212529 !important;">Need Help?</h2> |
|||
<hr |
|||
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Contact Cards --> |
|||
<div class="row d-flex justify-content-center align-items-center" |
|||
style="max-width:1540px; margin: 0 auto 2rem auto;"> |
|||
|
|||
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> |
|||
|
|||
<div class="row mt-4"> |
|||
<div class="col-lg-6"> |
|||
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" |
|||
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i |
|||
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> |
|||
</div> |
|||
<div class="col-lg-6"> |
|||
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank" |
|||
class="btn btn-block mb-2 deep_hover" |
|||
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i |
|||
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
<!-- End of Contact Cards --> |
|||
</section> |
|||
<!-- Footer --> |
|||
<section class="oe_container" style="padding: 2rem 3rem 1rem;"> |
|||
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> |
|||
<!-- Logo --> |
|||
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;"> |
|||
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" /> |
|||
</div> |
|||
<!-- End of Logo --> |
|||
<div class="col-lg-12"> |
|||
<hr |
|||
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
|||
<!-- End of Footer Section --> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- END OF FOOTER --> |
|||
|
|||
</div> |
After Width: | Height: | Size: 389 B |
After Width: | Height: | Size: 562 B |
After Width: | Height: | Size: 890 B |
After Width: | Height: | Size: 268 B |
After Width: | Height: | Size: 441 B |
After Width: | Height: | Size: 234 B |
After Width: | Height: | Size: 375 B |
After Width: | Height: | Size: 659 B |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 334 B |
After Width: | Height: | Size: 359 B |
After Width: | Height: | Size: 393 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 349 B |
After Width: | Height: | Size: 582 B |
@ -0,0 +1,636 @@ |
|||
odoo.define('odoo_mail_management.odoo_mail', function (require) { |
|||
'use strict'; |
|||
var AbstractAction = require('web.AbstractAction'); |
|||
var core = require('web.core'); |
|||
var rpc = require('web.rpc'); |
|||
var OdooMail = AbstractAction.extend({ |
|||
template: 'OdooMail', |
|||
events: { |
|||
'click .sent': 'sent_mail', /*to showing sent mail*/ |
|||
'click #all_mail': 'all_mail', /*to show all mail*/ |
|||
'click .outbox': 'outbox_mail', /*to show mails in outbox*/ |
|||
'click #delete': 'delete_mail',/*to delete selected mail*/ |
|||
'click .message-default': 'open_mail',/*to open selected mail*/ |
|||
'click #not_starred': 'star_mail', /*to make mail starred*/ |
|||
'click #starred': 'unstar_mail', /*to make mail not starred*/ |
|||
'click #starred_mails': 'get_starred_mails', /*to get starred mails*/ |
|||
'click .google_calender': 'redirect_calender',/*to redirect into calender*/ |
|||
'click .keep_note': 'redirect_note',/*to redirect into notes*/ |
|||
'click .contacts': 'redirect_contacts',/*to redirect into contact*/ |
|||
'click #archive': 'archive_mail',/*to archive mail*/ |
|||
'click #archived_mails': 'get_archived_mail',/*to show archived mails*/ |
|||
'submit .form_submit': 'send_mail',/*to compose mail*/ |
|||
'submit .large_form_submit': 'send_large_mail',/*to compose mail from large modal*/ |
|||
'click #unarchive': 'unarchive_mail',/*to make mail unarchived */ |
|||
'click .refresh': 'refresh_page',/*to refresh home page*/ |
|||
'click #checkall': 'checkall_mail',/*to check all mail*/ |
|||
'click .checkbox_func': 'show_delete_button',/*to show delete button and archive button*/ |
|||
'click .delete_checked': 'delete_checked',/*delete checked mail*/ |
|||
'keyup .header-search-input': 'search_mail',/*to search mails*/ |
|||
'click .archive_checked': 'archive_checked',/*to archive checked*/ |
|||
'click #file-input': 'attachment_action',/*to attach file*/ |
|||
'click #resend': 'resend_mail',/*to retry mails in outbox*/ |
|||
'click #minimizeButton' : 'minimize', |
|||
}, |
|||
init: function (parent, action) { |
|||
this._super(parent, action); |
|||
}, |
|||
start: function () { |
|||
var self = this; |
|||
self.load_logo() |
|||
self.load_mails() |
|||
self.get_count() |
|||
}, |
|||
/*To load logo */ |
|||
load_logo: function () { |
|||
rpc.query({ |
|||
model: 'mail.icon', |
|||
method: "load_logo", |
|||
}).then(function (result) { |
|||
$(".header-group").append( |
|||
'<a href="#" class="header-logo">' |
|||
+ '<img src="data:image/png;base64,'+ result + '"' |
|||
+ 'style="width: 100px; margin-left: 36px; margin-bottom: -15px; margin-top: -14px; height: 50px;"/>' |
|||
+ '</a>' |
|||
) |
|||
}) |
|||
}, |
|||
/*To load mail */ |
|||
load_mails: function () { |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_all_mails", |
|||
}).then(function (result) { |
|||
$(".mail").empty() |
|||
$(".checkbox_delete").hide() |
|||
$(".checkbox_archive").hide() |
|||
$.each(result, function (index, name) { |
|||
$(".mail").append( |
|||
'<div class="inbox-message-item message-default-unread" data-id="' + name.id + '">' |
|||
+ '<div class="checkbox" style="margin-right: -12px;">' |
|||
+ '<button class="btn">' |
|||
+ '<input type="checkbox" id="checkbox" data-id="' + name.id + '" class="checkbox checkbox_func">' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div>' |
|||
+ '<button class="btn star" data-id="' + name.id + '" style="margin: 0;">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/star_border_black_24dp.svg" alt="Not starred" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="not_starred"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div class="message-default" data-id="' + name.id + '">' |
|||
+ '<div class="message-sender message-content">' |
|||
+ '<span>' + name.sender + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-subject message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-seperator message-content">-</div>' |
|||
+ '<div class="message-body message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="gap message-content"> </div>' |
|||
+ '<div class="message-date center-text">' |
|||
+ '<span style="margin-left: 500px;">' + name.date + '</span>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '<div class="message-group-hidden">' |
|||
+ '<div class="inbox-message-item-options">' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/archive_black_24dp.svg" alt="Archive" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="archive"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" alt="Delete" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="delete"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '</div>') |
|||
}) |
|||
}) |
|||
}, |
|||
/*To get count */ |
|||
get_count: function () { |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_mail_count", |
|||
}).then(function (result) { |
|||
$('.outbox_count').empty() |
|||
$('.all_count').empty() |
|||
$('.sent_count').empty() |
|||
$('.starred_count').empty() |
|||
$('.archived_count').empty() |
|||
$('.outbox_count').append(result.outbox_count) |
|||
$('.all_count').append(result.all_count) |
|||
$('.sent_count').append(result.sent_count) |
|||
$('.starred_count').append(result.starred_count) |
|||
$('.archived_count').append(result.archived_count) |
|||
}) |
|||
}, |
|||
/*To show all mail*/ |
|||
all_mail: function () { |
|||
var self = this; |
|||
self.load_mails() |
|||
$('#sent').removeClass('active') |
|||
$('#archived_mails').removeClass('active') |
|||
$('#outbox').removeClass('active') |
|||
$('#starred_mails').removeClass('active') |
|||
$('#all_mail').addClass('active') |
|||
self.get_count() |
|||
}, |
|||
/*To show sent mail*/ |
|||
sent_mail: function (e) { |
|||
var self = this; |
|||
$('#outbox').removeClass('active') |
|||
$('#starred_mails').removeClass('active') |
|||
$('#all_mail').removeClass('active') |
|||
$('#archived_mails').removeClass('active') |
|||
$("#sent").addClass("active") |
|||
$(".mail").empty() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_sent_mail", |
|||
}).then(function (result) { |
|||
$.each(result, function (index, name) { |
|||
$(".mail").append( |
|||
'<div class="inbox-message-item message-default-unread" data-id="' + name.id + '">' |
|||
+ '<div class="checkbox" style="margin-right: -12px;">' |
|||
+ '<button class="btn">' |
|||
+ '<input type="checkbox" id="checkbox" data-id="' + name.id + '" class="checkbox checkbox_func">' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div>' |
|||
+ '<button class="btn star" data-id="' + name.id + '" style="margin: 0;">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/star_border_black_24dp.svg" alt="Not starred" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="not_starred"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div class="message-default" data-id="' + name.id + '">' |
|||
+ '<div class="message-sender message-content">' |
|||
+ '<span>' + name.sender + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-subject message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-seperator message-content">-</div>' |
|||
+ '<div class="message-body message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="gap message-content"> </div>' |
|||
+ '<div class="message-date center-text">' |
|||
+ '<span style="margin-left: 500px;">' + name.date + '</span>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '<div class="message-group-hidden">' |
|||
+ '<div class="inbox-message-item-options">' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/archive_black_24dp.svg" alt="Archive" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="archive"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" alt="Delete" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="delete"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '</div>') |
|||
self.get_count() |
|||
}) |
|||
}) |
|||
}, |
|||
/*To show mails in outbox*/ |
|||
outbox_mail: function () { |
|||
var self = this; |
|||
$('#all_mail').removeClass('active') |
|||
$("#sent").removeClass("active") |
|||
$('#archived_mails').removeClass('active') |
|||
$('#starred_mails').removeClass('active') |
|||
$('#outbox').addClass('active') |
|||
$(".mail").empty() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_outbox_mail", |
|||
}).then(function (result) { |
|||
$.each(result, function (index, name) { |
|||
$(".mail").append( |
|||
'<div class="inbox-message-item message-default-unread" data-id="' + name.id + '" >' |
|||
+ '<div class="checkbox" style="margin-right: -12px;">' |
|||
+ '<button class="btn">' |
|||
+ '<input type="checkbox" id="checkbox" data-id="' + name.id + '" class="checkbox checkbox_func">' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div>' |
|||
+ '<button class="btn star" data-id="' + name.id + '" style="margin: 0;">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/star_border_black_24dp.svg" alt="Not starred" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="not_starred"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div class="message-default" data-id="' + name.id + '">' |
|||
+ '<div class="message-sender message-content">' |
|||
+ '<span id="sender">' + name.sender + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-subject message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-seperator message-content">-</div>' |
|||
+ '<div class="message-body message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="gap message-content"> </div>' |
|||
+ '<div class="message-date center-text">' |
|||
+ '<span style="margin-left: 500px;">' + name.date + '</span>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '<div class="message-group-hidden">' |
|||
+ '<div class="inbox-message-item-options">' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/archive_black_24dp.svg" alt="Archive" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="archive"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" alt="Delete" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="delete"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/refresh_black_24dp.svg"" alt="Resend" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="resend"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '</div>') |
|||
}) |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To get starred mails*/ |
|||
get_starred_mails: function () { |
|||
var self = this; |
|||
$('#all_mail').removeClass('active') |
|||
$("#sent").removeClass("active") |
|||
$('#outbox').removeClass('active') |
|||
$('#archived_mails').removeClass('active') |
|||
$('#starred_mails').addClass('active') |
|||
$(".mail").empty() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_starred_mail", |
|||
}).then(function (result) { |
|||
$.each(result, function (index, name) { |
|||
$(".mail").append( |
|||
'<div class="inbox-message-item message-default-unread" data-id="' + name.id + '" >' |
|||
+ '<div class="checkbox" style="margin-right: -12px;">' |
|||
+ '<button class="btn">' |
|||
+ '<input type="checkbox" id="checkbox" data-id="' + name.id + '" class="checkbox checkbox_func">' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div>' |
|||
+ '<button class="btn star" data-id="' + name.id + '" style="margin: 0;">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/yellow_star.svg" alt="Not starred" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="starred"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div class="message-default " data-id="' + name.id + '" >' |
|||
+ '<div class="message-sender message-content ">' |
|||
+ '<span id="sender">' + name.sender + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-subject message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-seperator message-content">-</div>' |
|||
+ '<div class="message-body message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="gap message-content"> </div>' |
|||
+ '<div class="message-date center-text">' |
|||
+ '<span style="margin-left: 500px;">' + name.date + '</span>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '<div class="message-group-hidden">' |
|||
+ '<div class="inbox-message-item-options">' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/archive_black_24dp.svg" alt="Archive" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="archive"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" alt="Delete" data-id="' + name.id + '" aria-label="Delete" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="delete"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '</div>') |
|||
}) |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To show archived mails*/ |
|||
get_archived_mail: function (event) { |
|||
var self = this; |
|||
$('#all_mail').removeClass('active') |
|||
$("#sent").removeClass("active") |
|||
$('#outbox').removeClass('active') |
|||
$('#starred_mails').removeClass('active') |
|||
$('#archived_mails').addClass('active') |
|||
$(".mail").empty() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "get_archived_mail", |
|||
}).then(function (result) { |
|||
$.each(result, function (index, name) { |
|||
$(".mail").append( |
|||
'<div class="inbox-message-item message-default-unread" data-id="' + name.id + '" >' |
|||
+ '<div class="checkbox" style="margin-right: -12px;">' |
|||
+ '<button class="btn">' |
|||
+ '<input type="checkbox" id="checkbox" data-id="' + name.id + '" class="checkbox checkbox_func">' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '<div>' |
|||
+ '</div>' |
|||
+ '<div class="message-default" data-id="' + name.id + '">' |
|||
+ '<div class="message-sender message-content">' |
|||
+ '<span id="sender" style="margin-left: 40px;">' + name.sender + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-subject message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="message-seperator message-content">-</div>' |
|||
+ '<div class="message-body message-content">' |
|||
+ '<span>' + name.subject + '</span>' |
|||
+ '</div>' |
|||
+ '<div class="gap message-content"> </div>' |
|||
+ '<div class="message-date center-text">' |
|||
+ '<span style="margin-left: 500px;">' + name.date + '</span>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '<div class="message-group-hidden">' |
|||
+ '<div class="inbox-message-item-options">' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/unarchive_FILL1_wght400_GRAD0_opsz48.svg" alt="Unarchive" data-id="' + name.id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="unarchive"/>' |
|||
+ '</button>' |
|||
+ '<button class="btn">' |
|||
+ '<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" alt="Delete" data-id="' + name.id + '" aria-label="Delete" class="btn-icon-sm btn-icon-alt btn-icon-hover" id="delete"/>' |
|||
+ '</button>' |
|||
+ '</div>' |
|||
+ '</div>' |
|||
+ '</div>') |
|||
}) |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To archive mail*/ |
|||
archive_mail: function (event) { |
|||
var self = this; |
|||
var mail_id = event.currentTarget.attributes[2].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "archive_mail", |
|||
args: [mail_id] |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
$.each($(".inbox-message-item"), function (index, name) { |
|||
if (name.attributes[1].value == mail_id) { |
|||
name.remove() |
|||
} |
|||
}) |
|||
}, |
|||
/*To make mail unarchived */ |
|||
unarchive_mail: function (event) { |
|||
var self = this; |
|||
var mail_id = event.currentTarget.attributes[2].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "unarchive_mail", |
|||
args: [mail_id] |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
$.each($(".inbox-message-item"), function (index, name) { |
|||
if (name.attributes[1].value == mail_id) { |
|||
name.remove() |
|||
} |
|||
}) |
|||
}, |
|||
/*To check all mail*/ |
|||
checkall_mail: function (ev) { |
|||
var check = $("#checkall") |
|||
if (check.is(':checked')) { |
|||
$(".checkbox").prop('checked', true); |
|||
$(".checkbox_delete").show() |
|||
$(".checkbox_archive").show() |
|||
} |
|||
else { |
|||
$(".checkbox").prop('checked', false); |
|||
$(".checkbox_delete").hide() |
|||
$(".checkbox_archive").hide() |
|||
} |
|||
}, |
|||
/*To show delete button and archive button*/ |
|||
show_delete_button: function (ev) { |
|||
var check = $(".checkbox_func") |
|||
if (check.is(':checked')) { |
|||
$(".checkbox_delete").show() |
|||
$(".checkbox_archive").show() |
|||
} |
|||
else { |
|||
$(".checkbox_delete").hide() |
|||
$(".checkbox_archive").hide() |
|||
} |
|||
}, |
|||
/*To archive checked*/ |
|||
archive_checked: function (ev) { |
|||
var self = this; |
|||
var check = $(".checkbox_func") |
|||
var ids = [] |
|||
$.each(check, function (index, name) { |
|||
if (name.checked) { |
|||
ids.push((name.attributes[2].value)) |
|||
} |
|||
}) |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "archive_checked_mail", |
|||
args: [ids] |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
$.each($(".inbox-message-item"), function (index, name) { |
|||
$.each(ids, function (index, mail_id) { |
|||
if (name.attributes[1].value == mail_id) { |
|||
name.remove() |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
/*To delete checked mail*/ |
|||
delete_checked: function (ev) { |
|||
var self = this; |
|||
var check = $(".checkbox_func") |
|||
var ids = [] |
|||
$.each(check, function (index, name) { |
|||
if (name.checked) { |
|||
ids.push((name.attributes[2].value)) |
|||
} |
|||
}) |
|||
$.each($(".inbox-message-item"), function (index, name) { |
|||
$.each(ids, function (index, mail_id) { |
|||
if (name.attributes[1].value == mail_id) { |
|||
name.remove() |
|||
} |
|||
}) |
|||
}) |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "delete_checked_mail", |
|||
args: [ids] |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To delete selected mail*/ |
|||
delete_mail: function (event) { |
|||
var self = this; |
|||
var id = event.target.attributes[2].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "delete_mail", |
|||
args: [id] |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
$.each($(".inbox-message-item"), function (index, name) { |
|||
if (name.attributes[1].value == id) { |
|||
name.remove() |
|||
} |
|||
}) |
|||
}, |
|||
/*To open selected mail*/ |
|||
open_mail: function (ev) { |
|||
$(".mail").empty() |
|||
var mail_id = ev.currentTarget.attributes[1].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "open_mail", |
|||
args: [mail_id] |
|||
}).then(function (result) { |
|||
$(".mail").append(result) |
|||
}) |
|||
}, |
|||
/*To make mail starred*/ |
|||
star_mail: function (ev) { |
|||
var self = this; |
|||
ev.currentTarget.outerHTML = '<img src="/odoo_mail_management/static/src/img/yellow_star.svg" alt="Not starred" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="starred"/>' |
|||
var mail_id = ev.currentTarget.attributes[2].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "star_mail", |
|||
args: [mail_id], |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To make mail not starred*/ |
|||
unstar_mail: function (ev) { |
|||
var self = this; |
|||
var mail_id = ev.target.parentElement.attributes[1].value |
|||
ev.target.parentElement.innerHTML = '<img src="/odoo_mail_management/static/src/img/star_border_black_24dp.svg" alt="Not starred" data-id="' + mail_id + '" class="btn-icon-sm btn-icon-alt btn-icon-hover message-btn-icon" id="not_starred" />' |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "unstar_mail", |
|||
args: [mail_id], |
|||
}).then(function () { |
|||
self.get_count() |
|||
}) |
|||
}, |
|||
/*To redirect into calender*/ |
|||
redirect_calender: function (ev) { |
|||
this.do_action({ |
|||
name: "Calender", |
|||
type: 'ir.actions.act_window', |
|||
res_model: 'calendar.event', |
|||
view_mode: 'calendar,tree', |
|||
view_type: 'calendar', |
|||
views: [[false, 'calendar'], [false, 'tree']], |
|||
target: 'current', |
|||
}) |
|||
}, |
|||
/*To redirect into notes*/ |
|||
redirect_note: function (ev) { |
|||
this.do_action({ |
|||
name: "Notes", |
|||
type: 'ir.actions.act_window', |
|||
res_model: 'note.note', |
|||
view_mode: 'kanban,form,tree,activity', |
|||
view_type: 'kanban', |
|||
views: [[false, 'kanban'], [false, 'form'], [false, 'tree'], [false, 'activity']], |
|||
target: 'current', |
|||
}) |
|||
}, |
|||
/*To redirect into contact*/ |
|||
redirect_contacts: function (ev) { |
|||
this.do_action({ |
|||
name: "Contacts", |
|||
type: 'ir.actions.act_window', |
|||
res_model: 'res.partner', |
|||
view_mode: 'kanban,form,tree,activity', |
|||
view_type: 'kanban', |
|||
views: [[false, 'kanban'], [false, 'form'], [false, 'tree'], [false, 'activity']], |
|||
target: 'current', |
|||
}) |
|||
}, |
|||
/*To attach file*/ |
|||
attachment_action: function () { |
|||
this.do_action({ |
|||
name: "Mail", |
|||
type: 'ir.actions.act_window', |
|||
res_model: 'mail.attachment', |
|||
view_type: 'form', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
}) |
|||
}, |
|||
/*To refresh home page*/ |
|||
refresh_page: function (ev) { |
|||
location.reload() |
|||
}, |
|||
/*To search mails*/ |
|||
search_mail: function (ev) { |
|||
var value = $('.header-search-input').val().toLowerCase() |
|||
$(".inbox-message-item").filter(function () { |
|||
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1) |
|||
}); |
|||
}, |
|||
/*To compose mail from large modal*/ |
|||
send_large_mail: function () { |
|||
var self = this |
|||
var subject = $('#l_subject').val() |
|||
var recipient = $('#l_Recipient').val() |
|||
var content = $('#l_content').val() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "sent_mail", |
|||
args: [{ "subject": subject, "recipient": recipient, "content": content, }] |
|||
}).then(function () { |
|||
self.refresh_page() |
|||
}) |
|||
}, |
|||
/*To compose mail*/ |
|||
send_mail: function () { |
|||
var self = this |
|||
var subject = $("#subject").val() |
|||
var recipient = $("#Recipient").val() |
|||
var content = $("#content").val() |
|||
var file = $('#file-input').val() |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "sent_mail", |
|||
args: [{ "subject": subject, "recipient": recipient, "content": content, }] |
|||
}).then(function () { |
|||
self.refresh_page() |
|||
}) |
|||
}, |
|||
/*To resend a mail in outbox*/ |
|||
resend_mail: function (ev) { |
|||
var self = this |
|||
var mail_id = ev.target.attributes[3].value |
|||
rpc.query({ |
|||
model: "mail.mail", |
|||
method: "retry_mail", |
|||
args: [mail_id], |
|||
}).then(function () { |
|||
self.refresh_page() |
|||
}) |
|||
|
|||
}, |
|||
}); |
|||
core.action_registry.add("odoo_mail", OdooMail); |
|||
return OdooMail; |
|||
}); |
@ -0,0 +1,310 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!-- |
|||
This XML template defines the structure of an OdooMail interface. |
|||
It includes sections for the header, left sidebar, body content, and right sidebar. |
|||
The template also defines modals for composing new messages in small and large sizes. |
|||
--> |
|||
<template id="tmp"> |
|||
<t t-name="OdooMail"> |
|||
<div class="body-wrapper"> |
|||
<!-- HEADER --> |
|||
<header class="head"> |
|||
<div class="header-group"> |
|||
</div> |
|||
<form class="header-search" action=""> |
|||
<div class="icons"> |
|||
<button id="js-header-search" |
|||
class="btn btn-nofill tooltip" |
|||
data-info="Search"> |
|||
<img src="/odoo_mail_management/static/src/img/search_black_24dp.svg" |
|||
alt="Search" |
|||
class="btn-icon btn-icon-alt"/> |
|||
</button> |
|||
</div> |
|||
<input type="search" class="header-search-input" |
|||
placeholder="Search mail"/> |
|||
<div class="icons"> |
|||
<button type="reset" class="btn" data-info="Options"> |
|||
<img src="/odoo_mail_management/static/src/img/clear_black_24dp.svg" |
|||
alt="Clear" |
|||
class="btn-icon btn-icon-alt"/> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</header> |
|||
<!-- LEFT SIDEBAR --> |
|||
<section class="left-sidebar"> |
|||
<div class="left-sidebar-compose"> |
|||
<button class="sidebar-btn-compose compose" |
|||
data-toggle="modal" |
|||
data-target="#send_message"> |
|||
<img src="/odoo_mail_management/static/src/img/edit_square_FILL0_wght400_GRAD0_opsz48.svg" |
|||
alt="Compose a new email" |
|||
class="sidebar-btn-compose-icon"/> |
|||
<span class="sidebar-btn-compose-title">Compose</span> |
|||
</button> |
|||
</div> |
|||
<div class="left-siderbar-label"> |
|||
<ul class="labels category-item-list"> |
|||
<li class="category-item active all_mail" |
|||
id="all_mail"> |
|||
<div> |
|||
<svg class="category-item-icon" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="24px" viewBox="0 0 24 24" |
|||
width="24px" fill="#000000"> |
|||
<path d="M0 0h24v24H0V0z" fill="none"/> |
|||
<path |
|||
d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/> |
|||
</svg> |
|||
<span class="category-item-title ">All mail |
|||
</span> |
|||
</div> |
|||
<span class="category-item-number all_count"/> |
|||
</li> |
|||
<li class="category-item sent" id="sent"> |
|||
<div> |
|||
<svg class="category-item-icon" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="24px" viewBox="0 0 24 24" |
|||
width="24px" fill="#000000"> |
|||
<path d="M0 0h24v24H0z" fill="none"/> |
|||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/> |
|||
</svg> |
|||
<span class="category-item-title ">Sent</span> |
|||
</div> |
|||
<span class="category-item-number sent_count"/> |
|||
</li> |
|||
<li class="category-item" id="starred_mails"> |
|||
<div> |
|||
<svg class="category-item-icon" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="24px" viewBox="0 0 24 24" |
|||
width="24px" fill="#000000"> |
|||
<path d="M0 0h24v24H0z" fill="none"/> |
|||
<path d="M0 0h24v24H0z" fill="none"/> |
|||
<path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/> |
|||
</svg> |
|||
<span class="category-item-title">Starred |
|||
</span> |
|||
</div> |
|||
<span class="category-item-number starred_count"/> |
|||
</li> |
|||
<li class="category-item" id="archived_mails"> |
|||
<div> |
|||
<svg class="category-item-icon" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="24px" viewBox="0 0 24 24" |
|||
width="24px" fill="#000000"> |
|||
<path d="M0 0h24v24H0z" fill="none"/> |
|||
<path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z"/> |
|||
</svg> |
|||
<span class="category-item-title">Archived |
|||
</span> |
|||
</div> |
|||
<span class="category-item-number archived_count"/> |
|||
</li> |
|||
<li class="category-item outbox" id="outbox"> |
|||
<div> |
|||
<svg class="category-item-icon" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="48" |
|||
viewBox="0 96 960 960" width="48"> |
|||
<path d="M453 634V445l-79 79-43-43 152-152 152 152-43 43-79-79v189h-60ZM180 936q-24 0-42-18t-18-42V276q0-24 18-42t42-18h600q24 0 42 18t18 42v600q0 24-18 42t-42 18H180Zm300-173q41 0 74-23.5t56-59.5h170V276H180v404h170q23 36 56 59.5t74 23.5Z"/> |
|||
</svg> |
|||
<span class="category-item-title">Outbox</span> |
|||
</div> |
|||
<span class="category-item-number outbox_count"/> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</section> |
|||
<!-- BODY --> |
|||
<section class="inbox mail_inbox"> |
|||
<!-- MAIL --> |
|||
<div class="inbox-menu"> |
|||
<div class="inbox-menu-group"> |
|||
<div class="inbox-btn-group"> |
|||
<button class="btn-alt checkbox" |
|||
style="margin-top:6px;"> |
|||
<input type="checkbox" id="checkall"/> |
|||
</button> |
|||
</div> |
|||
<button class="btn refresh"> |
|||
<img src="/odoo_mail_management/static/src/img/refresh_black_24dp.svg" |
|||
alt="Refresh" |
|||
class="btn-icon btn-icon-sm btn-icon-alt btn-icon-hover"/> |
|||
</button> |
|||
<button class="btn delete_checked"> |
|||
<img src="/odoo_mail_management/static/src/img/delete_black_24dp.svg" |
|||
alt="Delete" |
|||
class="btn-icon-sm btn-icon-alt btn-icon-hover checkbox_delete"/> |
|||
</button> |
|||
<button class="btn archive_checked"> |
|||
<img src="/odoo_mail_management/static/src/img/archive_black_24dp.svg" |
|||
alt="archive" |
|||
class="btn-icon-sm btn-icon-alt btn-icon-hover checkbox_archive"/> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
<div class="inbox-container"> |
|||
<div class="inbox-category"> |
|||
<div id="ctg-primary" |
|||
class="inbox-category-item active"> |
|||
<svg class="inbox-category-icon btn-icon btn-icon-sm btn-icon-alt active" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
height="24px" |
|||
viewBox="0 0 24 24" width="24px" |
|||
fill="#000000"> |
|||
<path d="M0 0h24v24H0V0z" fill="none"/> |
|||
<path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/> |
|||
</svg> |
|||
<span class="inbox-category-title">Primary</span> |
|||
</div> |
|||
</div> |
|||
<!-- MAIL CONTENT --> |
|||
<div class="content"> |
|||
<div class="mail"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- RIGHT SIDEBAR --> |
|||
<section class="app-container"> |
|||
<div class="app-group"> |
|||
<div class="app-item"> |
|||
<button class="btn google_calender"> |
|||
<img src="/odoo_mail_management/static/src/img/calendar_month_FILL0_wght400_GRAD0_opsz48.svg" |
|||
alt="Calendar" |
|||
class="btn-icon btn-icon-sm"/> |
|||
</button> |
|||
<p>Calendar</p> |
|||
</div> |
|||
<div class="app-item"> |
|||
<button class="btn keep_note"> |
|||
<img src="/odoo_mail_management/static/src/img/note_FILL0_wght400_GRAD0_opsz48.svg" |
|||
alt="Keep" |
|||
class="btn-icon btn-icon-sm"/> |
|||
</button> |
|||
<p style="margin-left: 4px;">Notes</p> |
|||
</div> |
|||
<div class="app-item" style="margin-top: -13px;"> |
|||
<button class=" btn contacts"> |
|||
<img src="/odoo_mail_management/static/src/img/contact_page_FILL0_wght400_GRAD0_opsz48.svg" |
|||
alt="Contacts" |
|||
class="btn-icon btn-icon-sm"/> |
|||
</button> |
|||
<p>Contacts</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- small Modal --> |
|||
<div class="modal fade " |
|||
id="send_message" tabindex="-1" |
|||
aria-labelledby="send_message_label" aria-hidden="true"> |
|||
<div class="modal-dialog "> |
|||
<form class="form_submit"> |
|||
<div class="modal-content small-modal" id="minimize"> |
|||
<div class="modal-header"> |
|||
<h1 class="modal-title fs-5" |
|||
id="send_message_label" |
|||
style="font-size: 1.6rem;">New Message |
|||
</h1> |
|||
<button class="btn" data-toggle="modal" |
|||
data-target="#large_modal" |
|||
style="margin-left: 400px; margin-top: -1px;" |
|||
data-dismiss="modal" id="maximum"> |
|||
<i class="fa fa-expand fa-2x" |
|||
aria-hidden="true"/> |
|||
</button> |
|||
<button type="button" class="btn-close" |
|||
data-dismiss="modal"> |
|||
<i class="fa fa-times" |
|||
aria-hidden="true"/> |
|||
</button> |
|||
</div> |
|||
<div class="modal-body"> |
|||
<input type="email" class="form-control" |
|||
id="Recipient" |
|||
aria-describedby="emailHelp" |
|||
required="1" placeholder="To"/> |
|||
<br/> |
|||
<input type="text" class="form-control" |
|||
id="subject" |
|||
aria-describedby="emailHelp" |
|||
placeholder="Subject"/> |
|||
<br/> |
|||
<textarea class="form-control" id="content" |
|||
rows="5" |
|||
style="height:300px"/> |
|||
</div> |
|||
<div class="modal-footer"> |
|||
<button type="submit" |
|||
style="border-radius: 15px; width: 85px;" |
|||
class="btn btn-primary">Send |
|||
</button> |
|||
<div class="image-upload"> |
|||
<label for="file-input"> |
|||
<img src="odoo_mail_management/static/src/img/attachment.svg"/> |
|||
</label> |
|||
<input id="file-input" type="button"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
<!-- large modal--> |
|||
<div class="modal fade" id="large_modal" tabindex="-1" |
|||
aria-labelledby="send_message_label" aria-hidden="true"> |
|||
<div class="modal-dialog modal-xl"> |
|||
<div class="modal-content large-modal"> |
|||
<form class="large_form_submit"> |
|||
<div class="modal-header"> |
|||
<h1 class="modal-title fs-5" |
|||
id="send_message_label" |
|||
style="font-size: 1.6rem;">New Message |
|||
</h1> |
|||
<button id="minimizesmallButton" |
|||
type="button" |
|||
data-dismiss="modal" |
|||
data-toggle="modal" |
|||
data-target="#send_message" |
|||
style="margin-left: 297px; margin-top: -1px;"> |
|||
<i class="fa fa-window-minimize" |
|||
aria-hidden="true"/> |
|||
</button> |
|||
</div> |
|||
<div class="modal-body"> |
|||
<input type="email" class="form-control" |
|||
id="l_Recipient" |
|||
aria-describedby="emailHelp" |
|||
required="1" placeholder="To"/> |
|||
<br/> |
|||
<input type="text" class="form-control" |
|||
id="l_subject" |
|||
aria-describedby="emailHelp" |
|||
placeholder="Subject"/> |
|||
<br/> |
|||
<textarea class="form-control" id="l_content" |
|||
rows="6"/> |
|||
</div> |
|||
<div class="modal-footer"> |
|||
<button type="submit" |
|||
style="border-radius: 15px; width: 85px;" |
|||
class="btn btn-primary">Send |
|||
</button> |
|||
<div class="image-upload"> |
|||
<label for="file-input"> |
|||
<img src="/odoo_mail_management/static/src/img/attachment.svg"/> |
|||
</label> |
|||
<input id="file-input" type="file"/> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!--This XML file defines configurations for Odoo Mail module. --> |
|||
<record id="action_odoo_mail" model="ir.actions.client"> |
|||
<field name="name">Odoo Mail</field> |
|||
<field name="tag">odoo_mail</field> |
|||
<field name="target">current</field> |
|||
</record> |
|||
<menuitem id="mail_menu_root" name="Odoo Mail" action="action_odoo_mail" |
|||
web_icon="odoo_mail_management,static/description/icon.png" |
|||
/> |
|||
</odoo> |
@ -0,0 +1,17 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Upload file wizard view --> |
|||
<record id="mail_attachment_view_form" model="ir.ui.view"> |
|||
<field name="name">mail.attachment.view.form</field> |
|||
<field name="model">mail.attachment</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="upload file wizard"> |
|||
<group class="oe_title"> |
|||
<field name="mail_attachment" string="" |
|||
filename="file_name"/> |
|||
<field name="file_name" invisible="1"/> |
|||
</group> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,31 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Record defining a custom view form for res.config.settings model --> |
|||
<record id="res_config_settings_view_form" model="ir.ui.view"> |
|||
<field name="name">res.config.settings.view.form.inherit.odoo.mail.management |
|||
</field> |
|||
<field name="model">res.config.settings</field> |
|||
<field name="inherit_id" ref="base.res_config_settings_view_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@id='email_servers_setting']" position="inside"> |
|||
<div> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="custom_mail_logo" |
|||
string="Custom Mail Logo"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="custom_mail_logo"/> |
|||
<div class="text-muted"> |
|||
Customize Mail logo |
|||
</div> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<field name="icon" widget="image" string="Mail Icon" |
|||
attrs="{'invisible': [('custom_mail_logo', '=', False)]}"/> |
|||
<field name="mail_icon_id" attrs="{'invisible': 1}"/> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |