Browse Source

Jan 17 [ADD] : Initial Commit 'pos_invoice_payment'

pull/254/merge
AjmalCybro 1 year ago
parent
commit
8a6c932990
  1. 42
      pos_invoice_payment/README.rst
  2. 22
      pos_invoice_payment/__init__.py
  3. 57
      pos_invoice_payment/__manifest__.py
  4. 6
      pos_invoice_payment/doc/RELEASE_NOTES.md
  5. 24
      pos_invoice_payment/models/__init__.py
  6. 40
      pos_invoice_payment/models/account_journal.py
  7. 73
      pos_invoice_payment/models/account_move.py
  8. 46
      pos_invoice_payment/models/account_payment.py
  9. BIN
      pos_invoice_payment/static/description/assets/icons/check.png
  10. BIN
      pos_invoice_payment/static/description/assets/icons/chevron.png
  11. BIN
      pos_invoice_payment/static/description/assets/icons/cogs.png
  12. BIN
      pos_invoice_payment/static/description/assets/icons/consultation.png
  13. BIN
      pos_invoice_payment/static/description/assets/icons/ecom-black.png
  14. BIN
      pos_invoice_payment/static/description/assets/icons/education-black.png
  15. BIN
      pos_invoice_payment/static/description/assets/icons/hotel-black.png
  16. BIN
      pos_invoice_payment/static/description/assets/icons/license.png
  17. BIN
      pos_invoice_payment/static/description/assets/icons/lifebuoy.png
  18. BIN
      pos_invoice_payment/static/description/assets/icons/logo.png
  19. BIN
      pos_invoice_payment/static/description/assets/icons/manufacturing-black.png
  20. BIN
      pos_invoice_payment/static/description/assets/icons/pos-black.png
  21. BIN
      pos_invoice_payment/static/description/assets/icons/puzzle.png
  22. BIN
      pos_invoice_payment/static/description/assets/icons/restaurant-black.png
  23. BIN
      pos_invoice_payment/static/description/assets/icons/service-black.png
  24. BIN
      pos_invoice_payment/static/description/assets/icons/trading-black.png
  25. BIN
      pos_invoice_payment/static/description/assets/icons/training.png
  26. BIN
      pos_invoice_payment/static/description/assets/icons/update.png
  27. BIN
      pos_invoice_payment/static/description/assets/icons/user.png
  28. BIN
      pos_invoice_payment/static/description/assets/icons/wrench.png
  29. BIN
      pos_invoice_payment/static/description/assets/modules/module01.png
  30. BIN
      pos_invoice_payment/static/description/assets/modules/module02.png
  31. BIN
      pos_invoice_payment/static/description/assets/modules/module03.png
  32. BIN
      pos_invoice_payment/static/description/assets/modules/module04.png
  33. BIN
      pos_invoice_payment/static/description/assets/modules/module05.png
  34. BIN
      pos_invoice_payment/static/description/assets/modules/module06.png
  35. BIN
      pos_invoice_payment/static/description/assets/screenshots/SChero.gif
  36. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg01.png
  37. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg02.png
  38. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg03.png
  39. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg04.png
  40. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg05.png
  41. BIN
      pos_invoice_payment/static/description/assets/screenshots/scimg06.png
  42. BIN
      pos_invoice_payment/static/description/banner.jpg
  43. BIN
      pos_invoice_payment/static/description/icon.png
  44. 673
      pos_invoice_payment/static/description/index.html
  45. 63
      pos_invoice_payment/static/src/js/button_invoice_list.js
  46. 75
      pos_invoice_payment/static/src/js/invoicing.js
  47. 62
      pos_invoice_payment/static/src/js/payment_popup.js
  48. 49
      pos_invoice_payment/static/src/js/pos_clientline.js
  49. 49
      pos_invoice_payment/static/src/scss/invoice_list.scss
  50. 9
      pos_invoice_payment/static/src/xml/ClientLine.xml
  51. 10
      pos_invoice_payment/static/src/xml/ClientListScreen.xml
  52. 51
      pos_invoice_payment/static/src/xml/CreatePaymentPopup_templates.xml
  53. 10
      pos_invoice_payment/static/src/xml/InvoicingButton_templates.xml
  54. 77
      pos_invoice_payment/static/src/xml/InvoicingScreen_templates.xml

42
pos_invoice_payment/README.rst

@ -0,0 +1,42 @@
.. 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 Invoice Register Payment.
=============================
'This module will help you create payments in customer list and register payment for invoices'
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer:(V15) Hafeesul Ali, Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
License
-------
AFFERO GENERAL PUBLIC LICENSE v3.0 (AGPL-3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
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_payment/__init__.py

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

57
pos_invoice_payment/__manifest__.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Hafeesul Ali (odoo@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 Invoice Register Payment',
'version': '15.0.1.0.0',
'category': 'Point of Sale',
'summary': 'Create payment and register payment for invoice',
'description': 'This module will help you create payments in customer list'
' and register payment for invoices',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['base', 'point_of_sale'],
'assets': {
'point_of_sale.assets': [
'pos_invoice_payment/static/src/scss/invoice_list.scss',
],
'web.assets_backend': [
'pos_invoice_payment/static/src/js/pos_clientline.js',
'pos_invoice_payment/static/src/js/payment_popup.js',
'pos_invoice_payment/static/src/js/button_invoice_list.js',
'pos_invoice_payment/static/src/js/invoicing.js',
],
'web.assets_qweb': [
'pos_invoice_payment/static/src/xml/ClientLine.xml',
'pos_invoice_payment/static/src/xml/ClientListScreen.xml',
'pos_invoice_payment/static/src/xml/'
'CreatePaymentPopup_templates.xml',
'pos_invoice_payment/static/src/xml/InvoicingButton_templates.xml',
'pos_invoice_payment/static/src/xml/InvoicingScreen_templates.xml',
]},
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

6
pos_invoice_payment/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <pos_invoice_payment>
#### 25.10.2023
#### Version 15.0.1.0.0
#### ADD
- Initial commit for Pos Invoice Register Payment

24
pos_invoice_payment/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Hafeesul Ali (odoo@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 account_journal
from . import account_move
from . import account_payment

40
pos_invoice_payment/models/account_journal.py

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Hafeesul Ali (odoo@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, models
class AccountJournal(models.Model):
"""This class represents an inherits model for account journals in Odoo.
It inherits from the 'account.journal' model and adds a method
"""
_inherit = "account.journal"
@api.model
def get_journal(self):
"""Method to get available journals
Returns:
dict:A dictionary of journal id and name.
"""
journal_list = [{"id": journal.id, "name": journal.name} for journal in
self.search(['|', ('type', '=', 'bank'),
('type', '=', 'cash')])]
return journal_list

73
pos_invoice_payment/models/account_move.py

@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Hafeesul Ali (odoo@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 AccountMove(models.Model):
"""This class represents an inherits model for account move.
It inherits from the 'account.move' model and adds methods
"""
_inherit = "account.move"
@api.model
def get_invoices(self):
"""Method to get invoice
Returns:
dict:A dictionary of invoice id,payment reference,partner name,
total amount,amount residual,state and payment state
"""
invoice_list = [
{
'invoice_id': record.id,
'payment_reference': record.payment_reference,
'partner_id': record.partner_id.name,
'amount_total': record.amount_total,
'amount_residual': record.amount_residual,
'state': record.state,
'payment_state': record.payment_state
}
for record in self.search([('move_type', '=', 'out_invoice')])
]
return invoice_list
@api.model
def register_payment(self, *args):
"""Method to register payment,
Args:
*args(int):Id of record to register payment.
"""
invoice_id = \
self.browse(*args).action_register_payment()['context'][
'active_ids'][
0]
self.env['account.payment.register']. \
with_context(active_model='account.move', active_ids=invoice_id). \
create({'payment_date': fields.date.today()}). \
action_create_payments()
@api.model
def post_invoice(self, *args):
"""Method to confirm non posted invoices,
Args:
*args(int):Id of record to post journal.
"""
self.browse(*args).action_post()

46
pos_invoice_payment/models/account_payment.py

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Hafeesul Ali (odoo@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, models
class AccountPayment(models.Model):
"""This class represents an inherits model for account payment.
It inherits from the 'account.payment' model and adds a method
"""
_inherit = "account.payment"
@api.model
def create_payment(self, *args):
"""Method to create payment
Args:
*args(tuple): A tuple of dictionary that contains journal id ,
partner id,currency id,amount.
"""
payment = self.create({
'journal_id': int(args[0]['journal_id']),
'partner_id': int(args[0]['partner_id']),
'currency_id': int(args[0]['currency_id']),
'amount': int(args[0]['amount'])
})
payment.action_post()
if payment:
return True

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_invoice_payment/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module04.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module05.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
pos_invoice_payment/static/description/assets/modules/module06.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/SChero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg04.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg05.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
pos_invoice_payment/static/description/assets/screenshots/scimg06.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

BIN
pos_invoice_payment/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
pos_invoice_payment/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

673
pos_invoice_payment/static/description/index.html

@ -0,0 +1,673 @@
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;">
<!-- TITLE BAR -->
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="./assets/icons/logo.png" style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<div class="container" style="padding: 0rem 1.5rem 4rem !important">
<div class="row" style="height: 900px !important;">
<div class="col-sm-12 col-md-12 col-lg-12"
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;">
<h1
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;">
Pos Invoice Register Payment</h1>
<p
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;">
Create Payments in Customer List and Register Payment for Invoices
</p>
<!-- END OF APP HERO -->
<img src="./assets/screenshots/SChero.gif" class="img-responsive" width="100%" height="auto" />
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="row">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-compass mr-2"></i>Explore this module
</h2>
</div>
<div class="col-md-6">
<a href="#overview" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Overview</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Learn more about this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#configuration" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Configuration</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View configurations for this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#features" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Features</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View features of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#screenshots" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Screenshots</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
See key screenshots of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="row" id="overview">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Overview
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
This module will help you create payments in customer list
and register payment for invoices
</p>
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="row" id="configuration">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Configuration
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
No additional configuration required</p>
</div>
</div>
<div class="row" id="features">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-star mr-2"></i>Features
</h2>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Community &amp; Enterprise Support</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Available in Odoo 15.0 Community and Enterprise.</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Invoice Register payment</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can register payment through Pos</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create Payment</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can create payment for a customer from customer screen
in pos</p>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="row" id="screenshots">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-image mr-2"></i>Screenshots
</h2>
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create Payment</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
A payment can be created from customer screen
</p>
<img src="assets/screenshots/scimg01.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-2">
<h4 class="my-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create payment Pop up</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can enter amount and select journal to create payment
</p>
<img src="assets/screenshots/scimg02.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-2">
<h4 class="mt-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Payments</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Created payment can see in payments in invoicing
</p>
<img src="assets/screenshots/scimg03.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Invoicing Button</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Invoicing Button to redirect into Invoicing Screen
</p>
<img src="assets/screenshots/scimg04.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Invoicing Screen and Register Payment</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Here we can see all invoices and user can register the payment
</p>
<img src="assets/screenshots/scimg05.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Invoices</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
We can see payment registered for invoice
</p>
<img src="assets/screenshots/scimg06.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/inventory_stock_dashboard_odoo/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module01.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/inventory_barcode_scanning/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module02.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module03.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/sale_discount_total/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module04.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module05.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_account_community/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/module06.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Services</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Industries</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &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: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Need Help?</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-6">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" />
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->
</div>

63
pos_invoice_payment/static/src/js/button_invoice_list.js

@ -0,0 +1,63 @@
odoo.define('pos_invoice_payment.invoice_button', function (require) {
'use strict';
/**
* Import required modules.
*/
const PosComponent = require('point_of_sale.PosComponent');
const ProductScreen = require('point_of_sale.ProductScreen');
const { useListener } = require("@web/core/utils/hooks");
const Registries = require('point_of_sale.Registries');
var core = require('web.core');
var rpc = require('web.rpc');
var QWeb = core.qweb;
/**
* Define the InvoicingButton class that extends PosComponent.
*/
class InvoicingButton extends PosComponent {
/**
* This method is called when the component is set up.
* It sets up event listeners for the 'click' event.
*/
setup() {
super.setup();
useListener('click', this.onClick);
}
/**
* This method is triggered when the InvoicingButton is clicked.
* It sends an RPC request to fetch invoices and displays them on the InvoicingScreen.
*/
async onClick() {
var self = this;
await self.rpc({
model: 'account.move',
method: 'get_invoices',
}).then(function (result) {
self.showScreen('InvoicingScreen', {
invoices: result,
});
});
}
}
/**
* Define the template used for the InvoicingButton.
*/
InvoicingButton.template = 'InvoicingButton';
/**
* Add the InvoicingButton as a control button to the ProductScreen.
* It will be displayed conditionally based on whether 'this.env.pos' is truthy.
*/
ProductScreen.addControlButton({
component: InvoicingButton,
condition: function () {
return this.env.pos;
},
});
/**
* Add the InvoicingButton to the list of registered components.
*/
Registries.Component.add(InvoicingButton);
/**
* Export the component name
*/
return `InvoicingButton`;
});

75
pos_invoice_payment/static/src/js/invoicing.js

@ -0,0 +1,75 @@
odoo.define('pos_invoice_payment.InvoicingScreen', function (require) {
'use strict';
/**
* Import required modules.
*/
const PosComponent = require('point_of_sale.PosComponent');
const ProductScreen = require('point_of_sale.ProductScreen');
const Registries = require('point_of_sale.Registries');
var rpc = require('web.rpc');
var core = require('web.core');
const { onMounted, onWillUnmount, useState } = owl;
/**
* Define the InvoicingScreen class that extends PosComponent.
*/
class InvoicingScreen extends PosComponent {
/**
* This method is called when the component is set up.
* It can be used to perform setup tasks.
*/
setup() {
super.setup();
}
/**
* This method is called when the 'back' button is clicked.
* It navigates back to the ProductScreen.
*/
back() {
this.showScreen('ProductScreen');
}
/**
* This method is called when the 'register payment' button is clicked.
* It sends an RPC request to register a payment for the selected data_id (invoice).
* After successful registration, it navigates back to the ProductScreen.
* @param {integer} data_id - The ID of the invoice to register payment for.
*/
registerPayment(data_id) {
var self = this;
this.rpc({
model: "account.move",
method: "register_payment",
args: [data_id],
}).then(function (result) {
self.showScreen('ProductScreen', {});
});
}
/**
* This method is called when the 'Confirm' button is clicked.
* It sends an RPC request to post the invoice for the selected data_id.
* After successful confirmation, it navigates back to the ProductScreen.
* @param {integer} data_id - The ID of the invoice to confirm.
*/
Confirm(data_id) {
var self = this;
this.rpc({
model: "account.move",
method: "post_invoice",
args: [data_id],
}).then(function (result) {
self.showScreen('ProductScreen', {});
});
}
}
/**
* Define the template used for the InvoicingScreen.
*/
InvoicingScreen.template = 'InvoicingScreen';
/**
* Add the InvoicingScreen to the list of registered components.
*/
Registries.Component.add(InvoicingScreen);
/**
* Export the InvoicingScreen class.
*/
return InvoicingScreen;
});

62
pos_invoice_payment/static/src/js/payment_popup.js

@ -0,0 +1,62 @@
/**@odoo-module **/
import AbstractAwaitablePopup from "point_of_sale.AbstractAwaitablePopup";
import Registries from "point_of_sale.Registries";
var core = require('web.core');
/**
* This class represents a popup for creating a payment in the Point of Sale module.
* It extends the AbstractAwaitablePopup class, which provides the basic structure and functionalities of a popup.
*/
class CreatePaymentPopup extends AbstractAwaitablePopup {
setup() {
super.setup();
}
/**
* This method is triggered when the 'confirm' button is clicked.
* It collects the input values from the popup, such as partner_id, currency_id, amount, and journal_id,
* and sends an RPC request to create a payment using the provided data.
* After processing the request, it triggers the "close-popup" event to close the popup.
* @param {Object} ev - The event object containing the input values from the popup.
*/
async confirm(ev) {
var self=this;
let partner_id = ev['partner_id'];
let currency_id = ev['currency_id'];
let amount = this.__owl__.pvnode.elm.querySelector("#amount").value
let journal_id = this.__owl__.pvnode.elm.querySelector("#journal").value
if (amount< 0) {
this.__owl__.pvnode.elm.querySelector('#positive_validation').style.display='block'
} else {
var values = {};
if (partner_id) {
values["partner_id"] = partner_id;
}
if (journal_id) {
values["journal_id"] = journal_id;
}
if (currency_id) {
values["currency_id"] = currency_id;
}
if (amount) {
values["amount"] = amount;
}
this.rpc({
model: "account.payment",
method: "create_payment",
args: [values],
}).then(function (result) {
if(result){
self.showNotification(_.str.sprintf(self.env._t('Created Successfully')),2000);
self.trigger("close-popup", {
popupId: self.props.id,
response: {
confirmed: false,
payload: null,
},
});
}
});
}
}
}
CreatePaymentPopup.template = "CreatePaymentPopup";
Registries.Component.add(CreatePaymentPopup);

49
pos_invoice_payment/static/src/js/pos_clientline.js

@ -0,0 +1,49 @@
odoo.define('pos_invoice_payment.ClientLine', function (require) {
'use strict';
/**
* Import required modules.
*/
const ClientLine = require('point_of_sale.ClientLine');
const Registries = require('point_of_sale.Registries');
/**
* Extend the ClientLine component with additional functionality to show a popup for creating a payment.
* @param {Class} ClientLine - The original ClientLine class to be extended.
*/
const PosClientLine = (ClientLine) =>
class extends ClientLine {
/**
* This method is called when the 'showPop' event is triggered.
* It extracts the partner_id from the event's target element and sends an RPC request to fetch journals.
* Then, it shows the 'CreatePaymentPopup' with the fetched journals and other relevant data.
* @param {Object} ev - The event object containing information about the event.
*/
async showPop(ev) {
var partner_id = ev.target.parentElement.parentElement.attributes[1].value;
var self = this;
var journal_length = [];
await this.rpc({
model: "account.journal",
method: "get_journal",
}).then(function (result) {
$.each(result, function (index, name) {
journal_length.push(index);
});
self.showPopup("CreatePaymentPopup", {
title: ("Create Payment"),
confirmText: ("Exit"),
journals: result,
journal_length: journal_length,
partner_id: partner_id
});
});
}
};
/**
* Extend the original ClientLine component with the new functionality provided by PosClientLine.
*/
Registries.Component.extend(ClientLine, PosClientLine);
/**
* Export the extended ClientLine component.
*/
return ClientLine;
});

49
pos_invoice_payment/static/src/scss/invoice_list.scss

@ -0,0 +1,49 @@
.invoice-list{
font-size: 16px;
width: 100%;
}
.invoice-list th,
.invoice-list td {
padding: 12px 8px;
}
.invoice-list tr{
transition: all 150ms linear;
background: rgb(230,230,230);
}
.invoice-list thead > tr,
.invoice-list tr:nth-child(even) {
background: rgb(247,247,247);
}
#journal{
display: block;
border: 0;
background: white;
border-radius: 5px;
width: 70%;
padding: 0.375rem 2.25rem 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 16px 12px;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
#amount{
min-height: 18px;
max-height: 37px !important;
margin-top: 5px;
overflow: hidden;
width: 70%;
max-height: 6%;
border-radius: 6px;
height: 42%;
}

9
pos_invoice_payment/static/src/xml/ClientLine.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="ClientLine" t-inherit="point_of_sale.ClientLine" t-inherit-mode="extension" owl="1">
<xpath expr="//td[hasclass('client-line-last-column-placeholder')]" position="before">
<td><div class="control-button" style="width: 154px;" t-on-click.stop="(ev) => this.showPop(ev)"><i class="fa fa-credit-card" role="img" aria-label="Products" title="Payment"/>
Create Payment</div></td>
</xpath>
</t>
</templates>

10
pos_invoice_payment/static/src/xml/ClientListScreen.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="ClientLineScreen" t-inherit="point_of_sale.ClientListScreen"
t-inherit-mode="extension" owl="1">
<xpath expr="//th[hasclass('client-line-last-column-placeholder')]"
position="before">
<th></th>
</xpath>
</t>
</templates>

51
pos_invoice_payment/static/src/xml/CreatePaymentPopup_templates.xml

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="CreatePaymentPopup" owl="1">
<div role="dialog" class="modal-dialog">
<div class="popup">
<p class="title">
Create Payment
</p>
<div class="field_div"
style="display:flex; margin-bottom: 15px;">
<label for="amount" class="field_label"
style="margin-right:10px; margin-top: 10px; width: 120px; display: inline-block; text-align: left; margin-left: 2%;">Amount</label>
<input type="number" name="amount" class="field_input"
id="amount" style="overflow: hidden; width: 70%;"/>
</div>
<p style="color:red; font-size: 17px; display:none;" id="positive_validation">please enter positive number</p>
<div class="field_div"
style="display:flex; margin-bottom: 15px;">
<label for="category"
class="field_label"
style="margin-right:10px; margin-top: 10px; width: 120px; display: inline-block; text-align: left;margin-left: 2%;">Journal</label>
<select name="category" class="form-control"
id="journal" >
<t t-foreach="props.journal_length"
t-as="journal_length"
t-key="journal_length">
<t t-set="index"
t-value="journal_length"/>
<option t-att-value="props.journals[index]['id']"
t-att-title="props.journals[index]['name']">
<t t-esc="props.journals[index]['name']"/>
</option>
</t>
</select>
</div>
<t t-set="currency_id" t-value="env.pos.company.currency_id[0]"/>
<t t-set="id" t-value="props.partner_id"/>
<t t-set="id_dict" t-value="{'partner_id':id,'currency_id':currency_id}"/>
<div class="footer">
<div class="button highlight confirm" t-on-click="() => this.confirm(id_dict)">
Confirm
</div>
<div class="button cancel" t-on-click="cancel">
Cancel
</div>
</div>
</div>
</div>
</t>
</templates>

10
pos_invoice_payment/static/src/xml/InvoicingButton_templates.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="InvoicingButton" owl="1">
<div class="control-button">
<i class="fa fa-list" role="img" aria-label="Listview"
title="Listview"/>
Invoicing
</div>
</t>
</templates>

77
pos_invoice_payment/static/src/xml/InvoicingScreen_templates.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="InvoicingScreen" owl="1">
<div class="clientlist-screen screen">
<div class="screen-content">
<div class="top-content">
<div class="button back" t-on-click="back">
Back
</div>
</div>
<section class="full-content">
<div class="client-window">
<section>
<div>
<div class="scrollable-y" style="overflow-y: scroll;height: 100vh;">
<table class="table table-striped invoice-list">
<thead>
<tr>
<th> Invoice </th>
<th> Customer Ref </th>
<th> Total Amount </th>
<th> Due Amount </th>
<th> State </th>
<th> Payment State </th>
<th> </th>
</tr>
</thead>
<tbody>
<t t-foreach="props.invoices"
t-as="invoice"
t-key="invoice.invoice_id">
<tr>
<t t-if="invoice.payment_reference != false">
<td><t t-esc="invoice.payment_reference"/></td>
</t>
<t t-else="">
<div> </div>
</t>
<td><t t-esc="invoice.partner_id"/></td>
<td><t t-esc="invoice.amount_total"/></td>
<td><t t-esc="invoice.amount_residual"/></td>
<td><t t-esc="invoice.state"/></td>
<td><t t-esc="invoice.payment_state"/></td>
<t t-set="data_id" t-value="invoice.invoice_id"/>
<t t-if="invoice.state == 'draft'">
<td>
<div class="control-button" t-on-click="() => this.Confirm(data_id)">
<i class="fa fa-money" role="img" aria-label="Listview" title="Listview"/>
Confirm
</div>
</td>
</t>
<t t-if="invoice.payment_state != 'paid' and invoice.state == 'posted'">
<td>
<div class="control-button" t-on-click="() => this.registerPayment(data_id)">
<i class="fa fa-money" role="img" aria-label="Listview" title="Listview"/>
Register Payment
</div>
</td>
</t>
<t t-else="">
<div> </div>
</t>
</tr>
</t>
</tbody>
</table>
</div>
</div>
</section>
</div>
</section>
</div>
</div>
</t>
</templates>
Loading…
Cancel
Save