Create a new invoice and add discounts in any of the three discount
+fields given. They go in order of precedence so discount 2 will be
+calculated over discount 1 and discount 3 over the result of discount 2.
+For example, let’s divide by two on every discount:
+
Unit price: 600.00 ->
+
+
+
Disc. 1 = 50% -> Amount = 300.00
+
Disc. 2 = 50% -> Amount = 150.00
+
Disc. 3 = 50% -> Amount = 75.00
+
+
+
You can also use negative values to charge instead of discount:
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+
diff --git a/website_search_products/controllers/__init__.py b/account_invoice_triple_discount/tests/__init__.py
similarity index 60%
rename from website_search_products/controllers/__init__.py
rename to account_invoice_triple_discount/tests/__init__.py
index 2f34e6e..354de27 100644
--- a/website_search_products/controllers/__init__.py
+++ b/account_invoice_triple_discount/tests/__init__.py
@@ -1,3 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from . import controller
+from . import test_invoice_triple_discount
diff --git a/account_invoice_triple_discount/tests/test_invoice_triple_discount.py b/account_invoice_triple_discount/tests/test_invoice_triple_discount.py
new file mode 100644
index 0000000..0831044
--- /dev/null
+++ b/account_invoice_triple_discount/tests/test_invoice_triple_discount.py
@@ -0,0 +1,244 @@
+# Copyright 2017 Tecnativa - David Vidal
+# Copyright 2023 Simone Rubino - Aion Tech
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests import Form
+
+from odoo.addons.base.tests.common import BaseCommon
+
+
+class TestInvoiceTripleDiscount(BaseCommon):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.Account = cls.env["account.account"]
+ cls.AccountMove = cls.env["account.move"]
+ cls.AccountMoveLine = cls.env["account.move.line"]
+ cls.AccountTax = cls.env["account.tax"]
+ cls.Partner = cls.env["res.partner"]
+ cls.Journal = cls.env["account.journal"]
+
+ cls.tax = cls.AccountTax.create(
+ {
+ "name": "TAX 15%",
+ "amount_type": "percent",
+ "type_tax_use": "purchase",
+ "amount": 15.0,
+ "country_id": cls.env.ref("base.us").id,
+ }
+ )
+ cls.account = cls.Account.create(
+ {
+ "name": "Test account",
+ "code": "TEST",
+ "account_type": "asset_receivable",
+ "reconcile": True,
+ }
+ )
+ cls.sale_journal = cls.Journal.search([("type", "=", "sale")], limit=1)
+
+ def create_simple_invoice(self, amount):
+ invoice_form = Form(
+ self.AccountMove.with_context(
+ default_move_type="out_invoice",
+ default_journal_id=self.sale_journal.id,
+ )
+ )
+ invoice_form.partner_id = self.partner
+
+ with invoice_form.invoice_line_ids.new() as line_form:
+ line_form.name = "Line 1"
+ line_form.quantity = 1
+ line_form.price_unit = amount
+ line_form.tax_ids.clear()
+ line_form.tax_ids.add(self.tax)
+
+ invoice = invoice_form.save()
+ return invoice
+
+ def test_01_discounts(self):
+ """Tests multiple discounts in line with taxes"""
+ invoice = self.create_simple_invoice(200)
+
+ invoice_form = Form(invoice)
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = 50.0
+ invoice_form.save()
+
+ invoice_line = invoice.invoice_line_ids[0]
+
+ # Adds a first discount
+ self.assertEqual(invoice.amount_total, 115.0)
+
+ # Adds a second discount over the price calculated before
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount2 = 40.0
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 69.0)
+
+ # Adds a third discount over the price calculated before
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount3 = 50.0
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 34.5)
+
+ # Deletes first discount
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = 0
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 69)
+
+ # Charge 5% over price:
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = -5
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 72.45)
+
+ self.assertEqual(invoice_line.price_unit, 200)
+
+ def test_02_discounts_multiple_lines(self):
+ invoice = self.create_simple_invoice(200)
+ invoice_form = Form(invoice)
+ with invoice_form.invoice_line_ids.new() as line_form:
+ line_form.name = "Line 2"
+ line_form.quantity = 1
+ line_form.price_unit = 500
+ line_form.tax_ids.clear()
+ invoice_form.save()
+
+ invoice_line2 = invoice.invoice_line_ids[1]
+ self.assertEqual(invoice_line2.price_subtotal, 500.0)
+
+ with invoice_form.invoice_line_ids.edit(1) as line_form:
+ line_form.discount3 = 50.0
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 480.0)
+
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = 50.0
+ invoice_form.save()
+ self.assertEqual(invoice.amount_total, 365.0)
+
+ def test_03_discounts_decimals_price(self):
+ """
+ Tests discount with decimals price
+ causing a round up after discount
+ """
+ invoice = self.create_simple_invoice(0)
+ invoice_form = Form(invoice)
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.name = "Line Decimals"
+ line_form.quantity = 9950
+ line_form.price_unit = 0.14
+ line_form.tax_ids.clear()
+ invoice_form.save()
+
+ invoice_line1 = invoice.invoice_line_ids[0]
+
+ self.assertEqual(invoice_line1.price_subtotal, 1393.0)
+
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = 15.0
+ invoice_form.save()
+
+ self.assertEqual(invoice_line1.price_subtotal, 1184.05)
+
+ def test_04_discounts_decimals_tax(self):
+ """
+ Tests amount tax with discount
+ """
+ invoice = self.create_simple_invoice(0)
+ invoice_form = Form(invoice)
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.name = "Line Decimals"
+ line_form.quantity = 9950
+ line_form.price_unit = 0.14
+ line_form.discount1 = 0
+ line_form.discount2 = 0
+ invoice_form.save()
+
+ self.assertEqual(invoice.amount_tax, 208.95)
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.discount1 = 15.0
+ invoice_form.save()
+
+ def test_06_round_discount(self):
+ """Discount value is rounded correctly"""
+ invoice = self.create_simple_invoice(0)
+ invoice_line = invoice.invoice_line_ids[0]
+ invoice_line.discount1 = 100
+ self.assertEqual(invoice_line.discount1, 100)
+ self.assertEqual(invoice_line.discount, 100)
+
+ def test_07_round_tax_discount(self):
+ """Discount value is rounded correctly when taxes change"""
+ invoice = self.create_simple_invoice(0)
+ invoice_line = invoice.invoice_line_ids[0]
+ invoice_line.discount1 = 100
+ invoice_line.tax_ids = False
+ self.assertEqual(invoice_line.discount1, 100)
+ self.assertEqual(invoice_line.discount, 100)
+
+ def test_09_create_with_main_discount(self):
+ """
+ Tests if creating a invoice line with main discount field
+ set correctly discount1, discount2 and discount3
+ """
+ invoice = self.create_simple_invoice(0)
+
+ invoice_line2 = self.AccountMoveLine.create(
+ {
+ "move_id": invoice.id,
+ "name": "Line With Main Discount",
+ "quantity": 1,
+ "price_unit": 1000,
+ "discount": 10,
+ "tax_ids": [],
+ }
+ )
+
+ # 1000 * 0.9
+ self.assertEqual(invoice_line2.price_subtotal, 900.0)
+ self.assertEqual(invoice_line2.discount1, 10.0)
+ self.assertEqual(invoice_line2.discount2, 0.0)
+ self.assertEqual(invoice_line2.discount3, 0.0)
+
+ def test_10_create_invoice_with_discounts(self):
+ invoice = self.env["account.move"].create(
+ {
+ "partner_id": self.partner.id,
+ "move_type": "out_invoice",
+ "invoice_line_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "Line 1",
+ "quantity": 1,
+ "price_unit": 100,
+ "discount1": 30,
+ "discount2": 20,
+ "discount3": 10,
+ },
+ )
+ ],
+ }
+ )
+ invoice_line1 = invoice.invoice_line_ids[0]
+ self.assertEqual(invoice_line1.discount1, 30.0)
+ self.assertEqual(invoice_line1.discount2, 20.0)
+ self.assertEqual(invoice_line1.discount3, 10.0)
+
+ def test_tax_compute_with_lock_date(self):
+ # Check that the tax computation works even if the lock date is set
+ invoice = self.create_simple_invoice(0)
+ invoice_form = Form(invoice)
+ with invoice_form.invoice_line_ids.edit(0) as line_form:
+ line_form.name = "Line Decimals"
+ line_form.quantity = 9950
+ line_form.price_unit = 0.14
+ line_form.discount1 = 10
+ line_form.discount2 = 20
+ invoice_form.save()
+ invoice.action_post()
+ self.env.user.company_id.fiscalyear_lock_date = "2000-01-01"
diff --git a/account_invoice_triple_discount/views/account_move.xml b/account_invoice_triple_discount/views/account_move.xml
new file mode 100644
index 0000000..5f5a051
--- /dev/null
+++ b/account_invoice_triple_discount/views/account_move.xml
@@ -0,0 +1,39 @@
+
+
+
+ account.invoice.triple.discount.form
+ account.move
+
+
+
+ hide
+ Total discount
+
+
+
+
+
+
+
+ Total discount
+
+
+
+
+
+
+
+
+
diff --git a/account_invoice_triple_discount_readonly/__manifest__.py b/account_invoice_triple_discount_readonly/__manifest__.py
index a9ce583..c65b03e 100644
--- a/account_invoice_triple_discount_readonly/__manifest__.py
+++ b/account_invoice_triple_discount_readonly/__manifest__.py
@@ -1,18 +1,11 @@
-# Copyright 2025
+# Copyright 2025 - Today Criptomart
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-{
+{ # noqa: B018
"name": "Account Invoice Triple Discount Readonly",
- "version": "16.0.1.0.0",
+ "version": "18.0.1.0.0",
"summary": "Make total discount readonly and fix discount2/discount3 write issue",
"license": "AGPL-3",
- "author": "Criptomart",
- "website": "https://github.com/OCA/account-invoicing",
+ "author": "Odoo Community Association (OCA), Criptomart",
+ "website": "https://git.criptomart.net/criptomart/addons-cm",
"depends": ["account_invoice_triple_discount", "purchase_triple_discount"],
- "data": [
- "views/product_supplierinfo_view.xml",
- "views/res_partner_view.xml",
- "views/purchase_order_view.xml",
- "views/account_move_view.xml",
- ],
- "installable": True,
}
diff --git a/account_invoice_triple_discount_readonly/models/triple_discount_mixin.py b/account_invoice_triple_discount_readonly/models/triple_discount_mixin.py
index d222b00..2d727da 100644
--- a/account_invoice_triple_discount_readonly/models/triple_discount_mixin.py
+++ b/account_invoice_triple_discount_readonly/models/triple_discount_mixin.py
@@ -1,4 +1,5 @@
-from odoo import fields, models
+from odoo import fields
+from odoo import models
class TripleDiscountMixin(models.AbstractModel):
diff --git a/account_invoice_triple_discount_readonly/oca_dependencies.txt b/account_invoice_triple_discount_readonly/oca_dependencies.txt
new file mode 100644
index 0000000..fece1fc
--- /dev/null
+++ b/account_invoice_triple_discount_readonly/oca_dependencies.txt
@@ -0,0 +1,5 @@
+# OCA Dependencies for account_invoice_triple_discount_readonly
+# Format: repository_name branch
+
+account-invoicing https://github.com/OCA/account-invoicing.git 18.0
+purchase-workflow https://github.com/OCA/purchase-workflow.git 18.0
diff --git a/account_invoice_triple_discount_readonly/tests/__init__.py b/account_invoice_triple_discount_readonly/tests/__init__.py
new file mode 100644
index 0000000..4c7cb7d
--- /dev/null
+++ b/account_invoice_triple_discount_readonly/tests/__init__.py
@@ -0,0 +1,3 @@
+from . import test_triple_discount_mixin
+from . import test_account_move
+from . import test_purchase_order
diff --git a/account_invoice_triple_discount_readonly/tests/test_account_move.py b/account_invoice_triple_discount_readonly/tests/test_account_move.py
new file mode 100644
index 0000000..a84ff41
--- /dev/null
+++ b/account_invoice_triple_discount_readonly/tests/test_account_move.py
@@ -0,0 +1,213 @@
+# Copyright (C) 2025: Criptomart (https://criptomart.net)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged("post_install", "-at_install")
+class TestAccountMove(TransactionCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+
+ # Create a partner
+ cls.partner = cls.env["res.partner"].create(
+ {
+ "name": "Test Customer",
+ "email": "customer@test.com",
+ }
+ )
+
+ # Create a product
+ cls.product = cls.env["product.product"].create(
+ {
+ "name": "Test Product Invoice",
+ "type": "consu",
+ "list_price": 200.0,
+ "standard_price": 100.0,
+ }
+ )
+
+ # Create tax
+ cls.tax = cls.env["account.tax"].create(
+ {
+ "name": "Test Tax 10%",
+ "amount": 10.0,
+ "amount_type": "percent",
+ "type_tax_use": "sale",
+ }
+ )
+
+ # Create an invoice
+ cls.invoice = cls.env["account.move"].create(
+ {
+ "move_type": "out_invoice",
+ "partner_id": cls.partner.id,
+ "invoice_date": "2026-01-01",
+ }
+ )
+
+ # Create invoice line
+ cls.invoice_line = cls.env["account.move.line"].create(
+ {
+ "move_id": cls.invoice.id,
+ "product_id": cls.product.id,
+ "quantity": 5,
+ "price_unit": 200.0,
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 2.0,
+ "tax_ids": [(6, 0, [cls.tax.id])],
+ }
+ )
+
+ def test_invoice_line_discount_readonly(self):
+ """Test that discount field is readonly in invoice lines"""
+ field = self.invoice_line._fields["discount"]
+ self.assertTrue(
+ field.readonly, "Discount field should be readonly in invoice lines"
+ )
+
+ def test_invoice_line_write_with_explicit_discounts(self):
+ """Test writing invoice line with explicit discounts"""
+ self.invoice_line.write(
+ {
+ "discount": 30.0, # Should be ignored
+ "discount1": 15.0,
+ "discount2": 10.0,
+ "discount3": 5.0,
+ }
+ )
+
+ self.assertEqual(self.invoice_line.discount1, 15.0)
+ self.assertEqual(self.invoice_line.discount2, 10.0)
+ self.assertEqual(self.invoice_line.discount3, 5.0)
+
+ def test_invoice_line_legacy_discount(self):
+ """Test legacy discount behavior in invoice lines"""
+ self.invoice_line.write(
+ {
+ "discount": 20.0,
+ }
+ )
+
+ # Should map to discount1 and reset others
+ self.assertEqual(self.invoice_line.discount1, 20.0)
+ self.assertEqual(self.invoice_line.discount2, 0.0)
+ self.assertEqual(self.invoice_line.discount3, 0.0)
+
+ def test_invoice_line_price_calculation(self):
+ """Test that price subtotal is calculated correctly with triple discount"""
+ self.invoice_line.write(
+ {
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 0.0,
+ }
+ )
+
+ # Base: 5 * 200 = 1000
+ # After 10% discount: 900
+ # After 5% discount: 855
+ expected_subtotal = 5 * 200 * 0.9 * 0.95
+ self.assertAlmostEqual(
+ self.invoice_line.price_subtotal, expected_subtotal, places=2
+ )
+
+ def test_multiple_invoice_lines(self):
+ """Test multiple invoice lines with different discounts"""
+ line2 = self.env["account.move.line"].create(
+ {
+ "move_id": self.invoice.id,
+ "product_id": self.product.id,
+ "quantity": 3,
+ "price_unit": 150.0,
+ "discount1": 20.0,
+ "discount2": 10.0,
+ "discount3": 5.0,
+ "tax_ids": [(6, 0, [self.tax.id])],
+ }
+ )
+
+ # Verify both lines have correct discounts
+ self.assertEqual(self.invoice_line.discount1, 10.0)
+ self.assertEqual(line2.discount1, 20.0)
+ self.assertEqual(line2.discount2, 10.0)
+ self.assertEqual(line2.discount3, 5.0)
+
+ def test_invoice_line_update_quantity(self):
+ """Test updating quantity doesn't affect discounts"""
+ initial_discount1 = self.invoice_line.discount1
+ initial_discount2 = self.invoice_line.discount2
+
+ self.invoice_line.write(
+ {
+ "quantity": 10,
+ }
+ )
+
+ # Discounts should remain unchanged
+ self.assertEqual(self.invoice_line.discount1, initial_discount1)
+ self.assertEqual(self.invoice_line.discount2, initial_discount2)
+ # Quantity should be updated
+ self.assertEqual(self.invoice_line.quantity, 10)
+
+ def test_invoice_line_update_price(self):
+ """Test updating price doesn't affect discounts"""
+ initial_discount1 = self.invoice_line.discount1
+
+ self.invoice_line.write(
+ {
+ "price_unit": 250.0,
+ }
+ )
+
+ # Discount should remain unchanged
+ self.assertEqual(self.invoice_line.discount1, initial_discount1)
+ # Price should be updated
+ self.assertEqual(self.invoice_line.price_unit, 250.0)
+
+ def test_invoice_with_zero_discounts(self):
+ """Test invoice line with all zero discounts"""
+ self.invoice_line.write(
+ {
+ "discount1": 0.0,
+ "discount2": 0.0,
+ "discount3": 0.0,
+ }
+ )
+
+ # All discounts should be zero
+ self.assertEqual(self.invoice_line.discount, 0.0)
+ self.assertEqual(self.invoice_line.discount1, 0.0)
+ self.assertEqual(self.invoice_line.discount2, 0.0)
+ self.assertEqual(self.invoice_line.discount3, 0.0)
+
+ # Subtotal should be quantity * price
+ expected = 5 * 200
+ self.assertEqual(self.invoice_line.price_subtotal, expected)
+
+ def test_invoice_line_combined_operations(self):
+ """Test combined operations on invoice line"""
+ # Update multiple fields at once
+ self.invoice_line.write(
+ {
+ "quantity": 8,
+ "price_unit": 180.0,
+ "discount1": 12.0,
+ "discount2": 6.0,
+ "discount3": 0.0, # Reset discount3 explicitly
+ }
+ )
+
+ # All fields should be updated correctly
+ self.assertEqual(self.invoice_line.quantity, 8)
+ self.assertEqual(self.invoice_line.price_unit, 180.0)
+ self.assertEqual(self.invoice_line.discount1, 12.0)
+ self.assertEqual(self.invoice_line.discount2, 6.0)
+ self.assertEqual(self.invoice_line.discount3, 0.0)
+
+ # Calculate expected subtotal: 8 * 180 * (1-0.12) * (1-0.06)
+ expected = 8 * 180 * 0.88 * 0.94
+ self.assertAlmostEqual(self.invoice_line.price_subtotal, expected, places=2)
diff --git a/account_invoice_triple_discount_readonly/tests/test_purchase_order.py b/account_invoice_triple_discount_readonly/tests/test_purchase_order.py
new file mode 100644
index 0000000..cd12fe5
--- /dev/null
+++ b/account_invoice_triple_discount_readonly/tests/test_purchase_order.py
@@ -0,0 +1,217 @@
+# Copyright (C) 2025: Criptomart (https://criptomart.net)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged("post_install", "-at_install")
+class TestPurchaseOrder(TransactionCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+
+ # Create a supplier
+ cls.supplier = cls.env["res.partner"].create(
+ {
+ "name": "Test Supplier",
+ "email": "supplier@test.com",
+ "supplier_rank": 1,
+ }
+ )
+
+ # Create a product template first, then get the variant
+ cls.product_template = cls.env["product.template"].create(
+ {
+ "name": "Test Product PO",
+ "type": "consu",
+ "list_price": 150.0,
+ "standard_price": 80.0,
+ }
+ )
+ # Get the auto-created product variant
+ cls.product = cls.product_template.product_variant_ids[0]
+
+ # Create a purchase order
+ cls.purchase_order = cls.env["purchase.order"].create(
+ {
+ "partner_id": cls.supplier.id,
+ }
+ )
+
+ # Create purchase order line
+ cls.po_line = cls.env["purchase.order.line"].create(
+ {
+ "order_id": cls.purchase_order.id,
+ "product_id": cls.product.id,
+ "product_qty": 10,
+ "price_unit": 150.0,
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 2.0,
+ }
+ )
+
+ def test_po_line_discount_readonly(self):
+ """Test that discount field is readonly in PO lines"""
+ field = self.po_line._fields["discount"]
+ self.assertTrue(field.readonly, "Discount field should be readonly in PO lines")
+
+ def test_po_line_write_with_explicit_discounts(self):
+ """Test writing PO line with explicit discounts"""
+ self.po_line.write(
+ {
+ "discount": 25.0, # Should be ignored
+ "discount1": 12.0,
+ "discount2": 8.0,
+ "discount3": 4.0,
+ }
+ )
+
+ self.assertEqual(self.po_line.discount1, 12.0)
+ self.assertEqual(self.po_line.discount2, 8.0)
+ self.assertEqual(self.po_line.discount3, 4.0)
+
+ def test_po_line_legacy_discount(self):
+ """Test legacy discount behavior in PO lines"""
+ self.po_line.write(
+ {
+ "discount": 18.0,
+ }
+ )
+
+ # Should map to discount1 and reset others
+ self.assertEqual(self.po_line.discount1, 18.0)
+ self.assertEqual(self.po_line.discount2, 0.0)
+ self.assertEqual(self.po_line.discount3, 0.0)
+
+ def test_po_line_price_calculation(self):
+ """Test that price subtotal is calculated correctly with triple discount"""
+ self.po_line.write(
+ {
+ "discount1": 15.0,
+ "discount2": 10.0,
+ "discount3": 5.0,
+ }
+ )
+
+ # Base: 10 * 150 = 1500
+ # After 15% discount: 1275
+ # After 10% discount: 1147.5
+ # After 5% discount: 1090.125
+ expected_subtotal = 10 * 150 * 0.85 * 0.90 * 0.95
+ self.assertAlmostEqual(self.po_line.price_subtotal, expected_subtotal, places=2)
+
+ def test_multiple_po_lines(self):
+ """Test multiple PO lines with different discounts"""
+ line2 = self.env["purchase.order.line"].create(
+ {
+ "order_id": self.purchase_order.id,
+ "product_id": self.product.id,
+ "product_qty": 5,
+ "price_unit": 120.0,
+ "discount1": 20.0,
+ "discount2": 15.0,
+ "discount3": 10.0,
+ }
+ )
+
+ # Verify both lines have correct discounts
+ self.assertEqual(self.po_line.discount1, 15.0)
+ self.assertEqual(line2.discount1, 20.0)
+ self.assertEqual(line2.discount2, 15.0)
+ self.assertEqual(line2.discount3, 10.0)
+
+ def test_po_line_update_quantity(self):
+ """Test updating quantity doesn't affect discounts"""
+ initial_discount1 = self.po_line.discount1
+ initial_discount2 = self.po_line.discount2
+
+ self.po_line.write(
+ {
+ "product_qty": 20,
+ }
+ )
+
+ # Discounts should remain unchanged
+ self.assertEqual(self.po_line.discount1, initial_discount1)
+ self.assertEqual(self.po_line.discount2, initial_discount2)
+ # Quantity should be updated
+ self.assertEqual(self.po_line.product_qty, 20)
+
+ def test_po_line_update_price(self):
+ """Test updating price doesn't affect discounts"""
+ initial_discount1 = self.po_line.discount1
+
+ self.po_line.write(
+ {
+ "price_unit": 200.0,
+ }
+ )
+
+ # Discount should remain unchanged
+ self.assertEqual(self.po_line.discount1, initial_discount1)
+ # Price should be updated
+ self.assertEqual(self.po_line.price_unit, 200.0)
+
+ def test_po_with_zero_discounts(self):
+ """Test PO line with all zero discounts"""
+ self.po_line.write(
+ {
+ "discount1": 0.0,
+ "discount2": 0.0,
+ "discount3": 0.0,
+ }
+ )
+
+ # All discounts should be zero
+ self.assertEqual(self.po_line.discount, 0.0)
+ self.assertEqual(self.po_line.discount1, 0.0)
+ self.assertEqual(self.po_line.discount2, 0.0)
+ self.assertEqual(self.po_line.discount3, 0.0)
+
+ # Subtotal should be quantity * price
+ expected = 10 * 150
+ self.assertEqual(self.po_line.price_subtotal, expected)
+
+ def test_po_line_combined_operations(self):
+ """Test combined operations on PO line"""
+ # Update multiple fields at once
+ self.po_line.write(
+ {
+ "product_qty": 15,
+ "price_unit": 175.0,
+ "discount1": 18.0,
+ "discount2": 12.0,
+ "discount3": 6.0,
+ }
+ )
+
+ # All fields should be updated correctly
+ self.assertEqual(self.po_line.product_qty, 15)
+ self.assertEqual(self.po_line.price_unit, 175.0)
+ self.assertEqual(self.po_line.discount1, 18.0)
+ self.assertEqual(self.po_line.discount2, 12.0)
+ self.assertEqual(self.po_line.discount3, 6.0)
+
+ # Calculate expected subtotal
+ expected = 15 * 175 * 0.82 * 0.88 * 0.94
+ self.assertAlmostEqual(self.po_line.price_subtotal, expected, places=2)
+
+ def test_po_confirm_with_discounts(self):
+ """Test confirming PO doesn't alter discounts"""
+ self.po_line.write(
+ {
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 2.0,
+ }
+ )
+
+ # Confirm the purchase order
+ self.purchase_order.button_confirm()
+
+ # Discounts should remain unchanged after confirmation
+ self.assertEqual(self.po_line.discount1, 10.0)
+ self.assertEqual(self.po_line.discount2, 5.0)
+ self.assertEqual(self.po_line.discount3, 2.0)
diff --git a/account_invoice_triple_discount_readonly/tests/test_triple_discount_mixin.py b/account_invoice_triple_discount_readonly/tests/test_triple_discount_mixin.py
new file mode 100644
index 0000000..33b931f
--- /dev/null
+++ b/account_invoice_triple_discount_readonly/tests/test_triple_discount_mixin.py
@@ -0,0 +1,243 @@
+# Copyright (C) 2025: Criptomart (https://criptomart.net)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged("post_install", "-at_install")
+class TestTripleDiscountMixin(TransactionCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+
+ # Create a partner
+ cls.partner = cls.env["res.partner"].create(
+ {
+ "name": "Test Partner",
+ }
+ )
+
+ # Create a product template first, then get the variant
+ cls.product_template = cls.env["product.template"].create(
+ {
+ "name": "Test Product",
+ "type": "consu",
+ "list_price": 100.0,
+ "standard_price": 50.0,
+ }
+ )
+ # Get the auto-created product variant
+ cls.product = cls.product_template.product_variant_ids[0]
+
+ # Create a purchase order
+ cls.purchase_order = cls.env["purchase.order"].create(
+ {
+ "partner_id": cls.partner.id,
+ }
+ )
+
+ # Create a purchase order line
+ cls.po_line = cls.env["purchase.order.line"].create(
+ {
+ "order_id": cls.purchase_order.id,
+ "product_id": cls.product.id,
+ "product_qty": 10,
+ "price_unit": 100.0,
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 2.0,
+ }
+ )
+
+ def test_discount_field_is_readonly(self):
+ """Test that the discount field is readonly"""
+ field = self.po_line._fields["discount"]
+ self.assertTrue(field.readonly, "Discount field should be readonly")
+
+ def test_write_with_explicit_discounts(self):
+ """Test writing with explicit discount1, discount2, discount3"""
+ # Write with explicit discounts
+ self.po_line.write(
+ {
+ "discount": 20.0, # This should be ignored
+ "discount1": 15.0,
+ "discount2": 10.0,
+ "discount3": 5.0,
+ }
+ )
+
+ # Verify explicit discounts were applied
+ self.assertEqual(self.po_line.discount1, 15.0)
+ self.assertEqual(self.po_line.discount2, 10.0)
+ self.assertEqual(self.po_line.discount3, 5.0)
+
+ # The computed discount field should reflect the combined discounts
+ # Formula: 100 - (100 * (1 - 0.15) * (1 - 0.10) * (1 - 0.05))
+ expected_discount = 100 - (100 * 0.85 * 0.90 * 0.95)
+ self.assertAlmostEqual(self.po_line.discount, expected_discount, places=2)
+
+ def test_write_only_discount1(self):
+ """Test writing only discount1 explicitly"""
+ self.po_line.write(
+ {
+ "discount": 25.0, # This should be ignored
+ "discount1": 20.0,
+ }
+ )
+
+ # Only discount1 should change
+ self.assertEqual(self.po_line.discount1, 20.0)
+ # Others should remain unchanged
+ self.assertEqual(self.po_line.discount2, 5.0)
+ self.assertEqual(self.po_line.discount3, 2.0)
+
+ def test_write_only_discount2(self):
+ """Test writing only discount2 explicitly"""
+ self.po_line.write(
+ {
+ "discount": 30.0, # This should be ignored
+ "discount2": 12.0,
+ }
+ )
+
+ # Only discount2 should change
+ self.assertEqual(self.po_line.discount2, 12.0)
+ # Others should remain unchanged from previous test
+ self.assertEqual(self.po_line.discount1, 20.0)
+ self.assertEqual(self.po_line.discount3, 2.0)
+
+ def test_write_only_discount3(self):
+ """Test writing only discount3 explicitly"""
+ self.po_line.write(
+ {
+ "discount": 35.0, # This should be ignored
+ "discount3": 8.0,
+ }
+ )
+
+ # Only discount3 should change
+ self.assertEqual(self.po_line.discount3, 8.0)
+ # Others should remain unchanged from previous tests
+ self.assertEqual(self.po_line.discount1, 20.0)
+ self.assertEqual(self.po_line.discount2, 12.0)
+
+ def test_write_legacy_discount_only(self):
+ """Test legacy behavior: writing only discount field"""
+ # Reset to known state first
+ self.po_line.write(
+ {
+ "discount1": 10.0,
+ "discount2": 5.0,
+ "discount3": 2.0,
+ }
+ )
+
+ # Write only discount (legacy behavior)
+ self.po_line.write(
+ {
+ "discount": 25.0,
+ }
+ )
+
+ # Should map to discount1 and reset others
+ self.assertEqual(self.po_line.discount1, 25.0)
+ self.assertEqual(self.po_line.discount2, 0.0)
+ self.assertEqual(self.po_line.discount3, 0.0)
+
+ def test_write_multiple_times(self):
+ """Test writing multiple times to ensure consistency"""
+ # First write
+ self.po_line.write(
+ {
+ "discount1": 10.0,
+ "discount2": 10.0,
+ }
+ )
+
+ self.assertEqual(self.po_line.discount1, 10.0)
+ self.assertEqual(self.po_line.discount2, 10.0)
+
+ # Second write
+ self.po_line.write(
+ {
+ "discount": 5.0,
+ "discount3": 5.0,
+ }
+ )
+
+ # discount3 should change, others remain
+ self.assertEqual(self.po_line.discount1, 10.0)
+ self.assertEqual(self.po_line.discount2, 10.0)
+ self.assertEqual(self.po_line.discount3, 5.0)
+
+ def test_write_zero_discounts(self):
+ """Test writing zero discounts"""
+ self.po_line.write(
+ {
+ "discount1": 0.0,
+ "discount2": 0.0,
+ "discount3": 0.0,
+ }
+ )
+
+ self.assertEqual(self.po_line.discount1, 0.0)
+ self.assertEqual(self.po_line.discount2, 0.0)
+ self.assertEqual(self.po_line.discount3, 0.0)
+ self.assertEqual(self.po_line.discount, 0.0)
+
+ def test_write_combined_scenario(self):
+ """Test a realistic combined scenario"""
+ # Initial state
+ self.po_line.write(
+ {
+ "discount1": 15.0,
+ "discount2": 5.0,
+ "discount3": 0.0,
+ }
+ )
+
+ # User tries to update discount field (should be ignored if explicit discounts present)
+ self.po_line.write(
+ {
+ "discount": 50.0,
+ "discount1": 20.0,
+ }
+ )
+
+ # discount1 should be updated, others unchanged
+ self.assertEqual(self.po_line.discount1, 20.0)
+ self.assertEqual(self.po_line.discount2, 5.0)
+ self.assertEqual(self.po_line.discount3, 0.0)
+
+ def test_discount_calculation_accuracy(self):
+ """Test that discount calculation is accurate"""
+ self.po_line.write(
+ {
+ "discount1": 10.0,
+ "discount2": 10.0,
+ "discount3": 10.0,
+ }
+ )
+
+ # Combined discount: 100 - (100 * 0.9 * 0.9 * 0.9) = 27.1
+ expected = 100 - (100 * 0.9 * 0.9 * 0.9)
+ self.assertAlmostEqual(self.po_line.discount, expected, places=2)
+
+ def test_write_without_discount_field(self):
+ """Test writing other fields without touching discount fields"""
+ initial_discount1 = self.po_line.discount1
+
+ # Write other fields
+ self.po_line.write(
+ {
+ "product_qty": 20,
+ "price_unit": 150.0,
+ }
+ )
+
+ # Discounts should remain unchanged
+ self.assertEqual(self.po_line.discount1, initial_discount1)
+ # But other fields should be updated
+ self.assertEqual(self.po_line.product_qty, 20)
+ self.assertEqual(self.po_line.price_unit, 150.0)
diff --git a/account_invoice_triple_discount_readonly/views/account_move_view.xml b/account_invoice_triple_discount_readonly/views/account_move_view.xml
index b44c4d2..c3e1fa0 100644
--- a/account_invoice_triple_discount_readonly/views/account_move_view.xml
+++ b/account_invoice_triple_discount_readonly/views/account_move_view.xml
@@ -1,7 +1,7 @@
-
+
account.invoice.triple.discount.readonlyaccount.move
@@ -10,12 +10,7 @@
ref="account_invoice_triple_discount.invoice_triple_discount_form_view"
/>
-
- 1
-
+
-
-
- product.supplierinfo
-
-
-
- 1
-
-
-
-
-
-
- product.supplierinfo
-
-
-
- 1
-
-
-
+
diff --git a/account_invoice_triple_discount_readonly/views/purchase_order_view.xml b/account_invoice_triple_discount_readonly/views/purchase_order_view.xml
index c082397..6ea6258 100644
--- a/account_invoice_triple_discount_readonly/views/purchase_order_view.xml
+++ b/account_invoice_triple_discount_readonly/views/purchase_order_view.xml
@@ -1,28 +1,6 @@
-
-
- purchase.order.triple.discount.readonly
- purchase.order
-
-
-
- 1
-
-
- 1
-
-
-
+
diff --git a/account_invoice_triple_discount_readonly/views/res_partner_view.xml b/account_invoice_triple_discount_readonly/views/res_partner_view.xml
index 8a18830..20426de 100644
--- a/account_invoice_triple_discount_readonly/views/res_partner_view.xml
+++ b/account_invoice_triple_discount_readonly/views/res_partner_view.xml
@@ -1,18 +1,6 @@
-
-
- res.partner
-
-
-
- 1
-
-
-
+
diff --git a/barcode_generator_partner/README.rst b/barcode_generator_partner/README.rst
deleted file mode 100644
index 0352349..0000000
--- a/barcode_generator_partner/README.rst
+++ /dev/null
@@ -1,124 +0,0 @@
-==============================
-Generate Barcodes for Partners
-==============================
-
-..
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! This file is generated by oca-gen-addon-readme !!
- !! changes will be overwritten. !!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:0c984bdd1b103633bb285af4d69763047cc898ed9b6e3499c164a41d8e300f99
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
- :target: https://odoo-community.org/page/development-status
- :alt: Beta
-.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
- :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
- :alt: License: AGPL-3
-.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-barcode/tree/12.0/barcodes_generator_partner
- :alt: OCA/stock-logistics-barcode
-.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-12-0/stock-logistics-barcode-12-0-barcodes_generator_partner
- :alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-barcode&target_branch=12.0
- :alt: Try me on Runboat
-
-|badge1| |badge2| |badge3| |badge4| |badge5|
-
-This module expands Odoo functionality, allowing user to generate barcode
-depending on a given barcode rule for Partners.
-
-For example, a typical pattern for partners is "042........." that means
-that:
-
-* the EAN13 code will begin by '042'
-* followed by 0 digits (named Barcode Base in this module)
-* a 13 digit control
-
-With this module, it is possible to:
-
-* Assign a pattern (barcode.rule) to a res.partner
-
-* Define a Barcode base:
- * manually, if the base of the barcode must be set by a user. (typically an
- internal code defined in your company)
- * automaticaly by a sequence, if you want to let Odoo to increment a
- sequence. (typical case of a customer number incrementation)
-
-* Generate a barcode, based on the defined pattern and the barcode base
-
-**Table of contents**
-
-.. contents::
- :local:
-
-Configuration
-=============
-
-* To configure this module, see the 'Configuration' Section of the description of the module 'barcodes_generator_abstract'
-
-Usage
-=====
-
-To use this module, you need to:
-
-* Go to a Customer/Contact form, Sales & Purchases Tab:
-
-1 for manual generation
- * Set a Barcode Rule
- * Set a Barcode Base
- * click on the button 'Generate Barcode (Using Barcode Rule)'
-
-2 for automatic generation
- * Set a Barcode Rule
- * click on the button 'Generate Base (Using Sequence)'
- * click on the button 'Generate Barcode (Using Barcode Rule)'
-
-.. image:: https://raw.githubusercontent.com/barcodes_generator_partner/static/description/res_partner_sequence_generation.png
- :width: 1100px
-
-Bug Tracker
-===========
-
-Bugs are tracked on `GitHub Issues `_.
-In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
-
-Do not contact contributors directly about support or help with technical issues.
-
-Credits
-=======
-
-Authors
-~~~~~~~
-
-* GRAP
-* La Louve
-
-Contributors
-~~~~~~~~~~~~
-
-* Sylvain LE GAL (https://twitter.com/legalsylvain)
-* Dave Lasley
-* Druidoo (https://druidoo.io)
-
-Maintainers
-~~~~~~~~~~~
-
-This module is maintained by the OCA.
-
-.. image:: https://odoo-community.org/logo.png
- :alt: Odoo Community Association
- :target: https://odoo-community.org
-
-OCA, or the Odoo Community Association, is a nonprofit organization whose
-mission is to support the collaborative development of Odoo features and
-promote its widespread use.
-
-This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
-
-You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/barcode_generator_partner/__init__.py b/barcode_generator_partner/__init__.py
deleted file mode 100644
index 83e553a..0000000
--- a/barcode_generator_partner/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from . import models
diff --git a/barcode_generator_partner/__manifest__.py b/barcode_generator_partner/__manifest__.py
deleted file mode 100644
index 609cd7a..0000000
--- a/barcode_generator_partner/__manifest__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2014-Today GRAP (http://www.grap.coop)
-# Copyright (C) 2016-Today La Louve (http://www.lalouve.net)
-# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-{
- "name": "Generate Barcodes for Partners",
- "summary": "Generate Barcodes for Partners",
- "version": "16.0.1.0.1",
- "category": "Tools",
- "author": "GRAP," "La Louve," "Odoo Community Association (OCA)",
- "website": "https://github.com/OCA/stock-logistics-barcode",
- "license": "AGPL-3",
- "depends": [
- "barcodes_generator_abstract",
- "point_of_sale",
- ],
- "data": [
- "views/view_res_partner.xml",
- ],
- "demo": [
- "demo/ir_sequence.xml",
- "demo/barcode_rule.xml",
- "demo/res_partner.xml",
- "demo/function.xml",
- ],
-}
diff --git a/barcode_generator_partner/demo/barcode_rule.xml b/barcode_generator_partner/demo/barcode_rule.xml
deleted file mode 100644
index b3c7ee0..0000000
--- a/barcode_generator_partner/demo/barcode_rule.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
- Partner Rule (Generated Barcode)
-
- client
- 998
- ean13
- 042.........
-
-
-
-
-
-
diff --git a/barcode_generator_partner/demo/function.xml b/barcode_generator_partner/demo/function.xml
deleted file mode 100644
index a2469da..0000000
--- a/barcode_generator_partner/demo/function.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/barcode_generator_partner/demo/ir_sequence.xml b/barcode_generator_partner/demo/ir_sequence.xml
deleted file mode 100644
index 2aa10aa..0000000
--- a/barcode_generator_partner/demo/ir_sequence.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- Partner Sequence (Generated Barcode)
- 10
- 1
-
-
-
diff --git a/barcode_generator_partner/demo/res_partner.xml b/barcode_generator_partner/demo/res_partner.xml
deleted file mode 100644
index 147e9ff..0000000
--- a/barcode_generator_partner/demo/res_partner.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- Partner with Generated Barcode
-
-
-
-
diff --git a/barcode_generator_partner/i18n/barcodes_generator_partner.pot b/barcode_generator_partner/i18n/barcodes_generator_partner.pot
deleted file mode 100644
index 2f1890a..0000000
--- a/barcode_generator_partner/i18n/barcodes_generator_partner.pot
+++ /dev/null
@@ -1,100 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "Generate Model"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Partners"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
diff --git a/barcode_generator_partner/i18n/es.po b/barcode_generator_partner/i18n/es.po
deleted file mode 100644
index b061309..0000000
--- a/barcode_generator_partner/i18n/es.po
+++ /dev/null
@@ -1,110 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-# Translators:
-# enjolras , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-02-15 02:01+0000\n"
-"PO-Revision-Date: 2018-02-15 02:01+0000\n"
-"Last-Translator: enjolras , 2018\n"
-"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr "Regla de código de barras"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "Generate Model"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Partners"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
-#~ msgid "Barcode Base"
-#~ msgstr "Base de código de barras"
-
-#~ msgid "barcode.rule"
-#~ msgstr "barcode.rule"
diff --git a/barcode_generator_partner/i18n/es_ES.po b/barcode_generator_partner/i18n/es_ES.po
deleted file mode 100644
index 1be7bea..0000000
--- a/barcode_generator_partner/i18n/es_ES.po
+++ /dev/null
@@ -1,128 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-# Translators:
-# OCA Transbot , 2017
-# Fernando Lara , 2017
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-02 00:27+0000\n"
-"PO-Revision-Date: 2017-05-02 00:27+0000\n"
-"Last-Translator: Fernando Lara , 2017\n"
-"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/"
-"es_ES/)\n"
-"Language: es_ES\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr "Regla del codigo de barras"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-#, fuzzy
-msgid "Generate Model"
-msgstr "Generar Tipo"
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Partners"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
-#~ msgid ""
-#~ "Allow to generate barcode, including a number (a base) in the final "
-#~ "barcode.\n"
-#~ " 'Base Set Manually' : User should set manually the value of the barcode "
-#~ "base\n"
-#~ " 'Base managed by Sequence': User will use a button to generate a new "
-#~ "base. This base will be generated by a sequence"
-#~ msgstr ""
-#~ "Permitir generar código de barras, incluyendo un número (una base) en el "
-#~ "código de barras final.'U+23CE'\n"
-#~ "'Base Set Manually': El usuario debe establecer manualmente el valor del "
-#~ "código de barras base'U+23CE'\n"
-#~ "'Base administrada por Secuencia': El usuario utilizará un botón para "
-#~ "generar una nueva base. Esta base será generada por una secuencia"
-
-#~ msgid "Barcode Base"
-#~ msgstr "Base de código de barras"
-
-#~ msgid "barcode.rule"
-#~ msgstr "regla.barra de codigos"
diff --git a/barcode_generator_partner/i18n/fr.po b/barcode_generator_partner/i18n/fr.po
deleted file mode 100644
index 246d6ca..0000000
--- a/barcode_generator_partner/i18n/fr.po
+++ /dev/null
@@ -1,127 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-# Translators:
-# OCA Transbot , 2017
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-02 00:27+0000\n"
-"PO-Revision-Date: 2017-05-02 00:27+0000\n"
-"Last-Translator: OCA Transbot , 2017\n"
-"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr "Règle de code barre"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr "Générer un code barre (via règle de codes barre)"
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr "Générer une base (via une séquence)"
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-#, fuzzy
-msgid "Generate Model"
-msgstr "Type de génération"
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-#, fuzzy
-msgid "Partners"
-msgstr "Partenaire"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
-#~ msgid ""
-#~ "Allow to generate barcode, including a number (a base) in the final "
-#~ "barcode.\n"
-#~ " 'Base Set Manually' : User should set manually the value of the barcode "
-#~ "base\n"
-#~ " 'Base managed by Sequence': User will use a button to generate a new "
-#~ "base. This base will be generated by a sequence"
-#~ msgstr ""
-#~ "Autorise à générer des codes barre en incluant un numéro (base du code "
-#~ "barre) dans le code barre final.\n"
-#~ " 'Base indiquée manuellement' : L'utilisateur devra indiquer manuellement "
-#~ "la base du barcode\n"
-#~ " 'Base gérée via une séquence': L'utilisateur devra utiliser un boutton "
-#~ "pour générer une nouvelle base. Cette base sera générée par une séquence"
-
-#~ msgid "Barcode Base"
-#~ msgstr "Base du code Barre"
-
-#~ msgid "barcode.rule"
-#~ msgstr "barcode.rule"
diff --git a/barcode_generator_partner/i18n/hr.po b/barcode_generator_partner/i18n/hr.po
deleted file mode 100644
index a3884f4..0000000
--- a/barcode_generator_partner/i18n/hr.po
+++ /dev/null
@@ -1,128 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-# Translators:
-# Bole , 2017
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-02-15 02:01+0000\n"
-"PO-Revision-Date: 2018-02-15 02:01+0000\n"
-"Last-Translator: Bole , 2017\n"
-"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
-"Language: hr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr "Barkod pravilo"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr "Generiraj barkod (koristeći pravilo)"
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr "Generiraj osnovno ( koristi br.krug)"
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-#, fuzzy
-msgid "Generate Model"
-msgstr "Tip generatora"
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-#, fuzzy
-msgid "Partners"
-msgstr "Partner"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
-#~ msgid ""
-#~ "Allow to generate barcode, including a number (a base) in the final "
-#~ "barcode.\n"
-#~ " 'Base Set Manually' : User should set manually the value of the barcode "
-#~ "base\n"
-#~ " 'Base managed by Sequence': User will use a button to generate a new "
-#~ "base. This base will be generated by a sequence"
-#~ msgstr ""
-#~ "Omogućuje generiranje barkodova, uključujući broj(osnova) u finalnom "
-#~ "barkodu.\n"
-#~ "'Osnova postavljena ručno' : korisnik treba ručno postaviti vrijednost "
-#~ "osnovice barkoda.\n"
-#~ "'Osnova prema sekvenci' : korisnik će koristiti guzmb za generirnje nove "
-#~ "osnove. Ta osnova će biti generirana iz sekvence."
-
-#~ msgid "Barcode Base"
-#~ msgstr "Osnova barkodova"
-
-#~ msgid "barcode.rule"
-#~ msgstr "barcode.rule"
diff --git a/barcode_generator_partner/i18n/nl_NL.po b/barcode_generator_partner/i18n/nl_NL.po
deleted file mode 100644
index 5496f50..0000000
--- a/barcode_generator_partner/i18n/nl_NL.po
+++ /dev/null
@@ -1,108 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * barcodes_generator_partner
-#
-# Translators:
-# Peter Hageman , 2017
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-07-07 15:18+0000\n"
-"PO-Revision-Date: 2017-07-07 15:18+0000\n"
-"Last-Translator: Peter Hageman , 2017\n"
-"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
-"teams/23907/nl_NL/)\n"
-"Language: nl_NL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Alias"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule
-msgid "Barcode Rule"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Client"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model,name:barcodes_generator_partner.model_res_partner
-msgid "Contact"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Barcode (Using Barcode Rule)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form
-msgid "Generate Base (Using Sequence)"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "Generate Model"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model
-msgid "If 'Generate Type' is set, mention the model related to this rule."
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Lot"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Package"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Partners"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Products"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,generate_model:0
-msgid "Stock Location"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type
-msgid "Type"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Unit Product"
-msgstr ""
-
-#. module: barcodes_generator_partner
-#: selection:barcode.rule,type:0
-msgid "Weighted Product"
-msgstr ""
-
-#~ msgid "barcode.rule"
-#~ msgstr "barcode.rule"
diff --git a/barcode_generator_partner/models/__init__.py b/barcode_generator_partner/models/__init__.py
deleted file mode 100644
index d04ceba..0000000
--- a/barcode_generator_partner/models/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from . import barcode_rule
-from . import res_partner
diff --git a/barcode_generator_partner/models/barcode_rule.py b/barcode_generator_partner/models/barcode_rule.py
deleted file mode 100644
index 5442fb5..0000000
--- a/barcode_generator_partner/models/barcode_rule.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (C) 2014-Today GRAP (http://www.grap.coop)
-# Copyright (C) 2016-Today La Louve (http://www.lalouve.net)
-# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import fields, models
-
-
-class BarcodeRule(models.Model):
- _inherit = "barcode.rule"
-
- generate_model = fields.Selection(selection_add=[("res.partner", "Partners")])
diff --git a/barcode_generator_partner/models/res_partner.py b/barcode_generator_partner/models/res_partner.py
deleted file mode 100644
index 63490f2..0000000
--- a/barcode_generator_partner/models/res_partner.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (C) 2014-Today GRAP (http://www.grap.coop)
-# Copyright (C) 2016-Today La Louve (http://www.lalouve.net)
-# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import models
-
-
-class ResPartner(models.Model):
- _name = "res.partner"
- _inherit = ["res.partner", "barcode.generate.mixin"]
diff --git a/barcode_generator_partner/readme/CONFIGURE.rst b/barcode_generator_partner/readme/CONFIGURE.rst
deleted file mode 100644
index f49c227..0000000
--- a/barcode_generator_partner/readme/CONFIGURE.rst
+++ /dev/null
@@ -1 +0,0 @@
-* To configure this module, see the 'Configuration' Section of the description of the module 'barcodes_generator_abstract'
diff --git a/barcode_generator_partner/readme/CONTRIBUTORS.rst b/barcode_generator_partner/readme/CONTRIBUTORS.rst
deleted file mode 100644
index 26d1341..0000000
--- a/barcode_generator_partner/readme/CONTRIBUTORS.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-* Sylvain LE GAL (https://twitter.com/legalsylvain)
-* Dave Lasley
-* Druidoo (https://druidoo.io)
-* Armand POLMARD (https://github.com/ArPol-developpement)
diff --git a/barcode_generator_partner/readme/DESCRIPTION.rst b/barcode_generator_partner/readme/DESCRIPTION.rst
deleted file mode 100644
index 12c9c26..0000000
--- a/barcode_generator_partner/readme/DESCRIPTION.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-This module expands Odoo functionality, allowing user to generate barcode
-depending on a given barcode rule for Partners.
-
-For example, a typical pattern for partners is "042........." that means
-that:
-
-* the EAN13 code will begin by '042'
-* followed by 0 digits (named Barcode Base in this module)
-* a 13 digit control
-
-With this module, it is possible to:
-
-* Assign a pattern (barcode.rule) to a res.partner
-
-* Define a Barcode base:
- * manually, if the base of the barcode must be set by a user. (typically an
- internal code defined in your company)
- * automaticaly by a sequence, if you want to let Odoo to increment a
- sequence. (typical case of a customer number incrementation)
-
-* Generate a barcode, based on the defined pattern and the barcode base
diff --git a/barcode_generator_partner/readme/USAGE.rst b/barcode_generator_partner/readme/USAGE.rst
deleted file mode 100644
index 952c993..0000000
--- a/barcode_generator_partner/readme/USAGE.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-To use this module, you need to:
-
-* Go to a Customer/Contact form, Sales & Purchases Tab:
-
-1 for manual generation
- * Set a Barcode Rule
- * Set a Barcode Base
- * click on the button 'Generate Barcode (Using Barcode Rule)'
-
-2 for automatic generation
- * Set a Barcode Rule
- * click on the button 'Generate Base (Using Sequence)'
- * click on the button 'Generate Barcode (Using Barcode Rule)'
-
-.. image:: /barcodes_generator_partner/static/description/res_partner_sequence_generation.png
- :width: 1100px
diff --git a/barcode_generator_partner/static/description/icon.png b/barcode_generator_partner/static/description/icon.png
deleted file mode 100644
index 00f4e89..0000000
Binary files a/barcode_generator_partner/static/description/icon.png and /dev/null differ
diff --git a/barcode_generator_partner/static/description/res_partner_sequence_generation.png b/barcode_generator_partner/static/description/res_partner_sequence_generation.png
deleted file mode 100644
index 4b16e35..0000000
Binary files a/barcode_generator_partner/static/description/res_partner_sequence_generation.png and /dev/null differ
diff --git a/barcode_generator_partner/tests/__init__.py b/barcode_generator_partner/tests/__init__.py
deleted file mode 100644
index 22d1a55..0000000
--- a/barcode_generator_partner/tests/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from . import test_barcodes_generator_partner
diff --git a/barcode_generator_partner/tests/test_barcodes_generator_partner.py b/barcode_generator_partner/tests/test_barcodes_generator_partner.py
deleted file mode 100644
index 2c72523..0000000
--- a/barcode_generator_partner/tests/test_barcodes_generator_partner.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (C) 2016-Today GRAP (http://www.grap.coop)
-# Copyright (C) 2016-Today La Louve (http://www.lalouve.net)
-# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo.tests.common import TransactionCase
-
-
-class Tests(TransactionCase):
- """Tests for 'Barcodes Generate"""
-
- def setUp(self):
- super().setUp()
- self.partner_obj = self.env["res.partner"]
-
- # Test Section
- def test_01_sequence_generation_partner(self):
- self.partner = self.partner_obj.browse(
- self.ref("barcodes_generator_partner.res_partner_barcode")
- )
- self.partner.generate_barcode()
- self.assertEqual(
- self.partner.barcode_base,
- 1,
- "Incorrect base Generation (by sequence) for Partner.",
- )
- self.assertEqual(
- self.partner.barcode,
- "0420000000013",
- "Barcode Generation (by sequence) for Partner."
- "Incorrect EAN13 Generated. Pattern : %s - Base : %s"
- % (self.partner.barcode_rule_id.pattern, self.partner.barcode_base),
- )
diff --git a/barcode_generator_partner/views/view_res_partner.xml b/barcode_generator_partner/views/view_res_partner.xml
deleted file mode 100644
index 4050f09..0000000
--- a/barcode_generator_partner/views/view_res_partner.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
- res.partner
-
-
-
-
-
-
-
-
-
-
- {'readonly': [('generate_type', '=', 'sequence')]}
-
-
-
-
-
-
-
-
-
diff --git a/check_addon.sh b/check_addon.sh
new file mode 100755
index 0000000..5f9c63c
--- /dev/null
+++ b/check_addon.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Script para verificar rápidamente un addon específico
+
+set -e
+
+if [ -z "$1" ]; then
+ echo "Uso: $0 "
+ echo "Ejemplo: $0 account_invoice_triple_discount"
+ exit 1
+fi
+
+ADDON_NAME=$1
+ADDON_PATH="./$ADDON_NAME"
+
+if [ ! -d "$ADDON_PATH" ]; then
+ echo "Error: El addon '$ADDON_NAME' no existe en este directorio"
+ exit 1
+fi
+
+if [ ! -f "$ADDON_PATH/__manifest__.py" ] && [ ! -f "$ADDON_PATH/__openerp__.py" ]; then
+ echo "Error: '$ADDON_NAME' no parece ser un addon válido de Odoo"
+ exit 1
+fi
+
+echo "=========================================="
+echo "Verificando addon: $ADDON_NAME"
+echo "=========================================="
+echo ""
+
+echo "1. Ejecutando black..."
+black --check "$ADDON_PATH" || (echo "❌ Black encontró problemas de formato" && black "$ADDON_PATH" && echo "✅ Formateado con black")
+
+echo ""
+echo "2. Ejecutando isort..."
+isort --check-only "$ADDON_PATH" || (echo "❌ isort encontró problemas" && isort "$ADDON_PATH" && echo "✅ Imports ordenados con isort")
+
+echo ""
+echo "3. Ejecutando flake8..."
+flake8 "$ADDON_PATH" && echo "✅ flake8 pasó correctamente" || echo "❌ flake8 encontró problemas"
+
+echo ""
+echo "4. Ejecutando pylint (checks mandatorios)..."
+pylint --rcfile=.pylintrc-mandatory "$ADDON_PATH" && echo "✅ pylint mandatorio pasó correctamente" || echo "❌ pylint mandatorio encontró problemas"
+
+echo ""
+echo "5. Ejecutando pylint (checks opcionales)..."
+pylint --rcfile=.pylintrc --exit-zero "$ADDON_PATH"
+
+echo ""
+echo "=========================================="
+echo "Verificación completa de $ADDON_NAME"
+echo "=========================================="
diff --git a/check_tax_config.sh b/check_tax_config.sh
new file mode 100755
index 0000000..ff65e98
--- /dev/null
+++ b/check_tax_config.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Verificar configuración de impuestos
+
+echo "=========================================="
+echo "Verificando configuración de impuestos"
+echo "=========================================="
+
+docker-compose exec -T db psql -U odoo -d odoo << 'SQL'
+-- Verificar impuestos de venta y su configuración de price_include
+SELECT
+ at.id,
+ at.name,
+ at.amount,
+ at.price_include,
+ at.type_tax_use,
+ rc.name as company
+FROM account_tax at
+LEFT JOIN res_company rc ON at.company_id = rc.id
+WHERE at.type_tax_use = 'sale'
+ AND at.active = true
+ORDER BY at.amount DESC
+LIMIT 20;
+SQL
+
+echo ""
+echo "Nota: Si price_include = false (f), entonces el precio NO incluye IVA"
+echo " Si price_include = true (t), entonces el precio SÍ incluye IVA"
diff --git a/code_backend_theme/README.rst b/code_backend_theme/README.rst
deleted file mode 100644
index 82f6d7d..0000000
--- a/code_backend_theme/README.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-Code Backend Theme
-==================
-* Code Backend Theme module for Odoo 16 community editions
-
-Installation
-============
- - www.odoo.com/documentation/16.0/setup/install.html
- - Install our custom addon
-
-License
--------
-General Public License, Version 3 (LGPL v3).
-(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html)
-
-Company
--------
-* 'Cybrosys Techno Solutions '__
-
-Credits
--------
-* 'Cybrosys Techno Solutions '__
-
-Contacts
---------
-* Mail Contact : odoo@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
-
-Further information
-===================
-HTML Description: ``__
-
diff --git a/code_backend_theme/__init__.py b/code_backend_theme/__init__.py
deleted file mode 100644
index 5042f46..0000000
--- a/code_backend_theme/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2021-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from .hooks import test_pre_init_hook, test_post_init_hook
diff --git a/code_backend_theme/__manifest__.py b/code_backend_theme/__manifest__.py
deleted file mode 100644
index 7f344dc..0000000
--- a/code_backend_theme/__manifest__.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2021-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-
-{
- "name": "Code Backend Theme V16",
- "description": """Minimalist and elegant backend theme for Odoo 16, Backend Theme, Theme""",
- "summary": "Code Backend Theme V16 is an attractive theme for backend",
- "category": "Themes/Backend",
- "version": "16.0.1.0.2",
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'maintainer': 'Cybrosys Techno Solutions',
- 'website': "https://www.cybrosys.com",
- "depends": ['base', 'web', 'mail'],
- "data": [
- 'views/layout.xml',
- 'views/icons.xml',
- ],
- 'assets': {
- 'web.assets_backend': [
- 'code_backend_theme/static/src/xml/styles.xml',
- 'code_backend_theme/static/src/xml/top_bar.xml',
- 'code_backend_theme/static/src/scss/theme_accent.scss',
- 'code_backend_theme/static/src/scss/navigation_bar.scss',
- 'code_backend_theme/static/src/scss/datetimepicker.scss',
- 'code_backend_theme/static/src/scss/theme.scss',
- 'code_backend_theme/static/src/scss/sidebar.scss',
- 'code_backend_theme/static/src/js/chrome/sidebar_menu.js',
- 'code_backend_theme/static/src/js/fields/colors.js',
- ],
- 'web.assets_frontend': [
- 'code_backend_theme/static/src/scss/login.scss',
- ],
- },
- 'images': [
- 'static/description/banner.png',
- 'static/description/theme_screenshot.png',
- ],
- 'license': 'LGPL-3',
- 'pre_init_hook': 'test_pre_init_hook',
- 'post_init_hook': 'test_post_init_hook',
- 'installable': True,
- 'application': False,
- 'auto_install': False,
-}
diff --git a/code_backend_theme/doc/RELEASE_NOTES.md b/code_backend_theme/doc/RELEASE_NOTES.md
deleted file mode 100644
index 0364c2d..0000000
--- a/code_backend_theme/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 17.10.2022
-#### Version 16.0.1.0.0
-#### ADD
-Initial Commit
diff --git a/code_backend_theme/hooks.py b/code_backend_theme/hooks.py
deleted file mode 100644
index 81a996b..0000000
--- a/code_backend_theme/hooks.py
+++ /dev/null
@@ -1,292 +0,0 @@
-"""Hooks for Changing Menu Web_icon"""
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2021-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-import base64
-
-from odoo import api, SUPERUSER_ID
-from odoo.modules import get_module_resource
-
-
-def test_pre_init_hook(cr):
- """pre init hook"""
-
- env = api.Environment(cr, SUPERUSER_ID, {})
- menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)])
-
- for menu in menu_item:
- if menu.name == 'Contacts':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Contacts.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Link Tracker':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Link Tracker.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Dashboards':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Dashboards.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Sales':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Sales.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Invoicing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Invoicing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Inventory':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Inventory.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Purchase':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Purchase.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Calendar':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Calendar.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'CRM':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'CRM.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Note' or menu.name == 'Notes':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Note.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Website':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Website.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Point of Sale':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Point of Sale.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Manufacturing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Manufacturing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Repairs':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Repairs.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Email Marketing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Email Marketing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'SMS Marketing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'SMS Marketing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Project':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Project.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Surveys':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Surveys.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Employees':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Employees.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Recruitment':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Recruitment.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Attendances':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Attendances.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Time Off':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Time Off.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Expenses':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Expenses.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Maintenance':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Maintenance.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Live Chat':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Live Chat.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Lunch':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Lunch.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Fleet':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Fleet.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Timesheets':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Timesheets.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Events':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Events.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'eLearning':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'eLearning.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Members':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Members.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
-
-
-def test_post_init_hook(cr, registry):
- """post init hook"""
-
- env = api.Environment(cr, SUPERUSER_ID, {})
- menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)])
-
- for menu in menu_item:
- if menu.name == 'Contacts':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Contacts.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Link Tracker':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Link Tracker.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Dashboards':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Dashboards.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Sales':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Sales.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Invoicing' or menu.name == 'Accounting':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Invoicing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Inventory':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Inventory.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Purchase':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Purchase.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Calendar':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Calendar.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'CRM':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'CRM.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Note':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Note.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Website':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Website.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Point of Sale':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Point of Sale.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Manufacturing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Manufacturing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Repairs':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Repairs.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Email Marketing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Email Marketing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'SMS Marketing':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'SMS Marketing.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Project':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Project.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Surveys':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Surveys.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Employees':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Employees.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Recruitment':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Recruitment.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Attendances':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Attendances.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Time Off':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Time Off.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Expenses':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Expenses.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Maintenance':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Maintenance.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Live Chat':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Live Chat.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Lunch':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Lunch.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Fleet':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Fleet.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Timesheets':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Timesheets.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Events':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Events.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'eLearning':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'eLearning.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
- if menu.name == 'Members':
- img_path = get_module_resource(
- 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Members.png')
- menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())})
diff --git a/code_backend_theme/static/description/assets/all_screens.png b/code_backend_theme/static/description/assets/all_screens.png
deleted file mode 100644
index dda177c..0000000
Binary files a/code_backend_theme/static/description/assets/all_screens.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/easily-access-menu.gif b/code_backend_theme/static/description/assets/easily-access-menu.gif
deleted file mode 100644
index 08340f3..0000000
Binary files a/code_backend_theme/static/description/assets/easily-access-menu.gif and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/hero.png b/code_backend_theme/static/description/assets/hero.png
deleted file mode 100644
index e4415fd..0000000
Binary files a/code_backend_theme/static/description/assets/hero.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/check.png b/code_backend_theme/static/description/assets/icons/check.png
deleted file mode 100644
index c8e85f5..0000000
Binary files a/code_backend_theme/static/description/assets/icons/check.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/chevron.png b/code_backend_theme/static/description/assets/icons/chevron.png
deleted file mode 100644
index 2089293..0000000
Binary files a/code_backend_theme/static/description/assets/icons/chevron.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/cogs.png b/code_backend_theme/static/description/assets/icons/cogs.png
deleted file mode 100644
index 95d0bad..0000000
Binary files a/code_backend_theme/static/description/assets/icons/cogs.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/consultation.png b/code_backend_theme/static/description/assets/icons/consultation.png
deleted file mode 100644
index 8319d4b..0000000
Binary files a/code_backend_theme/static/description/assets/icons/consultation.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/ecom-black.png b/code_backend_theme/static/description/assets/icons/ecom-black.png
deleted file mode 100644
index a9385ff..0000000
Binary files a/code_backend_theme/static/description/assets/icons/ecom-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/education-black.png b/code_backend_theme/static/description/assets/icons/education-black.png
deleted file mode 100644
index 3eb09b2..0000000
Binary files a/code_backend_theme/static/description/assets/icons/education-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/hotel-black.png b/code_backend_theme/static/description/assets/icons/hotel-black.png
deleted file mode 100644
index 130f613..0000000
Binary files a/code_backend_theme/static/description/assets/icons/hotel-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/license.png b/code_backend_theme/static/description/assets/icons/license.png
deleted file mode 100644
index a586979..0000000
Binary files a/code_backend_theme/static/description/assets/icons/license.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/lifebuoy.png b/code_backend_theme/static/description/assets/icons/lifebuoy.png
deleted file mode 100644
index 658d56c..0000000
Binary files a/code_backend_theme/static/description/assets/icons/lifebuoy.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/manufacturing-black.png b/code_backend_theme/static/description/assets/icons/manufacturing-black.png
deleted file mode 100644
index 697eb0e..0000000
Binary files a/code_backend_theme/static/description/assets/icons/manufacturing-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/pos-black.png b/code_backend_theme/static/description/assets/icons/pos-black.png
deleted file mode 100644
index 97c0f90..0000000
Binary files a/code_backend_theme/static/description/assets/icons/pos-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/puzzle.png b/code_backend_theme/static/description/assets/icons/puzzle.png
deleted file mode 100644
index 65cf854..0000000
Binary files a/code_backend_theme/static/description/assets/icons/puzzle.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/restaurant-black.png b/code_backend_theme/static/description/assets/icons/restaurant-black.png
deleted file mode 100644
index 4a35eb9..0000000
Binary files a/code_backend_theme/static/description/assets/icons/restaurant-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/service-black.png b/code_backend_theme/static/description/assets/icons/service-black.png
deleted file mode 100644
index 301ab51..0000000
Binary files a/code_backend_theme/static/description/assets/icons/service-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/trading-black.png b/code_backend_theme/static/description/assets/icons/trading-black.png
deleted file mode 100644
index 9398ba2..0000000
Binary files a/code_backend_theme/static/description/assets/icons/trading-black.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/training.png b/code_backend_theme/static/description/assets/icons/training.png
deleted file mode 100644
index 884ca02..0000000
Binary files a/code_backend_theme/static/description/assets/icons/training.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/update.png b/code_backend_theme/static/description/assets/icons/update.png
deleted file mode 100644
index ecbc5a0..0000000
Binary files a/code_backend_theme/static/description/assets/icons/update.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/user.png b/code_backend_theme/static/description/assets/icons/user.png
deleted file mode 100644
index 6ffb23d..0000000
Binary files a/code_backend_theme/static/description/assets/icons/user.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/icons/wrench.png b/code_backend_theme/static/description/assets/icons/wrench.png
deleted file mode 100644
index 6c04dea..0000000
Binary files a/code_backend_theme/static/description/assets/icons/wrench.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/menu_focus.png b/code_backend_theme/static/description/assets/menu_focus.png
deleted file mode 100644
index dc7b00c..0000000
Binary files a/code_backend_theme/static/description/assets/menu_focus.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/categories.png b/code_backend_theme/static/description/assets/misc/categories.png
deleted file mode 100644
index bedf1e0..0000000
Binary files a/code_backend_theme/static/description/assets/misc/categories.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/check-box.png b/code_backend_theme/static/description/assets/misc/check-box.png
deleted file mode 100644
index 42caf24..0000000
Binary files a/code_backend_theme/static/description/assets/misc/check-box.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/compass.png b/code_backend_theme/static/description/assets/misc/compass.png
deleted file mode 100644
index d5fed8f..0000000
Binary files a/code_backend_theme/static/description/assets/misc/compass.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/corporate.png b/code_backend_theme/static/description/assets/misc/corporate.png
deleted file mode 100644
index 2eb13ed..0000000
Binary files a/code_backend_theme/static/description/assets/misc/corporate.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/customer-support.png b/code_backend_theme/static/description/assets/misc/customer-support.png
deleted file mode 100644
index 79efc72..0000000
Binary files a/code_backend_theme/static/description/assets/misc/customer-support.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/cybrosys-logo.png b/code_backend_theme/static/description/assets/misc/cybrosys-logo.png
deleted file mode 100644
index cc3cc0c..0000000
Binary files a/code_backend_theme/static/description/assets/misc/cybrosys-logo.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/features.png b/code_backend_theme/static/description/assets/misc/features.png
deleted file mode 100644
index b41769f..0000000
Binary files a/code_backend_theme/static/description/assets/misc/features.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/logo.png b/code_backend_theme/static/description/assets/misc/logo.png
deleted file mode 100644
index 478462d..0000000
Binary files a/code_backend_theme/static/description/assets/misc/logo.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/pictures.png b/code_backend_theme/static/description/assets/misc/pictures.png
deleted file mode 100644
index 56d255f..0000000
Binary files a/code_backend_theme/static/description/assets/misc/pictures.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/pie-chart.png b/code_backend_theme/static/description/assets/misc/pie-chart.png
deleted file mode 100644
index 426e052..0000000
Binary files a/code_backend_theme/static/description/assets/misc/pie-chart.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/right-arrow.png b/code_backend_theme/static/description/assets/misc/right-arrow.png
deleted file mode 100644
index 730984a..0000000
Binary files a/code_backend_theme/static/description/assets/misc/right-arrow.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/star.png b/code_backend_theme/static/description/assets/misc/star.png
deleted file mode 100644
index 2eb9ab2..0000000
Binary files a/code_backend_theme/static/description/assets/misc/star.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/support.png b/code_backend_theme/static/description/assets/misc/support.png
deleted file mode 100644
index 4f18b8b..0000000
Binary files a/code_backend_theme/static/description/assets/misc/support.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/misc/whatsapp.png b/code_backend_theme/static/description/assets/misc/whatsapp.png
deleted file mode 100644
index d513a53..0000000
Binary files a/code_backend_theme/static/description/assets/misc/whatsapp.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/1.png b/code_backend_theme/static/description/assets/modules/1.png
deleted file mode 100644
index 5238bde..0000000
Binary files a/code_backend_theme/static/description/assets/modules/1.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/2.png b/code_backend_theme/static/description/assets/modules/2.png
deleted file mode 100644
index 1ae7cfe..0000000
Binary files a/code_backend_theme/static/description/assets/modules/2.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/3.png b/code_backend_theme/static/description/assets/modules/3.png
deleted file mode 100644
index 3c3ff1a..0000000
Binary files a/code_backend_theme/static/description/assets/modules/3.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/4.png b/code_backend_theme/static/description/assets/modules/4.png
deleted file mode 100644
index 3fae463..0000000
Binary files a/code_backend_theme/static/description/assets/modules/4.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/5.gif b/code_backend_theme/static/description/assets/modules/5.gif
deleted file mode 100644
index 2a5f8e6..0000000
Binary files a/code_backend_theme/static/description/assets/modules/5.gif and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/modules/6.png b/code_backend_theme/static/description/assets/modules/6.png
deleted file mode 100644
index 7f28152..0000000
Binary files a/code_backend_theme/static/description/assets/modules/6.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/resp-gif.gif b/code_backend_theme/static/description/assets/resp-gif.gif
deleted file mode 100644
index f6939e0..0000000
Binary files a/code_backend_theme/static/description/assets/resp-gif.gif and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/responsive.jpg b/code_backend_theme/static/description/assets/responsive.jpg
deleted file mode 100644
index 06cb4e9..0000000
Binary files a/code_backend_theme/static/description/assets/responsive.jpg and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/1.png b/code_backend_theme/static/description/assets/screenshots/1.png
deleted file mode 100644
index ae85974..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/1.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png b/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png
deleted file mode 100644
index a365ac4..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/10.png b/code_backend_theme/static/description/assets/screenshots/10.png
deleted file mode 100644
index bbdb1f2..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/10.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/11.png b/code_backend_theme/static/description/assets/screenshots/11.png
deleted file mode 100644
index 9569c40..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/11.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/11.recruitment.png b/code_backend_theme/static/description/assets/screenshots/11.recruitment.png
deleted file mode 100644
index cf5f0a4..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/11.recruitment.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/12.png b/code_backend_theme/static/description/assets/screenshots/12.png
deleted file mode 100644
index 2efcdb2..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/12.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png b/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png
deleted file mode 100644
index cd444ff..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png b/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png
deleted file mode 100644
index 3d30005..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/13.png b/code_backend_theme/static/description/assets/screenshots/13.png
deleted file mode 100644
index 2032c09..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/13.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/14.png b/code_backend_theme/static/description/assets/screenshots/14.png
deleted file mode 100644
index 72daae4..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/14.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png b/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png
deleted file mode 100644
index a15a09f..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/16grapghview.png b/code_backend_theme/static/description/assets/screenshots/16grapghview.png
deleted file mode 100644
index f30cacb..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/16grapghview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png b/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png
deleted file mode 100644
index 93001bc..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png b/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png
deleted file mode 100644
index babf27b..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/2.png b/code_backend_theme/static/description/assets/screenshots/2.png
deleted file mode 100644
index ed8bf28..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/2.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/3.png b/code_backend_theme/static/description/assets/screenshots/3.png
deleted file mode 100644
index 82147fb..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/3.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/3.settings page.png b/code_backend_theme/static/description/assets/screenshots/3.settings page.png
deleted file mode 100644
index ea62e8c..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/3.settings page.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/4.discusspage.png b/code_backend_theme/static/description/assets/screenshots/4.discusspage.png
deleted file mode 100644
index c81b6bd..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/4.discusspage.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/4.png b/code_backend_theme/static/description/assets/screenshots/4.png
deleted file mode 100644
index 593473d..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/4.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/5.png b/code_backend_theme/static/description/assets/screenshots/5.png
deleted file mode 100644
index 9d323ce..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/5.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png b/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png
deleted file mode 100644
index 8305b92..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/6.png b/code_backend_theme/static/description/assets/screenshots/6.png
deleted file mode 100644
index 26a82e8..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/6.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/6.purchase view.png b/code_backend_theme/static/description/assets/screenshots/6.purchase view.png
deleted file mode 100644
index 140a74f..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/6.purchase view.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/7.png b/code_backend_theme/static/description/assets/screenshots/7.png
deleted file mode 100644
index 0c0816a..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/7.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png b/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png
deleted file mode 100644
index 1f30fcf..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/8.png b/code_backend_theme/static/description/assets/screenshots/8.png
deleted file mode 100644
index 9e7e3a3..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/8.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/8error.png b/code_backend_theme/static/description/assets/screenshots/8error.png
deleted file mode 100644
index 447fa01..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/8error.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/9.png b/code_backend_theme/static/description/assets/screenshots/9.png
deleted file mode 100644
index 515cba7..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/9.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/Form view.png b/code_backend_theme/static/description/assets/screenshots/Form view.png
deleted file mode 100644
index 4563357..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/Form view.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png b/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png
deleted file mode 100644
index 607b257..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png b/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png
deleted file mode 100644
index d6f3f0d..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/listview.png b/code_backend_theme/static/description/assets/screenshots/listview.png
deleted file mode 100644
index a816045..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/listview.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/login.png b/code_backend_theme/static/description/assets/screenshots/login.png
deleted file mode 100644
index cb6e824..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/login.png and /dev/null differ
diff --git a/code_backend_theme/static/description/assets/screenshots/modal.png b/code_backend_theme/static/description/assets/screenshots/modal.png
deleted file mode 100644
index b89e182..0000000
Binary files a/code_backend_theme/static/description/assets/screenshots/modal.png and /dev/null differ
diff --git a/code_backend_theme/static/description/banner.png b/code_backend_theme/static/description/banner.png
deleted file mode 100644
index e62c9f3..0000000
Binary files a/code_backend_theme/static/description/banner.png and /dev/null differ
diff --git a/code_backend_theme/static/description/icon.png b/code_backend_theme/static/description/icon.png
deleted file mode 100644
index 260f9ab..0000000
Binary files a/code_backend_theme/static/description/icon.png and /dev/null differ
diff --git a/code_backend_theme/static/description/index.html b/code_backend_theme/static/description/index.html
deleted file mode 100644
index 1645027..0000000
--- a/code_backend_theme/static/description/index.html
+++ /dev/null
@@ -1,1108 +0,0 @@
-
-
-
-
-
- Code Backend Theme
-
-
- Minimalist and Elegant Backend
- Theme for Odoo 16
-
-
-
-
-
-
-
-
-
-
-
-
-
- The Code Backend Theme V16 Gives You a Fully Modified View with
- a Full Screen Display.
- This is a Minimalist and Elegant Backend Theme for Odoo 16.
- This Theme Will Change Your Old Experience to a New Experience
- With Odoo.
- It is a Perfect Choice for Your Odoo Backend and an Attractive
- Theme for Your Odoo 16.
- It will Give You a Clean Layout with a New Color Combination and
- a Modified Font. It has a
- Sidebar with
- New App Icons and Company Logo. This Will Change Your Old
- Kanban, List and Form Views to A Fully
- Modified View.
-
-
-
-
- Please make sure that you install
- all
- your apps prior to the installation of this theme.
-
- Now take advantage of everything your dashboard has to
- offer even on the go. Our design are
- now
- fully responsive enabling you to view and manage
- everything from the comfort of your mobile
- device. Everything
- has been designed in a meticulous fashion so that every
- view snaps itself to fit the size of
- the
- device you are using, be it smartphones, tablet or any
- other portables, our theme adjusts
- itself
- to fit the screen size.
-
-
-
-
Fully responsive
-
-
-
-
-
Fly-out hamburger menu on the left
-
-
-
-
-
Fits perfectly to all screen sizes
-
-
-
-
-
Quick access menu at the bottom in discuss
-
-
-
-
-
-
-
-
-
-
-
-
-
Kanban Group View
-
- The Code Backend Theme V16 Gives You a Fully Modified Kanban
- View and Kanban Group View.
- The Section Wise Separated Stages give a Pleasant Experience
- And an Extraordinary Design
- To Your Content Tiles Making The Tiles Look Great.
- It will Give You a Clean Layout with the New Color
- Combination and a Modified Font.
-
-
-
-
-
-
Modified Font
-
-
-
-
-
New Color Combination
-
-
-
-
-
Full Screen View
-
-
-
-
-
-
-
Stages are Separated in View
-
-
-
-
-
Clean Layout
-
-
-
-
-
Buttons with New Colors
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
List View
-
- The All new Code Backend Theme V16 Gives You The Fully
- Modified List View and This Table Design
- is Also Have Awesome Design and it Gives You More Beauty for
- Your Odoo Backend.
- It will Give You a Clean Layout with the New Color
- Combination and a Modified Font.
-
-
-
-
-
-
Modified Table Style
-
-
-
-
-
New Color Combination
-
-
-
-
-
New Scroll Bar
-
-
-
-
-
-
-
New Status Tag
-
-
-
-
-
New Scrollbar
-
-
-
-
-
Buttons with New Colors
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Form View
-
- Code Backend Theme Gives You The Fully Modified Form View
- with a Full Screen Experience. It will
- Give You a Clean Layout with the New Color Combination
- and a Modified Font.
-
-
-
-
-
-
Modified Form Style
-
-
-
-
-
Full Screen Form View
-
-
-
-
-
New Looks for Tabs
-
-
-
-
-
-
-
New Style for Required Field
-
-
-
-
-
New Chatter Style Under Form View
-
-
-
-
-
New Looks for Status Button
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview
-
- Code Backend Theme V16 is an Attractive Theme for Your
- Odoo 16.
- This Theme Will Change Improve Your Experience With
- Odoo.
- This is a Minimalist and Elegant Backend Theme for Odoo
- 16 And Can Offer a Perfect Choice
- for
- Your Odoo Backend.
-
-
-
-
-
Modified Structure for All Type Views
-
-
-
-
-
New Style for Active Menus, Radio Buttons and Checkboxes
-
-
-
-
New Color Combination
-
-
-
-
-
New Look for All Applications
-
-
-
-
A Clean layout and New Font Style
-
-
-
-
Sidebar with New Menu Icons
-
-
-
-
-
-
-
-
-
-
- New
-
-
- All-New Menu Design
-
-
- The All-New Menu Design is Main Attractive Section for
- the Code Backend Theme. The Sidebar
- have New Minimalist
- Icons for Applications in Odoo. Also the Sidebar Have
- Closing and Opening Option.
- Customisable Logo Attached in Sidebar
- That is Automatically Fetch Your Company Logo.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Easily Access Sidebar
- Menu
-
- Reveal the sidebar menu with just a click. Sidebar menu
- features all the relevant links to
- navigate
- through the application.
- Hiding the sidebar leaves more space on the main area
- offering a distraction-free view that lets
- you
- focus on what matters the most.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Screenshots
-
-
-
-
-
-
-
-
- 1
-
-
Login Page
-
-
-
-
-
-
-
-
-
-
-
-
- 2
-
-
Group By View
-
-
-
-
-
-
-
-
-
-
-
-
- 3
-
-
Settings Page
-
-
-
-
-
-
-
-
-
-
-
-
- 4
-
-
Discuss Page
-
-
-
-
-
-
-
-
-
-
-
-
- 5
-
-
Product Kanban View
-
-
-
-
-
-
-
-
-
-
-
-
- 6
-
-
Purchase List View
-
-
-
-
-
-
-
-
-
-
-
-
- 7
-
-
Product View with Smart Buttons
-
-
-
-
-
-
-
-
-
-
-
- 8
-
-
Modified Alert Notifications are
- Placed on the Right Bottom of Display
-
-
-
-
-
-
-
-
-
-
-
-
-
- 9
-
-
Wizards and User Error Popups
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
New Looks for The Tabs
-
-
-
-
-
-
-
-
-
-
-
-
- 11
-
-
Recruitment Kanban View With
- Ribbons
-
-
-
-
-
-
-
-
-
-
-
- 12
-
-
Sales Kanban View
-
-
-
-
-
-
-
-
-
-
-
-
- 13
-
-
Modified Kanban View for Employees
- With New Designed Category Section
-
-
-
-
-
-
-
-
-
-
-
-
-
- 14
-
-
Sidebar with List View
-
-
-
-
-
-
-
-
-
-
-
-
-
- 15
-
-
Attendance Pages
-
-
-
-
-
-
-
-
-
-
-
-
- 16
-
-
Graphs with Sidebar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Our Services
-
-
-
-
-
-
-
- Odoo
- Customization
-
-
-
-
-
-
-
- Odoo
- Implementation
-
-
-
-
-
-
-
- Odoo
- Support
-
-
-
-
-
-
-
- Hire
- Odoo
- Developer
-
-
-
-
-
-
-
- Odoo
- Integration
-
-
-
-
-
-
-
- Odoo
- Migration
-
-
-
-
-
-
-
- Odoo
- Consultancy
-
-
-
-
-
-
-
- Odoo
- Implementation
-
-
-
-
-
-
-
- Odoo
- Licensing Consultancy
-
-
-
-
-
-
-
-
-
-
-
- Our Industries
-
-
-
-
-
-
- Trading
-
-
- Easily
- procure
- and
- sell your products
-
-
-
-
-
-
-
- POS
-
-
- Easy
- configuration
- and convivial experience
-
-
-
-
-
-
-
- Education
-
-
- A
- platform for
- educational management
-
-
-
-
-
-
-
- Manufacturing
-
-
- Plan,
- track and
- schedule your operations
-
-
-
-
-
-
- E-commerce & Website
-
-
- Mobile
- friendly,
- awe-inspiring product pages
-
-
-
-
-
-
- Service Management
-
-
- Keep
- track of
- services and invoice
-
-
-
-
-
-
- Restaurant
-
-
- Run
- your bar or
- restaurant methodically
-
-
-
-
-
-
- Hotel Management
-
-
- An
- all-inclusive
- hotel management application