first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
services:
_defaults:
autowire: true
autoconfigure: true
KupShop\PricelistBundle\:
resource: ../../{Context,EventListener,Util}
exclude: ../../Util/Price/PriceListPrice.php

View File

@@ -0,0 +1,198 @@
<?php
class PricelistUpgrade extends UpgradeNew
{
protected $priority = 1100;
public function check_tableExists()
{
return $this->checkTableExists('pricelists');
}
public function check_tablePricelistsProductsExists()
{
return $this->checkTableExists('pricelists_products');
}
public function check_uniqueIdVariation()
{
return $this->checkIndexOnColumnExists('pricelists_products', 'id_variation');
}
/** Pricelists_products set (id_pricelist, id_product, id_variation) unique */
public function upgrade_uniqueIdVariation()
{
sqlQuery('ALTER TABLE pricelists_products ADD CONSTRAINT pricelist_product UNIQUE (id_pricelist, id_product, id_variation);');
$this->upgradeOK();
}
/** Creating pricelists table */
public function upgrade_tableExists()
{
sqlQuery('CREATE TABLE pricelists (
id INT AUTO_INCREMENT NOT NULL,
currency VARCHAR(3) DEFAULT NULL,
name VARCHAR(60) NOT NULL,
INDEX IDX_28511D046956883F (currency),
PRIMARY KEY (id)
) ENGINE = InnoDB');
sqlQuery('ALTER TABLE pricelists ADD CONSTRAINT FK_28511D046956883F FOREIGN KEY (currency) REFERENCES currencies (id)');
$this->upgradeOK();
}
/** Creating pricelists_products table */
public function upgrade_tablePricelistsProductsExists()
{
sqlQuery('CREATE TABLE pricelists_products (
id INT AUTO_INCREMENT NOT NULL,
id_pricelist INT NOT NULL,
id_product INT NOT NULL,
id_variation INT DEFAULT NULL,
price NUMERIC(15, 4) DEFAULT NULL COMMENT \'(DC2Type:decimal)\',
discount NUMERIC(12, 8) DEFAULT NULL COMMENT \'(DC2Type:decimal)\',
INDEX IDX_49750F94DCFA564A (id_pricelist),
CONSTRAINT FK_49750F94DCFA564A FOREIGN KEY (id_pricelist) REFERENCES pricelists (id) ON DELETE CASCADE,
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;');
$this->upgradeOK();
}
public function check_emptyPricelistsProducts()
{
return sqlQueryBuilder()->select('count(id)')
->from('pricelists_products')
->where('price IS NULL AND discount IS NULL')
->execute()->fetchColumn() > 0;
}
/** Delete empty pricelists_products */
public function upgrade_emptyPricelistsProducts()
{
sqlQueryBuilder()->delete('pricelists_products')
->where('price IS NULL AND discount IS NULL')
->execute();
$this->upgradeOK();
}
public function check_integrityUnique()
{
return $this->checkConstraintExists('pricelists_products', 'integrity_unique');
}
/** Add virtual column to check uniqueness even for NULL variations */
public function upgrade_integrityUnique()
{
try {
sqlQuery('ALTER TABLE pricelists_products ADD integrity_unique varchar(50) as (CONCAT_WS("-", `id_pricelist`, `id_product`, `id_variation`)) VIRTUAL');
} catch (Exception $e) {
// Ignore exception if column already exists - caused by failing DELETE statement
}
sqlQuery('DELETE pp FROM pricelists_products pp WHERE pp.id NOT IN (SELECT t.* FROM (SELECT MAX(pp2.id) FROM pricelists_products pp2 GROUP BY pp2.integrity_unique) t)');
sqlQuery('ALTER TABLE pricelists_products ADD UNIQUE integrity_unique(integrity_unique)');
$this->upgradeOK();
}
public function check_ProductForeignKey(): bool
{
return $this->checkConstraintWithColumnExists('pricelists_products', 'FK_pricelists_products_id_product', 'id_product');
}
/** pricelist_products: add foreign key on id_product and id_variation columns */
public function upgrade_ProductForeignKey(): void
{
// Smazat zaznamy na neexistujici produkty
sqlQuery('DELETE FROM pricelists_products WHERE id_product NOT IN (SELECT id FROM products)');
sqlQuery('DELETE FROM pricelists_products WHERE id_variation IS NOT NULL AND id_variation NOT IN (SELECT id FROM products_variations)');
// Vytvorim foreign keys
sqlQuery('ALTER TABLE pricelists_products ADD CONSTRAINT `FK_pricelists_products_id_product`
FOREIGN KEY (id_product) REFERENCES products (id) ON DELETE CASCADE ON UPDATE CASCADE');
sqlQuery('ALTER TABLE pricelists_products ADD CONSTRAINT `FK_pricelists_products_id_variation`
FOREIGN KEY (id_variation) REFERENCES products_variations (id) ON DELETE CASCADE ON UPDATE CASCADE');
$this->upgradeOK();
}
public function check_PricelistsToken()
{
return findModule(Modules::PRICELISTS, Modules::SUB_ACTIVATION_TOKEN) && $this->checkColumnExists('pricelists', 'token');
}
/** Add `token` column to `pricelists` */
public function upgrade_PricelistsToken()
{
sqlQuery('ALTER TABLE pricelists ADD COLUMN token varchar(255)');
$this->upgradeOK();
}
public function check_PriceListPriceHistory(): bool
{
return findModule(Modules::PRICE_HISTORY) && $this->checkColumnExists('pricelists', 'price_history');
}
/** Add pricelists.price_history column */
public function upgrade_PriceListPriceHistory(): void
{
sqlQuery('ALTER TABLE pricelists ADD COLUMN price_history TINYINT DEFAULT 0');
sqlQuery('ALTER TABLE pricelists_products ADD COLUMN price_for_discount DECIMAL(15, 4) DEFAULT NULL AFTER price');
$this->upgradeOK();
}
public function check_extendProductDiscount(): bool
{
return $this->checkColumnExists('pricelists', 'use_product_discount');
}
/** Add pricelists.use_product_discount column */
public function upgrade_extendProductDiscount(): void
{
sqlQuery('ALTER TABLE pricelists ADD COLUMN use_product_discount TINYINT DEFAULT 0');
$this->upgradeOK();
}
public function check_coefficient(): bool
{
return $this->checkColumnExists('pricelists', 'coefficient');
}
/** Add pricelists.coefficient column */
public function upgrade_coefficient(): void
{
sqlQuery('ALTER TABLE pricelists ADD COLUMN coefficient DECIMAL(4,2) DEFAULT NULL');
$this->upgradeOK();
}
public function check_generated(): bool
{
return $this->checkColumnExists('pricelists_products', 'generated');
}
/** Add pricelists_products.generated column */
public function upgrade_generated(): void
{
sqlQuery('ALTER TABLE pricelists_products ADD COLUMN generated TINYINT DEFAULT 0');
$this->upgradeOK();
}
public function check_PriceListDataColumn(): bool
{
return $this->checkColumnExists('pricelists', 'data');
}
/** add `pricelists.data` column */
public function upgrade_PriceListDataColumn(): void
{
sqlQuery('ALTER TABLE pricelists ADD COLUMN data MEDIUMTEXT DEFAULT NULL');
$this->upgradeOK();
}
}

View File

@@ -0,0 +1,54 @@
<?php
declare(strict_types=1);
namespace KupShop\PricelistBundle\Resources\upgrade;
class UserUpgrade extends \UpgradeNew
{
protected $priority = 1110;
public function check_PriceListId(): bool
{
return $this->checkColumnExists('users', 'id_pricelist');
}
/** users: add id_pricelist column */
public function upgrade_PriceListId(): void
{
sqlQuery('ALTER TABLE users ADD COLUMN id_pricelist INT(11)');
sqlQuery('ALTER TABLE users ADD FOREIGN KEY (id_pricelist) REFERENCES pricelists(id) ON UPDATE CASCADE ON DELETE SET NULL');
$this->upgradeOK();
}
public function check_UserGroupsPriceListId(): bool
{
return $this->checkColumnExists('users_groups', 'id_pricelist');
}
/** Add `users_groups.id_pricelist` */
public function upgrade_UserGroupsPriceListId(): void
{
sqlQuery('ALTER TABLE users_groups ADD COLUMN id_pricelist INT DEFAULT NULL;');
sqlQuery('ALTER TABLE users_groups ADD CONSTRAINT users_groups_id_pricelists FOREIGN KEY (id_pricelist) REFERENCES pricelists(id) ON UPDATE CASCADE ON DELETE CASCADE;');
$this->upgradeOK();
}
public function check_UserGroupsPriceListConstraint(): bool
{
return $this->checkConstraintRule('users_groups', 'users_groups_id_pricelists', 'SET NULL', 'CASCADE');
}
public function upgrade_UserGroupsPriceListConstraint(): void
{
try {
sqlQuery('ALTER TABLE users_groups DROP CONSTRAINT users_groups_id_pricelists;');
} catch (\Exception $e) {
}
sqlQuery('ALTER TABLE users_groups ADD CONSTRAINT users_groups_id_pricelists FOREIGN KEY (id_pricelist) REFERENCES pricelists(id) ON UPDATE CASCADE ON DELETE SET NULL;');
$this->upgradeOK();
}
}