Browse Source

Dec 26 : [ADD] Initial Commit 'pos_invoice_automate'

pull/299/head
RisvanaCybro 1 year ago
parent
commit
f29845ee10
  1. 49
      pos_invoice_automate/README.rst
  2. 22
      pos_invoice_automate/__init__.py
  3. 54
      pos_invoice_automate/__manifest__.py
  4. 10
      pos_invoice_automate/data/send_mail_cron.xml
  5. 28
      pos_invoice_automate/data/send_mail_template.xml
  6. 5
      pos_invoice_automate/doc/RELEASE_NOTES.md
  7. 25
      pos_invoice_automate/models/__init__.py
  8. 29
      pos_invoice_automate/models/ir_cron.py
  9. 81
      pos_invoice_automate/models/pos_config.py
  10. 96
      pos_invoice_automate/models/pos_order.py
  11. 67
      pos_invoice_automate/models/res_config_settings.py
  12. BIN
      pos_invoice_automate/static/description/assets/icons/check.png
  13. BIN
      pos_invoice_automate/static/description/assets/icons/chevron.png
  14. BIN
      pos_invoice_automate/static/description/assets/icons/cogs.png
  15. BIN
      pos_invoice_automate/static/description/assets/icons/consultation.png
  16. BIN
      pos_invoice_automate/static/description/assets/icons/ecom-black.png
  17. BIN
      pos_invoice_automate/static/description/assets/icons/education-black.png
  18. BIN
      pos_invoice_automate/static/description/assets/icons/hotel-black.png
  19. BIN
      pos_invoice_automate/static/description/assets/icons/license.png
  20. BIN
      pos_invoice_automate/static/description/assets/icons/lifebuoy.png
  21. BIN
      pos_invoice_automate/static/description/assets/icons/manufacturing-black.png
  22. BIN
      pos_invoice_automate/static/description/assets/icons/pos-black.png
  23. BIN
      pos_invoice_automate/static/description/assets/icons/puzzle.png
  24. BIN
      pos_invoice_automate/static/description/assets/icons/restaurant-black.png
  25. BIN
      pos_invoice_automate/static/description/assets/icons/service-black.png
  26. BIN
      pos_invoice_automate/static/description/assets/icons/trading-black.png
  27. BIN
      pos_invoice_automate/static/description/assets/icons/training.png
  28. BIN
      pos_invoice_automate/static/description/assets/icons/update.png
  29. BIN
      pos_invoice_automate/static/description/assets/icons/user.png
  30. BIN
      pos_invoice_automate/static/description/assets/icons/wrench.png
  31. BIN
      pos_invoice_automate/static/description/assets/misc/categories.png
  32. BIN
      pos_invoice_automate/static/description/assets/misc/check-box.png
  33. BIN
      pos_invoice_automate/static/description/assets/misc/compass.png
  34. BIN
      pos_invoice_automate/static/description/assets/misc/corporate.png
  35. BIN
      pos_invoice_automate/static/description/assets/misc/customer-support.png
  36. BIN
      pos_invoice_automate/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      pos_invoice_automate/static/description/assets/misc/features.png
  38. BIN
      pos_invoice_automate/static/description/assets/misc/logo.png
  39. BIN
      pos_invoice_automate/static/description/assets/misc/pictures.png
  40. BIN
      pos_invoice_automate/static/description/assets/misc/pie-chart.png
  41. BIN
      pos_invoice_automate/static/description/assets/misc/right-arrow.png
  42. BIN
      pos_invoice_automate/static/description/assets/misc/star.png
  43. BIN
      pos_invoice_automate/static/description/assets/misc/support.png
  44. BIN
      pos_invoice_automate/static/description/assets/misc/whatsapp.png
  45. BIN
      pos_invoice_automate/static/description/assets/modules/img1.png
  46. BIN
      pos_invoice_automate/static/description/assets/modules/img2.png
  47. BIN
      pos_invoice_automate/static/description/assets/modules/img3.png
  48. BIN
      pos_invoice_automate/static/description/assets/modules/img4.png
  49. BIN
      pos_invoice_automate/static/description/assets/modules/img5.png
  50. BIN
      pos_invoice_automate/static/description/assets/modules/img6.png
  51. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_1.png
  52. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_2.png
  53. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_3.png
  54. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_4.png
  55. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_5.png
  56. BIN
      pos_invoice_automate/static/description/assets/screenshots/pos_invoice_6.png
  57. BIN
      pos_invoice_automate/static/description/assets/screenshots/v16-hero.gif
  58. BIN
      pos_invoice_automate/static/description/banner.jpg
  59. BIN
      pos_invoice_automate/static/description/icon.png
  60. 689
      pos_invoice_automate/static/description/index.html
  61. 156
      pos_invoice_automate/static/src/js/PaymentScreen.js
  62. 14
      pos_invoice_automate/views/ir_cron.xml
  63. 35
      pos_invoice_automate/views/pos_config.xml
  64. 17
      pos_invoice_automate/views/pos_order.xml
  65. 43
      pos_invoice_automate/views/res_config_settings.xml

49
pos_invoice_automate/README.rst

@ -0,0 +1,49 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
POS Automate Invoice
====================
This module facilitates the automated sending of invoices to customers,
along with the ability to schedule emails at specific intervals. Additionally,
it empowers users to download invoices based on predefined conditions within
the configuration settings.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
-------
* Developers: (V16)Farhana Jahan PT @ cybrosys, 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>`__

22
pos_invoice_automate/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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

54
pos_invoice_automate/__manifest__.py

@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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': 'POS Automate Invoice',
'version': '16.0.1.0.0',
'summary': """To manage the POS Invoice Automatically""",
'description': """This module facilitates the automated sending of invoices
to customers, along with the ability to schedule emails at specific
intervals. Additionally, it empowers users to download invoices
based on predefined conditions within the configuration settings.""",
'category': 'Sales',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'depends': ['account', 'point_of_sale'],
'website': 'https://www.cybrosys.com',
'data': [
'data/send_mail_template.xml',
'data/send_mail_cron.xml',
'views/res_config_settings.xml',
'views/pos_order.xml',
'views/pos_config.xml',
'views/ir_cron.xml'
],
'assets': {
'point_of_sale.assets': [
'pos_invoice_automate/static/src/js/PaymentScreen.js',
],
},
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

10
pos_invoice_automate/data/send_mail_cron.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo noupdate="0">
<record id="ir_cron_send_invoice" model="ir.cron">
<!-- cron job for pos-->
<field name="name">POS: Send Invoice By Email</field>
<field name="model_id" ref="point_of_sale.model_pos_config"/>
<field name="state">code</field>
<field name="active">False</field>
</record>
</odoo>

28
pos_invoice_automate/data/send_mail_template.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="send_mail_template" model="mail.template">
<!-- mail template for pos scheduled mail-->
<field name="name">Invoice</field>
<field name="model_id" ref="point_of_sale.model_pos_order"/>
<field name="subject">Invoice {{ object.name }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Dear<t t-out="object.partner_id.name or ''"/>,
<br/>
<br/>
Here is the invoice for your Order
<br/>
Best regards,
<br/>
<t t-out="object.user_id.name"/>
</p>
</div>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
</data>
</odoo>

5
pos_invoice_automate/doc/RELEASE_NOTES.md

@ -0,0 +1,5 @@
## Module <pos_invoice_automate>
#### 19.12.2023
#### Version 16.0.1.0.0
##### ADD
- Initial commit for POS Automate Invoice

25
pos_invoice_automate/models/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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 pos_config
from . import pos_order
from . import res_config_settings
from . import ir_cron

29
pos_invoice_automate/models/ir_cron.py

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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 IrCron(models.Model):
_inherit = 'ir.cron'
config_id = fields.Many2one('pos.config', string='POS Config',
help='Get POS Config Id')

81
pos_invoice_automate/models/pos_config.py

@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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, _
from odoo.exceptions import ValidationError
class PosConfig(models.Model):
_inherit = 'pos.config'
invoice_auto_check = fields.Boolean()
button_operation = fields.Selection(selection=[
('download', 'Download'),
('send', 'Send By Email'),
('download_send_mail', 'Download & Send By Email')
])
interval = fields.Integer(help='Time interval for the cron scheduler',
string="Time Interval",
required=True)
period = fields.Selection(selection=[
('minutes', 'Minute'),
('hours', 'Hour'),
('days', 'Day'),
('weeks', 'Week'),
('months', 'Months')
], string='Period', help='Period for the cron scheduler', required=True)
is_started = fields.Boolean(default=False, help='Is the cron is started')
is_stopped = fields.Boolean(default=True, help='Is the cron is stopped')
def start_cron(self):
"""Start the cron scheduler"""
if self.interval >= 0:
self.is_started = True
self.is_stopped = False
cron_values = {
'name': 'POS (%s): Send Invoice By Email' % (self.name),
'interval_number': self.interval,
'interval_type': self.period,
'numbercall': 1,
'active': True,
'model_id': self.env['ir.model']._get('pos.config').id,
'code': 'model._send_mail(%s)' % (self.id),
'config_id': self.id
}
self.env['ir.cron'].create(cron_values)
else:
raise ValidationError(_('Negative number should not be allowed.'))
def stop_cron(self):
"""Stop the cron scheduler"""
ir_crone = self.env['ir.cron'].search(
[('config_id', '=', self.id), ('active', '=', True)])
if ir_crone:
ir_crone.write({'active': False})
self.is_stopped = True
self.is_started = False
def _send_mail(self, config):
"""Send invoice by Email"""
point_of_sale = self.env['pos.config'].browse(config)
for order in point_of_sale.session_ids.order_ids.filtered(
lambda x: x.state == 'invoiced' and not x.is_send):
order.send_mail_invoice()

96
pos_invoice_automate/models/pos_order.py

@ -0,0 +1,96 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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 fields, models
from odoo.http import request
class PosOrder(models.Model):
_inherit = 'pos.order'
is_send = fields.Boolean(string='Is invoice send?',
help='Is the invoice is send or not')
def send_mail_invoice(self):
"""Send invoice by email"""
if not self.account_move:
self.action_pos_order_invoice()
template = self.env.ref('pos_invoice_automate.send_mail_template')
email_values = {
'email_to': self.partner_id.email,
'email_from': self.env.user.partner_id.email,
}
attachment_invoice = self.env['ir.attachment'].search([
('res_model', '=', 'account.move'),
('res_id', '=', self.account_move.id)])
if not attachment_invoice:
report = self.env['ir.actions.report']._render_qweb_pdf(
"account.account_invoices", self.account_move.ids[0])
values = {
'name': "Invoice" + self.name,
'type': 'binary',
'datas': base64.b64encode(report[0]),
'store_fname': base64.b64encode(report[0]),
'mimetype': 'application/pdf',
}
attachment_invoice = self.env['ir.attachment'].sudo().create(
values)
template.attachment_ids = [(6, 0, [attachment_invoice.id])]
self.env['mail.template'].browse(template.id).send_mail(
self.id, email_values=email_values, force_send=True)
self.is_send = True
attachment_url = f"""{request.httprequest.host_url[:-1]}/web/content/{attachment_invoice.id}"""
return {
'type': 'ir.actions.act_url',
'url': attachment_url + '?download=true',
}
def download_invoice(self):
if not self.account_move:
self.action_pos_order_invoice()
template = self.env.ref('pos_invoice_automate.send_mail_template')
attachment_invoice = self.env['ir.attachment'].search([
('res_model', '=', 'account.move'),
('res_id', '=', self.account_move.id)])
if not attachment_invoice:
report = self.env['ir.actions.report']._render_qweb_pdf(
"account.account_invoices", self.account_move.ids[0])
values = {
'name': "Invoice" + self.name,
'type': 'binary',
'datas': base64.b64encode(report[0]),
'store_fname': base64.b64encode(report[0]),
'mimetype': 'application/pdf',
}
attachment_invoice = self.env['ir.attachment'].sudo().create(
values)
template.attachment_ids = [(6, 0, [attachment_invoice.id])]
attachment_url = f"""{request.httprequest.host_url[:-1]}/web/content/{attachment_invoice.id}"""
return {
'type': 'ir.actions.act_url',
'url': attachment_url + '?download=true',
}

67
pos_invoice_automate/models/res_config_settings.py

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions(<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 PosConfig(models.TransientModel):
_inherit = 'res.config.settings'
button_operation = fields.Selection(selection=[
('download', 'Download'),
('send', 'Send By Email'),
('download_send_mail', 'Download & Send By Email')
], string='Button Operation', related="pos_config_id.button_operation",
help='The invoice button operation', readonly=False,
config_parameter='pos_invoice_automate.button_operation')
invoice_auto_check = fields.Boolean(
related="pos_config_id.invoice_auto_check",
help='Check to enable the invoice button',
readonly=False, store=True,
config_parameter='pos_invoice_automate.invoice_auto_check')
@api.model
def get_values(self):
res = super(PosConfig, self).get_values()
get_param = self.env['ir.config_parameter'].sudo().get_param
res.update(
invoice_auto_check=get_param(
'res.config.settings.invoice_auto_check'),
button_operation=get_param('res.config.settings.button_operation'),
external_email_server_default=get_param(
'res.config.settings.external_email_server_default')
)
return res
def set_values(self):
res = super(PosConfig, self).get_values()
set_param = self.env['ir.config_parameter'].sudo().set_param
res.update(
invoice_auto_check=set_param(
'res.config.settings.invoice_auto_check',
self.invoice_auto_check),
button_operation=set_param('res.config.settings.button_operation',
self.button_operation),
external_email_server_default=set_param(
'res.config.settings.external_email_server_default',
self.external_email_server_default)
)
return res

BIN
pos_invoice_automate/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
pos_invoice_automate/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
pos_invoice_automate/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
pos_invoice_automate/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
pos_invoice_automate/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
pos_invoice_automate/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
pos_invoice_automate/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
pos_invoice_automate/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
pos_invoice_automate/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_invoice_automate/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
pos_invoice_automate/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
pos_invoice_automate/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
pos_invoice_automate/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
pos_invoice_automate/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
pos_invoice_automate/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
pos_invoice_automate/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
pos_invoice_automate/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_invoice_automate/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
pos_invoice_automate/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_invoice_automate/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
pos_invoice_automate/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
pos_invoice_automate/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
pos_invoice_automate/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
pos_invoice_automate/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
pos_invoice_automate/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
pos_invoice_automate/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
pos_invoice_automate/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
pos_invoice_automate/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
pos_invoice_automate/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
pos_invoice_automate/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
pos_invoice_automate/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
pos_invoice_automate/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
pos_invoice_automate/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
pos_invoice_automate/static/description/assets/modules/img6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/pos_invoice_6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
pos_invoice_automate/static/description/assets/screenshots/v16-hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
pos_invoice_automate/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
pos_invoice_automate/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

689
pos_invoice_automate/static/description/index.html

@ -0,0 +1,689 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
POS Invoice Automate</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
This app enables users to automate and schedule the sending
of emails.
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/v16-hero.gif"
class="img-responsive"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View features of this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">
See key screenshots of this module
</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module facilitates the automated sending of invoices to
customers, along with the ability to schedule emails at specific
intervals. Additionally, it empowers users to download invoices
based on predefined conditions within the configuration
settings.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Enable the invoice button in the POS Payment Screen
Automatically.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Different operations like Download, Send By Email, Download
and Send By Email for Invoice button.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Dynamic Cron Scheduler.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Send Invoices automatically via Cron Scheduler.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Able to set the time interval of Cron Scheduler .
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Send Invoice By Email .
</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">Enable Auto check
of Invoice Button.</p>
<img src="assets/screenshots/pos_invoice_1.png"
class="img-thumbnail">
</div>
</div>
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">The Invoice Button
is automatically enabled in the Payment Screen.</p>
<img src="assets/screenshots/pos_invoice_2.png"
class="img-thumbnail">
</div>
</div>
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">Download, Send by
Email, Download and Send by Email option for Download and Send
Invoice to Customer via Mail
</p>
<img src="assets/screenshots/pos_invoice_3.png"
class="img-thumbnail">
</div>
</div>
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">Invoice is Send to
corresponding Customer Mail.</p>
<img src="assets/screenshots/pos_invoice_4.png"
class="img-thumbnail">
</div>
</div>
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">Send Invoices
automatically via Cron Scheduler and able to set interval for
the Cron Scheduler.</p>
<img src="assets/screenshots/pos_invoice_5.png"
class="img-thumbnail">
</div>
</div>
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<p style="font-family: 'Montserrat', sans-serif;">Send By Email
Button in Backend </p>
<img src="assets/screenshots/pos_invoice_6.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" 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/16.0/custom_receipts_for_pos/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img1.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/16.0/pos_kitchen_screen_odoo/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img2.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/16.0/dashboard_pos/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img3.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/16.0/point_of_sale_logo/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img4.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/16.0/pos_report_generator/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img5.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/16.0/login_pos_direct/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/img6.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>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<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>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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 &amp; 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: 0px; 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: 0px; 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: 0px; 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>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

156
pos_invoice_automate/static/src/js/PaymentScreen.js

@ -0,0 +1,156 @@
odoo.define('pos_invoice_automate.PaymentScreen', function(require) {
'use strict';
const PaymentScreen = require('point_of_sale.PaymentScreen');
const Registries = require('point_of_sale.Registries');
var rpc = require('web.rpc');
const {
useErrorHandlers,
useAsyncLockedMethod
} = require('point_of_sale.custom_hooks');
const PosInvoiceAutomatePaymentScreen = (PaymentScreen) =>
class extends PaymentScreen {
constructor() {
super(...arguments);
if (this.env.pos.config.invoice_auto_check) {
this.currentOrder.set_to_invoice(true);
}
}
async validateOrder(isForceValidate) {
const value = await this.env.pos.push_single_order(this.currentOrder);
const config_id = this.env.pos.config.id
const order_id = value[0].id
if (this.env.pos.config.is_started) {
await this.rpc({
model: 'pos.config',
method: 'start_cron',
args: [config_id],
});
} else {
if (this.env.pos.config.button_operation == 'download') {
var self = this;
await this.rpc({
model: 'pos.order',
method: 'download_invoice',
args: [order_id],
}).then(function(result) {
self.env.legacyActionManager.do_action(result)
})
} else if (this.env.pos.config.button_operation == 'send') {
await this.rpc({
model: 'pos.order',
method: 'send_mail_invoice',
args: [order_id],
});
} else if (this.env.pos.config.button_operation == 'download_send_mail') {
var self = this;
await this.rpc({
model: 'pos.order',
method: 'send_mail_invoice',
args: [order_id],
}).then(function(result) {
self.env.legacyActionManager.do_action(result)
})
}
}
await super.validateOrder(isForceValidate);
}
async _finalizeValidation() {
if ((this.currentOrder.is_paid_with_cash() || this.currentOrder.get_change()) && this.env.pos.config.iface_cashdrawer && this.env.proxy && this.env.proxy.printer) {
this.env.proxy.printer.open_cashbox();
}
this.currentOrder.initialize_validation_date();
for (let line of this.paymentLines) {
if (!line.amount === 0) {
this.currentOrder.remove_paymentline(line);
}
}
this.currentOrder.finalized = true;
let syncOrderResult, hasError;
try {
// 1. Save order to server.
syncOrderResult = await this.env.pos.push_single_order(this.currentOrder);
// 2. Invoice.
if (this.shouldDownloadInvoice() && this.currentOrder.is_to_invoice()) {
if (syncOrderResult.length) {
await this.env.legacyActionManager.do_action('account.account_invoices', {
additional_context: {
active_ids: [syncOrderResult[0].account_move],
},
});
} else {
throw {
code: 401,
message: 'Backend Invoice',
data: {
order: this.currentOrder
}
};
}
}
// 3. Post process.
if (syncOrderResult.length && this.currentOrder.wait_for_push_order()) {
const postPushResult = await this._postPushOrderResolve(
this.currentOrder,
syncOrderResult.map((res) => res.id)
);
if (!postPushResult) {
this.showPopup('ErrorPopup', {
title: this.env._t('Error: no internet connection.'),
body: this.env._t('Some, if not all, post-processing after syncing order failed.'),
});
}
}
} catch (error) {
if (error.code == 700 || error.code == 701)
this.error = true;
if ('code' in error) {
// We started putting `code` in the rejected object for invoicing error.
// We can continue with that convention such that when the error has `code`,
// then it is an error when invoicing. Besides, _handlePushOrderError was
// introduce to handle invoicing error logic.
if (this.env.pos.config.button_operation == 'send') {
await this._handlePushOrderError(error);
}
} else {
// We don't block for connection error. But we rethrow for any other errors.
if (isConnectionError(error)) {
this.showPopup('OfflineErrorPopup', {
title: this.env._t('Connection Error'),
body: this.env._t('Order is not synced. Check your internet connection'),
});
} else {
throw error;
}
}
} finally {
// Always show the next screen regardless of error since pos has to
// continue working even offline.
this.showScreen(this.nextScreen);
// Remove the order from the local storage so that when we refresh the page, the order
// won't be there
this.env.pos.db.remove_unpaid_order(this.currentOrder);
// Ask the user to sync the remaining unsynced orders.
if (!hasError && syncOrderResult && this.env.pos.db.get_orders().length) {
const {
confirmed
} = await this.showPopup('ConfirmPopup', {
title: this.env._t('Remaining unsynced orders'),
body: this.env._t(
'There are unsynced orders. Do you want to sync these orders?'
),
});
if (confirmed) {
// NOTE: Not yet sure if this should be awaited or not.
// If awaited, some operations like changing screen
// might not work.
this.env.pos.push_orders();
}
}
}
}
};
Registries.Component.extend(PaymentScreen, PosInvoiceAutomatePaymentScreen);
return PaymentScreen;
});

14
pos_invoice_automate/views/ir_cron.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="ir_cron_view_form" model="ir.ui.view">
<!-- ir_cron form view-->
<field name="name">ir.cron.form.view.inherit</field>
<field name="model">ir.cron</field>
<field name="inherit_id" ref="base.ir_cron_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position='after'>
<field name="config_id" invisible="1"/>
</xpath>
</field>
</record>
</odoo>

35
pos_invoice_automate/views/pos_config.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="pos_config_view_form" model="ir.ui.view">
<!-- inherit pos_config form for adding fields and button-->
<field name="name">pos.config.form.view.inherit</field>
<field name="model">pos.config</field>
<field name="inherit_id" ref="point_of_sale.pos_config_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='other_devices']" position='after'>
<div id="send_mail_cron" class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">Send By Email Cron</span>
<div class="text-muted">
Select Interval for cron and click on start/stop
button to start or stop cron
</div>
<div class="content-group mt16 ml16 row">
<field name="interval"
class="col-lg-3 o_light_label"/>
<field name="period" class="col-lg-3"/>
<field name="is_stopped" invisible="1"/>
<field name="is_started" invisible="1"/>
<button name="start_cron" type="object"
string="Start" class="btn-primary"
attrs="{'invisible': [('is_started', '=', True)]}"/>
<button name="stop_cron" type="object"
string="Stop" class="btn-primary"
attrs="{'invisible': [('is_stopped', '=', True)]}"/>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

17
pos_invoice_automate/views/pos_order.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_pos_pos_form" model="ir.ui.view">
<!-- inherit pos_order form view-->
<field name="name">pos.order.form.view.inherit</field>
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='refund']" position='before'>
<field name="is_send" invisible="1"/>
<button name="send_mail_invoice" string="Send By Email"
type="object"
attrs="{'invisible':['|', ('state','not in',['invoiced','paid']), ('is_send', '=', True)]}"/>
</xpath>
</field>
</record>
</odoo>

43
pos_invoice_automate/views/res_config_settings.xml

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<!-- inherit res_config_settings for adding invoice operation methods-->
<field name="name">res.config.settings.form.view.inherited</field>
<field name="model">res.config.settings</field>
<field name="inherit_id"
ref="point_of_sale.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='pos_bills_and_receipts_section']"
position='after'>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box"
id="automate_check_invoice">
<div class="o_setting_left_pane">
<field name="invoice_auto_check"/>
</div>
<div class="o_setting_right_pane">
<label for="invoice_auto_check">Auto Check Invoice
Button
</label>
<div class="text-muted">
Auto check the invoice button
</div>
</div>
</div>
<div id="automate_invoice"
class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">Button Operation</span>
<div class="text-muted">
Invoice button operation
</div>
<div class="content-group mt16">
<field name="button_operation"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save