Skip to content

Commit

Permalink
[ADD] website_payment_acquirer_bank_account
Browse files Browse the repository at this point in the history
  • Loading branch information
unaiberis committed Oct 17, 2024
1 parent 6fc87f2 commit b71d76f
Show file tree
Hide file tree
Showing 14 changed files with 631 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/website_payment_acquirer_bank_account/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
73 changes: 73 additions & 0 deletions website_payment_acquirer_bank_account/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg
:target: https://opensource.org/licenses/LGPL-3.0
:alt: License: LGPL-3

=====================================
Website Payment Acquirer Bank Account
=====================================

Overview
========

The **Account Payment Mode and Acquirer** module integrates payment modes with bank accounts in sales. It allows users to select a bank account for payments directly from the sales order, enhancing the payment processing workflow.

Features
========

- **Bank Account Selection**: Users can select a bank account for payments directly from the sales order.

- **Automatic Payment Mode Assignment**: When confirming an order, the payment mode is automatically set based on the selected bank account.

- **Bank Account Management**: Users can create new bank accounts linked to partners seamlessly.

Usage
=====

1. **Install the Module**:

- Install the module via Odoo's Apps interface.

2. **Using Bank Accounts**:

- When creating or editing a sales order, select a bank account from the dropdown.
- Confirm the order, and the payment mode will automatically be assigned based on the selected bank account.

Configuration
=============

No additional configuration is required. The module is ready to use once installed.

Testing
=======

Test the following scenarios:

- **Bank Account Selection**:

- Create or edit a sales order and select a bank account.
- Confirm the order and verify that the payment mode is set correctly.

- **Bank Account Creation**:

- Create a new bank account from the sales order and ensure it links correctly to the partner.

Bug Tracker
===========

If you encounter any issues, please report them on the GitHub repository at `GitHub Issues <https://github.com/avanzosc/odoo-addons/issues>`_.

Credits
=======

Contributors
------------

* Unai Beristain <[email protected]>
* Ana Juaristi <[email protected]>

For module-specific questions, please contact the contributors directly. Support requests should be made through the official channels.

License
=======

This project is licensed under the LGPL-3 License. For more details, please refer to the LICENSE file or visit <https://opensource.org/licenses/LGPL-3.0>.
2 changes: 2 additions & 0 deletions website_payment_acquirer_bank_account/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import controllers
from . import models
17 changes: 17 additions & 0 deletions website_payment_acquirer_bank_account/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Website Payment Acquirer Bank Account",
"version": "14.0.1.0.0",
"author": "Avanzosc",
"summary": "Integrates payment modes with bank accounts in sales.",
"website": "https://github.com/avanzosc/odoo-addons",
"license": "LGPL-3",
"depends": [
"web",
"sale",
"account",
"payment_acquirer_payment_mode", # trey
],
"data": ["views/payment_view.xml"],
"installable": True,
"application": False,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
129 changes: 129 additions & 0 deletions website_payment_acquirer_bank_account/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import logging

from odoo import _, http

_logger = logging.getLogger(__name__)


class PaymentController(http.Controller):
@http.route(
"/create_new_bank_account",
type="http",
auth="user",
methods=["POST"],
csrf=False,
website=True,
)
def create_new_bank_account(self, **kwargs):
new_bank_account = kwargs.get("new_bank_account")
payment_mode_id = kwargs.get("payment_mode_id")

msg_payment_mode_missing = _("Payment mode ID is missing")
msg_invalid_bank_account = _(
"The bank account number must have exactly 20 digits."
)
msg_bank_account_exists = _("The bank account already exists")
msg_success = _("Bank account saved successfully")

if not payment_mode_id:
_logger.warning("Payment mode ID was not provided.")
return http.request.redirect(
f"/shop/payment?message={msg_payment_mode_missing}&status=400"
)

payment_mode_id = int(payment_mode_id)
sale_order_id = http.request.session.get("sale_order_id")

if len(new_bank_account) != 20 or not new_bank_account.isdigit():
_logger.warning("The bank account number must have exactly 20 digits.")
return http.request.redirect(
f"/shop/payment?message={msg_invalid_bank_account}&status=400"
)

existing_bank = (
http.request.env["res.partner.bank"]
.sudo()
.search([("acc_number", "=", new_bank_account)], limit=1)
)

if existing_bank:
_logger.warning("The bank account already exists: %s", new_bank_account)
return http.request.redirect(
f"/shop/payment?message={msg_bank_account_exists}&status=400"
)

partner_id = http.request.env.user.partner_id.id

http.request.env["res.partner.bank"].sudo().create(
{
"acc_number": new_bank_account,
"partner_id": partner_id,
}
)

sale_order = http.request.env["sale.order"].sudo().browse(sale_order_id)
sale_order.write(
{
"payment_mode_id": payment_mode_id,
# "bank_account_id": new_bank_account_record.id,
}
)

_logger.info(
"Bank account created and successfully assigned to order ID: %s",
sale_order_id,
)

return http.request.redirect(f"/shop/payment?message={msg_success}&status=200")

@http.route(
"/choose_bank_account",
type="json",
auth="user",
methods=["POST"],
csrf=False,
website=True,
)
def choose_bank_account(self, bank_id=None, **kwargs):
if not bank_id:
_logger.warning("Bank account ID was not provided.")
return {
"status": "error",
"message": "Bank account ID was not provided.",
}

try:
bank_id = int(bank_id)
except ValueError:
_logger.error("The bank account ID is not a valid number: %s", bank_id)
return {
"status": "error",
"message": "The bank account ID is not a valid number.",
}

sale_order_id = http.request.session.get("sale_order_id")
if not sale_order_id:
_logger.warning("No sale order ID found in the session.")
return {
"status": "error",
"message": "No sale order ID found in the session.",
}

sale_order = http.request.env["sale.order"].sudo().browse(sale_order_id)
if not sale_order.exists():
_logger.warning("No sale order found with ID: %s", sale_order_id)
return {
"status": "error",
"message": "No sale order found with the provided ID.",
}

# sale_order.write({"bank_account_id": bank_id})
_logger.info(
"Bank account selected and successfully assigned to order ID: %s",
sale_order_id,
)

return {
"status": "success",
"message": "Bank account selected and successfully assigned to the order.",
}
152 changes: 152 additions & 0 deletions website_payment_acquirer_bank_account/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * website_payment_acquirer_bank_account
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-17 13:34+0000\n"
"PO-Revision-Date: 2024-10-17 13:34+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__name
msgid "Account Name"
msgstr "Nombre de la cuenta"

#. module: website_payment_acquirer_bank_account
#: model:ir.model,name:website_payment_acquirer_bank_account.model_res_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_sale_order__bank_account_id
msgid "Bank Account"
msgstr "Cuenta bancaria"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_fsm_location__bank_account_ids
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_fsm_person__bank_account_ids
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_partner__bank_account_ids
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_users__bank_account_ids
msgid "Bank Accounts"
msgstr "Cuentas bancarias"

#. module: website_payment_acquirer_bank_account
#: code:addons/website_payment_acquirer_bank_account/controllers/main.py:0
#, python-format
msgid "Bank account saved successfully"
msgstr "Cuenta bancaria guardada con éxito"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,help:website_payment_acquirer_bank_account.field_sale_order__bank_account_id
msgid "Bank account selected for the payment."
msgstr "Cuenta bancaria seleccionada para el pago."

#. module: website_payment_acquirer_bank_account
#: model:ir.model,name:website_payment_acquirer_bank_account.model_res_partner
msgid "Contact"
msgstr "Contacto"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__create_uid
msgid "Created by"
msgstr "Creado por"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__create_date
msgid "Created on"
msgstr "Creado en"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__display_name
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_partner__display_name
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_sale_order__display_name
msgid "Display Name"
msgstr "Nombre mostrado"

#. module: website_payment_acquirer_bank_account
#: model_terms:ir.ui.view,arch_db:website_payment_acquirer_bank_account.payment_tokens_list
msgid "Guardar"
msgstr "Guardar"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__id
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_partner__id
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_sale_order__id
msgid "ID"
msgstr "ID"

#. module: website_payment_acquirer_bank_account
#: model_terms:ir.ui.view,arch_db:website_payment_acquirer_bank_account.payment_tokens_list
msgid "Ingrese una nueva cuenta bancaria (20 dígitos):"
msgstr "Ingrese una nueva cuenta bancaria (20 dígitos):"

#. module: website_payment_acquirer_bank_account
#: model_terms:ir.ui.view,arch_db:website_payment_acquirer_bank_account.payment_tokens_list
msgid "Introduce 20 dígitos"
msgstr "Introduce 20 dígitos"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account____last_update
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_partner____last_update
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_sale_order____last_update
msgid "Last Modified on"
msgstr "Última modificación el"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__write_date
msgid "Last Updated on"
msgstr "Última actualización el"

#. module: website_payment_acquirer_bank_account
#: model_terms:ir.ui.view,arch_db:website_payment_acquirer_bank_account.payment_tokens_list
msgid "Método de Pago:"
msgstr "Método de Pago:"

#. module: website_payment_acquirer_bank_account
#: model:ir.model.fields,field_description:website_payment_acquirer_bank_account.field_res_bank_account__partner_id
msgid "Partner"
msgstr "Socio"

#. module: website_payment_acquirer_bank_account
#: code:addons/website_payment_acquirer_bank_account/controllers/main.py:0
#, python-format
msgid "Payment mode ID is missing"
msgstr "El ID del modo de pago falta"

#. module: website_payment_acquirer_bank_account
#: code:addons/website_payment_acquirer_bank_account/models/sale_order.py:0
#, python-format
msgid "Please select a bank account."
msgstr "Por favor, seleccione una cuenta bancaria."

#. module: website_payment_acquirer_bank_account
#: model:ir.model,name:website_payment_acquirer_bank_account.model_sale_order
msgid "Sales Order"
msgstr "Pedido de venta"

#. module: website_payment_acquirer_bank_account
#: model_terms:ir.ui.view,arch_db:website_payment_acquirer_bank_account.payment_tokens_list
msgid "Selecciona una cuenta bancaria existente:"
msgstr "Selecciona una cuenta bancaria existente:"

#. module: website_payment_acquirer_bank_account
#: code:addons/website_payment_acquirer_bank_account/controllers/main.py:0
#, python-format
msgid "The bank account already exists"
msgstr "La cuenta bancaria ya existe"

#. module: website_payment_acquirer_bank_account
#: code:addons/website_payment_acquirer_bank_account/controllers/main.py:0
#, python-format
msgid "The bank account number must have exactly 20 digits."
msgstr "El número de cuenta bancaria debe tener exactamente 20 dígitos."
3 changes: 3 additions & 0 deletions website_payment_acquirer_bank_account/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import res_bank_account
from . import res_partner
from . import sale_order
Loading

0 comments on commit b71d76f

Please sign in to comment.