Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures

This commit is contained in:
2026-03-30 15:17:53 +02:00
444 changed files with 10123 additions and 3830 deletions

View File

@@ -5,28 +5,21 @@ CREATE TABLE IF NOT EXISTS b2b_routes (
name VARCHAR(255) NOT NULL UNIQUE,
path VARCHAR(255) NULL,
component VARCHAR(255) NOT NULL COMMENT 'path to component file',
layout VARCHAR(50) DEFAULT 'default' COMMENT "'default' | 'empty'",
meta JSON DEFAULT '{}',
is_active BOOLEAN DEFAULT TRUE,
sort_order INT DEFAULT 0,
parent_id INT NULL,
active BOOLEAN DEFAULT TRUE
CONSTRAINT fk_parent
FOREIGN KEY (parent_id)
REFERENCES b2b_routes(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT IGNORE INTO b2b_routes
(name, path, component, layout, meta, is_active, sort_order, parent_id)
(name, path, component, meta, active)
VALUES
('root', '', '', 'default', '{"trans": "route.root"}', 0, 0, 0),
('home', '', '@/views/HomeView.vue', 'default', '{"trans": "route.home"}', 1, 0, 0),
('login', 'login', '@/views/LoginView.vue', 'empty', '{"guest":true}', 1, 2, NULL),
('register', 'register', '@/views/RegisterView.vue', 'empty', '{"guest":true}', 1, 3, NULL),
('password-recovery', 'password-recovery', '@/views/PasswordRecoveryView.vue', 'empty', '{"guest":true}', 1, 4, NULL),
('reset-password', 'reset-password', '@/views/ResetPasswordView.vue', 'empty', '{"guest":true}', 1, 5, NULL),
('verify-email', 'verify-email', '@/views/VerifyEmailView.vue', 'empty', '{"guest":true}', 1, 6, NULL);
('root', '', '', '{"trans": "route.root"}', 0),
('home', '', '/views/HomeView.vue', '{"trans": "route.home"}', 1),
('login', 'login', '/views/LoginView.vue', '{"guest":true}', 1),
('register', 'register', '/views/RegisterView.vue', '{"guest":true}', 1),
('password-recovery', 'password-recovery', '/views/PasswordRecoveryView.vue', '{"guest":true}', 1),
('reset-password', 'reset-password', '/views/ResetPasswordView.vue', '{"guest":true}', 1),
('verify-email', 'verify-email', '/views/VerifyEmailView.vue', '{"guest":true}', 1);
CREATE TABLE IF NOT EXISTS b2b_top_menu (
@@ -44,10 +37,10 @@ CREATE TABLE IF NOT EXISTS b2b_top_menu (
) ENGINE = InnoDB;
INSERT INTO `b2b_top_menu` (`menu_id`, `label`, `parent_id`, `params`, `active`, `position`) VALUES
(1, JSON_COMPACT('{"name":"root","trans":{"pl":{"label":"Menu główne"},"en":{"label":"Main Menu"},"de":{"label":"Hauptmenü"}}}'),NULL,'{}',1,1),
(3, JSON_COMPACT('{"name":"admin-products","trans":{"pl":{"label":"admin-products"},"en":{"label":"admin-products"},"de":{"label":"admin-products"}}}'),1,'{}',1,1),
(9, JSON_COMPACT('{"name":"carts","trans":{"pl":{"label":"Koszyki"},"en":{"label":"Carts"},"de":{"label":"Warenkörbe"}}}'),3,'{}',1,1);
INSERT IGNORE INTO `b2b_top_menu` (`menu_id`, `label`, `parent_id`, `params`, `active`, `position`) VALUES
(1, JSON_COMPACT('{"name":"root","trans":{"pl":{"label":"Menu główne"},"en":{"label":"Main Menu"},"de":{"label":"Hauptmenü"}}}'),NULL,JSON_COMPACT('{}'),1,1),
(3, JSON_COMPACT('{"name":"admin-products","trans":{"pl":{"label":"admin-products"},"en":{"label":"admin-products"},"de":{"label":"admin-products"}}}'),1,JSON_COMPACT('{}'),1,1),
(9, JSON_COMPACT('{"name":"carts","trans":{"pl":{"label":"Koszyki"},"en":{"label":"Carts"},"de":{"label":"Warenkörbe"}}}'),3,JSON_COMPACT('{"route": {"name": "home", "params":{"locale": ""}}}'),1,1);
@@ -55,4 +48,4 @@ INSERT INTO `b2b_top_menu` (`menu_id`, `label`, `parent_id`, `params`, `active`,
DROP TABLE IF EXISTS b2b_routes;
DROP TABLE IF EXISTS b2b_top_menu;
DROP FUNCTION IF EXISTS `slugify_eu`;

View File

@@ -253,6 +253,97 @@ ON b2b_specific_price_customer (b2b_specific_price_id, b2b_id_customer);
CREATE INDEX idx_bsp_country
ON b2b_specific_price_country (b2b_specific_price_id, b2b_id_country);
DELIMITER //
CREATE FUNCTION IF NOT EXISTS slugify_eu(input TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE s TEXT;
SET s = LOWER(input);
-- spaces
SET s = REPLACE(s,' ','_');
-- Polish
SET s = REPLACE(s,'ą','a');
SET s = REPLACE(s,'ć','c');
SET s = REPLACE(s,'ę','e');
SET s = REPLACE(s,'ł','l');
SET s = REPLACE(s,'ń','n');
SET s = REPLACE(s,'ó','o');
SET s = REPLACE(s,'ś','s');
SET s = REPLACE(s,'ż','z');
SET s = REPLACE(s,'ź','z');
-- German
SET s = REPLACE(s,'ä','a');
SET s = REPLACE(s,'ö','o');
SET s = REPLACE(s,'ü','u');
SET s = REPLACE(s,'ß','ss');
-- French
SET s = REPLACE(s,'à','a');
SET s = REPLACE(s,'â','a');
SET s = REPLACE(s,'æ','ae');
SET s = REPLACE(s,'ç','c');
SET s = REPLACE(s,'è','e');
SET s = REPLACE(s,'é','e');
SET s = REPLACE(s,'ê','e');
SET s = REPLACE(s,'ë','e');
SET s = REPLACE(s,'î','i');
SET s = REPLACE(s,'ï','i');
SET s = REPLACE(s,'ô','o');
SET s = REPLACE(s,'ù','u');
SET s = REPLACE(s,'û','u');
SET s = REPLACE(s,'ü','u');
SET s = REPLACE(s,'ÿ','y');
-- Spanish / Portuguese
SET s = REPLACE(s,'á','a');
SET s = REPLACE(s,'í','i');
SET s = REPLACE(s,'ñ','n');
-- Scandinavian
SET s = REPLACE(s,'å','a');
SET s = REPLACE(s,'ø','o');
RETURN s;
END //
DELIMITER ;
DELIMITER $$
CREATE FUNCTION IF NOT EXISTS get_subcategories(startCategory INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE result TEXT;
-- Use GROUP_CONCAT to aggregate all IDs into a single string
WITH RECURSIVE subcategories AS (
SELECT c.id_category
FROM ps_category c
WHERE c.id_category = startCategory
UNION ALL
SELECT c.id_category
FROM ps_category c
INNER JOIN subcategories sc ON c.id_parent = sc.id_category
)
SELECT GROUP_CONCAT(id_category) INTO result
FROM subcategories;
RETURN result;
END$$
DELIMITER ;
-- +goose Down
DROP TABLE IF EXISTS b2b_countries;

View File

@@ -21,7 +21,7 @@ INSERT IGNORE b2b_scopes (id, name) VALUES (3, 'backoffice');
-- Translations
-- Component: general
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
(1, 3, 300, 'already_have_an_account', 'Masz już konto?'),
(1, 3, 300, 'and', 'i'),
(1, 3, 300, 'back_to_sign_in', 'Powrót do logowania'),
@@ -123,10 +123,12 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 3, 300, 'reset_password', 'Resetovat heslo'),
(3, 3, 300, 'send_password_reset_link', 'Odeslat odkaz pro obnovení hesla'),
(3, 3, 300, 'sign_in', 'Přihlásit se'),
(3, 3, 300, 'terms_of_service', 'Podmínky služby');
(3, 3, 300, 'terms_of_service', 'Podmínky služby')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- Component: validate_error
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
(1, 3, 301, 'confirm_password_required', 'Potwierdź hasło'),
(1, 3, 301, 'email_required', 'Adres e-mail jest wymagany'),
(1, 3, 301, 'first_name_required', 'Imię jest wymagane'),
@@ -150,10 +152,12 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 3, 301, 'no_issues_for_quarter', 'Nebyla nalezena žádná issues pro toto čtvrtletí'),
(3, 3, 301, 'password_required', 'Heslo je povinné'),
(3, 3, 301, 'registration_validation_password_not_same', 'Hesla se neshodují'),
(3, 3, 301, 'registration_validation_password_requirements', 'Požadavky na heslo při registraci');
(3, 3, 301, 'registration_validation_password_requirements', 'Požadavky na heslo při registraci')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- Component: repo_chart
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
(1, 3, 302, 'all_quarters', 'Wszystkie kwartały'),
(1, 3, 302, 'created_on', 'Utworzono'),
(1, 3, 302, 'failed_to_load_issues', 'Nie udało się załadować zadań'),
@@ -231,7 +235,9 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 3, 302, 'user_initials', 'Iniciály uživatele'),
(3, 3, 302, 'work_by_quarter', 'Práce dokončená po čtvrtletích (hodiny)'),
(3, 3, 302, 'work_done_by_quarter', 'práce provedená za čtvrtletí'),
(3, 3, 302, 'year', 'Rok');
(3, 3, 302, 'year', 'Rok')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- Component: verify_email
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
@@ -267,7 +273,9 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 3, 303, 'success_message', 'Váš e-mail byl úspěšně ověřen.'),
(3, 3, 303, 'success_title', 'E-mail ověřen!'),
(3, 3, 303, 'verification_failed', 'Ověření e-mailu selhalo'),
(3, 3, 303, 'verifying', 'Ověřování vašeho e-mailu...');
(3, 3, 303, 'verifying', 'Ověřování vašeho e-mailu...')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- +goose Down
-- Remove translations for this scope

View File

@@ -44,7 +44,7 @@ INSERT IGNORE b2b_scopes (id, name) VALUES (1, 'Backend');
-- (3, 1, 1, 'translations_not_loaded', 'Übersetzungen konnten nicht geladen werden');
-- Component: email (component_id = 100)
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
(1, 1, 100, 'langs_loaded', 'Języki załadowane'),
(1, 1, 100, 'langs_not_loaded', 'Nie udało się załadować języków'),
(1, 1, 100, 'message_nok', 'Błąd'),
@@ -64,10 +64,12 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 1, 100, 'message_nok', 'Fehler'),
(3, 1, 100, 'message_ok', 'Erfolg'),
(3, 1, 100, 'translations_loaded', 'Übersetzungen geladen'),
(3, 1, 100, 'translations_not_loaded', 'Übersetzungen konnten nicht geladen werden');
(3, 1, 100, 'translations_not_loaded', 'Übersetzungen konnten nicht geladen werden')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- Component: error (component_id = 101)
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
(1, 1, 101, 'err_bad_paging', 'zła paginacja'),
(1, 1, 101, 'err_bad_quarter_attribute', 'nieprawidłowy atrybut quarter'),
(1, 1, 101, 'err_bad_repo_id_attribute', 'nieprawidłowy atrybut repoID'),
@@ -150,7 +152,9 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 1, 101, 'err_token_required', 'Token erforderlich'),
(3, 1, 101, 'err_user_inactive', 'Benutzerkonto ist inaktiv'),
(3, 1, 101, 'err_user_not_found', 'Benutzer nicht gefunden'),
(3, 1, 101, 'err_verification_token_expired', 'Verifizierungstoken abgelaufen');
(3, 1, 101, 'err_verification_token_expired', 'Verifizierungstoken abgelaufen')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- +goose Down
-- Remove b2b_translations for this scope

View File

@@ -16,7 +16,7 @@ INSERT IGNORE INTO b2b_components (id, name) VALUES (304, 'products');
INSERT IGNORE INTO b2b_components (id, name) VALUES (305, 'nav');
-- Component: products (component_id = 304)
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
-- English (lang_id = 1)
(1, 3, 304, 'title', 'Products'),
(1, 3, 304, 'image', 'Image'),
@@ -88,10 +88,12 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(3, 3, 304, 'yes', 'Ano'),
(3, 3, 304, 'no', 'Ne'),
(3, 3, 304, 'added_to_cart', 'Přidáno do košíku'),
(3, 3, 304, 'description', 'Popis');
(3, 3, 304, 'description', 'Popis')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- Component: nav (component_id = 305)
INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
INSERT b2b_translations (lang_id, scope_id, component_id, `key`, data) VALUES
-- English (lang_id = 1)
(1, 3, 305, 'chart', 'Chart'),
(1, 3, 305, 'products', 'Products'),
@@ -100,7 +102,9 @@ INSERT IGNORE b2b_translations (lang_id, scope_id, component_id, `key`, data) VA
(2, 3, 305, 'products', 'Produkty'),
-- Czech (lang_id = 3)
(3, 3, 305, 'chart', 'Graf'),
(3, 3, 305, 'products', 'Produkty');
(3, 3, 305, 'products', 'Produkty')
ON DUPLICATE KEY UPDATE
data = IF(data IS NULL, VALUES(data), data);
-- +goose Down
-- Remove translations for these components