/ / Prestashop - Vytvorte dodací list po prevode materiálu do iného skladu [zatvorené] - prestashop, sklad, prestashop-1.5

Prestashop - Vytvorte dodací list po prevode materiálu do iného skladu [zatvorené] - prestashop, sklad, prestashop-1.5

  1. Potrebujem vytvoriť nejaký prevodný lístok (rovnako ako dodací list), ktorý má číslo prevodu (eg. Prenos # TR000008) na presun zásob z jedného skladu do druhého (Zásoby> Správa zásob -> Akcie> Transfer Stock).

  2. A rád by som zobraziť číslo prevodu (eg. # TR000008) v Stĺpec Pohyb zásob.

  3. A ak je to možné, chcel by som zmeniť LABEL z „Presun do iného skladu“ na "Preložiť do [NÁZOV SKLADU TU]".

Akokoľvek by som mohol hacknúť PrestaShop, aby urobil vyššie uvedené?

Pomoc je naozaj ocenená.

UPDATE:

ak no.1 je príliš ťažké, možno mi len ukážte cestu pridať ďalšie vstupné pole v Prevod zásob formulár aby som mohol zadať číslo prevodu ručné.

POZNÁMKA:

Naozaj potrebujem pomoc pri získavaní úplný pracovný kód možno na základe smer @soulseekah poskytované.

PS: Používam Prestashop 1.5.2.0

odpovede:

6 pre odpoveď č. 1

Aj keď je Prestashop pomerne rigidný, pokiaľ ide o flexibilitu a rozšírenie jeho funkcií, to, čo požadujete, je do značnej miery možné tým, že sem a tam posypete trochu kúzla JavaScript (čítaj: hack).

Poznámka: Používam na to Prestashop 1.5.6.1, takže môžu existovať určité menšie rozdiely.

predpoklady

Predpokladám, že viete písať základné Moduly Prestashop, používať háčiky Prestashop, inštalovať a odinštalovať akcie inštalačného modulu a pracovať s databázou, používať jQuery.

Pripravený?

Prevody akcií

V spoločnosti Prestashop neexistuje presný pojem o prevodoch akcií. Získate však úplnú históriu pohybu zásob, ktorá je uložená v stock_mvt stôl a podporované StockMvt trieda.

Je to veľmi šťastné a ušetrí vás to tým, že budete musieť vytvoriť a spravovať tabuľku prevodov. Nemusí to však byť príliš spoľahlivé.

Stĺpcová akcia

Obrazovka Stock Movement, ktorú vykresľuje AdminStockMvtController, nemá háčiky na zmenu stĺpcov. Preto bude potrebné vykonať akciu JavaScript.

Štandardným spôsobom injektovania JavaScriptu je pripojenie displayBackOfficeHeader, Keď sa zapojíte do tejto akcie, vstreknite súbor JavaScript.

public function hookDisplayBackOfficeHeader() {
return "<script type="text/javascript" src="".$this->_path."transfers.js".""></script>";
}

Extra stĺpec

Vyššie uvedené bude obsahovať váš skript, ktorý sa dodáva spolu s vaším modulom. Tento skript môže pomocou jQuery zmeniť vzhľad a obsah stĺpcov.

jQuery( ".table.stock_mvt thead tr:nth(0)" ).append( "<th>Transfer</th>" );
jQuery( ".table.stock_mvt thead tr:nth(1)" ).append( "<td></td>" );

Bonusové body za triedenie, vyhľadávanie, filtrovanie podľa nového stĺpca.

etikety

Zmena mien „Transfer do / z inéhoSklad „je jednoduchý a nepotrebuje žiadne databázové volania. Jednoducho sa pozrite na každý riadok, ak stĺpec obsahuje „od“ pohľad na predchádzajúci riadok a pomenujte ho v stĺpci Sklad. Ak obsahuje „to“, pozrite sa na nasledujúci riadok.

To samozrejme nebude fungovať s takými druhmi a filtrami. V tomto prípade môžete volať názvy skladov pre každý pohyb - pozri nasledujúcu časť.

UI je celkom jednoduché. Ale ako sa tam dostanú prenosové dáta? Tu prichádza ťažká časť.

Prenášajte dáta

Ako som už povedal, údaje o pohybe sú k dispozícii a dajú sa ľahko získať takmer rovnakým spôsobom AdminStockMvtController robí to.

Tabuľka bude vyžadovať niektoré údaje z databázy. Musíte získať identifikáciu pohybu medzi skladmi, čo bude vaše identifikačné číslo a názov príslušných dvoch skladov.

V podstate musíte zistiť páry prevodov pri pohľade na stock_mvt_reason_lang tabuľka a zistenie po sebe idúcich párov „z“ a „z“ dôvodu id_stock_mvt_reason zaujíma vás. Pozrite sa dovnútra stock_mvt, zoradiť podľa stock_mvt_id a spárovať ich v PHP alebo MySQL.

Na id_stock bude ukazovať na sklad, kde môžete získať názvy. V podstate získajte všetko, čo potrebujete, a ako prenos párujte po sebe idúce pohyby „od“ - „od“.

ID sklzu by pravdepodobne malo byť id_stock_mvt pohybu „do“ alebo „z“ (vyberte jeden a držte sa ho). Týmto spôsobom budete môcť vygenerovať doklad s jedným špecifickým ID a nájsť dva pohyby, ktoré sa podieľali na prenose.

Dávať to všetko dokopy

Takže musíte zavolať na AJAXváš modul a vrátite potrebné údaje - preneste ID ID, preneste do / z mien atď. Po dokončení tohto hovoru jednoducho vložte údaje do tabuľky podľa potreby. Prevody by boli odkazmi na vygenerovanie vašich listov (pozri nasledujúcu časť).

Pretože tabuľka neobsahuje žiadne identifikačné údaje, musítenezabudnite vrátiť výsledky v správnom poradí, takže nezabudnite účtovať za zoradenie, limity a stránkovanie, aby ste do tabuľky mohli vložiť správne usporiadané užitočné zaťaženie, ktoré sa má vložiť do tabuľky. Mali by ste byť schopní uniknúť odoslaním iba párov dátových prenosov. ,

Prípadne môžete vytvoriť novú kartu správcu s názvom „Prevody akcií“, na ktorej čisto vydáte tabuľku iba s prevodmi.

Dokumenty PDF

Vytváranie PDF je možné z vidlice AdminPdfController, Mali by ste zahrnúť potrebné údaje z prenosov. Do tohto bodu by ste už našli správny spôsob, ako získať všetky potrebné údaje na výstup. Vytvorenie súboru PDF je jednoduché.

Akonáhle váš generátor dostane identifikáciu, idete sa pozrieťza to v tabuľke pohybov získajte dvojicu a všetky svoje údaje. Ako si viete predstaviť, generácia sa objavuje za behu a šmýkačky sa nikdy neuchovávajú v Prestashope. Vaše nové prevodné lístky sa nemusia ukladať.

Prehľad

Stručný prehľad toho, čo bude váš modul musieť obsahovať:

  • Základný kód modulu (inštalácia, odinštalovanie, registrácia háku)
  • Registrovaný hookDisplayBackOfficeHeader funkcie
  • Súbor script.js, ktorý vykonáva požiadavku AJAX na údaje tabuľky
  • Odpovedač žiadosti AJAX, ktorý zadal niektoré parametre, vráti ID sklzu, názvy skladov
  • Radič PDF, ktorý dokáže identifikovať pár z jedného z identifikátorov (id_stock_mvt) a vytlačte pekný list pre tlač
  • Niektoré bežné bezpečnostné opatrenia nechcete, aby sa vaše prevody hádali cudzinci

záver

Celá vec nie je ani zďaleka ľahká (dokonca aj vysvetliteľná)je to ťažké) a implementácia základnej funkčnosti bude pravdepodobne trvať niekoľko dní, ale určite to bude možné s rôznymi (Mosly úspešnými) výsledkami.

Jeden z hlavných problémov spočíva v tom, ako dvasúvisiace pohyby nie sú explicitne spojené, namiesto nejakého záväzného transferového ID máte jeden pohyb „pohyb“ a „pohyb z“, s tesným časom medzi nimi a rovnakým množstvom.

Údržba vidlice s čistým jadrom je tiež možnosťou,mimochodom, kde robíte minimálne zmeny v jadre, ktoré je možné ľahko spojiť s aktualizáciami. Ako napríklad pridanie háčikov na vhodné miesta, nahradenie jednej základnej triedy vašou vlastnou triedou atď. To vám umožní mať menej hackov.

Radi sa porozprávam a prediskutujem špecifiká vyššie uvedeného prístupu. Šťastné sviatky a veľa šťastia s vašim projektom!


3 pre odpoveď č. 2

Ďalším prístupom by bolo rozvetvenie Prestashopu. Toto je dosť nebezpečné a malo by sa mu vyhnúť, ak je to možné, ale niekedy to nie je inak. Nie je to jednoduchšie ako písať modul s hackami, ako moje ďalšie odpovede, ale umožňuje vám robiť veci, ktoré hackeri sťažujú.

Niektoré z nižšie uvedených myšlienok môžu súvisieť s mojimipredchádzajúca odpoveď a obsahuje aj niekoľko nových nápadov. Kombináciou týchto dvoch odpovedí môžete skutočne prísť s veľmi spoľahlivým spôsobom, ako to dosiahnuť, a to pravdepodobne na úkor väčšej požadovanej doby kódovania. Túto odpoveď by som tiež považoval za zlepšenie mojej predchádzajúcej odpovede, keď som pri skúmaní našiel niekoľko lepších spôsobov, ako robiť niektoré veci.

predpoklady

Predpokladám, že poznáte veľké množstvo PHP aMySQL vykonať potrebné zmeny, a viete, ako udržiavať a aktualizovať vidlice (pomocou diffs a merges), keď je aktualizovaný hlavný balík. Stále budete pravdepodobne potrebovať nejakú akciu jQuery alebo JavaScript.

Stále sa budete musieť zoznámiť s rozhraním API spoločnosti Prestashop - databázou, zabezpečením a oprávneniami, modelmi, radičmi a modulmi.

Opäť platí, že kódovanie polopracovných riešení môže trvať skúsenému programátorovi deň alebo dva, takže tu neočakávajte žiadne rýchle riešenia na kopírovanie a prilepovanie - nanešťastie žiadne nebude.

Minimálna vidlica

Takže ste sa rozhodli všetko rozvetviť. To, na čo by ste sa mali sústrediť, je urobiť čo najmenšie zmeny. Pravidlo nie je viac ako 2 výroky v každej dôležitej časti funkcie. Celá logika by sa mala zapisovať do vlastných súborov, ktoré žijú mimo stromu jadra.

databázy

Pretože Prestashop sa neobťažuje udržiavať prepojenia, budete si musieť vytvoriť a udržiavať svoj vlastný stôl na uloženie prevodu. Tabuľka by musela mať id_warehouse_to a id_warehouse_from ako dva cudzie kľúče do warehouse stôl. Môžete tiež mať extra stĺpec pre vaše ďalšie vstupné pole, ktoré pridáme za okamih.

Táto tabuľka vám umožní nájsť páry bez toho, aby ste museli počítať zmeny, a zachovať bezpečnosť základnej databázy.

Ukladanie prevodov

Táto metóda nevyžaduje rozvetvenie a môže sa kombinovať s predchádzajúcim riešením.

Transfer je možné zistiť vo vnútri systému postProcess spôsob ovládača, uvidíte transferBetweenWarehouses metóda sa volá na StockManagéri.

Našťastie, StockManger je vrátený z továrne, ktorá môže byť skutočne zapojená do použitia stockManager háčik.

Implementovať StockManagerInterface, ktorý všetko nastaví na predvolené hodnoty StockMangaer, To vám umožní zistiť transferBetweenWarehouses vyvolajte metódu a zaznamenajte potrebné údaje do vašej vlastnej tabuľky.

Chcel by som ísť tak ďaleko, ako by som vidlil túto metódu úplne a namiesto toho, aby som ukladal ID skladov, skutočne by som tieto dva ID skladov skladoval po každom ->add a ->remove, Umožní vám to zistiť skutočné ceny, množstvá atď.

Extra vstupné pole

Môžete použiť injekciu JavaScriptu a vložiť ďalšie pole, ktoré môžete spracovať vo svojom vlastnom StockManagerInterface, Pridajte jednoduchý <input name="custom"> a potom to vyhľadajte pomocou Tools::getValue("custom", null), napríklad. Potom ich uložte do svojej vlastnej tabuľky spolu s ostatnými údajmi o prenose.

Vidlicový spôsob by vyžadoval, aby ste vo vnútri zmenili pole formulárov AdminStockManagementController, niektoré z hodnôt môžu ísť hlbšie do samotných šablón, takže sa s nimi musí ísť hlbšie. Zvyšok by mal byť riešený vo vnútri StockManager proxy, ktorý ste kódovali v predchádzajúcom kroku.

Vytváranie zoznamov

Chcel by som ísť na novú kartu so svojím vlastným zoznamom, ktorý sa nazýva napríklad „Stock Transfers“. Je to jednoduchšie ako pokúsiť sa zmeniť existujúcu kartu; ale ak chcete, môžete prepnúť renderList fungujú vo vnútri príslušného ovládača a upravujú šablónu, ktorá je na výstupe (vo vnútri tu a tu).

PDF

Generovanie skutočného súboru PDF by zostalo rovnaké ako v mojej inej odpovedi, ale tentoraz by vaše ID pochádzali z vašej tabuľky vlastných prevodov, napríklad transfer_id (automaticky zvyšované). To umožní generátoru PDF nahliadnuť do vašej tabuľky a odkázať na príslušné veci.

záver

Celkovo mám pocit, že kombináciou tejto a mojej predchádzajúcej odpovede sa môžete dostať k veľmi slušnému riešeniu vášho problému bez toho, aby ste skutočne niečo rozvetvili. Ja osobne by som ísť na StockManager proxy, nejaké injekcie jQuery a vlastnú tabuľku na novej karte admin, ktorá obsahuje zoznam všetkých prevodov bez rozvetvenia.

Dúfam, že to všetko vám pomôže prísť s kódompotrebné na to, aby bola táto funkcia implementovaná čistým spôsobom. A ak s tým všetkým nie ste spokojní, skúste si najať dobrého vývojára s dvoma sprievodcami, ktoré som pre vás napísal - v skutočnosti nie je miesto na zlyhanie.

Veľa šťastia.


2 pre odpoveď č. 3

Vytvoril som niekoľko vzorových kódov, pretože sú príliš dlhé a sprístupnil som ich tu, Kódy demonštrujú modul, ktorý rozširujepredvolená implementácia StockManager na priradenie zodpovedajúcich pohybov zásob k ID prevodu. Nedostal som sa do bodu, keď sa vykonáva generovanie PDF. Môže byť jeden, mám nejaký čas, budem schopný pokračovať :)