diff --git a/customer_credit_payment_website/README.rst b/customer_credit_payment_website/README.rst new file mode 100644 index 000000000..33c5b1930 --- /dev/null +++ b/customer_credit_payment_website/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Customer Credit Payment In Website +================================== +* Assign the credit amount from the website and the sales + +Configuration +============ + - www.odoo.com/documentation/18.0/setup/install.html + - Install our custom addon + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +Affero General Public License v3.0 (AGPL v3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +* Developer: (V18) NIHALA KP, 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 +-------- +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com" + +Further Information +----------- +HTML Description: ``__ diff --git a/customer_credit_payment_website/__init__.py b/customer_credit_payment_website/__init__.py new file mode 100644 index 000000000..1be308a9b --- /dev/null +++ b/customer_credit_payment_website/__init__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from . import controllers +from . import models + +from odoo.addons.payment import setup_provider, reset_payment_provider + + +def post_init_hook(env): + setup_provider(env, 'credit_pay') + + +def uninstall_hook(env): + reset_payment_provider(env, 'credit_pay') diff --git a/customer_credit_payment_website/__manifest__.py b/customer_credit_payment_website/__manifest__.py new file mode 100644 index 000000000..eb18b355f --- /dev/null +++ b/customer_credit_payment_website/__manifest__.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +{ + 'name': 'Customer Credit Payment In Website', + 'version': '18.0.1.0.0', + 'category': 'Website', + 'summary': """Assign the credit amount from the website and the sales""", + 'description': 'This is a module used to assign the credit to the customer' + ' in the website and also from the sales.', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['sale_management', 'purchase', + 'product', 'website_sale', 'payment', 'payment_demo' + ], + 'data': [ + 'security/ir.model.access.csv', + 'security/website_credit_payment_security.xml', + 'data/website_data.xml', + 'data/product_data.xml', + 'views/credit_amount_views.xml', + 'views/credit_details_views.xml', + 'views/credit_payment_views.xml', + 'views/sale_views.xml', + 'views/sale_order_views.xml', + 'views/res_partner_views.xml', + 'views/customer_credit_payment_website_templates.xml', + 'views/restrict_message_template.xml', + 'views/payment_demo_templates.xml', + 'views/payment_token_views.xml', + 'views/payment_transaction_views.xml', + 'data/payment_method_data.xml', + 'data/payment_provider_data.xml', + ], + 'post_init_hook': 'post_init_hook', + 'uninstall_hook': 'uninstall_hook', + 'assets': { + 'web.assets_frontend': [ + 'customer_credit_payment_website/static/src/js/**/*', + ], + }, + 'images': [ + 'static/description/banner.jpg', + ], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': True, +} diff --git a/customer_credit_payment_website/controllers/__init__.py b/customer_credit_payment_website/controllers/__init__.py new file mode 100644 index 000000000..a06fe4d9c --- /dev/null +++ b/customer_credit_payment_website/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from . import customer_credit_payment_website +from . import website_sale diff --git a/customer_credit_payment_website/controllers/customer_credit_payment_website.py b/customer_credit_payment_website/controllers/customer_credit_payment_website.py new file mode 100644 index 000000000..d795650a3 --- /dev/null +++ b/customer_credit_payment_website/controllers/customer_credit_payment_website.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from odoo import http +from odoo.http import request + + +class CreditDetails(http.Controller): + """ Controllers to get the credit details and the credit amount of each + partner.""" + + @http.route('/credit/details', type='http', auth='public', website=True, + csrf=False) + def credit_details(self, **post): + """ Get the credit amount for each user and return the credit payment + page.""" + credit_amount = request.env.user.credit_amount + return request.render( + 'customer_credit_payment_website.credit_payment_page', + {'credit_amount': credit_amount}) + + @http.route('/add/credit/balance', type='http', auth='public', website=True, + csrf=False) + def add_credit_balance(self, **post): + """ Add the credit amount from the website.""" + return request.render( + 'customer_credit_payment_website.add_credit_payment_page') + + +class PaymentCreditPayController(http.Controller): + _simulation_url = '/payment/credit_pay/simulate_payment' + + @http.route('/payment/credit_pay/simulate_payment', type='json', + auth='public') + def credit_pay_simulate_payment(self, **data): + """ Simulate the response of a payment request. + + :param dict data: The simulated notification data. + :return: None + """ + return request.env[ + 'payment.transaction'].sudo()._handle_notification_data( + 'credit_pay', data.get('args')) diff --git a/customer_credit_payment_website/controllers/website_sale.py b/customer_credit_payment_website/controllers/website_sale.py new file mode 100644 index 000000000..931a2c99d --- /dev/null +++ b/customer_credit_payment_website/controllers/website_sale.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from datetime import datetime +from odoo import http +from odoo.http import request +from odoo.addons.website_sale.controllers.main import WebsiteSale + + +class WebsiteSaleInherit(WebsiteSale): + """Custom class inheriting from WebsiteSale to implement additional + features.""" + + @http.route(['/shop/cart'], type='http', auth="public", website=True, + sitemap=False) + def cart(self, **post): + """ + Override of the controller for updating the product amount in the + shopping cart. + """ + order = request.website.sale_get_order(force_create=True) + res_super = super(WebsiteSaleInherit, self).cart(**post) + amount = post.get('amount') + if amount: + product_id = request.env.ref( + 'customer_credit_payment_website.credit_product_0').id + order.update({ + 'credit_amount_sale': amount, + 'order_line': [(5, 0, 0), (0, 0, { + 'product_id': product_id, + 'price_unit': amount, + 'tax_id': False, + })] + }) + res_super.qcontext.update({ + 'website_sale_order': order, + 'amount': amount, + }) + return res_super + + @http.route(['/shop/confirm_order'], type='http', auth="public", + website=True, sitemap=False) + def confirm_order(self, **post): + """ Override the function to update the amount for the credit amount + that purchase from the website.""" + order = request.website.sale_get_order() + if not order: + return request.redirect('/shop') + product_id = request.env.ref( + 'customer_credit_payment_website.credit_product_0').id + if redirection := self._check_cart_and_addresses(order): + return redirection + order.order_line._compute_tax_id() + request.session['sale_last_order_id'] = order.id + request.website.sale_get_order() + extra_step = request.website.viewref('website_sale.extra_info') + if extra_step.active: + return request.redirect("/shop/extra_info") + if order.credit_amount_sale: + order.update({ + 'order_line': [(5, 0, 0), (0, 0, { + 'product_id': product_id, + 'price_unit': order.credit_amount_sale, + })] + }) + return request.redirect("/shop/payment") + + @http.route(['/shop/confirmation'], type='http', auth="public", + website=True, sitemap=False) + def shop_payment_confirmation(self, **post): + """ End of checkout process controller. Confirmation is basically seeing + the status of a sale.order. """ + sale_order_id = request.session.get('sale_last_order_id') + if not sale_order_id: + return request.redirect('/shop') + order = request.env['sale.order'].sudo().browse(sale_order_id) + user_id = request.env.user + partner = user_id.partner_id + order_amount_total = order.amount_total + payment_transaction = request.env['payment.transaction'].search( + [('reference', '=', order.name)]) + payment_transaction_id = payment_transaction.provider_id + credit_product_id = request.env.ref( + 'customer_credit_payment_website.credit_product_0').id + credit_payment_provider_id = request.env.ref( + 'customer_credit_payment_website.payment_provider_credit').id + has_credit_product = any( + line.product_id.id == credit_product_id for line in + order.order_line) + if (has_credit_product and + payment_transaction_id.id != credit_payment_provider_id): + request.env['credit.amount'].create({ + 'customer_id': partner.id, + 'amount': order_amount_total + }) + elif (not has_credit_product and + payment_transaction_id.id == credit_payment_provider_id): + if order.amount_total < partner.credit_amount: + credit_detail = request.env['credit.details'].search( + [('customer_id', '=', partner.id)]) + credit_detail.write({ + 'debit_details_ids': [(0, 0, { + 'debit_amount': -order_amount_total, + 'approve_date': datetime.now(), + 'updated_amount': + -order_amount_total + credit_detail.debit_amount, + 'previous_debit_amount': credit_detail.debit_amount, + })] + }) + elif order.amount_total > partner.credit_amount: + if not partner.allow_credit_amount: + return request.render( + 'customer_credit_payment_website.credit_error_details', + {'name': order.name}) + else: + credit_detail = request.env['credit.details'].search( + [('customer_id', '=', partner.id)]) + credit_detail.write({ + 'debit_details_ids': [(0, 0, { + 'debit_amount': -order_amount_total, + 'approve_date': datetime.now(), + 'previous_debit_amount': credit_detail.debit_amount, + 'updated_amount': + -order_amount_total + credit_detail.debit_amount, + })] + }) + values = self._prepare_shop_payment_confirmation_values(order) + return request.render("website_sale.confirmation", values) diff --git a/customer_credit_payment_website/data/payment_method_data.xml b/customer_credit_payment_website/data/payment_method_data.xml new file mode 100644 index 000000000..90c711a7e --- /dev/null +++ b/customer_credit_payment_website/data/payment_method_data.xml @@ -0,0 +1,13 @@ + + + + + credit pay + credit_pay + True + 200 + + False + False + + diff --git a/customer_credit_payment_website/data/payment_provider_data.xml b/customer_credit_payment_website/data/payment_provider_data.xml new file mode 100644 index 000000000..308055108 --- /dev/null +++ b/customer_credit_payment_website/data/payment_provider_data.xml @@ -0,0 +1,21 @@ + + + + + Credit payment + 45 + + credit_pay + + + True + + + + diff --git a/customer_credit_payment_website/data/product_data.xml b/customer_credit_payment_website/data/product_data.xml new file mode 100644 index 000000000..d1fc4204c --- /dev/null +++ b/customer_credit_payment_website/data/product_data.xml @@ -0,0 +1,19 @@ + + + + + + Credit Product + + service + 1.0 + order + 1.0 + + + + + + + + diff --git a/customer_credit_payment_website/data/website_data.xml b/customer_credit_payment_website/data/website_data.xml new file mode 100644 index 000000000..0661f4250 --- /dev/null +++ b/customer_credit_payment_website/data/website_data.xml @@ -0,0 +1,12 @@ + + + + + + Credit + /credit/details + + 80 + + + diff --git a/customer_credit_payment_website/doc/RELEASE_NOTES.md b/customer_credit_payment_website/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..3f8ca4115 --- /dev/null +++ b/customer_credit_payment_website/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 18.02.2025 +#### Version 18.0.1.0.0 +#### ADD +- Initial commit for Customer Credit Payment In Website diff --git a/customer_credit_payment_website/models/__init__.py b/customer_credit_payment_website/models/__init__.py new file mode 100644 index 000000000..fd3bc765b --- /dev/null +++ b/customer_credit_payment_website/models/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from . import credit_amount +from . import credit_details +from . import credit_payment +from . import payment_provider +from . import payment_token +from . import payment_transaction +from . import res_partner +from . import sale_order_line diff --git a/customer_credit_payment_website/models/credit_amount.py b/customer_credit_payment_website/models/credit_amount.py new file mode 100644 index 000000000..1ad197b0f --- /dev/null +++ b/customer_credit_payment_website/models/credit_amount.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from datetime import datetime +from odoo import fields, models + + +class CreditAmount(models.Model): + """ + Model for managing credit amounts associated with customers. + """ + _name = "credit.amount" + _description = "Credit Amount" + _rec_name = 'customer_id' + + customer_id = fields.Many2one( + 'res.partner', string='Customer', required=1, + help='Reference to the associated customer/partner.') + amount = fields.Float(string="Amount", + help='The monetary amount associated with this ' + 'record.') + approve_date = fields.Datetime( + 'Approve Date', default=datetime.today(), + help='Date and time when the record was approved.') + state = fields.Selection( + [('to_approve', 'Waiting for approve'), ('approved', 'Approved'), ], + string='Stage', readonly=True, copy=False, + index=True, tracking=3, default='to_approve', + help='Current stage of the record, indicating whether it is waiting ' + 'for approval or already approved.') + hide_approve = fields.Boolean( + 'Approve', default=False, invisible="1", + help='Boolean field indicating whether the approval action should be ' + 'hidden or visible.') + + def action_approve(self): + """ + Approves the credit amount and updates associated credit details. + + :return: None + """ + self.state = 'approved' + self.hide_approve = True + credit_details = self.env['credit.details'].search( + [('customer_id', '=', self.customer_id.id)]) + if credit_details: + previous_amt = credit_details.credit_amount + credit_details.write({ + 'updated_amount':self.amount, + '_is_amount_updated': False, + 'credit_details_ids': [(0, 0, { + 'amount': self.amount, + 'customer_id': credit_details.customer_id.id, + 'previous_credit_amount': previous_amt, + 'approve_date': self.approve_date, + 'updated_amount': self.amount + previous_amt, + 'credit_id': credit_details.id, + + })] + }) + else: + self.env['credit.details'].create({ + 'customer_id': self.customer_id.id, + 'updated_amount': self.amount, + 'credit_details_ids': [(0, 0, { + 'customer_id': self.customer_id.id, + 'amount': self.amount, + 'previous_credit_amount': 0.0, + 'approve_date': self.approve_date, + 'updated_amount': self.amount, })] + }) diff --git a/customer_credit_payment_website/models/credit_details.py b/customer_credit_payment_website/models/credit_details.py new file mode 100644 index 000000000..4e0ba06f0 --- /dev/null +++ b/customer_credit_payment_website/models/credit_details.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from datetime import datetime +from odoo import fields, models + + +class CreditDetails(models.Model): + """ + Model for managing credit details associated with customers. + """ + _name = "credit.details" + _description = "Credit Details" + _rec_name = 'customer_id' + + credit_id = fields.Many2one( + 'credit.amount', + help='Reference to the associated credit amount record.') + customer_id = fields.Many2one( + 'res.partner', string='Customer', + help='Reference to the associated customer/partner.') + credit_amount = fields.Float( + "Credit", compute='_compute_credit_amount', + help='Representing the total credit amount associated with this ' + 'record.') + debit_amount = fields.Float( + "Debit", compute='_compute_debit_amount', + help='Representing the total debit amount associated with this record.') + credit_details_amount = fields.Float( + "Credit Details", compute='_compute_credit_details_amount', + help='Representing the total credit details amount associated with ' + 'this record.') + updated_amount = fields.Float( + "Update", help='Field used for updating the credit amount.') + credit_details_ids = fields.One2many( + 'credit.detail.lines', 'credit_id', + help='Credit detail lines associated with this record.') + debit_details_ids = fields.One2many( + 'debit.detail.lines', 'debit_id', + help='Debit detail lines associated with this record.') + _is_amount_updated = fields.Boolean( + string='to check whether the credit is updated with accounts') + + def _compute_credit_amount(self): + """ Function to compute the credit amount """ + for rec in self: + rec.credit_amount = 0.0 + if rec.credit_details_ids: + rec.credit_amount = sum( + rec.credit_details_ids.mapped('amount')) + + def _compute_debit_amount(self): + """"" Function to compute the debit amount """ + for rec in self: + rec.debit_amount = 0.0 + if rec.debit_details_ids: + rec.debit_amount = sum( + rec.debit_details_ids.mapped('debit_amount')) + + def _compute_credit_details_amount(self): + """ Function to compute the credit details amount """ + for rec in self: + rec.credit_details_amount = 0.0 + rec.credit_details_amount = rec.credit_amount + rec.debit_amount + + def _compute_amount_updated(self): + for rec in self: + if rec.credit_details_ids.mapped( + 'previous_credit_amount').pop() < rec.credit_details_amount: + rec._is_amount_updated = True + + def action_update_account(self): + """ Function to update the amount in the account payment""" + self._is_amount_updated = True + return { + 'name': 'Credit Payment', + 'view_mode': 'form', + 'res_model': 'credit.payment', + 'type': 'ir.actions.act_window', + 'context': {'default_partner_id': self.customer_id.id, + 'default_credit_amount': self.credit_details_ids.mapped( + 'amount').pop(), + 'default_payment_journal': self.env[ + 'account.journal'].search([('type', '=', 'bank')], + limit=1).id, + 'default_credit_detail_id': self.id, + }, + 'target': 'new' + } + + +class CreditDetailsLines(models.Model): + """ Model for managing credit detail lines associated with credit details""" + _name = "credit.detail.lines" + _description = "Credit Detail Lines" + + credit_id = fields.Many2one('credit.details', string=" Credit Id", + help="Credit detail associate with this " + "record.") + customer_id = fields.Many2one('res.partner', string="Customer details", + help="Customer details") + amount = fields.Float(string='Amount', + help="Total credit amount associated with the " + "partner.") + previous_credit_amount = fields.Float(string='Previous Credit Amount', + help='The previous credit amount') + approve_date = fields.Datetime(string='Approve Date', + default=datetime.today(), + help='Approved date of the credit amount') + updated_amount = fields.Float(string='Updated Amount', + help='Updated amount') + + +class DebitDetailsLines(models.Model): + """ Model for managing debit detail lines associated with credit details """ + _name = "debit.detail.lines" + _description = "Debit Detail lines" + + debit_id = fields.Many2one('credit.details', string=" Credit Id", + help="Credit detail associate with this record.") + customer_id = fields.Many2one('res.partner', string="Customer details", + help="Customer details") + debit_amount = fields.Float(string='Amount', + help="Total credit amount associated with the " + "partner.") + previous_debit_amount = fields.Float(string='Previous Debit Amount', + help='The previous credit amount') + approve_date = fields.Datetime('Approve Date', default=datetime.today(), + help='Approved date of the credit amount') + updated_amount = fields.Float(string='Updated Amount', + help='Updated amount') diff --git a/customer_credit_payment_website/models/credit_payment.py b/customer_credit_payment_website/models/credit_payment.py new file mode 100644 index 000000000..756aca493 --- /dev/null +++ b/customer_credit_payment_website/models/credit_payment.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from odoo import fields, models +from datetime import date + + +class CreditPayment(models.TransientModel): + """ + Transient Model for managing credit payments in the payment journal. + """ + _name = "credit.payment" + _description = "Credit Payment" + + payment_journal = fields.Many2one('account.journal', + string='Payment Journal', readonly=1, + help='Represents the payment journal ' + 'associated with the record.') + credit_amount = fields.Float('Credit Amount', + help='Credit amount to update the journal') + partner_id = fields.Many2one('res.partner', help="customer value") + credit_detail_id = fields.Many2one('credit.details', help="credit details here") + + def action_submit(self): + """ + Create and submit an inbound payment for the current record. + Returns: account.payment: The newly created payment record. + """ + payment_id = self.env['account.payment'].sudo().create({ + 'payment_type': 'inbound', + 'payment_method_id': self.env.ref( + 'account.account_payment_method_manual_in').id, + 'payment_method_line_id': self.env.ref( + 'account.account_payment_method_manual_in').id, + 'partner_type': 'customer', + 'partner_id': self.partner_id.id, + 'amount': self.credit_amount, + 'date': date.today(), + 'journal_id': self.payment_journal.id, + }) + payment_id.action_post() diff --git a/customer_credit_payment_website/models/payment_provider.py b/customer_credit_payment_website/models/payment_provider.py new file mode 100644 index 000000000..6123f9751 --- /dev/null +++ b/customer_credit_payment_website/models/payment_provider.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class PaymentProvider(models.Model): + """ Inherits the payment provider to add the credit payment """ + _inherit = 'payment.provider' + + code = fields.Selection(selection_add=[('credit_pay', 'Credit Payment')], + ondelete={'credit_pay': 'set default'}) + + # === COMPUTE METHODS ===# + + @api.depends('code') + def _compute_view_configuration_fields(self): + """ Override of payment to hide the credentials page. + + :return: None + """ + super()._compute_view_configuration_fields() + self.filtered( + lambda p: p.code == 'credit_pay').show_credentials_page = False + + def _compute_feature_support_fields(self): + """ Override of `payment` to enable additional features. """ + super()._compute_feature_support_fields() + self.filtered(lambda p: p.code == 'credit_pay').update({ + 'support_manual_capture': 'partial', + 'support_refund': 'partial', + 'support_tokenization': True, + }) + + # === CONSTRAINT METHODS ===# + + @api.constrains('state', 'code') + def _check_provider_state(self): + if self.filtered(lambda p: p.code == 'credit_pay' and p.state not in ( + 'test', 'disabled')): + raise UserError(_("Demo providers should never be enabled.")) diff --git a/customer_credit_payment_website/models/payment_token.py b/customer_credit_payment_website/models/payment_token.py new file mode 100644 index 000000000..3e7abd63c --- /dev/null +++ b/customer_credit_payment_website/models/payment_token.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### + +from odoo import fields, models + + +class PaymentToken(models.Model): + """ Inherits the 'payment.token' """ + _inherit = 'payment.token' + + credit_pay_simulated_state = fields.Selection( + string="Simulated State", + help="The state in which transactions created from this token should " + "be set.", + selection=[ + ('pending', "Pending"), + ('done', "Confirmed"), + ('cancel', "Canceled"), + ('error', "Error"), + ], + ) + + def _build_display_name(self, *args, should_pad=True, **kwargs): + """ Override of `payment` to build the display name without padding. + + Note: self.ensure_one() + + :param list args: The arguments passed by QWeb when calling this method. + :param bool should_pad: Whether the token should be padded or not. + :param dict kwargs: Optional data. + :return: The demo token name. + :rtype: str + """ + if self.provider_code != 'credit_pay': + return super()._build_display_name(*args, should_pad=should_pad, + **kwargs) + return super()._build_display_name(*args, should_pad=False, **kwargs) diff --git a/customer_credit_payment_website/models/payment_transaction.py b/customer_credit_payment_website/models/payment_transaction.py new file mode 100644 index 000000000..dccfbaa07 --- /dev/null +++ b/customer_credit_payment_website/models/payment_transaction.py @@ -0,0 +1,254 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +import logging + +from odoo import _, fields, models +from odoo.exceptions import UserError, ValidationError + +_logger = logging.getLogger(__name__) + + +class PaymentTransaction(models.Model): + _inherit = 'payment.transaction' + + capture_manually = fields.Boolean(related='provider_id.capture_manually') + + # === ACTION METHODS ===# + + def action_credit_pay_set_done(self): + """ Set the state of the credit_pay transaction to 'done'. + + Note: self.ensure_one() + + :return: None + """ + self.ensure_one() + if self.provider_code != 'credit_pay': + return + + notification_data = {'reference': self.reference, + 'simulated_state': 'done'} + self._handle_notification_data('credit_pay', notification_data) + + def action_credit_pay_set_canceled(self): + """ Set the state of the credit_pay transaction to 'cancel'. + + Note: self.ensure_one() + + :return: None + """ + self.ensure_one() + if self.provider_code != 'credit_pay': + return + + notification_data = {'reference': self.reference, + 'simulated_state': 'cancel'} + self._handle_notification_data('credit_pay', notification_data) + + def action_credit_pay_set_error(self): + """ Set the state of the credit_pay transaction to 'error'. + + Note: self.ensure_one() + + :return: None + """ + self.ensure_one() + if self.provider_code != 'credit_pay': + return + + notification_data = {'reference': self.reference, + 'simulated_state': 'error'} + self._handle_notification_data('credit_pay', notification_data) + + # === BUSINESS METHODS ===# + + def _send_payment_request(self): + """ Override of payment to simulate a payment request. + + Note: self.ensure_one() + + :return: None + """ + super()._send_payment_request() + if self.provider_code != 'credit_pay': + return + + if not self.token_id: + raise UserError( + "Demo: " + _("The transaction is not linked to a token.")) + + simulated_state = self.token_id.credit_pay_simulated_state + notification_data = {'reference': self.reference, + 'simulated_state': simulated_state} + self._handle_notification_data('credit_pay', notification_data) + + def _send_refund_request(self, **kwargs): + """ Override of payment to simulate a refund. + + Note: self.ensure_one() + + :param dict kwargs: The keyword arguments. + :return: The refund transaction created to process the refund request. + :rtype: recordset of `payment.transaction` + """ + refund_tx = super()._send_refund_request(**kwargs) + if self.provider_code != 'credit_pay': + return refund_tx + + notification_data = {'reference': refund_tx.reference, + 'simulated_state': 'done'} + refund_tx._handle_notification_data('credit_pay', notification_data) + + return refund_tx + + def _send_capture_request(self): + """ Override of payment to simulate a capture request. + + Note: self.ensure_one() + + :return: None + """ + super()._send_capture_request() + if self.provider_code != 'credit_pay': + return + + notification_data = { + 'reference': self.reference, + 'simulated_state': 'done', + 'manual_capture': True, + # Distinguish manual captures from regular one-step captures. + } + self._handle_notification_data('credit_pay', notification_data) + + def _send_void_request(self): + """ Override of payment to simulate a void request. + + Note: self.ensure_one() + + :return: None + """ + super()._send_void_request() + if self.provider_code != 'credit_pay': + return + + notification_data = {'reference': self.reference, + 'simulated_state': 'cancel'} + self._handle_notification_data('credit_pay', notification_data) + + def _get_tx_from_notification_data(self, provider_code, notification_data): + """ Override of payment to find the transaction based on dummy data. + + :param str provider_code: The code of the provider that handled the + transaction :param dict notification_data: The dummy notification + data :return: The transaction if found :rtype: recordset of + `payment.transaction` :raise: ValidationError if the data match no + transaction + """ + tx = super()._get_tx_from_notification_data(provider_code, + notification_data) + if provider_code != 'credit_pay' or len(tx) == 1: + return tx + + reference = notification_data.get('reference') + tx = self.search([('reference', '=', reference), + ('provider_code', '=', 'credit_pay')]) + if not tx: + raise ValidationError( + "Demo: " + _("No transaction found matching reference %s.", + reference) + ) + return tx + + def _process_notification_data(self, notification_data): + """ Override of payment to process the transaction based on dummy data. + + Note: self.ensure_one() + + :param dict notification_data: The dummy notification data + :return: None + :raise: ValidationError if inconsistent data were received + """ + super()._process_notification_data(notification_data) + if self.provider_code != 'credit_pay': + return + + self.provider_reference = f'credit_pay-{self.reference}' + + if self.tokenize: + # The reasons why we immediately tokenize the transaction + # regardless of the state rather than waiting for the payment + # method to be validated ('authorized' or 'done') like the other + # payment providers do are: - To save the simulated state and + # payment details on the token while we have them. - To allow + # customers to create tokens whose transactions will always end + # up in the said simulated state. + self._credit_pay_tokenize_from_notification_data(notification_data) + + state = notification_data['simulated_state'] + if state == 'pending': + self._set_pending() + elif state == 'done': + if self.capture_manually and not notification_data.get( + 'manual_capture'): + self._set_authorized() + else: + self._set_done() + # Immediately post-process the transaction if it is a refund, + # as the post-processing will not be triggered by a customer + # browsing the transaction from the portal. + if self.operation == 'refund': + self.env.ref( + 'payment.cron_post_process_payment_tx')._trigger() + elif state == 'cancel': + self._set_canceled() + else: # Simulate an error state. + self._set_error( + _("You selected the following credit_pay payment status: %s", + state)) + + def _credit_pay_tokenize_from_notification_data(self, notification_data): + """ Create a new token based on the notification data. + + Note: self.ensure_one() + + :param dict notification_data: The fake notification data to tokenize + from. :return: None + """ + self.ensure_one() + + state = notification_data['simulated_state'] + token = self.env['payment.token'].create({ + 'provider_id': self.provider_id.id, + 'payment_details': notification_data['payment_details'], + 'partner_id': self.partner_id.id, + 'provider_ref': 'fake provider reference', + 'verified': True, + 'credit_pay_simulated_state': state, + }) + self.write({ + 'token_id': token, + 'tokenize': False, + }) + _logger.info( + "Created token with id %s for partner with id %s.", token.id, + self.partner_id.id + ) diff --git a/customer_credit_payment_website/models/res_partner.py b/customer_credit_payment_website/models/res_partner.py new file mode 100644 index 000000000..19bfbc11b --- /dev/null +++ b/customer_credit_payment_website/models/res_partner.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from odoo import fields, models + + +class ResPartner(models.Model): + """ + Inherited Model res partner adding the credit details. + """ + _inherit = "res.partner" + + credit_amount = fields.Float(compute='_compute_credit_amount', + string='Credit Amount', + help='Here the credit amount for the ' + 'associated customer.') + allow_credit_amount = fields.Boolean( + string='Allow credit payment when Order Amount is More Than Credit ' + 'Balance', + help='Field allows the customer to purchase if the credit amount is ' + 'insufficient.') + cust_credit_line_ids = fields.One2many('credit.detail.lines', 'customer_id', + string='Credit Details', + help='Credit details associated ' + 'with the customer') + + def _compute_credit_amount(self): + """ Compute function to get the credit amount of the associated + customer""" + for record in self: + credit_count = self.env['credit.details'].search( + [('customer_id', '=', record.id)]) + record.credit_amount = credit_count.credit_details_amount + + def credit_details(self): + """ Function to return the credit details associated with the + customer.""" + return { + 'name': 'Credits', + 'view_type': 'form', + 'view_mode': 'list,form', + 'res_model': 'credit.details', + 'type': 'ir.actions.act_window', + 'domain': [('customer_id', '=', self.id)] + } + + +class CustomerCreditDetails(models.Model): + """ Model to get the customer credit details """ + _name = 'customer.credit.details' + _description = "Customer Credit Details" + + customer_credit_id = fields.Many2one('res.partner', string='Customer Id', + help='To attach with the customer ' + 'model') + customer_credit_details_id = fields.Many2one('credit.detail.lines', + string='Customer Credit ' + 'Details', + help='The field to get the ' + 'customer credit details') + date = fields.Date(string='Date', + help='The date field for the associated credit detail ' + 'lines.') + amount = fields.Float(string='Amount', + help='To get the credit amount for the partner') + previous_credit_amount = fields.Float(string='Previous Credit Amount', + help='The previous credit amount ' + 'associated with the partner.') + updated_amount = fields.Float('Updated Amount', + help='The Updated amount associated with ' + 'the partner.') + + +class AccountPayment(models.Model): + """ Inherited the Model "account.payment" to add the customer details """ + _inherit = "account.payment" + _description = "Account Payment" + + customer_credit_payment_id = fields.Many2one('res.partner', + string='Customer', + help='The customer details ' + 'add to the account ' + 'payment.') diff --git a/customer_credit_payment_website/models/sale_order_line.py b/customer_credit_payment_website/models/sale_order_line.py new file mode 100644 index 000000000..e10dc7a9c --- /dev/null +++ b/customer_credit_payment_website/models/sale_order_line.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra K (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 . +# +############################################################################### +from odoo import fields, models + + +class SaleOrder(models.Model): + """ Inherited SaleOrder to add the field""" + _inherit = 'sale.order' + + credit_amount_sale = fields.Float(string='Credit amount website', + help='The credit amount used in the ' + 'website') diff --git a/customer_credit_payment_website/security/ir.model.access.csv b/customer_credit_payment_website/security/ir.model.access.csv new file mode 100644 index 000000000..72e4f25f4 --- /dev/null +++ b/customer_credit_payment_website/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_credit_amount,access.credit.amount,model_credit_amount,base.group_user,1,1,1,1 +access_credit_details,access.credit.details,model_credit_details,base.group_user,1,1,1,1 +access_credit_detail_lines,access.credit.detail.lines,model_credit_detail_lines,base.group_user,1,1,1,1 +access_debit_detail_lines,access.debit.detail.lines,model_debit_detail_lines,base.group_user,1,1,1,1 +access_customer_credit_details,access.customer.credit.details,model_customer_credit_details,base.group_user,1,1,1,1 +access_credit_payment,access.credit.payment,model_credit_payment,base.group_user,1,1,1,1 diff --git a/customer_credit_payment_website/security/website_credit_payment_security.xml b/customer_credit_payment_website/security/website_credit_payment_security.xml new file mode 100644 index 000000000..90ab7338c --- /dev/null +++ b/customer_credit_payment_website/security/website_credit_payment_security.xml @@ -0,0 +1,7 @@ + + + + + Credit Payment Approval + + diff --git a/customer_credit_payment_website/static/description/assets/icons/arrows-repeat.svg b/customer_credit_payment_website/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-1.png b/customer_credit_payment_website/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/banner-1.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-2.svg b/customer_credit_payment_website/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-bg.png b/customer_credit_payment_website/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/banner-bg.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-bg.svg b/customer_credit_payment_website/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-call.svg b/customer_credit_payment_website/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-mail.svg b/customer_credit_payment_website/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-pattern.svg b/customer_credit_payment_website/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/banner-promo.svg b/customer_credit_payment_website/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/brand-pair.svg b/customer_credit_payment_website/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/check.png b/customer_credit_payment_website/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/check.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/chevron.png b/customer_credit_payment_website/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/chevron.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/close-icon.svg b/customer_credit_payment_website/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/cogs.png b/customer_credit_payment_website/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/cogs.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/collabarate-icon.svg b/customer_credit_payment_website/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/consultation.png b/customer_credit_payment_website/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/consultation.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/cybro-logo.png b/customer_credit_payment_website/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/cybro-logo.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/down.svg b/customer_credit_payment_website/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/customer_credit_payment_website/static/description/assets/icons/ecom-black.png b/customer_credit_payment_website/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/ecom-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/education-black.png b/customer_credit_payment_website/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/education-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/faq.png b/customer_credit_payment_website/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/faq.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/feature-icon.svg b/customer_credit_payment_website/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/feature.png b/customer_credit_payment_website/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/feature.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/gear.svg b/customer_credit_payment_website/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/hero.gif b/customer_credit_payment_website/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..380654dfe Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/hero.gif differ diff --git a/customer_credit_payment_website/static/description/assets/icons/hire-odoo.svg b/customer_credit_payment_website/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/hotel-black.png b/customer_credit_payment_website/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/hotel-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/license.png b/customer_credit_payment_website/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/license.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/life-ring-icon.svg b/customer_credit_payment_website/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/lifebuoy.png b/customer_credit_payment_website/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/lifebuoy.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/mail.svg b/customer_credit_payment_website/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/manufacturing-black.png b/customer_credit_payment_website/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/manufacturing-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/notes.png b/customer_credit_payment_website/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/notes.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/notification icon.svg b/customer_credit_payment_website/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/odoo-consultancy.svg b/customer_credit_payment_website/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/odoo-licencing.svg b/customer_credit_payment_website/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/odoo-logo.png b/customer_credit_payment_website/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/odoo-logo.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/patter.svg b/customer_credit_payment_website/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/pattern1.png b/customer_credit_payment_website/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/pattern1.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/pos-black.png b/customer_credit_payment_website/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/pos-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/puzzle-piece-icon.svg b/customer_credit_payment_website/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/puzzle.png b/customer_credit_payment_website/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/puzzle.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/replace-icon.svg b/customer_credit_payment_website/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/restaurant-black.png b/customer_credit_payment_website/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/restaurant-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/screenshot-main.png b/customer_credit_payment_website/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/screenshot-main.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/screenshot.png b/customer_credit_payment_website/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/screenshot.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/service-black.png b/customer_credit_payment_website/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/service-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/skype-fill.svg b/customer_credit_payment_website/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/skype.png b/customer_credit_payment_website/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/skype.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/skype.svg b/customer_credit_payment_website/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/star-1.svg b/customer_credit_payment_website/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/star-2.svg b/customer_credit_payment_website/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/support.png b/customer_credit_payment_website/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/support.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/test-1 - Copy.png b/customer_credit_payment_website/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/test-1 - Copy.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/test-1.png b/customer_credit_payment_website/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/test-1.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/test-2.png b/customer_credit_payment_website/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/test-2.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/trading-black.png b/customer_credit_payment_website/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/trading-black.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/training.png b/customer_credit_payment_website/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/training.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/translate.svg b/customer_credit_payment_website/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/update.png b/customer_credit_payment_website/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/update.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/user.png b/customer_credit_payment_website/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/user.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/video.png b/customer_credit_payment_website/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/video.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/whatsapp.png b/customer_credit_payment_website/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/whatsapp.png differ diff --git a/customer_credit_payment_website/static/description/assets/icons/wrench-icon.svg b/customer_credit_payment_website/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/customer_credit_payment_website/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/customer_credit_payment_website/static/description/assets/icons/wrench.png b/customer_credit_payment_website/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/icons/wrench.png differ diff --git a/customer_credit_payment_website/static/description/assets/modules/1.jpg b/customer_credit_payment_website/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..3cb15fe01 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/1.jpg differ diff --git a/customer_credit_payment_website/static/description/assets/modules/2.jpg b/customer_credit_payment_website/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..662cadcc3 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/2.jpg differ diff --git a/customer_credit_payment_website/static/description/assets/modules/3.png b/customer_credit_payment_website/static/description/assets/modules/3.png new file mode 100644 index 000000000..7c67e2eec Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/3.png differ diff --git a/customer_credit_payment_website/static/description/assets/modules/4.jpg b/customer_credit_payment_website/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..f85e160cd Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/4.jpg differ diff --git a/customer_credit_payment_website/static/description/assets/modules/4.png b/customer_credit_payment_website/static/description/assets/modules/4.png new file mode 100644 index 000000000..696582fa8 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/4.png differ diff --git a/customer_credit_payment_website/static/description/assets/modules/5.jpg b/customer_credit_payment_website/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..4bd9278e3 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/5.jpg differ diff --git a/customer_credit_payment_website/static/description/assets/modules/6.jpg b/customer_credit_payment_website/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..580ea075d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/6.jpg differ diff --git a/customer_credit_payment_website/static/description/assets/modules/6.png b/customer_credit_payment_website/static/description/assets/modules/6.png new file mode 100644 index 000000000..c55756590 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/modules/6.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/1.png b/customer_credit_payment_website/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..916406544 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/1.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/10.png b/customer_credit_payment_website/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..52ff4c6d5 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/10.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/11.png b/customer_credit_payment_website/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..052f4c140 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/11.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/12.png b/customer_credit_payment_website/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..2fc794acf Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/12.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/13.png b/customer_credit_payment_website/static/description/assets/screenshots/13.png new file mode 100644 index 000000000..03b496fdb Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/13.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/14.png b/customer_credit_payment_website/static/description/assets/screenshots/14.png new file mode 100644 index 000000000..769b08404 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/14.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/15.png b/customer_credit_payment_website/static/description/assets/screenshots/15.png new file mode 100644 index 000000000..a377c16ca Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/15.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/16.png b/customer_credit_payment_website/static/description/assets/screenshots/16.png new file mode 100644 index 000000000..f47b9983a Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/16.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/17.png b/customer_credit_payment_website/static/description/assets/screenshots/17.png new file mode 100644 index 000000000..bbc76c265 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/17.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/18.png b/customer_credit_payment_website/static/description/assets/screenshots/18.png new file mode 100644 index 000000000..d56766c0e Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/18.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/19.png b/customer_credit_payment_website/static/description/assets/screenshots/19.png new file mode 100644 index 000000000..4bf73b770 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/19.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/2.png b/customer_credit_payment_website/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..b5534d944 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/2.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/20.png b/customer_credit_payment_website/static/description/assets/screenshots/20.png new file mode 100644 index 000000000..588e1c888 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/20.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/21.png b/customer_credit_payment_website/static/description/assets/screenshots/21.png new file mode 100644 index 000000000..c2611f292 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/21.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/22.png b/customer_credit_payment_website/static/description/assets/screenshots/22.png new file mode 100644 index 000000000..348e13fb3 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/22.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/23.png b/customer_credit_payment_website/static/description/assets/screenshots/23.png new file mode 100644 index 000000000..f0cc71120 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/23.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/24.png b/customer_credit_payment_website/static/description/assets/screenshots/24.png new file mode 100644 index 000000000..bb7b3df79 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/24.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/25.png b/customer_credit_payment_website/static/description/assets/screenshots/25.png new file mode 100644 index 000000000..6346f3715 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/25.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/26.png b/customer_credit_payment_website/static/description/assets/screenshots/26.png new file mode 100644 index 000000000..5934ddd60 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/26.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/27.png b/customer_credit_payment_website/static/description/assets/screenshots/27.png new file mode 100644 index 000000000..64430201d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/27.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/28.png b/customer_credit_payment_website/static/description/assets/screenshots/28.png new file mode 100644 index 000000000..622b9e273 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/28.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/29.png b/customer_credit_payment_website/static/description/assets/screenshots/29.png new file mode 100644 index 000000000..9738e6b6a Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/29.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/3.png b/customer_credit_payment_website/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..bee2102c9 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/3.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/30.png b/customer_credit_payment_website/static/description/assets/screenshots/30.png new file mode 100644 index 000000000..f2024a4ac Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/30.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/4.png b/customer_credit_payment_website/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..144c4ec4d Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/4.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/5.png b/customer_credit_payment_website/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..dff4afbf2 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/5.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/6.png b/customer_credit_payment_website/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..096cfded5 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/6.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/7.png b/customer_credit_payment_website/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..1b631c4f9 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/7.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/8.png b/customer_credit_payment_website/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..2e0f778d7 Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/8.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/9.png b/customer_credit_payment_website/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..54ecf3bfa Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/9.png differ diff --git a/customer_credit_payment_website/static/description/assets/screenshots/hero-v17.gif b/customer_credit_payment_website/static/description/assets/screenshots/hero-v17.gif new file mode 100644 index 000000000..e4fa1f64c Binary files /dev/null and b/customer_credit_payment_website/static/description/assets/screenshots/hero-v17.gif differ diff --git a/customer_credit_payment_website/static/description/banner.jpg b/customer_credit_payment_website/static/description/banner.jpg new file mode 100644 index 000000000..26579dfb6 Binary files /dev/null and b/customer_credit_payment_website/static/description/banner.jpg differ diff --git a/customer_credit_payment_website/static/description/credit.png b/customer_credit_payment_website/static/description/credit.png new file mode 100644 index 000000000..be22c3af3 Binary files /dev/null and b/customer_credit_payment_website/static/description/credit.png differ diff --git a/customer_credit_payment_website/static/description/icon.png b/customer_credit_payment_website/static/description/icon.png new file mode 100644 index 000000000..7a0788aed Binary files /dev/null and b/customer_credit_payment_website/static/description/icon.png differ diff --git a/customer_credit_payment_website/static/description/index.html b/customer_credit_payment_website/static/description/index.html new file mode 100644 index 000000000..51710d84f --- /dev/null +++ b/customer_credit_payment_website/static/description/index.html @@ -0,0 +1,1602 @@ + + + + + + Customer Credit Payment In Website + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+
+

This module enables assigning and managing credits for + website customers, facilitating purchases and balance + updates, with proper accounting management +

+

Customer Credit Payment In Website +

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

Key + Highlights

+
+
+
+
+ +
+
+ Customer Credit System +
+

+ Assigns credit to website customers, allowing them to add or update their credit + balance.

+
+
+
+
+
+ +
+
+ Credit-Based Purchases +
+

+ Customers can use their credit for purchases, with the amount deducted from their + balance.. +

+
+
+
+
+
+ +
+
+ Admin Approval & Restrictions +
+

+ Credit updates require admin approval, and purchases exceeding credit are restricted + unless enabled by the admin. +

+
+
+
+
+
+ +
+
+ Accounting Integration +
+

+ Proper management of accounting entries ensures accurate financial tracking. +

+
+
+
+
+ +
+
+
+ Customer Credit Payment In Website +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Enable Credit Payment + + Approvals. +

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

+ Credit + + Menu. +

+

+ We have the Credit Amount menu in the sales. We can add credit amount to + the customer from here. And when the approver approve it , the amount + will be added to account +

+
+
+

+

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

+ Credit Details + + Menu. +

+

+ When the Approver approves it can be seen in the Credit Details menu in + the sales. +

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

+ Credit or Debit + + Details. +

+

+ We can see each customer credit or debit details. +

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

+ Approval + + Required. +

+

+ Approves need to Approve the Credit Amount +

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

+ Smart + + Button. +

+

+ We can see the credit amount allowed for each customer +

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

+ Credit + + Details. +

+

+ To update the accounting Entry in Account + Payment +

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

+ Payment + + Wizard. +

+

+ Add the Amount and Journal. +

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

+ Customer Form + + View. +

+

+ Credit details in customer's page. +

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

+ + + Website. +

+

+ Credit Details in Website. +

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

+ + Credit Balance + + From Website. +

+

+ Add credit balance from website. +

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

+ + +

+

+

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

+ + +

+

+

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

+ + Add credit balance from website + +

+

+

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

+ + The purchased credit amount needs to be + approved. + +

+

+

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

+ + After approval, it is added to the credit details. + +

+

+

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

+ + In order to pay using the configured credit payment we have to first activate the provider + +

+

+

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

+ + +

+

+

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

+ + We can purchase the product using the 'Credit Payment' method. + +

+

+

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

+ + +

+

+

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

+ + +

+

+

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

+ + When using the 'Credit Payment' method, it + will automatically debit the amount from the + associated customer. + +

+

+

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

+ + If we're using more than the credit amount for purchasing, it will not allow the purchase of the products. + + +

+

+

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

+ + Allow customers to use more than the credit amount if needed. + +

+

+

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

+ + Allow customers to use more than the credit amount if needed. + +

+

+

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

+ +In this case, the credit amount will become negative and we can update it accordingly. + +

+

+

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

+ + Allow customers to use more than the credit amount if needed. + +

+

+

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

+ Import Images from Zip File.

+
+ +
+
+
+
+
+
+ +
+

+ Import Images to Product,Customers or Employees.

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

+ No, only with these 3 models. +

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

+ Latest Release 18.0.1.0.0 +

+ + 18th Feb, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + + + + +
+

+ Our Services

+ + + +
+
+ .... +
+
+ + +
+ + + + + + + + + diff --git a/customer_credit_payment_website/static/src/img/credit.png b/customer_credit_payment_website/static/src/img/credit.png new file mode 100644 index 000000000..be22c3af3 Binary files /dev/null and b/customer_credit_payment_website/static/src/img/credit.png differ diff --git a/customer_credit_payment_website/static/src/img/credit_web.png b/customer_credit_payment_website/static/src/img/credit_web.png new file mode 100644 index 000000000..6ada1bef8 Binary files /dev/null and b/customer_credit_payment_website/static/src/img/credit_web.png differ diff --git a/customer_credit_payment_website/static/src/js/payment_form.js b/customer_credit_payment_website/static/src/js/payment_form.js new file mode 100644 index 000000000..5ef31f3c3 --- /dev/null +++ b/customer_credit_payment_website/static/src/js/payment_form.js @@ -0,0 +1,57 @@ +/** @odoo-module */ +import paymentForm from '@payment/js/payment_form'; +import { rpc } from "@web/core/network/rpc"; + const paymentCreditPayMixin = { + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Simulate a feedback from a payment provider and redirect the customer to the status page. + * + * @override method from payment.payment_form_mixin + * @private + * @param {string} code - The code of the provider + * @param {number} providerId - The id of the provider handling the transaction + * @param {object} processingValues - The processing values of the transaction + * @return {Promise} + */ + + _processRedirectFlow: function (code, providerId, paymentMethodCode, processingValues) { + if (code !== 'credit_pay') { + return this._super(...arguments); + } + const customerInput = document.getElementById('customer_input').value; + const simulatedPaymentState = document.getElementById('simulated_payment_state').value; + rpc('/payment/credit_pay/simulate_payment',{ + args: { + 'reference': processingValues.reference, + 'payment_details': customerInput, + 'simulated_state': simulatedPaymentState, + }, + }).then(() => { + window.location = '/payment/status'; + }); + }, + + /** + * Prepare the inline form of Demo for direct payment. + * + * @override method from payment.payment_form_mixin + * @private + * @param {string} code - The code of the selected payment option's provider + * @param {integer} paymentOptionId - The id of the selected payment option + * @param {string} flow - The online payment flow of the selected payment option + * @return {Promise} + */ + _prepareInlineForm: function (code, paymentOptionId, flow) { + if (code !== 'credit_pay') { + return this._super(...arguments); + } else if (flow === 'token') { + return Promise.resolve(); + } + this._setPaymentFlow('direct'); + return Promise.resolve() + }, + }; + paymentForm.include(paymentCreditPayMixin); diff --git a/customer_credit_payment_website/views/credit_amount_views.xml b/customer_credit_payment_website/views/credit_amount_views.xml new file mode 100644 index 000000000..d37117c62 --- /dev/null +++ b/customer_credit_payment_website/views/credit_amount_views.xml @@ -0,0 +1,21 @@ + + + + + credit.amount.view.list + credit.amount + 1 + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/customer_credit_payment_website/views/restrict_message_template.xml b/customer_credit_payment_website/views/restrict_message_template.xml new file mode 100644 index 000000000..bb59ff9f4 --- /dev/null +++ b/customer_credit_payment_website/views/restrict_message_template.xml @@ -0,0 +1,35 @@ + + + + + + + diff --git a/customer_credit_payment_website/views/sale_order_views.xml b/customer_credit_payment_website/views/sale_order_views.xml new file mode 100644 index 000000000..5cae953e5 --- /dev/null +++ b/customer_credit_payment_website/views/sale_order_views.xml @@ -0,0 +1,18 @@ + + + + + + sale.order.form.inherit.customer.credit.payment.website + + sale.order + + + + + + + + + + diff --git a/customer_credit_payment_website/views/sale_views.xml b/customer_credit_payment_website/views/sale_views.xml new file mode 100644 index 000000000..2777e86d6 --- /dev/null +++ b/customer_credit_payment_website/views/sale_views.xml @@ -0,0 +1,33 @@ + + + + + Credit Details + ir.actions.act_window + credit.details + + list,form + + + + Credit Amount + ir.actions.act_window + credit.amount + list + + + + + +