===== WooCommerce ===== * https://woocommerce.github.io/woocommerce-rest-api-docs ==== Termék adatok ==== * https://woocommerce.github.io/woocommerce-rest-api-docs/#product-properties * Woo->eVIR mező megfeleltetések: (WP/Woo -> eVIR) * Mezők: //(default woo-ban)// * name -> megnevezes * slug -> * date_created(read-only) -> * date_modified(read-only) -> * type -> "simple" //(simple)// * status -> "publish" //(publish)// * catalog_visibility -> "visible" //(visible)// * description -> termék tulajdonságból a leírás, valamint a többi terméktulajdonság is név:érték formában, HTML formázással, valamint a cikkszám is. * short_description -> termék tulajdonságból csak a leírás * sku -> cikkszam * price (Read only) -> beállított árkategória szerinti ár * regular_price -> beállított árkategória szerinti ár * sale_price -> beállított árkategóriához tartozó akciós árkategória szerinti ár * on_sale(read-only)-> webshop akcios * virtual -> termék esetén false, szolgáltatás esetén true //(false)// * tax_status -> "taxable" //(taxable)// * manage_stock -> webshop beállítás szerint //(false)// * stock_quantity -> webshop beállítás szerint * stock_status -> webshop beállítás és készlet infó szerint //(instock)// * sold_individually -> "true" //(false)// * weight -> cikktörzsben a bruttó súly * dimensions -> cikktörzsben: * length -> hosszusag * width -> szelesseg * height -> magassag * upsell_ids -> a kapcsolódó termékek * cross_sell_ids -> a helyettesítő termékek * categories -> cikktörzsből a kategória * tags -> termék tulajdonság, címkék (még nincs evirben, de legyen létrehozva) * images -> termék fő kép * attributes -> termék tulajdonságok ==== Készlet ==== * eVIR: "Nem látszik a webshopban" (hidden) * Nincs tennivaló, az ilyen terméket nem is szinkronizáljuk * eVIR: "Végtelen mennyiség" (vegtelen) * manage_stock -> "false" * stock_status -> "instock" * eVIR: "Rendelhető" (rendelheto) * manage_stock -> "false" * stock_status -> "instock" * stock_quantity -> a raktáron levő mennyiség * backorders -> "yes" * eVIR: "Kifutó"(kifuto) * manage_stock -> "true" * stock_status -> "instock" ha van raktáron. Ha nincs, akkor a termék láthatóságát kell kikapcsolni * stock_quantity -> a raktáron levő mennyiség * backorders -> "no" * eVIR: "Csak készleten levő" (Csak készleten) * manage_stock -> "true" * stock_status -> "instock" vagy "outofstock" attól függően, hogy van-e készleten * stock_quantity -> a raktáron levő mennyiség * backorders -> "no" * eVIR: "Mennyiség mutatása" (rakt_menny) * manage_stock -> "false" * stock_status -> "instock" vagy "outofstock" készlettől függően * stock_quantity -> a raktáron levő mennyiség ==== Termék tulajdonságok ==== * Woo mezők: * name -> a tulajdonság neve * visible -> "true" * variation -> "false" * options -> a tulajdonság értéke ==== Termék kategóriák ==== * Woo mezők: * id -> kötelező mező kategória termékhez rendeléséhez. * name -> a kategória neve. (Levágja a szóközöket, ha több jön egymás után) * slug -> a kategória neve (nincs ékezet, szóközből '-' ) * parent -> a szülő kategória * description -> a kategória neve * display -> "default" Kategóriák kapcsolótáblába rendezése: * woocommerce_product_categories: * cikk_kategoria_id -> evir oldali id * product_category_id -> woocommerce oldali id * Tervezve van hogy ha tobb webshop lesz, akkor ez bovul vagy lecserelesre kerul. ==== Termék képek ==== * Nem a WooCommerce, hanem a Wordpress mediatár tartalmazza a képeket. A feltöltéséhez wordpress felhasználó szükséges. * https://developer.wordpress.com/docs/api/ * WP mezők: * title -> a kép neve * description -> a kép neve * alt_text -> a kép neve * Woo mezők: * id -> * date_created -> * src -> WP URL * name -> megegyezik a wp.title-vel -> a kép neve, ami a cikk megnevezése * alt -> megegyezik a wp.alt_text-el -> a cikk megnevezése * Ugyan ide ugyan ilyen módon kell feltölteni a termékhez rendelt dokumentumokat is, csak ott értelemszerűen nem képekről van szó ---- ==== Rendelés ==== **Rendelés adatok** * Mezők: (default woo-ban) * id -> Webshop id * parent_id * number -> hivatkozás * order_key * created_via * version * status * currency -> pénznem * date_created * date_created_gmt -> Rendelés dátuma (rend_datum) * date_modified * date_modified_gmt * discount_total -> Teljes engedmény (bruttó) * discount_tax * shipping_total -> Teljes szállítási költség (bruttó) * shipping_tax * cart_tax * total * total_tax * prices_include_tax * customer_id * customer_ip_address * customer_user_agent * customer_note * billing -> Partner elsődleges címe (ld. lentebb) * shipping -> Partner szállítási címe (ld. lentebb) * payment_method -> Fizetési mód * payment_method_title * transaction_id * date_paid * date_paid_gmt * date_completed * date_completed_gmt * cart_hash * meta_data: * evir_rendeles -> Evir rendelés szám. Mi írjuk bele, rendelés sikeres letöltése után. * //HuCommerce plugin esetén//: * _billing_tax_number-> adószám. * line_items * tax_lines * shipping_lines * method_title->Szállítási költség megjegyzésbe rakjuk. * fee_lines -> Extra költségek. Az extra költségnek beállított cikszámot rárakjuk a rendelésre * total-> szolgáltatás.netto * name-> szolgáltatás.megjegyés * coupon_lines * refunds * set_paid ====Partner adatok rendelésen==== === Billing, elsődleges cím === * Személy: * first_name -> Keresztnév * last_name -> Vezetéknév * Cég: * company -> Cégnév * address_1 -> cím első sora * address_2 -> cím második sora * city -> Város * state * postcode -> Irányítószám * country -> országkód * email -> emailcím, csak egy van (regisztrációs adat) * phone -> telefonszám *HuCommerce plugin megléte esetén: * order * metadata * _billing_tax_number -> adoszám **Megjegyzés:** - Ha van cégnév, akkor a vezeték és keresztnevet nem vesszük figyelembe, és cégként rögzítjük a partnert. - A cím sorait egymás után fűzzük szóközzel. Max 60 karakter, ha több vágunk. - Ha van HuCommerce plugin felrakva, ami ad adószám mezőt a címhez, akkor elsőször az alapján próbáljuk meg beazonosítani a partnert. - Utána, vagy ha nincs adoszám mező, akkor email-cím alapján keressük meg a partnert. - Ha nincs, akkor rögzítünk egy új partnert. === Shipping, szállítási cím === * Személy: * first_name -> Keresztnév * last_name -> Vezetéknév * Cég: * company -> Cégnév * address_1 -> cím első sora * address_2 -> cím második sora * city -> Város * state * postcode -> Irányítószám * country -> országkód **Megjegyzés:** - Csak akkor foglalkozunk a 'shipping address'-el, ha ki lett töltve rendeléskor. - Megpróbáljuk beazonosítani a szállítási címet a partnerhez. - Ha nincs akkor létrehozzuk, mint szállítási cím. - Használjuk a rendeléshez, mint szállítási címként. ---- ==== Adatoknak a kategorizálása ==== Az adatokat kategóriákba lehet sorolni: * alapadatok: * ez a cikkszám, megnevezés, áfa, tipus * készletkezelés * kezelés módja (manage_stock és kapcsolódó mezők) * ár mezők: * price mezők, on_vale * kategória * cikk kategóriák és a hierarchiája * tulajdonságok * Ami a cikk tulajdonságok, ide értendőek a descriptionok is * A cikk egyebb adatai, ami nem alapadat, mint meret, suly, stb. * milyen elsődleges (és majd további másodlagos) termékkategóriákba van besorolva, * képek * dokumentumok Minden egyes kategóriának kell lennie: * feltöltés * szinkronizálás műveleteknek, amelyeket a felületről el kell tudni érni, valamint biztosítani kell az időzített futtathatóságot. Ez egyelőre cron-ból hívott tokenes lekérés lesz, de a jövőben változik. ==== Szinkronizálás ==== A szinkronizálás célja az utolsó szinkronizálás óta változott adatok **gyors** felküldése a shopba. Ezek a műveletek akár pár percenként is lefuthatnak, ezért kritikus a leggyorsabb futásra és a legkevesebb erőforrás használatra való optimalizálás. Amennyiben a szinkronizáció nem végzett a termékekkel 1 percen belül, úgy háttérben folytatja a műveletet. * alapadatok és árak esetében a cikk modify_date-je alapján lehet * készlet esetén az eVIR belső auditja alapján érintett termékeknél Előfordulhat, hogy mondjuk napi időzítéssel (de külön-külön) mehetnek a képek és dokumentumok, cikk kategóriák szinkronizálása is. Ebben az esetben nem lesz gyors, mivel csak összehasonlítás alapon lehet megcsinálni, azaz le kell tölteni a teljes listát Woo-ból, összehasonlítani az eVIR-ben levővel, és csak a változásokat feltölteni. ==== Feltöltés ==== A feltöltés célja kettős: * A rendszer indulásakor feltölteni az eVIR-ből a webshopba az adatokat * Az üzemeltetés során bármikor "alaphelyzetbe" hozni az adatokat, azaz a webshopban történt elállítgatásokat helyrehozni, visszaállítani abba az állapotba, amiről az eVIR tud. Feltöltés esetén NEM vizsgálunk semmit, nem függ semmitől semmi, egyszerűen fel kell tölteni az adatokat a webshopba. Ha szükséges az ütközés miatt, akkor lehet előtte törölni, vagy bármit csinálni, de akkor is feltétel nélkül az eVIR-ben levő állapotra kell beállnia minden mező minden értékének. Ez a művelet jellemzően egyszer vagy nagyon ritkán (hetente, havonta?) fog lefutni. Nem az a lényeg, hogy mennyi idő alatt fut le, hanem hogy lefusson és erről visszajelzés érkezzen. A feltöltést jelenleg a cikkek esetében a módosítási dátum legkorábbira állítása, és egy szinkronizáció futtatásával érjük el. ==== Egyedi szinkronizálás ==== Az egyedi szinkronizálás esetében a felhasználó maga rakja össze, hogy mely adatok kerüljenek szinkronizálásra a webshopba. Ez jelenleg a cikkekre van megírva. A ''Szinkronizálások/Szinkron beállítás'' menüpontban a''Hozzáad'' gomb megnyomásával lehet új egyedi szinrkonizálást létrehozni. A cikkhez tartozó szinkronizálható mezők fel vannak sorolva, mindegyikhez egy legördülő tartozik. Két féle mező fajta van: * Igen/Nem: Vagyis szinkronizálni akarom a mezőt vagy sem. * Az adott mezőhöz egy termék tulajdonság rendelhető hozzá, mely ha be van állítva a cikkhez, akkor az nem mint tulajdonság, hanem a kiválasztott mezőhöz kerül feltöltésre. **FONTOS**: * Ha egy tulajdonság mezőként be van állítva egy szinkronizálásban, akkor az a tulajdonság nem kerül Woocommerce attribute-ként feltöltésre semelyik másik esetben sem. * Ha van új cikk, amely még nem szerepel a webshopban, akkor az feltöltésre kerül. A név ebben az esetben mindenképp feltöltésre kerül, bármi is legyen beállítva az egyedi szinkronizálásban. Ezeket a szinkronizálásokat ugyan itt lehet futtatni a ''Szinkronizálások/Szinkron beállítás'' menüpont alatt, ahol az összes egyedi szinkronizálás megtalálható és látható mikor volt utoljára futtatva (note: //Ez itt téves infó. Nem az látható mikor volt utoljára futtatva, noha azt is látni kéne, hanem azt, hogy meddig jutott el a szinkron, a termék módosítási ideje)//. A ''Szinkronizálás'' gombbal az összes utolsó szinkronizálási időpont után modósult terméket szinkronizálja, míg az ''Összes termék szinkronizálása'' gomb megnyomásával beállítja ezt az időpontot a legkorábbira, és az összes cikket szinkronizálja. \\ A ''Szerkesztés'' gombbal módosítani tudjuk a szinkronizálandó mezőket. A ''Cikk alapértelmezett szinkronizálás'' menüpont a [[evir:rendszer:beallitasok:woocommerce|Woocommerce beállítások]]-ban beállított egyedi szinkronizálást fogja lefuttatni, a fentiek alapján leírt módon. ---- ==== Több WooCommerce shop támogatása ==== Távlati terv lett volna, de akkor hozzuk előre: több webshop (benne akár több woocommerce) támogatása. Ez azt jelenti, hogy multiplicitást kell adni azoknak a mezőknek, amelyek shoponként különbözőek lehetnek: * webshop beállítás * webshop akciós * webshop árkategória * webshop raktár * webshoponként a termék kategóriák beállítása * webshoponként az alapadatok (URL, user, pass, stb.) A jelenlegi beállítások akár madahatnak is a helyükön és azok dedikáltan az eVIR saját webshopjára vonatkozzanak, és ezek az extrák legyenek külön feltüntetve, külön állítgathatóan. ---- ==== Összes termékkategória törlése ==== DELETE a,c FROM wp_terms AS a LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'product_cat' ==== Összes termék törlése mindenestül ==== DELETE relations.*, taxes.*, terms.* FROM wp_term_relationships AS relations INNER JOIN wp_term_taxonomy AS taxes ON relations.term_taxonomy_id=taxes.term_taxonomy_id INNER JOIN wp_terms AS terms ON taxes.term_id=terms.term_id WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type='product'); DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type = 'product'); DELETE FROM wp_posts WHERE post_type = 'product';