Wir haben seit längerem ein Oxid shop in betrieb. Nun macht uns je länger je mehr ein problem mit dem oxvarstock datenbank feld bei vater-produkten zu schaffen.
Auf grund nicht ganz sauber importierten Produkten und einem selbst gebastelten modul mit dem man nachlieferungen einbuchen kann, stimmt in vielen fällen oxvarstock nicht überein mit dem kummulierten lagerbestand der varianten. Im alltag eigentlich nicht so schlimm, wenn man aber oxid quasi auch als WaWi einsetzt spätestens aber beim inventar ein mühsames problem. Ferner gehen produkte - selbst wenn keine varianten mehr käuflich sind - nie ganz offline, auch wenn sie im shop nicht mehr erscheinen. Über direkt links (google, referres) sind sie nachwievor aufrufbar und sorgen z.T für verwirrung.
Frage deshalb: gibt es einen trick resp. wohl am ehsten SQL befehl, der dieses problem löst?
Mein sql ist eben bisschen eingerostet aber sinn gemäss bräuchte ich so was:
Aktualisiere bei allen produkten mit varianten das feld oxvarstock mit dem kumulierten wert von oxstock der jeweiligen varianten.
[QUOTE=reezi;127054]
Aktualisiere bei allen produkten mit varianten das feld oxvarstock mit dem kumulierten wert von oxstock der jeweiligen varianten.
[/QUOTE]
Alle Varianten addieren und dieses Resultat in das Feld oxstock des Vaters reinschreiben
oder
Alle Varianten addieren und dieses Resultat zu dem Wert im Feld oxstock des Vaters addieren[/QUOTE]
weder noch… denn so wie ich das mit oxstock resp. oxvarstock verstanden hab, muss oxstock beim vater null sein wenn der vater selbst nicht käuflich sein soll.
machen wir ein einfaches beispiel…
vaterprodukt: Schwarzes T-Shirt
Variante 1: Grösse S / oxstock: 3
Variante 2: Grösse M / oxstock: 1
Variante 3: Grösse L / oxstock: 2
Total hab ich also 6 Stück dieses T-Shirts. Also müsste beim Vaterprodukt “Schwarzes T-Shirt” im [B]oxvarstock[/B] die zahl 6 stehen. Oxstock aber bleibt leer oder null, da es gar kein physisches produkt ist - nur virtuelles vaterprodukt.
mein problem nach wie vor: wie krieg ich dieses oxvarstock nachträglich aktualisiert wenn es auf grund imports etc nicht mehr stimmt.
Ich hol das Ding mal hoch. Ich habe da glaub ich ein ähnliches Problem, wenn nicht sogar das gleiche.
Der Faulheit geschuldet hab ich erstmal bei allen Artikeln die Variantenbestände auf null, quasi unbearbeitet gelassen. Vater Artikel (nicht kaufbar) hat überall nen 500er Bestand eingetragen von der ersten Vorlage aus der ich alle Artikel kopiert habe.
Jetzt wollte ich alle Variantenbestände über die Datenbank eintragen.
Erster Versuch war oxstock bei allem zu überschreiben mit Wert x.
Klappte soweit, ausser dass bei Vater Artikel Meldung "nicht lieferbar blabla) kam.
Danach die oxvarstock auf Wert x hochgesetzt.
Resultat: Vater Artikel wieder lieferbar, dafür hatten alle Varianten einen Preis vom 0,00 und keine Lieferzeit mehr.
Jetzt bin ich auch über dieses Problem gestolpert. Nachfolgend ein simpler Script, der die oxvarstock-Felder korrekt befüllt. Recht schnell, da keine Artikel instantiiert werden. Vorsicht, der korrekte Aufruf der Objektmethoden bewirkt noch anderes.
Einfach unterhalb von /bin abspeichern.
<?php
function getShopBasePath()
{
return dirname(__FILE__). "/../";
}
require_once(getShopBasePath()."bootstrap.php");
$oDb = oxDb::getDb();
$sql = 'select oxid
from oxarticles
where oxactive=1 and oxparentid = ""
';
$aArtIds = $oDb->getAll( $sql );
$oDummyArticle = oxNew('oxarticle');
foreach ( $aArtIds as $aItem ) {
$sParentIdQuoted = $oDb->quote($aItem['oxid']);
$sQ = 'select sum(oxstock) from '.$oDummyArticle->getViewName(true).' where oxparentid = '.$sParentIdQuoted.' and '. $oDummyArticle->getSqlActiveSnippet( true ).' and oxstock > 0 ';
$iStock = (float) $oDb->getOne( $sQ, false, false );
$sQ = 'update oxarticles set oxvarstock = '.$iStock.' where oxid = '.$sParentIdQuoted;
$oDb->execute( $sQ );
var_dump($iStock);
}
echo "DONE" . PHP_EOL;