-
-
Save rmehta/16dcc143cb8a0f8640f7 to your computer and use it in GitHub Desktop.
<?php | |
// contributed by supplify.com | |
error_reporting(E_ALL); | |
ini_set('display_errors', 1); | |
require_once '../curl/Zebra_cURL.php'; | |
require_once '../app/Mage.php'; | |
Mage::app(); | |
class action extends Zebra_cURL{ | |
function login(){ | |
// LOGIN: update your details here: | |
$this->erpUrl = 'https://test.example.com/'; | |
$username = '[email protected]'; | |
$password = 'test-password'; | |
$this->api_resource = 'api/resource/'; | |
return $this->post(array( | |
$this->erpUrl.'api/method/login' => array( | |
'usr' => $username, | |
'pwd' => $password, | |
))); | |
} | |
function getDocumentAll($docType,$limit_start,$limit_page_length,$fields){ // Get All data | |
if($limit_page_length != '' || $limit_start != '' || count($fields) > 0){ | |
$fields = implode('","',$fields); | |
$fields = '"'.$fields.'"'; | |
$param = '?'; | |
$param .= ($limit_page_length != '') ? 'limit_page_length='.$limit_page_length.'&' : ''; | |
$param .= ($limit_start != '') ? 'limit_start='.$limit_start.'&' : ''; | |
$param .= (count($fields) > 0) ? 'fields=['.$fields.']' : ''; | |
}else{ | |
$param = ''; | |
} | |
// echo $param;exit; | |
return $this->get(array( | |
$this->erpUrl.$this->api_resource.$docType.$param)); | |
// print_r($a); | |
} | |
function getDocumentById($docType,$id){ // Get All data | |
return $this->get(array( | |
$this->erpUrl.$this->api_resource.$docType.'/'.$id)); | |
} | |
function getDocumentFields($docType,$param){ // Get data filtered by fields $param in json format ex:- '["name"]' | |
$this->get(array( | |
$this->erpUrl.$this->api_resource.$docType.'/?filters='.$param)); | |
} | |
function getDocumentFilter($docType,$field,$operator,$value){ // Get data filtered by feilds $param in json format ex:- '["name"]' | |
$param = '?filters=[["'.$docType.'", "'.$field.'", "'.$operator.'", "'.$value.'"]]'; | |
$this->get(array( | |
$this->erpUrl.$this->api_resource.$docType.'/'.$param)); | |
} | |
function createDocument($docType,$jsonData){ // Create data | |
$a = $this->post(array( | |
$this->erpUrl.$this->api_resource.$docType => array( | |
'data' => $jsonData, | |
))); | |
//print_r($a);exit; | |
} | |
function updateDocument($docType,$jsonData,$id){ // Update data | |
$this->put(array( | |
$this->erpUrl.$this->api_resource.$docType.'/'.$id => array( | |
'data' => $jsonData, | |
))); | |
} | |
function getJson($array){ | |
return json_encode($array); | |
} | |
function getProductCollection(){ | |
return Mage::getModel('catalog/product')->getCollection(); | |
} | |
function loadProduct($_product){ | |
return Mage::getModel('catalog/product')->loadByAttribute('sku',$_product->item_code); | |
} | |
function updateSingleProduct($sku){ | |
if($sku){ | |
$e_product = $this->getDocumentById('Item',$sku); | |
$e_product = json_decode($e_product->body); | |
$e_product = $this->updateProduct($e_product->data); | |
} | |
} | |
function updateAllProduct($docType,$limit_start,$limit_page_length,$fields){ // Update All product | |
$e_product = $this->getDocumentAll($docType,$limit_start,$limit_page_length,$fields); | |
$e_product = json_decode($e_product->body); | |
} | |
function updateProductStock($docType,$limit_start,$limit_page_length,$fields){ // Update All product stock | |
$e_product = $this->getDocumentAll($docType,$limit_start,$limit_page_length,$fields); | |
$e_product = json_decode($e_product->body); | |
$collection = $e_product->data->items; | |
foreach ($collection as $_product) { | |
$this->updateStock($_product); | |
} | |
} | |
function getProductStock($product){ | |
return Mage::getModel('cataloginventory/stock_item')->loadByProduct($product); | |
} | |
function updateStock($_product){ | |
$product = $this->loadProduct($_product); | |
$stock = $this->getProductStock($product); | |
try{ | |
if($_product->qty > 0){ $stock->setIsInStock(1); }else{ $stock->setIsInStock(0); } | |
$stock->setQty($_product->qty)->save(); | |
echo 'done'; | |
} | |
catch(Exception $e){ | |
echo 'a'; | |
echo $e->getMessage(); | |
} | |
} | |
function updateProduct($e_product){ | |
$product = $this->loadProduct($e_product); | |
$product->setName($e_product->item_name); | |
try{ | |
$product->save(); | |
echo 'done'; | |
}catch(Exception $e){ | |
echo $e->getMessage(); | |
} | |
} | |
function getCustomerCollection(){ | |
return Mage::getModel('customer/customer')->getCollection()->addAttributeToSelect('*'); | |
} | |
function getErpCustomer(){ | |
echo '<pre>'; | |
$cust = $this->getDocumentById('Customer','yash'); | |
print_r($cust);exit; | |
} | |
function writeNewCustomers(){ | |
foreach ($this->getCustomerCollection() as $customer) { | |
$data = array( | |
'customer_name' => $customer->getFirstname().' '.$customer->getLastname().'-'.$customer->getId() , | |
'customer_group' => 'Individual', | |
'customer_type' => 'Individual', | |
'territory' => 'India', | |
'company' => 'Test Company', | |
); | |
$data = $this->getJson($data); | |
try{ | |
$this->createDocument('Customer',$data); | |
} | |
catch(Exception $e){ | |
echo $e->getMessage(); | |
} | |
} | |
} | |
function writeNewCustomerAddress(){ | |
foreach ($this->getCustomerCollection() as $customer) { | |
$billing_address = $customer->getDefaultBillingAddress(); | |
if($billing_address){ | |
$data = array( | |
'address_line1' => $billing_address->getData('street'), | |
'city' => $billing_address->getCity(), | |
'phone' => $billing_address->getTelephone(), | |
); | |
echo $doc = 'Address/'.$customer->getFirstname().' '.$customer->getLastname().'-Billing'; | |
$data = $this->getJson($data); | |
print_r($data);exit; | |
try{ | |
$this->createDocument($doc,$data); | |
} | |
catch(Exception $e){ | |
echo $e->getMessage(); | |
} | |
} | |
} | |
} | |
function writeOrders(){ | |
$orders = Mage::getModel('sales/order')->getCollection(); | |
$items = array(); | |
foreach ($orders as $order) { | |
if($order->getCustomerGroupId() == 0){ continue; } | |
$ordered_items = $order->getAllItems(); | |
foreach($ordered_items as $item){ | |
$sku = $item->getSku(); | |
$items[] = array('item_code'=>$sku); | |
} | |
$data = array( | |
'customer' => $order->getCustomerFirstname() , | |
'delivery_date' => date('Y-m-d'), | |
'items'=> array($items)); | |
$data = $this->getJson($data); | |
try{ | |
$this->createDocument('Sales Order',$data); | |
} | |
catch(Exception $e){ | |
echo $e->getMessage(); | |
} | |
} | |
} | |
function pushCustomer($customer){ | |
$data = array( | |
'customer_name' => $customer->getFirstname().' '.$customer->getLastname().'-'.$customer->getId() , | |
'customer_group' => 'Individual', | |
'customer_type' => 'Individual', | |
'territory' => 'India', | |
'company' => 'Test Company', | |
'status' => 'Submitted', | |
); | |
$data = $this->getJson($data); | |
try{ | |
echo 'a'; | |
$result = $this->createDocument($this->docCustomer,$data); | |
} | |
catch(Exception $e){ | |
echo 'b' | |
$result = $e->getMessage(); | |
} | |
return $result; | |
} | |
function pushAllCustomer(){ | |
$customers = Mage::getModel('customer/customer')->getCollection(); | |
foreach ($customers as $customer) { | |
$this->pushCustomer($customer); | |
} | |
} | |
} | |
$obj->cookies('/tmp/cookies.txt',true); | |
$obj->login(); | |
//$obj->updateProductStock('Stock%20Entry/STE-00001'); | |
// $obj->writeOrders(); | |
// $obj->writeOrders(); | |
?> |
Does this work in the current state?
This script looks to be useful for migrating sales orders and the associated customers from Magento to ERPNext, but it is nowhere close to an "integration".
Yes, my question is also the same, how to works with Magento?
Hello, Has anyone here been successfull in creating and completing a working connector/bridge for ERPNext to Magento 2.0 that is available ? Thanks
hello, when i call function login(), it logout me in erpnext account. And it show error msg "You are not permitted to access this page.".
Any Luck with full integration with Magento 2?
Line 251: $result = $this->createDocument($this->docCustomer,$data);
"this->docCustomer" does not exists...
This script is for Magento 1.9.
Any one have similar script for Magento 2 ?
I am interested in finding out about this as well. Am willing to pay for this integration. Do we have enough interested people? Can we get a rock-solid integration with Magento 2? This would be a huge win for ErpNext as well!!!!