legacyApi = $api; } /** * @return void */ protected function configure() { $this->setTableName(self::TABLE_NAME); $this->registerFilterParams([ 'typ' => 'a.typ LIKE', 'name_de' => 'a.name_de %LIKE%', 'name_de_exakt' => 'a.name_de LIKE', 'name_de_startswith' => 'a.name_de LIKE%', 'name_de_endswith' => 'a.name_de %LIKE', 'name_de_equals' => 'a.name_de LIKE', 'name_en' => 'a.name_en %LIKE%', 'name_en_exakt' => 'a.name_en LIKE', 'name_en_startswith' => 'a.name_en LIKE%', 'name_en_endswith' => 'a.name_en %LIKE', 'name_en_equals' => 'a.name_en LIKE', 'nummer' => 'a.nummer %LIKE%', 'nummer_exakt' => 'a.nummer LIKE', 'nummer_startswith' => 'a.nummer LIKE%', 'nummer_endswith' => 'a.nummer %LIKE', 'nummer_equals' => 'a.nummer LIKE', 'projekt' => 'a.projekt =', 'adresse' => 'a.adresse =', 'katalog' => 'a.katalog =', 'firma' => 'a.firma =', 'ausverkauft' => 'a.ausverkauft =', 'startseite' => 'a.startseite =', 'topseller' => 'a.topseller =', ]); $this->registerSortingParams([ 'name_de' => 'a.name_de', 'name_en' => 'a.name_en', 'nummer' => 'a.nummer', 'typ' => 'a.typ', ]); $this->registerValidationRules([ 'id' => 'not_present', 'a.shop' => 'not_present', 'a.shop2' => 'not_present', 'a.shop3' => 'not_present', 'a.usereditid' => 'not_present', 'a.useredittimestamp' => 'not_present', 'a.intern_gesperrtuser' => 'not_present', 'a.inbearbeitunguser' => 'not_present', 'nummer' => 'required|unique:artikel,nummer', 'projekt' => 'numeric', 'adresse' => 'numeric', 'katalog' => 'numeric', 'firma' => 'numeric', 'ausverkauft' => 'in:0,1', 'geloescht' => 'in:0,1', // Keine Default-Values /*'checksum' => 'present', 'kurztext_de' => 'present', 'kurztext_en' => 'present', 'beschreibung_de' => 'present', 'beschreibung_en' => 'present', 'uebersicht_de' => 'present', 'uebersicht_en' => 'present', 'links_de' => 'present', 'links_en' => 'present', 'startseite_de' => 'present', 'startseite_en' => 'present',*/ ]); $this->registerIncludes([ 'projekt' => [ 'key' => 'projekt', 'resource' => ProjectResource::class, 'columns' => [ 'p.id', 'p.name', 'p.abkuerzung', 'p.beschreibung', 'p.farbe', ], ], 'verkaufspreise' => [ 'key' => 'verkaufspreise', 'filter' => [ ['property' => 'artikel', 'value' => ':id'], ], 'sort' => ['menge' => 'ASC'], 'resource' => SalesPriceResource::class, ], 'dateien' => [ 'key' => 'dateien', 'filter' => [ ['property' => 'artikel', 'value' => ':id'], ], 'resource' => ArticleFileResource::class, ], 'lagerbestand' => [ /** * Sonderfall * * @see ArticleResource::integrateIncludes */ ], ]); } /** * @inheritdoc */ protected function integrateIncludes(array $includes, array &$items, $isCollection = true) { // Ausnahme für "lagerbestand"-Include $lagerbestandIncludeKey = array_search('lagerbestand', $includes, true); if ($lagerbestandIncludeKey !== false) { // Mehrere Artikel if ($isCollection) { foreach ($items as &$item) { $articleId = $item['id']; $istLagerartikel = (int)$item['lagerartikel'] === 1; $item['lagerbestand'] = $istLagerartikel ? $this->legacyApi->app->erp->ArtikelAnzahlVerkaufbar($articleId, 0, 0, 0, 0, true) : []; } unset($item); } // Einzelner Artikel if (!$isCollection) { $articleId = $items['id']; $istLagerartikel = (int)$items['lagerartikel'] === 1; $items['lagerbestand'] = $istLagerartikel ? $this->legacyApi->app->erp->ArtikelAnzahlVerkaufbar($articleId, 0, 0, 0, 0, true) : []; } unset($includes[$lagerbestandIncludeKey]); } // Andere Includes normal ausführen return parent::integrateIncludes($includes, $items, $isCollection); } /** * @return SelectQuery */ protected function selectAllQuery() { return $this->db ->select() ->cols([ //'a.*', 'a.id', 'a.typ', 'a.nummer', 'a.checksum', 'a.projekt', 'a.inaktiv', 'a.ausverkauft', 'a.warengruppe', 'a.name_de', 'a.name_en', 'a.kurztext_de', 'a.kurztext_en', 'a.beschreibung_de', 'a.beschreibung_en', 'a.uebersicht_de', 'a.uebersicht_en', 'a.links_de', 'a.links_en', 'a.startseite_de', 'a.startseite_en', 'a.standardbild', 'a.herstellerlink', 'a.hersteller', 'a.teilbar', 'a.nteile', 'a.seriennummern', 'a.lager_platz', 'a.lieferzeit', 'a.lieferzeitmanuell', 'a.sonstiges', 'a.gewicht', 'a.endmontage', 'a.funktionstest', 'a.artikelcheckliste', 'a.stueckliste', 'a.juststueckliste', 'a.barcode', 'a.hinzugefuegt', 'a.pcbdecal', 'a.lagerartikel', 'a.porto', 'a.chargenverwaltung', 'a.provisionsartikel', 'a.gesperrt', 'a.sperrgrund', 'a.geloescht', 'a.gueltigbis', 'a.umsatzsteuer', 'a.klasse', 'a.adresse', 'a.shopartikel', 'a.unishopartikel', 'a.journalshopartikel', 'a.katalog', 'a.katalogtext_de', 'a.katalogtext_en', 'a.katalogbezeichnung_de', 'a.katalogbezeichnung_en', 'a.neu', 'a.topseller', 'a.startseite', 'a.wichtig', 'a.mindestlager', 'a.mindestbestellung', 'a.partnerprogramm_sperre', 'a.internerkommentar', 'a.intern_gesperrt', //'a.intern_gesperrtuser', 'a.intern_gesperrtgrund', 'a.inbearbeitung', //'a.inbearbeitunguser', 'a.cache_lagerplatzinhaltmenge', 'a.internkommentar', 'a.firma', 'a.logdatei', 'a.anabregs_text', 'a.autobestellung', 'a.produktion', 'a.herstellernummer', 'a.restmenge', 'a.mlmdirektpraemie', 'a.keineeinzelartikelanzeigen', 'a.mindesthaltbarkeitsdatum', 'a.letzteseriennummer', 'a.individualartikel', 'a.keinrabatterlaubt', 'a.rabatt', 'a.rabatt_prozent', 'a.geraet', 'a.serviceartikel', 'a.autoabgleicherlaubt', 'a.pseudopreis', 'a.freigabenotwendig', 'a.freigaberegel', 'a.nachbestellt', 'a.ean', 'a.mlmpunkte', 'a.mlmbonuspunkte', 'a.mlmkeinepunkteeigenkauf', //'a.shop', // Altlasten; wird zukünftig über artikel_shop gemacht //'a.shop2', //'a.shop3', //'a.usereditid', //'a.useredittimestamp', 'a.einheit', 'a.webid', 'a.lieferzeitmanuell_en', 'a.variante', 'a.variante_von', 'a.produktioninfo', 'a.sonderaktion', 'a.sonderaktion_en', 'a.autolagerlampe', 'a.leerfeld', 'a.zolltarifnummer', 'a.herkunftsland', 'a.laenge', 'a.breite', 'a.hoehe', 'a.gebuehr', 'a.pseudolager', 'a.downloadartikel', 'a.matrixprodukt', 'a.steuer_erloese_inland_normal', 'a.steuer_aufwendung_inland_normal', 'a.steuer_erloese_inland_ermaessigt', 'a.steuer_aufwendung_inland_ermaessigt', 'a.steuer_erloese_inland_steuerfrei', 'a.steuer_aufwendung_inland_steuerfrei', 'a.steuer_erloese_inland_innergemeinschaftlich', 'a.steuer_aufwendung_inland_innergemeinschaftlich', 'a.steuer_erloese_inland_eunormal', 'a.steuer_erloese_inland_nichtsteuerbar', 'a.steuer_erloese_inland_euermaessigt', 'a.steuer_aufwendung_inland_nichtsteuerbar', 'a.steuer_aufwendung_inland_eunormal', 'a.steuer_aufwendung_inland_euermaessigt', 'a.steuer_erloese_inland_export', 'a.steuer_aufwendung_inland_import', 'a.steuer_art_produkt', 'a.steuer_art_produkt_download', 'a.metadescription_de', 'a.metadescription_en', 'a.metakeywords_de', 'a.metakeywords_en', 'a.anabregs_text_en', 'a.externeproduktion', 'a.bildvorschau', 'a.inventursperre', 'a.variante_kopie', 'a.unikat', 'a.generierenummerbeioption', 'a.allelieferanten', 'a.tagespreise', 'a.rohstoffe', 'a.ohnepreisimpdf', 'a.provisionssperre', 'a.dienstleistung', 'a.inventurekaktiv', 'a.inventurek', 'a.hinweis_einfuegen', 'a.etikettautodruck', 'a.lagerkorrekturwert', 'a.autodrucketikett', 'a.steuertext_innergemeinschaftlich', 'a.steuertext_export', 'a.formelmenge', 'a.formelpreis', 'a.ursprungsregion', 'a.bestandalternativartikel', 'a.metatitle_de', 'a.metatitle_en', 'a.vkmeldungunterdruecken', 'a.altersfreigabe', 'a.unikatbeikopie', 'a.steuergruppe', 'a.keinskonto', 'a.berechneterek', 'a.verwendeberechneterek', 'a.berechneterekwaehrung', 'a.artikelautokalkulation', 'a.artikelabschliessenkalkulation', 'a.artikelfifokalkulation', 'a.freifeld1', 'a.freifeld2', 'a.freifeld3', 'a.freifeld4', 'a.freifeld5', 'a.freifeld6', 'a.freifeld7', 'a.freifeld8', 'a.freifeld9', 'a.freifeld10', 'a.freifeld11', 'a.freifeld12', 'a.freifeld13', 'a.freifeld14', 'a.freifeld15', 'a.freifeld16', 'a.freifeld17', 'a.freifeld18', 'a.freifeld19', 'a.freifeld20', 'a.freifeld21', 'a.freifeld22', 'a.freifeld23', 'a.freifeld24', 'a.freifeld25', 'a.freifeld26', 'a.freifeld27', 'a.freifeld28', 'a.freifeld29', 'a.freifeld30', 'a.freifeld31', 'a.freifeld32', 'a.freifeld33', 'a.freifeld34', 'a.freifeld35', 'a.freifeld36', 'a.freifeld37', 'a.freifeld38', 'a.freifeld39', 'a.freifeld40', ]) ->from(self::TABLE_NAME . ' AS a') ->where('a.geloescht <> 1'); } /** * @return SelectQuery */ protected function selectOneQuery() { return $this->selectAllQuery()->where('a.id = :id'); } /** * @return SelectQuery */ protected function selectIdsQuery() { return $this->selectAllQuery()->where('a.id IN (:ids)'); } /** * @return false */ protected function insertQuery() { return false; } /** * @return false */ protected function updateQuery() { return false; } /** * @return false */ protected function deleteQuery() { return false; } }