Hi, wir haben bei uns im Shop Produkte mit sehr vielen Varianten (teilweise über 500 Varianten) und haben natürlich dafür auch fleißig Aufschläge definiert.
Jetzt hat sich der Grundpreis des Produkts geändert (Preissteigerung um ca. 15%) – d.h. wir müssen den Grundpreis anpassen, die Aufschläge und Varianten bleiben aber alle gleich.
Ich sehe allerdings keine Möglichkeit, wie man nur den Grundpreis anpassen kann und sich dann alle Varianten ändern.
Sehe ich es richtig, dass wir jetzt unsere mühsam angelegten Aufschläge und Varianten alle löschen müssen, Grundpreis neu definieren müssen, dann alle Aufschläge wieder neu eintragen und dann die Varianten neu generieren müssen? Das wäre auf unserer Seite mit stunden- bzw. tagelanger manueller Arbeit verbunden.
Weiß jemand Rat?
Oder du schreibst ein Script (Plugin oder API ist egal), dass die Varianten einmal alle durchgeht und die Preise anpasst. So viel Aufwand ist das nicht. Dann hast du es auch für die Zukunft.
Bin leider kein Entwickler, sonst wäre das natürlich eine Option, gibt’s hier vielleicht irgendwo Beispiele? Eine andere Lösung für „Normalanwender“ gibt’s wirklich nicht?
Das gibt ChatGPT aus und sieht nicht so verkehrt aus:
<?php
use Shopware\Core\Defaults;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
// Bootstrap Shopware
require __DIR__ . '/../../vendor/autoload.php';
$kernel = new \Shopware\Core\Kernel('prod', false);
$kernel->boot();
$container = $kernel->getContainer();
$context = Context::createDefaultContext();
/** @var EntityRepositoryInterface $productRepository */
$productRepository = $container->get('product.repository');
$productId = 'PRODUCT_ID_HERE'; // Set the correct product ID
$priceIncrease = 10.0; // Set the price increase amount
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('parentId', $productId));
$criteria->addFilter(new EqualsFilter('id', $productId), Criteria::CONNECTION_OR);
$productEntities = $productRepository->search($criteria, $context)->getEntities();
$updates = [];
foreach ($productEntities as $product) {
$prices = $product->getPrices();
foreach ($prices as &$price) {
foreach ($price['price'] as &$currencyPrice) {
$currencyPrice['gross'] += $priceIncrease;
$currencyPrice['net'] += $priceIncrease / (1 + $currencyPrice['taxRate'] / 100);
}
}
$updates[] = [
'id' => $product->getId(),
'prices' => $prices
];
}
if (!empty($updates)) {
$productRepository->update($updates, $context);
}
echo "Prices updated successfully.";