Ładuję...
57 view(s)
Integracja Magento z systemem Lefthand
Lefthand to programy księgowe i handlowo-magazynowe dla firm. Nie ukrywam, że po raz pierwszy spotkałem się z tym oprogramowaniem wówczas gdy jeden z klientów dla którego wdrażaliśmy Magento poprosił nas o to by zautomatyzować przepływ stanów magazynowych oraz zamówień.
Podstawowy zakres integracji Magento z Lefthand.
W słowie podstawowy kryje się aktualizacja stanów w Magento na podstawie informacji pobieranych z aplikacji Lefthand oraz eksport zamówień z Magento do Lefthand. Pobieranie danych oraz aktualizacja w aplikacji Lefthand odbywa się bezpośrednio na bazie danych. Lefthand działa w oparciu o bazę Firebird. W środowisku PHP wygodnie można komunikować się z tą bazą dzięki PDO. Najpierw trzeba jednak sprawdzić czy Twój serwer obsługuje ten silnik bazy danych. Oto prosta funkcja, którą użyłem by upewnić się, że serwer na którym instalujemy Magento obsługuje również bazę Firebird. public function init($ip,$dbname,$username,$password){ try { $drivers = array(); foreach (PDO::getAvailableDrivers() as $driver) { $drivers[] = $driver; } $drivers = array_flip($drivers); if (array_key_exists('firebird', $drivers)) { $res = $this->conection($ip, $dbname, $username, $password); return $res; } else { return 'Brak odpowiedniego drajwera bazy danych.'; } } catch (Exception $e) { return 'Błąd połączenia z Baza Danych : ' . $e->getMessage(); } } Następnie gdy już mamy pewność, że mam jak połączyć się z bazą wykonujemy dwa połączenia: pierwsze służy odczytom z bazy Firebird a drugie niezależne wyłącznie do zapisywania w niej danych. private function conection($ip,$dbname,$username,$password){ try { $this->conRead = new PDO('firebird:host=' . $ip . ';dbname=' . $ip . $dbname, $username, $password); $this->conWrite = new PDO('firebird:host=' . $ip . ';dbname=' . $ip . $dbname, $username, $password); return true; } catch (Exception $e) { return 'Błąd połączenia z Baza Danych : ' . $e->getMessage(); } }Odczyt stanów magazynowych z Lefthand
Przygotowałem prostą funkcję, która pobiera dane o produktach z programu Lefthand. private function getProductStocks(){ try { $sth = $this->con->prepare("SELECT lw.ID, lw.CODE, lw.NAME, lws.ITEM_AMOUNT FROM LH_WAREHOUSE lw JOIN LH_WAREHOUSE_STATES lws ON lws.ID_LH_WAREHOUSE = lw.ID ORDER BY lw. ID_LH_WAREHOUSE_GROUP ASC, lw.CODE ASC"); $sth->execute(); $result = $sth->fetchall(PDO::FETCH_ASSOC); return $result; } catch (PDOException $e) { return 'Błąd odczytu stanów produktów : ' . $e->getMessage(); } } Dzięki tym kilku linijkom kodu otrzymujemy wszystko co jest nam potrzebne by zaktualizować stany magazynowe w sklepie Magento. Sama funkcja odpowiedzialna z aktualizację stanów magazynowych w Magento wygląda następująco: private function updateStock($data){ try { $sku = $data['sku']; $newQty = $data['stock']; $name = $data['name']; $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku); if ($product) { $productId = $product->getId(); $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId); if($stockItem->getData('manage_stock')) { if($newQty > 0) { $stockItem->setData('is_in_stock', 1); $stockItem->setData('qty', (integer)$newQty); $stockItem->save(); } } Mage::log('Nowy stan : '.$newQty.' dla produktu ::' . $sku . ' :: '.$name.'<br/>', null, $this->logFilenameSuccess); }else{ Mage::log('Brak produktu ::' . $sku . ' :: '.$name.'<br/>', null, $this->logFilenameErrors); } } catch (Exception $e) { Mage::log('Błąd stanu : '.$newQty.' dla produktu ::' . $sku . ' :: '.$name.' :: '.$e->getMessage().'<br/>', null, $this->logFilenameErrors); } } W zależności od potrzeb moduł aktualizujący stany magazynowe w Magento uruchamiamy w harmonogramie Cron o dogodnej częstotliwości. Służy temu odpowiedni wpis w pliku konfiguracyjnym rozszerzenia, który wygląda następująco: <crontab> <jobs> <lefthand_importstocks> <schedule><cron_expr>*/50 * * * *</cron_expr></schedule> <run><model>lefthand/cron::ImportStocks</model></run> </lefthand_importstocks> </jobs> </crontab>Eksport zamówień z Magento do Lefthand
W przypadku eksportu zamówień z Magento i zapisywanie ich do systemu Lefthand jest znacznie więcej kodu. W aplikacji Lefthand dane typu:- Kraje
- Województwa
- Miasta
- Adresy
- Reprezentanci