From cbaece9c4fc85339b2415c280b62fd19c66b08c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Soledis=20-=20Cl=C3=A9ment=20Hervouet?= Date: Fri, 20 Feb 2026 12:08:11 +0100 Subject: [PATCH 1/2] Add database schema for B2B feature implementation --- upgrade/sql/9.1.0.sql | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/upgrade/sql/9.1.0.sql b/upgrade/sql/9.1.0.sql index f15dd269a..fdc6a8766 100644 --- a/upgrade/sql/9.1.0.sql +++ b/upgrade/sql/9.1.0.sql @@ -128,3 +128,103 @@ INSERT INTO `PREFIX_hook` (`id_hook`, `name`, `title`, `description`, `position` (NULL, 'actionOverrideShippingFreePrice', 'Override price that determines free shipping', 'Allows modules to override the free shipping price and return their custom value, for example to specify it by zone or other criteria.', '1'), (NULL, 'actionOverrideShippingFreeWeight', 'Override weight that determines free shipping', 'Allows modules to override the free shipping weight and return their custom value, for example to specify it by zone or other criteria.', '1') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), `description` = VALUES(`description`); + +/* Insert B2B foundation */ +/* https://github.com/PrestaShop/PrestaShop/pull/40632 */ +CREATE TABLE `PREFIX_business_entity` +( + `id_business_entity` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `enterprise_id` VARCHAR(255) NOT NULL, + `external_ref` VARCHAR(255) DEFAULT NULL, + `name` VARCHAR(255) NOT NULL, + `legal_name` VARCHAR(255) DEFAULT NULL, + `flag_delivery_authorized` TINYINT(1) NOT NULL DEFAULT 0, + `status` ENUM ('pending','active','inactive','rejected') NOT NULL DEFAULT 'pending', + `created_at` DATETIME NOT NULL, + `updated_at` DATETIME NOT NULL, + INDEX `business_entity_enterprise_id_idx` (`enterprise_id`), + INDEX `business_entity_external_ref_idx` (`external_ref`), + PRIMARY KEY (`id_business_entity`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_customer_b2b` +( + `id_customer_b2b` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `id_customer` INT UNSIGNED NOT NULL, + `status` ENUM ('pending','active','refused') NOT NULL DEFAULT 'pending', + `external_ref` VARCHAR(255) DEFAULT NULL, + `created_at` DATETIME NOT NULL, + `updated_at` DATETIME NOT NULL, + UNIQUE INDEX `uniq_customer_b2b_customer` (`id_customer`), + PRIMARY KEY (`id_customer_b2b`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_business_entity_customer_b2b` +( + `id_business_entity_customer_b2b` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `id_business_entity` INT UNSIGNED NOT NULL, + `id_customer_b2b` INT UNSIGNED NOT NULL, + `id_role_b2b` INT UNSIGNED NOT NULL, + `is_default` TINYINT(1) NOT NULL DEFAULT 0, + `created_at` DATETIME NOT NULL, + UNIQUE INDEX `uniq_be_customer` (`id_business_entity`, `id_customer_b2b`), + INDEX `business_entity_customer_b2b_be_idx` (`id_business_entity`), + INDEX `business_entity_customer_b2b_customer_idx` (`id_customer_b2b`), + INDEX `business_entity_customer_b2b_role_idx` (`id_role_b2b`), + PRIMARY KEY (`id_business_entity_customer_b2b`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_business_entity_identifier` +( + `id_identifier` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `id_business_entity` INT UNSIGNED NOT NULL, + `id_business_identifier` INT UNSIGNED NOT NULL, + `value` VARCHAR(255) NOT NULL, + UNIQUE INDEX `uniq_business_entity_identifier` (`id_business_entity`, `id_business_identifier`), + INDEX `business_entity_identifier_id_business_entity_idx` (`id_business_entity`), + INDEX `business_entity_identifier_id_business_identifier_idx` (`id_business_identifier`), + INDEX `business_entity_identifier_value_idx` (`value`), + PRIMARY KEY (`id_identifier`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_business_identifier` +( + `id_business_identifier` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `unremovable` TINYINT(1) NOT NULL DEFAULT 0, + `deleted` TINYINT(1) NOT NULL DEFAULT 0, + PRIMARY KEY (`id_business_identifier`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_business_entity_address` +( + `id_business_entity` INT UNSIGNED NOT NULL, + `id_address` INT UNSIGNED NOT NULL, + `address_type` ENUM ('both','invoice','delivery') NOT NULL DEFAULT 'both', + PRIMARY KEY (`id_business_entity`, `id_address`), + INDEX `business_entity_address_address_idx` (`id_address`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_b2b_role` +( + `id_role` INT UNSIGNED AUTO_INCREMENT NOT NULL, + `role` VARCHAR(64) NOT NULL, + UNIQUE INDEX `uniq_b2b_role` (`role`), + PRIMARY KEY (`id_role`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; + +CREATE TABLE `PREFIX_b2b_role_authorization_role` +( + `id_role` INT UNSIGNED NOT NULL, + `id_authorization_role` INT UNSIGNED NOT NULL, + PRIMARY KEY (`id_role`, `id_authorization_role`), + INDEX `b2b_role_authorization_role_role_idx` (`id_role`), + INDEX `b2b_role_authorization_role_auth_role_idx` (`id_authorization_role`) +) ENGINE = ENGINE_TYPE + DEFAULT CHARSET = utf8mb4 COLLATION; \ No newline at end of file From 4d86a1cf2a2cab0504da288458fc718bdf6332fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Soledis=20-=20Cl=C3=A9ment=20Hervouet?= Date: Tue, 24 Feb 2026 14:43:46 +0100 Subject: [PATCH 2/2] fix database schema for B2B feature implementation --- upgrade/sql/9.1.0.sql | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/upgrade/sql/9.1.0.sql b/upgrade/sql/9.1.0.sql index fdc6a8766..1596362c3 100644 --- a/upgrade/sql/9.1.0.sql +++ b/upgrade/sql/9.1.0.sql @@ -145,8 +145,7 @@ CREATE TABLE `PREFIX_business_entity` INDEX `business_entity_enterprise_id_idx` (`enterprise_id`), INDEX `business_entity_external_ref_idx` (`external_ref`), PRIMARY KEY (`id_business_entity`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_customer_b2b` ( @@ -158,8 +157,7 @@ CREATE TABLE `PREFIX_customer_b2b` `updated_at` DATETIME NOT NULL, UNIQUE INDEX `uniq_customer_b2b_customer` (`id_customer`), PRIMARY KEY (`id_customer_b2b`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_business_entity_customer_b2b` ( @@ -174,8 +172,7 @@ CREATE TABLE `PREFIX_business_entity_customer_b2b` INDEX `business_entity_customer_b2b_customer_idx` (`id_customer_b2b`), INDEX `business_entity_customer_b2b_role_idx` (`id_role_b2b`), PRIMARY KEY (`id_business_entity_customer_b2b`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_business_entity_identifier` ( @@ -188,8 +185,7 @@ CREATE TABLE `PREFIX_business_entity_identifier` INDEX `business_entity_identifier_id_business_identifier_idx` (`id_business_identifier`), INDEX `business_entity_identifier_value_idx` (`value`), PRIMARY KEY (`id_identifier`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_business_identifier` ( @@ -197,8 +193,7 @@ CREATE TABLE `PREFIX_business_identifier` `unremovable` TINYINT(1) NOT NULL DEFAULT 0, `deleted` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id_business_identifier`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_business_entity_address` ( @@ -207,8 +202,7 @@ CREATE TABLE `PREFIX_business_entity_address` `address_type` ENUM ('both','invoice','delivery') NOT NULL DEFAULT 'both', PRIMARY KEY (`id_business_entity`, `id_address`), INDEX `business_entity_address_address_idx` (`id_address`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_b2b_role` ( @@ -216,8 +210,7 @@ CREATE TABLE `PREFIX_b2b_role` `role` VARCHAR(64) NOT NULL, UNIQUE INDEX `uniq_b2b_role` (`role`), PRIMARY KEY (`id_role`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `PREFIX_b2b_role_authorization_role` ( @@ -226,5 +219,4 @@ CREATE TABLE `PREFIX_b2b_role_authorization_role` PRIMARY KEY (`id_role`, `id_authorization_role`), INDEX `b2b_role_authorization_role_role_idx` (`id_role`), INDEX `b2b_role_authorization_role_auth_role_idx` (`id_authorization_role`) -) ENGINE = ENGINE_TYPE - DEFAULT CHARSET = utf8mb4 COLLATION; \ No newline at end of file +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file