diff --git a/odoo_mail_management/README.rst b/odoo_mail_management/README.rst new file mode 100644 index 000000000..cfef7c08c --- /dev/null +++ b/odoo_mail_management/README.rst @@ -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 `__ + +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 `__ + +Further information +=================== +HTML Description: ``__ diff --git a/odoo_mail_management/__init__.py b/odoo_mail_management/__init__.py new file mode 100644 index 000000000..b4880c460 --- /dev/null +++ b/odoo_mail_management/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +from . import models diff --git a/odoo_mail_management/__manifest__.py b/odoo_mail_management/__manifest__.py new file mode 100644 index 000000000..ace706ac4 --- /dev/null +++ b/odoo_mail_management/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +{ + '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, +} diff --git a/odoo_mail_management/data/mail_icon_data.xml b/odoo_mail_management/data/mail_icon_data.xml new file mode 100644 index 000000000..4fbfc2435 --- /dev/null +++ b/odoo_mail_management/data/mail_icon_data.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/odoo_mail_management/doc/RELEASE_NOTES.md b/odoo_mail_management/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..38a1b6fc4 --- /dev/null +++ b/odoo_mail_management/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 01.02.2024 +#### Version 15.0.1.0.0 +#### ADD +- Initial commit for Email Management in Odoo diff --git a/odoo_mail_management/models/__init__.py b/odoo_mail_management/models/__init__.py new file mode 100644 index 000000000..2fd900dc7 --- /dev/null +++ b/odoo_mail_management/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +from . import mail_attachment +from . import mail_icon +from . import mail_mail +from . import res_config_settings diff --git a/odoo_mail_management/models/mail_attachment.py b/odoo_mail_management/models/mail_attachment.py new file mode 100644 index 000000000..e0540b044 --- /dev/null +++ b/odoo_mail_management/models/mail_attachment.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +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.") diff --git a/odoo_mail_management/models/mail_icon.py b/odoo_mail_management/models/mail_icon.py new file mode 100644 index 000000000..86e71c39c --- /dev/null +++ b/odoo_mail_management/models/mail_icon.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +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 diff --git a/odoo_mail_management/models/mail_mail.py b/odoo_mail_management/models/mail_mail.py new file mode 100644 index 000000000..73747781b --- /dev/null +++ b/odoo_mail_management/models/mail_mail.py @@ -0,0 +1,331 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +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() diff --git a/odoo_mail_management/models/res_config_settings.py b/odoo_mail_management/models/res_config_settings.py new file mode 100644 index 000000000..0af91bd48 --- /dev/null +++ b/odoo_mail_management/models/res_config_settings.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Hafeesul Ali() +# +# 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 . +# +############################################################################# +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") diff --git a/odoo_mail_management/security/ir.model.access.csv b/odoo_mail_management/security/ir.model.access.csv new file mode 100644 index 000000000..15ef7eb69 --- /dev/null +++ b/odoo_mail_management/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +access_mail_attachment,access.mail.attachment,model_mail_attachment,base.group_user,1,1,1,1 +access_mail_icon,access.mail.icon,model_mail_icon,base.group_user,1,1,1,1 diff --git a/odoo_mail_management/static/description/assets/icons/check.png b/odoo_mail_management/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/check.png differ diff --git a/odoo_mail_management/static/description/assets/icons/chevron.png b/odoo_mail_management/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/chevron.png differ diff --git a/odoo_mail_management/static/description/assets/icons/cogs.png b/odoo_mail_management/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/cogs.png differ diff --git a/odoo_mail_management/static/description/assets/icons/consultation.png b/odoo_mail_management/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/consultation.png differ diff --git a/odoo_mail_management/static/description/assets/icons/ecom-black.png b/odoo_mail_management/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/ecom-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/education-black.png b/odoo_mail_management/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/education-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/hotel-black.png b/odoo_mail_management/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/hotel-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/license.png b/odoo_mail_management/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/license.png differ diff --git a/odoo_mail_management/static/description/assets/icons/lifebuoy.png b/odoo_mail_management/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/lifebuoy.png differ diff --git a/odoo_mail_management/static/description/assets/icons/logo.png b/odoo_mail_management/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/logo.png differ diff --git a/odoo_mail_management/static/description/assets/icons/manufacturing-black.png b/odoo_mail_management/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/manufacturing-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/pos-black.png b/odoo_mail_management/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/pos-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/puzzle.png b/odoo_mail_management/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/puzzle.png differ diff --git a/odoo_mail_management/static/description/assets/icons/restaurant-black.png b/odoo_mail_management/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/restaurant-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/service-black.png b/odoo_mail_management/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/service-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/trading-black.png b/odoo_mail_management/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/trading-black.png differ diff --git a/odoo_mail_management/static/description/assets/icons/training.png b/odoo_mail_management/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/training.png differ diff --git a/odoo_mail_management/static/description/assets/icons/update.png b/odoo_mail_management/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/update.png differ diff --git a/odoo_mail_management/static/description/assets/icons/user.png b/odoo_mail_management/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/user.png differ diff --git a/odoo_mail_management/static/description/assets/icons/wrench.png b/odoo_mail_management/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/odoo_mail_management/static/description/assets/icons/wrench.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module01.png b/odoo_mail_management/static/description/assets/modules/module01.png new file mode 100644 index 000000000..f1a1c82cd Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module01.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module02.png b/odoo_mail_management/static/description/assets/modules/module02.png new file mode 100644 index 000000000..f01b10060 Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module02.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module03.png b/odoo_mail_management/static/description/assets/modules/module03.png new file mode 100644 index 000000000..5238bdeab Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module03.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module04.png b/odoo_mail_management/static/description/assets/modules/module04.png new file mode 100644 index 000000000..004c61a9e Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module04.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module05.png b/odoo_mail_management/static/description/assets/modules/module05.png new file mode 100644 index 000000000..30ad58232 Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module05.png differ diff --git a/odoo_mail_management/static/description/assets/modules/module06.png b/odoo_mail_management/static/description/assets/modules/module06.png new file mode 100644 index 000000000..424c1e30d Binary files /dev/null and b/odoo_mail_management/static/description/assets/modules/module06.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/SChero.gif b/odoo_mail_management/static/description/assets/screenshots/SChero.gif new file mode 100644 index 000000000..413a561b7 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/SChero.gif differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg01.png b/odoo_mail_management/static/description/assets/screenshots/scimg01.png new file mode 100644 index 000000000..6b20e0115 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg01.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg02.png b/odoo_mail_management/static/description/assets/screenshots/scimg02.png new file mode 100644 index 000000000..9891f3bf3 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg02.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg03.png b/odoo_mail_management/static/description/assets/screenshots/scimg03.png new file mode 100644 index 000000000..65b0766a0 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg03.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg04.png b/odoo_mail_management/static/description/assets/screenshots/scimg04.png new file mode 100644 index 000000000..1435b3be8 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg04.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg05.png b/odoo_mail_management/static/description/assets/screenshots/scimg05.png new file mode 100644 index 000000000..1091e8544 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg05.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg06.png b/odoo_mail_management/static/description/assets/screenshots/scimg06.png new file mode 100644 index 000000000..19d2ef710 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg06.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg07.png b/odoo_mail_management/static/description/assets/screenshots/scimg07.png new file mode 100644 index 000000000..086accd86 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg07.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg08.png b/odoo_mail_management/static/description/assets/screenshots/scimg08.png new file mode 100644 index 000000000..1edc8fe85 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg08.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg09.png b/odoo_mail_management/static/description/assets/screenshots/scimg09.png new file mode 100644 index 000000000..40d6aedb5 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg09.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg10.png b/odoo_mail_management/static/description/assets/screenshots/scimg10.png new file mode 100644 index 000000000..8849112af Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg10.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg11.png b/odoo_mail_management/static/description/assets/screenshots/scimg11.png new file mode 100644 index 000000000..6c9817f66 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg11.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg12.png b/odoo_mail_management/static/description/assets/screenshots/scimg12.png new file mode 100644 index 000000000..6274adbd1 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg12.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg13.png b/odoo_mail_management/static/description/assets/screenshots/scimg13.png new file mode 100644 index 000000000..5a56d661d Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg13.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg14.png b/odoo_mail_management/static/description/assets/screenshots/scimg14.png new file mode 100644 index 000000000..d351da868 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg14.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg15.png b/odoo_mail_management/static/description/assets/screenshots/scimg15.png new file mode 100644 index 000000000..5efe3c762 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg15.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg16.png b/odoo_mail_management/static/description/assets/screenshots/scimg16.png new file mode 100644 index 000000000..931894888 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg16.png differ diff --git a/odoo_mail_management/static/description/assets/screenshots/scimg17.png b/odoo_mail_management/static/description/assets/screenshots/scimg17.png new file mode 100644 index 000000000..a7d684686 Binary files /dev/null and b/odoo_mail_management/static/description/assets/screenshots/scimg17.png differ diff --git a/odoo_mail_management/static/description/banner.jpg b/odoo_mail_management/static/description/banner.jpg new file mode 100644 index 000000000..4759cad34 Binary files /dev/null and b/odoo_mail_management/static/description/banner.jpg differ diff --git a/odoo_mail_management/static/description/icon.png b/odoo_mail_management/static/description/icon.png new file mode 100644 index 000000000..4f6f989d5 Binary files /dev/null and b/odoo_mail_management/static/description/icon.png differ diff --git a/odoo_mail_management/static/description/index.html b/odoo_mail_management/static/description/index.html new file mode 100644 index 000000000..5f46e3a7a --- /dev/null +++ b/odoo_mail_management/static/description/index.html @@ -0,0 +1,784 @@ +
+ + +
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ + + +
+
+
+

+ Email Management in Odoo

+

+ Odoo Mail Management +

+ + + +
+
+ + + + + + + +
+
+

+ Overview +

+
+ +
+

+ 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. +

+ +
+
+ + + +
+
+

+ Configuration +

+
+ +
+

+ Configure outgoing mail server

+
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Community & Enterprise Support

+

+ Available in Odoo 15.0 Community and Enterprise.

+
+
+ +
+
+ +
+
+

+ Odoo Mail

+

+ Manage mails in Odoo

+
+
+ +
+
+ +
+
+

+ Mail Management

+

+ 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.

+
+
+
+ + + +
+
+

+ Screenshots +

+
+
+

+ Manage mails in Odoo.

+

+ We can see all mails in Odoo. +

+ +
+ +
+

+ Search bar.

+

+ We can search a mail easily using this search bar. +

+ +
+ +
+

+ Checkbox.

+

+ Checkbox that can select all mail,multiple mail to delete and + archive multiple + mail together. +

+ +
+ +
+

+ Make mails starred.

+ +
+ +
+

+ Delete and archive mail.

+ +
+ +
+

+ Calendar,Notes and Contacts button.

+

+ Calendar,Notes and Contacts button to redirect into respective + modules. +

+ +
+ +
+

+ Compose a mail

+ +
+ +
+

+ Compose mail window.

+

+ we can compose mail easily here and have an option to attach + file,button to extend + compose mail window. +

+ + +
+
+

+ Large window to compose mail.

+ +
+ +
+

+ Sent mails.

+ +
+ +
+

+ Starred mails.

+ +
+ +
+

+ Archived mails.

+ +
+ +
+

+ Outbox.

+

+ Failed mails can be seen here +

+ +
+ +
+

+ Resend.

+

+ One can resend the failed mail +

+ +
+ +
+

+ Custom mail logo.

+

+ The logo can be changed in the settings +

+ +
+ +
+

+ Custom logo

+ +
+ +
+

+ Custom logo

+

+ Custom logo added to UI +

+ +
+ +
+ + + +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/odoo_mail_management/static/src/css/main.css b/odoo_mail_management/static/src/css/main.css new file mode 100644 index 000000000..035dcc980 --- /dev/null +++ b/odoo_mail_management/static/src/css/main.css @@ -0,0 +1,1289 @@ +.checkbox,.arrow { + background: none; + border: none; + padding: 0 4px; +} +.btn-alt:hover { + background-color: var(--fill-hover); +} + +.btn-page { + background: none; + border: none; + padding: 0 2px; +} + +.btn-icon-sm { + height: 20px; + width: 20px; + border-radius: 0; +} + +.btn-icon-alt { + opacity: var(--opacity); +} + +.hrt-rule { + height: 1px; + background-color: #dadce0; +} + +/* ---- BODY GRID ---- */ + +.body-wrapper { + display: grid; + grid-template-columns: 270px 1fr 55px; + grid-template-rows: auto calc(100vh - 64px); + +} + +/* ==== HEADER ==== */ + +.head { + display: grid; + grid-template-columns: 256px 1fr -webkit-min-content; + grid-template-columns: 256px 1fr min-content; + -ms-flex-pack: justify; + -ms-flex-align: center; + align-items: center; + grid-column-gap: 12px; + height: 64px; + background-color: white; + border-bottom: 1px solid var(--fill-border); + grid-column: 1 / -1; +} + +.header-group { + display: -webkit-box; + display: -ms-flexbox; + -ms-flex-align: center; + margin: 0 6px; +} + +.header-search { + display: -webkit-box; + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-pack: justify; + width: 100%; + max-width: 720px; + background-color: var(--fill-grey); + border-radius: 8px; + padding: 3px 8px; + +} + +.header-search:focus-within { + background-color: white; + + -webkit-box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302), + 0 1px 3px 1px rgba(60, 64, 67, 0.149); + + box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302), + 0 1px 3px 1px rgba(60, 64, 67, 0.149); +} + +.btn[type="reset"] { + display: none; +} + +.header-search:focus-within .btn[type="reset"] { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.header-search-input { + display: block; + font-family: var(--font-sec); + font-size: var(--font-m); + font-weight: 400; + background-color: transparent; + width: 100%; + padding: 4px; + border: none; + outline: none; +} + +#header-profile { + height: 40px; + width: 40px; +} + +.header-profile { + height: 32px; + width: 32px; + opacity: 1; +} + +#header-menu { + width: 48px; + height: 48px; + margin: 4px; +} + +/* ==== LEFT SIDEBAR ==== */ + +.left-sidebar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; + grid-column: 1 / 2; + grid-row: 2 / -1; +} +.left-sidebar-compose { + padding: 0 10px; + margin: 16px 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.sidebar-btn-compose { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + font-size: var(--font-m); + line-height: 1.5rem; + background: white; + min-width: 48px; + /* width: 145px; */ + height: 48px; + vertical-align: middle; + padding: 5px; + border: none; + border-radius: 999px; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + -webkit-box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302), + 0 1px 3px 1px rgba(60, 64, 67, 0.149); + box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302), + 0 1px 3px 1px rgba(60, 64, 67, 0.149); + -webkit-transition: -webkit-box-shadow 150ms ease; + transition: -webkit-box-shadow 150ms ease; + -o-transition: box-shadow 150ms ease; + transition: box-shadow 150ms ease; + transition: box-shadow 150ms ease, -webkit-box-shadow 150ms ease; + -webkit-box-flex: 0; + -ms-flex: 0 1 145px; + flex: 0 1 145px; +} + +.sidebar-btn-compose:hover { + -webkit-box-shadow: 0 1px 3px 0 rgb(60 64 67 / 30%), + 0 4px 8px 3px rgb(60 64 67 / 15%); + box-shadow: 0 1px 3px 0 rgb(60 64 67 / 30%), 0 4px 8px 3px rgb(60 64 67 / 15%); + background-color: #fafafb; +} + +.sidebar-btn-compose-icon { + width: 27px; + margin-left: 16px; + margin-bottom: 9px; +} + +.sidebar-btn-compose-title { + color: var(--grey); + font-family: var(--font-sec); + font-size: 15px; + font-weight: 500; + letter-spacing: 0.25px; + margin-left: 8px; + margin-right: 18px; +} + +.category-item-list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; + width: 100%; + margin: 0; + padding: 0; + padding-right: 16px; +} + +.category-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + color: var(--grey); + font-family: var(--font); + font-size: 0.875rem; + line-height: 1.1rem; + min-height: 32px; + padding: 0 12px 0 26px; + border-top-right-radius: 999px; + border-bottom-right-radius: 999px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-flex: 0; + -ms-flex: 0; + flex: 0; +} + +.category-item:hover { + background-color: var(--fill-hover); + cursor: pointer; +} + +.category-item > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.category-item-icon { + width: 20px; + margin-right: 18px; + opacity: var(--opacity); +} + +.category-item.active { + color: #7a539e; + font-weight: 600; + background-color: #fce8e6; +} + +.category-item-active:hover { + background-color: #fce8e6; +} + +.category-item.active .category-item-icon { + fill: #7a539e; + opacity: 1; +} +.category-title { + font-family: var(--font-sec); + color: var(--grey); + font-size: 0.875rem; + font-weight: 500; + letter-spacing: 0.25px; + padding: 0 12px 0 26px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin: 10px 0; +} + +.btn-icon-sidebar.btn-icon-sm.active { + opacity: 1; +} + +/* ==== BODY ==== */ + +.mail_inbox { + grid-column: 2 / 3; + grid-row: 2 / -1; + + overflow: hidden; +} + +/* ==== MAIL ==== */ + +.inbox-menu { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row; + flex-flow: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 48px; + width: auto; + background-color: white; + padding: 0 12px; + border-bottom: 1px solid var(--fill-border); + margin-right: 16px; +} + +.inbox-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; +} + +.inbox-menu-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row; + flex-flow: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; +} + +.inbox-btn-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding: 0; +} +.inbox-menu-pagination { + font-family: var(--font); + color: var(--light-grey); + font-size: 0.75rem; + margin-right: 12px; + letter-spacing: 0.25px; + margin: 0 6px; +} +.inbox-menu-pagination-btn { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.inbox-menu-pagination-btn .btn-pagination { + margin: 0; +} +.inbox-category { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 56px; + color: var(--light-grey); + font-family: var(--font-sec); + font-weight: 500; + font-size: 0.875rem; + letter-spacing: 0.25px; + white-space: nowrap; + border-bottom: 1px solid var(--fill-border); + overflow: hidden; + margin-right: 16px; +} +.inbox-category-item { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 56px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + -webkit-box-flex: 0; + -ms-flex: 0 1 251px; + flex: 0 1 251px; +} +.inbox-category-title { + margin-right: 18px; + padding: 0; +} +.inbox-category-icon { + margin-left: 16px; + margin-right: 12px; + + -webkit-transition: opacity 350ms ease; + + -o-transition: opacity 350ms ease; + + transition: opacity 350ms ease; +} +.inbox-category-item:hover { + background-color: var(--fill-hover); + color: var(--black); +} +.inbox-category-item:hover .inbox-category-icon { + opacity: 1; +} +.inbox-category-item.active { + color: #7a539e; +} +.inbox-category-icon.active { + fill: #7a539e; + opacity: 1; +} +#ctg-primary.inbox-category-item.active::before { + content: ""; + position: absolute; + display: block; + height: 4px; + background-color: #7a539e; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + left: 0; + right: 0; + bottom: 0; + margin: 0 8px; +} +/* ==== MAIL CONTENT ==== */ +.content { + display: block; + margin-bottom: 16px; + overflow: hidden; + overflow-y: scroll; + height: 740px; +} + +.mail { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-bottom: 8px; +} + +.inbox-message-item { + position: relative; + display: flex; + padding-right: 8px; + padding-left: 4px; + } + +.inbox-message-item:hover { + cursor: pointer; + -webkit-box-shadow: inset 1px 0 0 #dadce0, inset -1px 0 0 #dadce0, + 0 1px 2px 0 rgb(60 64 67 / 30%), 0 1px 3px 1px rgb(60 64 67 / 15%); + box-shadow: inset 1px 0 0 #dadce0, inset -1px 0 0 #dadce0, + 0 1px 2px 0 rgb(60 64 67 / 30%), 0 1px 3px 1px rgb(60 64 67 / 15%); + z-index: 1; +} +.inbox-message-item-options { + display: flex; +} +.inbox-message-item-options * { + margin: 0; +} +.message-default { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-family: var(--font); + color: var(--light-grey); + white-space: nowrap; + overflow: hidden; + overflow-x: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.message-content { + padding: 2px 2px 2px 0; + line-height: 1.1; + width: 168px; +} + +.gap.message-content { + display: block; + background: transparent; + min-width: 70px; + + -webkit-box-flex: 0; + + -ms-flex: 0 70px; + + flex: 0 70px; +} + +.message-sender { + color: var(--black); + padding-right: 2rem; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + + -webkit-box-flex: 0; + + -ms-flex: 0 0 200px; + + flex: 0 0 200px; +} + +.message-subject { + color: var(--black); + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + + -webkit-box-flex: 0; + + -ms-flex: 0 0 auto; + width: 350px; + flex: 0 0 auto; +} + +.message-seperator { + vertical-align: middle; + line-height: 1; + padding: 0 6px; + width: 20px; + margin-left: -2px; +} + +.message-body { + color: var(--light-grey); + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + + -webkit-box-flex: 1; + + -ms-flex: 1 1 auto; + + flex: 1 1 auto; +} + +.message-date { + position: relative; + color: var(--light-grey); + height: 40px; + right: 0; + top: 0; + font-size: 0.75rem; + text-align: right; + letter-spacing: 0.15px; + margin-right: 8px; + z-index: 1; + + -webkit-box-flex: 0; + + -ms-flex: 0 56px; + + flex: 0 56px; +} +.message-default-unread { + background-color: var(--fill-grey); +} + +.message-default .unread { + color: var(--black); + font-weight: 600; +} + +.message-default .read { + color: var(--light-grey); + font-weight: 400; +} + +.message-group-hidden { + display: none; + -webkit-transition: opacity 150ms ease; + -o-transition: opacity 150ms ease; + transition: opacity 150ms ease; +} + +.inbox-message-item:hover .message-btn-icon { + opacity: 0.55; +} + +.inbox-message-item:hover .message-group-hidden { + display: block; +} + +.center-text { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +/* ==== RIGHT SIDEBAR ==== */ + +.app-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 10px; + border-left: 1px solid var(--fill-border); + + grid-column: 3 / 4; + grid-row: 2 / -1; +} + +.app-item { + margin-bottom: 16px; +} + +.app-group > :nth-last-child(3) { + margin-bottom: 0; +} +.app-group > :nth-last-child(1) { + margin-top: 6px; +} + +/* ==== FOOTER ==== */ + +.footer-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row; + flex-flow: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + padding: 12px; + margin: 16px 0; +} + +.footer-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: var(--light-grey); + font-size: 0.875rem; + padding: 0; + margin: 0; + text-decoration: none; + letter-spacing: 0.2px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + -webkit-box-flex: 1; + + -ms-flex: 1 1; + + flex: 1 1; +} + +/* ==== MEDIA QUERIES (1200px, 1024px, 950px, 768px) ==== */ + +/* ---- 1200px ----*/ + +@media screen and (max-width: 1200px) { + .message-default .message-subject { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + } +} + +/* ---- 1024px ----*/ + +@media screen and (max-width: 1024px) { + .message-default .message-subject { + -webkit-box-flex: 0; + -ms-flex: 0 0 20%; + flex: 0 0 20%; + } +} + +/* ---- 950px ----*/ + +@media screen and (max-width: 950px) { + .inbox-message-item { + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + height: auto; + } + + .message-default { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + white-space: nowrap; + padding-left: 10px; + margin: 10px 0; + } + + .inbox-message-item-options { + position: absolute; + background-color: transparent; + right: 8px; + top: 0; + + z-index: 2; + } + + .message-seperator { + display: none; + } + + .message-default .message-sender { + -webkit-box-flex: 1; + -ms-flex: 1 1 100%; + flex: 1 1 100%; + } + + .message-default .message-subject { + -webkit-box-flex: 0; + -ms-flex: 0 1 100%; + flex: 0 1 100%; + } + + .message-default .message-body { + -webkit-box-flex: 0; + -ms-flex: 0 1 80%; + flex: 0 1 80%; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + } + + .message-default .message-date { + position: absolute; + right: 0; + top: 0; + margin-right: 8px; + z-index: 1; + -webkit-box-flex: 0; + -ms-flex: 0 0 56px; + flex: 0 0 56px; + } + + .star { + position: absolute; + right: 8px; + bottom: 0; + z-index: 3; + } + + .gap.message-content { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + + .inbox-message-item:hover .message-date { + display: none; + } + + .footer-item:nth-child(2) { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + white-space: nowrap; + padding-left: 12px; + padding-right: 12px; + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + } +} + +/* ---- 768px ----*/ + +@media screen and (max-width: 768px) { + .inbox-menu-pagination { + max-width: 8ch; + white-space: nowrap; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + } + + .gap.message-content { + display: none; + } + + .message-default .message-subject { + -webkit-box-flex: 0; + -ms-flex: 0 1 max-content; + flex: 0 1 max-content; + padding-right: 32px; + } +} + +:root { + + /* ==== FONTS ==== */ + --font: 'Roboto', Arial, Helvetica, sans-serif; + --font-sec: 'Google Sans', 'Roboto', Arial, Helvetica, sans-serif; + + --font-m: 1rem; + --font-sm: calc(14 / 1rem); + + /* ==== COLORS ==== */ + --black: #202124; + --grey: #3c4043; + --light-grey: #5f6368; + --red: #d93025; + --blue: #427fed; + --fill-red: #fce8e6; + --fill-grey: #f1f3f4; + --fill-hover: #3c404314; + --fill-border: #e5e5e5; + + /* UNITS */ + --opacity: 0.54; + +} + +/* ==== @FONT-FACE ==== */ + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Kwp5MKg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Nwp5MKg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Bwp5MKg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Awp5MKg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Owp4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94Yt3CwZ-Pw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94YtwCwZ-Pw.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94Yt8CwZ-Pw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94Yt9CwZ-Pw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94YtzCwY.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Product Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/productsans/v9/pxiDypQkot1TnFhsFMOfGShVGdeOcEg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Product Sans'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/productsans/v9/pxiDypQkot1TnFhsFMOfGShVF9eO.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOkCnqEu92Fr1Mu51xIIzI.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(//fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +.body-wrapper { + position: relative; + } + +.small-modal { + position: absolute; + bottom: 0; + left: 542px; + border-radius:10px; + height: 573px; +} + +.image-upload > input +{ + display: none; +} + +.image-upload img +{ + width: 26px; + cursor: pointer; + margin-left: 6px; +} + +.large-modal{ +border-radius:10px +} + +#checkbox{ + margin-top: 4px; +} +@media screen and (max-width: 1720px) { +.small-modal{ + margin-left: 100px; + position: absolute; + bottom: 25px; + left: 496px; + border-radius: 10px; + height: 557px; + width: 481px; +} +}@media screen and (max-width: 1550px) { +.small-modal{ + margin-left: 80px; + position: absolute; + bottom: 25px; + left: 364px; + border-radius: 10px; + height: 557px; + width: 481px; +} +} +#minimize.minimized { + height: 50px; + overflow: hidden; +} diff --git a/odoo_mail_management/static/src/img/archive_black_24dp.svg b/odoo_mail_management/static/src/img/archive_black_24dp.svg new file mode 100644 index 000000000..dc90e7c9c --- /dev/null +++ b/odoo_mail_management/static/src/img/archive_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/attachment.svg b/odoo_mail_management/static/src/img/attachment.svg new file mode 100644 index 000000000..8db5de531 --- /dev/null +++ b/odoo_mail_management/static/src/img/attachment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/calendar_month_FILL0_wght400_GRAD0_opsz48.svg b/odoo_mail_management/static/src/img/calendar_month_FILL0_wght400_GRAD0_opsz48.svg new file mode 100644 index 000000000..637f4d2c6 --- /dev/null +++ b/odoo_mail_management/static/src/img/calendar_month_FILL0_wght400_GRAD0_opsz48.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/clear_black_24dp.svg b/odoo_mail_management/static/src/img/clear_black_24dp.svg new file mode 100644 index 000000000..5f1267d71 --- /dev/null +++ b/odoo_mail_management/static/src/img/clear_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/contact_page_FILL0_wght400_GRAD0_opsz48.svg b/odoo_mail_management/static/src/img/contact_page_FILL0_wght400_GRAD0_opsz48.svg new file mode 100644 index 000000000..a5fb65ac6 --- /dev/null +++ b/odoo_mail_management/static/src/img/contact_page_FILL0_wght400_GRAD0_opsz48.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/delete_black_24dp.svg b/odoo_mail_management/static/src/img/delete_black_24dp.svg new file mode 100644 index 000000000..90a74facb --- /dev/null +++ b/odoo_mail_management/static/src/img/delete_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/edit_square_FILL0_wght400_GRAD0_opsz48.svg b/odoo_mail_management/static/src/img/edit_square_FILL0_wght400_GRAD0_opsz48.svg new file mode 100644 index 000000000..1529bbbd5 --- /dev/null +++ b/odoo_mail_management/static/src/img/edit_square_FILL0_wght400_GRAD0_opsz48.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/expand_icon.svg b/odoo_mail_management/static/src/img/expand_icon.svg new file mode 100644 index 000000000..612e0350c --- /dev/null +++ b/odoo_mail_management/static/src/img/expand_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/logo.png b/odoo_mail_management/static/src/img/logo.png new file mode 100644 index 000000000..def9f7854 Binary files /dev/null and b/odoo_mail_management/static/src/img/logo.png differ diff --git a/odoo_mail_management/static/src/img/menu_black_24dp.svg b/odoo_mail_management/static/src/img/menu_black_24dp.svg new file mode 100644 index 000000000..216dda019 --- /dev/null +++ b/odoo_mail_management/static/src/img/menu_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/note_FILL0_wght400_GRAD0_opsz48.svg b/odoo_mail_management/static/src/img/note_FILL0_wght400_GRAD0_opsz48.svg new file mode 100644 index 000000000..2245cc11a --- /dev/null +++ b/odoo_mail_management/static/src/img/note_FILL0_wght400_GRAD0_opsz48.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/outbox.svg b/odoo_mail_management/static/src/img/outbox.svg new file mode 100644 index 000000000..ab3e85d05 --- /dev/null +++ b/odoo_mail_management/static/src/img/outbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/refresh_black_24dp.svg b/odoo_mail_management/static/src/img/refresh_black_24dp.svg new file mode 100644 index 000000000..e217f0350 --- /dev/null +++ b/odoo_mail_management/static/src/img/refresh_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/search_black_24dp.svg b/odoo_mail_management/static/src/img/search_black_24dp.svg new file mode 100644 index 000000000..593f62809 --- /dev/null +++ b/odoo_mail_management/static/src/img/search_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/star_black_24dp.svg b/odoo_mail_management/static/src/img/star_black_24dp.svg new file mode 100644 index 000000000..d9e6c2ba6 --- /dev/null +++ b/odoo_mail_management/static/src/img/star_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/star_border_black_24dp.svg b/odoo_mail_management/static/src/img/star_border_black_24dp.svg new file mode 100644 index 000000000..483bd6465 --- /dev/null +++ b/odoo_mail_management/static/src/img/star_border_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/unarchive_FILL1_wght400_GRAD0_opsz48.svg b/odoo_mail_management/static/src/img/unarchive_FILL1_wght400_GRAD0_opsz48.svg new file mode 100644 index 000000000..8d04f33bb --- /dev/null +++ b/odoo_mail_management/static/src/img/unarchive_FILL1_wght400_GRAD0_opsz48.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/img/yellow_star.svg b/odoo_mail_management/static/src/img/yellow_star.svg new file mode 100644 index 000000000..d5fbf5763 --- /dev/null +++ b/odoo_mail_management/static/src/img/yellow_star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/odoo_mail_management/static/src/js/mail_home.js b/odoo_mail_management/static/src/js/mail_home.js new file mode 100644 index 000000000..356833c8e --- /dev/null +++ b/odoo_mail_management/static/src/js/mail_home.js @@ -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( + '' + ) + }) + }, + /*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( + '
' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + name.sender + '' + + '
' + + '
' + + '' + name.subject + '' + + '
' + + '
-
' + + '
' + + '' + name.subject + '' + + '
' + + '
 
' + + '
' + + '' + name.date + '' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
') + }) + }) + }, + /*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( + '
' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + name.sender + '' + + '
' + + '
' + + '' + name.subject + '' + + '
' + + '
-
' + + '
' + + '' + name.subject + '' + + '
' + + '
 
' + + '
' + + '' + name.date + '' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
') + 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( + '
' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + name.sender + '' + + '
' + + '
' + + '' + name.subject + '' + + '
' + + '
-
' + + '
' + + '' + name.subject + '' + + '
' + + '
 
' + + '
' + + '' + name.date + '' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '' + + '
' + + '
' + + '
') + }) + 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( + '
' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + name.sender + '' + + '
' + + '
' + + '' + name.subject + '' + + '
' + + '
-
' + + '
' + + '' + name.subject + '' + + '
' + + '
 
' + + '
' + + '' + name.date + '' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
') + }) + 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( + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '
' + + '
' + + '' + name.sender + '' + + '
' + + '
' + + '' + name.subject + '' + + '
' + + '
-
' + + '
' + + '' + name.subject + '' + + '
' + + '
 
' + + '
' + + '' + name.date + '' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
') + }) + 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 = 'Not 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 = '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; +}); diff --git a/odoo_mail_management/static/src/xml/mail_page_view.xml b/odoo_mail_management/static/src/xml/mail_page_view.xml new file mode 100644 index 000000000..b0dfee9ec --- /dev/null +++ b/odoo_mail_management/static/src/xml/mail_page_view.xml @@ -0,0 +1,310 @@ + + +