How do i create a shipment class object in magento 2? The 2019 Stack Overflow Developer Survey Results Are InCreate custom module to modify sales/order/shipment/api.phpCall to a member function setLock() on a non-object app/code/core/Mage/Index/Model/Lock.php on line 162Unit Test for overwrite collection class in magento2main.CRITICAL: Plugin class doesn't existHow to change save path of PDF files in magento 2Magento 2.1.6 Cannot save shipmentUnable to create order from admin in magento 2magento 2.2 load model vs objectManager: the first returns the wrong id while the second returns the correct oneMonolog Error After 2.2 UpgradeAdding tracking number to existing orders from CSV file Programmatically in Magento 2
How can I create a character who can assume the widest possible range of creature sizes?
What tool would a Roman-age civilization have to grind silver and other metals into dust?
Why is it "Tumoren" and not "Tumore"?
Is there a name of the flying bionic bird?
Why don't Unix/Linux systems traverse through directories until they find the required version of a linked library?
How are circuits which use complex ICs normally simulated?
How to change the limits of integration
Extreme, unacceptable situation and I can't attend work tomorrow morning
What is this 4-propeller plane?
Is this food a bread or a loaf?
aging parents with no investments
Is three citations per paragraph excessive for undergraduate research paper?
How to deal with fear of taking dependencies
Why do UK politicians seemingly ignore opinion polls on Brexit?
Monty Hall variation
Inflated grade on resume at previous job, might former employer tell new employer?
How can I fix this gap between bookcases I made?
Geography at the pixel level
If a poisoned arrow's piercing damage is reduced to 0, do you still get poisoned?
Should I write numbers in words or as numerals when there are multiple next to each other?
Limit the amount of RAM Mathematica may access?
Which Sci-Fi work first showed weapon of galactic-scale mass destruction?
Does duplicating a spell with wish count as casting that spell?
Evaluating number of iteration with a certain map with While
How do i create a shipment class object in magento 2?
The 2019 Stack Overflow Developer Survey Results Are InCreate custom module to modify sales/order/shipment/api.phpCall to a member function setLock() on a non-object app/code/core/Mage/Index/Model/Lock.php on line 162Unit Test for overwrite collection class in magento2main.CRITICAL: Plugin class doesn't existHow to change save path of PDF files in magento 2Magento 2.1.6 Cannot save shipmentUnable to create order from admin in magento 2magento 2.2 load model vs objectManager: the first returns the wrong id while the second returns the correct oneMonolog Error After 2.2 UpgradeAdding tracking number to existing orders from CSV file Programmatically in Magento 2
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
i am trying to get tracking from csv and save to magento 2 order programmatically.
i grabbed the create shipment & add tracking code from here https://www.scommerce-mage.com/blog/magento-2-how-to-create-shipment-programatically.html, and add an execute function (line 142) to load data from csv. but i'm not sure how to create an shipment object (line 179).
<?php
$file = fopen('track.csv', 'r', '"'); // set path to the CSV file
if ($file !== false)
require __DIR__ . '/app/bootstrap.php';
$bootstrap = MagentoFrameworkAppBootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('MagentoFrameworkAppState');
$state->setAreaCode('adminhtml');
// add logging capability
$writer = new ZendLogWriterStream(BP . '/var/log/import-update.log');
$logger = new ZendLogLogger();
$logger->addWriter($writer);
class ShipmentObject
/*There are two main functions
prepareShipment of MagentoSalesModelOrderShipmentFactory class which prepare invoice and
addObject of MagentoFrameworkDBTransactionFactory class which helps to create shipment and associate the shipment with original order in Magento 2.
*/
/**
* @var MagentoSalesModelOrderShipmentTrackFactory
*/
protected $_shipmentTrackFactory;
/**
* The ShipmentFactory is used to create a new Shipment.
*
* @var MagentoSalesModelOrderShipmentFactory
*/
protected $_shipmentFactory;
/**
* @var MagentoFrameworkDBTransactionFactory
*/
protected $_transactionFactory;
/**
* @var MagentoSalesApiOrderRepositoryInterface
*/
protected $_orderRepository;
protected $_file;
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
public function __construct(
MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory,
MagentoSalesModelOrderShipmentFactory $shipmentFactory,
MagentoFrameworkDBTransactionFactory $transactionFactory,
MagentoSalesApiOrderRepositoryInterface $orderRepository,
MagentoSalesModelOrderFactory $orderFactory
)
$this->_shipmentTrackFactory = $shipmentTrackFactory;
$this->_shipmentFactory = $shipmentFactory;
$this->_transactionFactory = $transactionFactory;
$this->_orderRepository = $orderRepository;
$this->orderFactory = $orderFactory;
/**
* @param int $orderId
* @param string $trackingNumber
* @return MagentoSalesModelShipment $shipment
*/
protected function createShipment($orderId, $trackingNumber)
try
//$order = $this->_orderRepository->get($orderId); // this is increment id
$order = $this->orderFactory->create()->loadByIncrementId($orderId);
if ($order)
$data = array(array(
'carrier_code' => 'fedex', //$order->getShippingMethod(), //'carrier_code' => 'fedex', // need to lower case
'title' => 'Federal Express', //$order->getShippingDescription(), //'title' => 'Federal Express', // how to set here 'Federal Express' or 'United Parcel Service'
'number' => $trackingNumber, //$trackingnumber,
));
$shipment = $this->prepareShipment($order, $data);
/*
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create()->addObject($shipment)->addObject($shipment->getOrder());
$transactionSave->save();
*/
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
//return $shipment; //original
//return $shipment->save(); //magefms
return $order; //helgeB
catch (Exception $e)
throw new MagentoFrameworkExceptionLocalizedException(
__($e->getMessage())
);
/**
* @param $order MagentoSalesModelOrder
* @param $track array
* @return $this
*/
protected function prepareShipment($order, $track)
$shipment = $this->_shipmentFactory->create(
$order,
$this->prepareShipmentItems($order),
$track
);
return $shipment->getTotalQty() ? $shipment->register() : false;
/**
* @param $order MagentoSalesModelOrder
* @return array
*/
protected function prepareShipmentItems($order)
$items = [];
foreach($order->getAllItems() as $item)
$items[$item->getItemId()] = $item->getQtyOrdered();
return $items;
//after prepareShipmentItems function
/**
* @param $file
*/
public function setFile($file)
$this->_file = $file;
/**
* @param null
* @return ordersave
*/
public function execute()
// enter the number of data fields you require the product row inside the CSV file to contain
$required_data_fields = 3; //number of column in csv
//$header = fgetcsv($file); // get data headers and skip 1st row
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
//while (($row = fgetcsv($file, 100, ",")) !== FALSE)
//while ( $row = fgetcsv($file, 100, ",") )
//while (($row = fgetcsv($file)) !== FALSE)
$data_count = count($row);
if ($data_count < 1)
continue;
$data = array();
//$data = array_combine($header, $row);
$data = array($row);
$ponumber = $row[0]; //$data['ponumber']; // column A
if ($data_count < $required_data_fields)
$logger->info("Skipping Order Number " . $ponumber . ". Not enough data to import.");
continue;
//$shipvia = trim($data[1]); //trim($data['shipvia']); // column B
//$trackingnumber = trim($data[2]);//trim($data['trackingnumber']); // column C
$shipvia = isset($row[1]) ? $row[1] : null;
$trackingnumber = isset($row[2]) ? $row[2] : null;
switch ($shipvia)
case "FEDEX":
$shipvia = "fedex";
break;
case "UPS":
$shipvia = "ups";
break;
case "USPS":
$shipvia = "usps";
break;
default:
$shipvia = "fedex";
///////////////////////////////start adding tracking///////////////////////////////
echo 'Updating Order: '.$ponumber.', with '.$shipvia.':'.$trackingnumber."rn";
//print_r($row);
$order = $this->createShipment($ponumber, $trackingnumber); /* @param int $orderId@param // end of while loop
//end of execute function
// end of class shipmentobject
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$orderFactory = $objectManager->get('MagentoSalesModelOrderFactory');
//create new class object
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository,$orderFactory);
$test->setFile($file);
$test->execute();
fclose($file);
// if file not exist, then do nothing
new error
tracking information does not copy to (shipment tab) "sales_shipment_grid"
it is showing like this in admin panel, the shipment tab is empty, though the tracking is in there with no carrier assign.
magento2 php shipment object-manager shipment-tracking
add a comment |
i am trying to get tracking from csv and save to magento 2 order programmatically.
i grabbed the create shipment & add tracking code from here https://www.scommerce-mage.com/blog/magento-2-how-to-create-shipment-programatically.html, and add an execute function (line 142) to load data from csv. but i'm not sure how to create an shipment object (line 179).
<?php
$file = fopen('track.csv', 'r', '"'); // set path to the CSV file
if ($file !== false)
require __DIR__ . '/app/bootstrap.php';
$bootstrap = MagentoFrameworkAppBootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('MagentoFrameworkAppState');
$state->setAreaCode('adminhtml');
// add logging capability
$writer = new ZendLogWriterStream(BP . '/var/log/import-update.log');
$logger = new ZendLogLogger();
$logger->addWriter($writer);
class ShipmentObject
/*There are two main functions
prepareShipment of MagentoSalesModelOrderShipmentFactory class which prepare invoice and
addObject of MagentoFrameworkDBTransactionFactory class which helps to create shipment and associate the shipment with original order in Magento 2.
*/
/**
* @var MagentoSalesModelOrderShipmentTrackFactory
*/
protected $_shipmentTrackFactory;
/**
* The ShipmentFactory is used to create a new Shipment.
*
* @var MagentoSalesModelOrderShipmentFactory
*/
protected $_shipmentFactory;
/**
* @var MagentoFrameworkDBTransactionFactory
*/
protected $_transactionFactory;
/**
* @var MagentoSalesApiOrderRepositoryInterface
*/
protected $_orderRepository;
protected $_file;
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
public function __construct(
MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory,
MagentoSalesModelOrderShipmentFactory $shipmentFactory,
MagentoFrameworkDBTransactionFactory $transactionFactory,
MagentoSalesApiOrderRepositoryInterface $orderRepository,
MagentoSalesModelOrderFactory $orderFactory
)
$this->_shipmentTrackFactory = $shipmentTrackFactory;
$this->_shipmentFactory = $shipmentFactory;
$this->_transactionFactory = $transactionFactory;
$this->_orderRepository = $orderRepository;
$this->orderFactory = $orderFactory;
/**
* @param int $orderId
* @param string $trackingNumber
* @return MagentoSalesModelShipment $shipment
*/
protected function createShipment($orderId, $trackingNumber)
try
//$order = $this->_orderRepository->get($orderId); // this is increment id
$order = $this->orderFactory->create()->loadByIncrementId($orderId);
if ($order)
$data = array(array(
'carrier_code' => 'fedex', //$order->getShippingMethod(), //'carrier_code' => 'fedex', // need to lower case
'title' => 'Federal Express', //$order->getShippingDescription(), //'title' => 'Federal Express', // how to set here 'Federal Express' or 'United Parcel Service'
'number' => $trackingNumber, //$trackingnumber,
));
$shipment = $this->prepareShipment($order, $data);
/*
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create()->addObject($shipment)->addObject($shipment->getOrder());
$transactionSave->save();
*/
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
//return $shipment; //original
//return $shipment->save(); //magefms
return $order; //helgeB
catch (Exception $e)
throw new MagentoFrameworkExceptionLocalizedException(
__($e->getMessage())
);
/**
* @param $order MagentoSalesModelOrder
* @param $track array
* @return $this
*/
protected function prepareShipment($order, $track)
$shipment = $this->_shipmentFactory->create(
$order,
$this->prepareShipmentItems($order),
$track
);
return $shipment->getTotalQty() ? $shipment->register() : false;
/**
* @param $order MagentoSalesModelOrder
* @return array
*/
protected function prepareShipmentItems($order)
$items = [];
foreach($order->getAllItems() as $item)
$items[$item->getItemId()] = $item->getQtyOrdered();
return $items;
//after prepareShipmentItems function
/**
* @param $file
*/
public function setFile($file)
$this->_file = $file;
/**
* @param null
* @return ordersave
*/
public function execute()
// enter the number of data fields you require the product row inside the CSV file to contain
$required_data_fields = 3; //number of column in csv
//$header = fgetcsv($file); // get data headers and skip 1st row
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
//while (($row = fgetcsv($file, 100, ",")) !== FALSE)
//while ( $row = fgetcsv($file, 100, ",") )
//while (($row = fgetcsv($file)) !== FALSE)
$data_count = count($row);
if ($data_count < 1)
continue;
$data = array();
//$data = array_combine($header, $row);
$data = array($row);
$ponumber = $row[0]; //$data['ponumber']; // column A
if ($data_count < $required_data_fields)
$logger->info("Skipping Order Number " . $ponumber . ". Not enough data to import.");
continue;
//$shipvia = trim($data[1]); //trim($data['shipvia']); // column B
//$trackingnumber = trim($data[2]);//trim($data['trackingnumber']); // column C
$shipvia = isset($row[1]) ? $row[1] : null;
$trackingnumber = isset($row[2]) ? $row[2] : null;
switch ($shipvia)
case "FEDEX":
$shipvia = "fedex";
break;
case "UPS":
$shipvia = "ups";
break;
case "USPS":
$shipvia = "usps";
break;
default:
$shipvia = "fedex";
///////////////////////////////start adding tracking///////////////////////////////
echo 'Updating Order: '.$ponumber.', with '.$shipvia.':'.$trackingnumber."rn";
//print_r($row);
$order = $this->createShipment($ponumber, $trackingnumber); /* @param int $orderId@param // end of while loop
//end of execute function
// end of class shipmentobject
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$orderFactory = $objectManager->get('MagentoSalesModelOrderFactory');
//create new class object
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository,$orderFactory);
$test->setFile($file);
$test->execute();
fclose($file);
// if file not exist, then do nothing
new error
tracking information does not copy to (shipment tab) "sales_shipment_grid"
it is showing like this in admin panel, the shipment tab is empty, though the tracking is in there with no carrier assign.
magento2 php shipment object-manager shipment-tracking
add a comment |
i am trying to get tracking from csv and save to magento 2 order programmatically.
i grabbed the create shipment & add tracking code from here https://www.scommerce-mage.com/blog/magento-2-how-to-create-shipment-programatically.html, and add an execute function (line 142) to load data from csv. but i'm not sure how to create an shipment object (line 179).
<?php
$file = fopen('track.csv', 'r', '"'); // set path to the CSV file
if ($file !== false)
require __DIR__ . '/app/bootstrap.php';
$bootstrap = MagentoFrameworkAppBootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('MagentoFrameworkAppState');
$state->setAreaCode('adminhtml');
// add logging capability
$writer = new ZendLogWriterStream(BP . '/var/log/import-update.log');
$logger = new ZendLogLogger();
$logger->addWriter($writer);
class ShipmentObject
/*There are two main functions
prepareShipment of MagentoSalesModelOrderShipmentFactory class which prepare invoice and
addObject of MagentoFrameworkDBTransactionFactory class which helps to create shipment and associate the shipment with original order in Magento 2.
*/
/**
* @var MagentoSalesModelOrderShipmentTrackFactory
*/
protected $_shipmentTrackFactory;
/**
* The ShipmentFactory is used to create a new Shipment.
*
* @var MagentoSalesModelOrderShipmentFactory
*/
protected $_shipmentFactory;
/**
* @var MagentoFrameworkDBTransactionFactory
*/
protected $_transactionFactory;
/**
* @var MagentoSalesApiOrderRepositoryInterface
*/
protected $_orderRepository;
protected $_file;
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
public function __construct(
MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory,
MagentoSalesModelOrderShipmentFactory $shipmentFactory,
MagentoFrameworkDBTransactionFactory $transactionFactory,
MagentoSalesApiOrderRepositoryInterface $orderRepository,
MagentoSalesModelOrderFactory $orderFactory
)
$this->_shipmentTrackFactory = $shipmentTrackFactory;
$this->_shipmentFactory = $shipmentFactory;
$this->_transactionFactory = $transactionFactory;
$this->_orderRepository = $orderRepository;
$this->orderFactory = $orderFactory;
/**
* @param int $orderId
* @param string $trackingNumber
* @return MagentoSalesModelShipment $shipment
*/
protected function createShipment($orderId, $trackingNumber)
try
//$order = $this->_orderRepository->get($orderId); // this is increment id
$order = $this->orderFactory->create()->loadByIncrementId($orderId);
if ($order)
$data = array(array(
'carrier_code' => 'fedex', //$order->getShippingMethod(), //'carrier_code' => 'fedex', // need to lower case
'title' => 'Federal Express', //$order->getShippingDescription(), //'title' => 'Federal Express', // how to set here 'Federal Express' or 'United Parcel Service'
'number' => $trackingNumber, //$trackingnumber,
));
$shipment = $this->prepareShipment($order, $data);
/*
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create()->addObject($shipment)->addObject($shipment->getOrder());
$transactionSave->save();
*/
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
//return $shipment; //original
//return $shipment->save(); //magefms
return $order; //helgeB
catch (Exception $e)
throw new MagentoFrameworkExceptionLocalizedException(
__($e->getMessage())
);
/**
* @param $order MagentoSalesModelOrder
* @param $track array
* @return $this
*/
protected function prepareShipment($order, $track)
$shipment = $this->_shipmentFactory->create(
$order,
$this->prepareShipmentItems($order),
$track
);
return $shipment->getTotalQty() ? $shipment->register() : false;
/**
* @param $order MagentoSalesModelOrder
* @return array
*/
protected function prepareShipmentItems($order)
$items = [];
foreach($order->getAllItems() as $item)
$items[$item->getItemId()] = $item->getQtyOrdered();
return $items;
//after prepareShipmentItems function
/**
* @param $file
*/
public function setFile($file)
$this->_file = $file;
/**
* @param null
* @return ordersave
*/
public function execute()
// enter the number of data fields you require the product row inside the CSV file to contain
$required_data_fields = 3; //number of column in csv
//$header = fgetcsv($file); // get data headers and skip 1st row
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
//while (($row = fgetcsv($file, 100, ",")) !== FALSE)
//while ( $row = fgetcsv($file, 100, ",") )
//while (($row = fgetcsv($file)) !== FALSE)
$data_count = count($row);
if ($data_count < 1)
continue;
$data = array();
//$data = array_combine($header, $row);
$data = array($row);
$ponumber = $row[0]; //$data['ponumber']; // column A
if ($data_count < $required_data_fields)
$logger->info("Skipping Order Number " . $ponumber . ". Not enough data to import.");
continue;
//$shipvia = trim($data[1]); //trim($data['shipvia']); // column B
//$trackingnumber = trim($data[2]);//trim($data['trackingnumber']); // column C
$shipvia = isset($row[1]) ? $row[1] : null;
$trackingnumber = isset($row[2]) ? $row[2] : null;
switch ($shipvia)
case "FEDEX":
$shipvia = "fedex";
break;
case "UPS":
$shipvia = "ups";
break;
case "USPS":
$shipvia = "usps";
break;
default:
$shipvia = "fedex";
///////////////////////////////start adding tracking///////////////////////////////
echo 'Updating Order: '.$ponumber.', with '.$shipvia.':'.$trackingnumber."rn";
//print_r($row);
$order = $this->createShipment($ponumber, $trackingnumber); /* @param int $orderId@param // end of while loop
//end of execute function
// end of class shipmentobject
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$orderFactory = $objectManager->get('MagentoSalesModelOrderFactory');
//create new class object
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository,$orderFactory);
$test->setFile($file);
$test->execute();
fclose($file);
// if file not exist, then do nothing
new error
tracking information does not copy to (shipment tab) "sales_shipment_grid"
it is showing like this in admin panel, the shipment tab is empty, though the tracking is in there with no carrier assign.
magento2 php shipment object-manager shipment-tracking
i am trying to get tracking from csv and save to magento 2 order programmatically.
i grabbed the create shipment & add tracking code from here https://www.scommerce-mage.com/blog/magento-2-how-to-create-shipment-programatically.html, and add an execute function (line 142) to load data from csv. but i'm not sure how to create an shipment object (line 179).
<?php
$file = fopen('track.csv', 'r', '"'); // set path to the CSV file
if ($file !== false)
require __DIR__ . '/app/bootstrap.php';
$bootstrap = MagentoFrameworkAppBootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('MagentoFrameworkAppState');
$state->setAreaCode('adminhtml');
// add logging capability
$writer = new ZendLogWriterStream(BP . '/var/log/import-update.log');
$logger = new ZendLogLogger();
$logger->addWriter($writer);
class ShipmentObject
/*There are two main functions
prepareShipment of MagentoSalesModelOrderShipmentFactory class which prepare invoice and
addObject of MagentoFrameworkDBTransactionFactory class which helps to create shipment and associate the shipment with original order in Magento 2.
*/
/**
* @var MagentoSalesModelOrderShipmentTrackFactory
*/
protected $_shipmentTrackFactory;
/**
* The ShipmentFactory is used to create a new Shipment.
*
* @var MagentoSalesModelOrderShipmentFactory
*/
protected $_shipmentFactory;
/**
* @var MagentoFrameworkDBTransactionFactory
*/
protected $_transactionFactory;
/**
* @var MagentoSalesApiOrderRepositoryInterface
*/
protected $_orderRepository;
protected $_file;
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
public function __construct(
MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory,
MagentoSalesModelOrderShipmentFactory $shipmentFactory,
MagentoFrameworkDBTransactionFactory $transactionFactory,
MagentoSalesApiOrderRepositoryInterface $orderRepository,
MagentoSalesModelOrderFactory $orderFactory
)
$this->_shipmentTrackFactory = $shipmentTrackFactory;
$this->_shipmentFactory = $shipmentFactory;
$this->_transactionFactory = $transactionFactory;
$this->_orderRepository = $orderRepository;
$this->orderFactory = $orderFactory;
/**
* @param int $orderId
* @param string $trackingNumber
* @return MagentoSalesModelShipment $shipment
*/
protected function createShipment($orderId, $trackingNumber)
try
//$order = $this->_orderRepository->get($orderId); // this is increment id
$order = $this->orderFactory->create()->loadByIncrementId($orderId);
if ($order)
$data = array(array(
'carrier_code' => 'fedex', //$order->getShippingMethod(), //'carrier_code' => 'fedex', // need to lower case
'title' => 'Federal Express', //$order->getShippingDescription(), //'title' => 'Federal Express', // how to set here 'Federal Express' or 'United Parcel Service'
'number' => $trackingNumber, //$trackingnumber,
));
$shipment = $this->prepareShipment($order, $data);
/*
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create()->addObject($shipment)->addObject($shipment->getOrder());
$transactionSave->save();
*/
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
//return $shipment; //original
//return $shipment->save(); //magefms
return $order; //helgeB
catch (Exception $e)
throw new MagentoFrameworkExceptionLocalizedException(
__($e->getMessage())
);
/**
* @param $order MagentoSalesModelOrder
* @param $track array
* @return $this
*/
protected function prepareShipment($order, $track)
$shipment = $this->_shipmentFactory->create(
$order,
$this->prepareShipmentItems($order),
$track
);
return $shipment->getTotalQty() ? $shipment->register() : false;
/**
* @param $order MagentoSalesModelOrder
* @return array
*/
protected function prepareShipmentItems($order)
$items = [];
foreach($order->getAllItems() as $item)
$items[$item->getItemId()] = $item->getQtyOrdered();
return $items;
//after prepareShipmentItems function
/**
* @param $file
*/
public function setFile($file)
$this->_file = $file;
/**
* @param null
* @return ordersave
*/
public function execute()
// enter the number of data fields you require the product row inside the CSV file to contain
$required_data_fields = 3; //number of column in csv
//$header = fgetcsv($file); // get data headers and skip 1st row
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
//while (($row = fgetcsv($file, 100, ",")) !== FALSE)
//while ( $row = fgetcsv($file, 100, ",") )
//while (($row = fgetcsv($file)) !== FALSE)
$data_count = count($row);
if ($data_count < 1)
continue;
$data = array();
//$data = array_combine($header, $row);
$data = array($row);
$ponumber = $row[0]; //$data['ponumber']; // column A
if ($data_count < $required_data_fields)
$logger->info("Skipping Order Number " . $ponumber . ". Not enough data to import.");
continue;
//$shipvia = trim($data[1]); //trim($data['shipvia']); // column B
//$trackingnumber = trim($data[2]);//trim($data['trackingnumber']); // column C
$shipvia = isset($row[1]) ? $row[1] : null;
$trackingnumber = isset($row[2]) ? $row[2] : null;
switch ($shipvia)
case "FEDEX":
$shipvia = "fedex";
break;
case "UPS":
$shipvia = "ups";
break;
case "USPS":
$shipvia = "usps";
break;
default:
$shipvia = "fedex";
///////////////////////////////start adding tracking///////////////////////////////
echo 'Updating Order: '.$ponumber.', with '.$shipvia.':'.$trackingnumber."rn";
//print_r($row);
$order = $this->createShipment($ponumber, $trackingnumber); /* @param int $orderId@param // end of while loop
//end of execute function
// end of class shipmentobject
/**
* @param MagentoSalesModelOrderShipmentTrackFactory $shipmentTrackFactory
* @param MagentoSalesModelOrderShipmentFactory $shipmentFactory
* @param MagentoFrameworkDBTransactionFactory $transactionFactory
* @param MagentoSalesApiOrderRepositoryInterface $orderRepository
*/
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$orderFactory = $objectManager->get('MagentoSalesModelOrderFactory');
//create new class object
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository,$orderFactory);
$test->setFile($file);
$test->execute();
fclose($file);
// if file not exist, then do nothing
new error
tracking information does not copy to (shipment tab) "sales_shipment_grid"
it is showing like this in admin panel, the shipment tab is empty, though the tracking is in there with no carrier assign.
magento2 php shipment object-manager shipment-tracking
magento2 php shipment object-manager shipment-tracking
edited 6 hours ago
Kris Wen
asked Apr 5 at 23:16
Kris WenKris Wen
1418
1418
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
You will have to get the objects you need in the constructor of your ShipmentObject
using the object manager and pass them as parameter.
Your code should look like this from line 175:
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
But you will also have to pass the variable $file
to the object in order to access it in the execute
method. You can either extend the constructor and add a 5th parameter or implement a setter and call it like this:
protected $_file;
[...]
public function setFile($file)
$this->_file = $file;
[...]
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
[...]
[...]
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
$test->setFile($file);
$test->execute();
Update to your comment:
Change your method createShipment
to return the order object if an order is found or false if not:
protected function createShipment($orderId, $trackingNumber)
[...]
if ($order)
[...]
return $order;
return false;
[...]
Change your execute
method to save the order only if an order object is returned and remove return inside the execute
method:
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
@param string $trackingNumber */
if ($order)
$order->save();
// end of while loop
//end of execute function
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
YourcreateShipment
method must return the order object, because you call in your execute method$order->save()
on the return ofcreateShipment
. And please remove the return keyword in your while loop in theexecute
method. I update also my answer with the changes in the two methods.
– HelgeB
15 hours ago
|
show 3 more comments
With the provided error, you can try to change this line
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
You should save objects in a separate line.
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add areturn $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
|
show 3 more comments
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f268995%2fhow-do-i-create-a-shipment-class-object-in-magento-2%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You will have to get the objects you need in the constructor of your ShipmentObject
using the object manager and pass them as parameter.
Your code should look like this from line 175:
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
But you will also have to pass the variable $file
to the object in order to access it in the execute
method. You can either extend the constructor and add a 5th parameter or implement a setter and call it like this:
protected $_file;
[...]
public function setFile($file)
$this->_file = $file;
[...]
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
[...]
[...]
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
$test->setFile($file);
$test->execute();
Update to your comment:
Change your method createShipment
to return the order object if an order is found or false if not:
protected function createShipment($orderId, $trackingNumber)
[...]
if ($order)
[...]
return $order;
return false;
[...]
Change your execute
method to save the order only if an order object is returned and remove return inside the execute
method:
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
@param string $trackingNumber */
if ($order)
$order->save();
// end of while loop
//end of execute function
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
YourcreateShipment
method must return the order object, because you call in your execute method$order->save()
on the return ofcreateShipment
. And please remove the return keyword in your while loop in theexecute
method. I update also my answer with the changes in the two methods.
– HelgeB
15 hours ago
|
show 3 more comments
You will have to get the objects you need in the constructor of your ShipmentObject
using the object manager and pass them as parameter.
Your code should look like this from line 175:
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
But you will also have to pass the variable $file
to the object in order to access it in the execute
method. You can either extend the constructor and add a 5th parameter or implement a setter and call it like this:
protected $_file;
[...]
public function setFile($file)
$this->_file = $file;
[...]
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
[...]
[...]
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
$test->setFile($file);
$test->execute();
Update to your comment:
Change your method createShipment
to return the order object if an order is found or false if not:
protected function createShipment($orderId, $trackingNumber)
[...]
if ($order)
[...]
return $order;
return false;
[...]
Change your execute
method to save the order only if an order object is returned and remove return inside the execute
method:
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
@param string $trackingNumber */
if ($order)
$order->save();
// end of while loop
//end of execute function
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
YourcreateShipment
method must return the order object, because you call in your execute method$order->save()
on the return ofcreateShipment
. And please remove the return keyword in your while loop in theexecute
method. I update also my answer with the changes in the two methods.
– HelgeB
15 hours ago
|
show 3 more comments
You will have to get the objects you need in the constructor of your ShipmentObject
using the object manager and pass them as parameter.
Your code should look like this from line 175:
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
But you will also have to pass the variable $file
to the object in order to access it in the execute
method. You can either extend the constructor and add a 5th parameter or implement a setter and call it like this:
protected $_file;
[...]
public function setFile($file)
$this->_file = $file;
[...]
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
[...]
[...]
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
$test->setFile($file);
$test->execute();
Update to your comment:
Change your method createShipment
to return the order object if an order is found or false if not:
protected function createShipment($orderId, $trackingNumber)
[...]
if ($order)
[...]
return $order;
return false;
[...]
Change your execute
method to save the order only if an order object is returned and remove return inside the execute
method:
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
@param string $trackingNumber */
if ($order)
$order->save();
// end of while loop
//end of execute function
You will have to get the objects you need in the constructor of your ShipmentObject
using the object manager and pass them as parameter.
Your code should look like this from line 175:
$shipmentTrackFactory = $objectManager->get('MagentoSalesModelOrderShipmentTrackFactory');
$shipmentFactory = $objectManager->get('MagentoSalesModelOrderShipmentFactory');
$transactionFactory = $objectManager->get('MagentoFrameworkDBTransactionFactory');
$orderRepository = $objectManager->get('MagentoSalesApiOrderRepositoryInterface');
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
But you will also have to pass the variable $file
to the object in order to access it in the execute
method. You can either extend the constructor and add a 5th parameter or implement a setter and call it like this:
protected $_file;
[...]
public function setFile($file)
$this->_file = $file;
[...]
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
[...]
[...]
$test = new ShipmentObject($shipmentTrackFactory,$shipmentFactory,$transactionFactory,$orderRepository);
$test->setFile($file);
$test->execute();
Update to your comment:
Change your method createShipment
to return the order object if an order is found or false if not:
protected function createShipment($orderId, $trackingNumber)
[...]
if ($order)
[...]
return $order;
return false;
[...]
Change your execute
method to save the order only if an order object is returned and remove return inside the execute
method:
public function execute()
[...]
while (($row = fgetcsv($this->_file, 100, ",")) !== FALSE)
@param string $trackingNumber */
if ($order)
$order->save();
// end of while loop
//end of execute function
edited 15 hours ago
answered Apr 6 at 10:22
HelgeBHelgeB
3,1831322
3,1831322
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
YourcreateShipment
method must return the order object, because you call in your execute method$order->save()
on the return ofcreateShipment
. And please remove the return keyword in your while loop in theexecute
method. I update also my answer with the changes in the two methods.
– HelgeB
15 hours ago
|
show 3 more comments
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
YourcreateShipment
method must return the order object, because you call in your execute method$order->save()
on the return ofcreateShipment
. And please remove the return keyword in your while loop in theexecute
method. I update also my answer with the changes in the two methods.
– HelgeB
15 hours ago
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
Hi,thanks i'm still trying out the solution, but for now, the tracking number display in scientific notation like this " Array ( [0] => 100007331 [1] => FEDEX [2] => 4.90903E+11 )" how can i fix it?
– Kris Wen
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
The good part: Your code works, I'm sure the data comes that way from your input file. It looks like the original file was an Excel file with that kind of column formatting. Change the column format in the Excel file to text and check the data before you save it as csv.
– HelgeB
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
it was mistake on my part, opened it using excel and re-saved it causing that error. it print the file correctly now, but it's not saving to magento order. can you help me check my execute function? i posted my updated code. Thank you.
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
i believe i call the correct function "createShipment" with the correct paremeters ($orderid & $trackingnumber) within the execute function, since the "createShipment" function will call "prepareShipment" then "prepareShipmentItems"
– Kris Wen
yesterday
Your
createShipment
method must return the order object, because you call in your execute method $order->save()
on the return of createShipment
. And please remove the return keyword in your while loop in the execute
method. I update also my answer with the changes in the two methods.– HelgeB
15 hours ago
Your
createShipment
method must return the order object, because you call in your execute method $order->save()
on the return of createShipment
. And please remove the return keyword in your while loop in the execute
method. I update also my answer with the changes in the two methods.– HelgeB
15 hours ago
|
show 3 more comments
With the provided error, you can try to change this line
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
You should save objects in a separate line.
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add areturn $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
|
show 3 more comments
With the provided error, you can try to change this line
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
You should save objects in a separate line.
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add areturn $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
|
show 3 more comments
With the provided error, you can try to change this line
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
You should save objects in a separate line.
With the provided error, you can try to change this line
if ($shipment)
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED', false);
$transactionSave = $this->_transactionFactory->create();
$transactionSave->addObject($shipment);
$transactionSave->addObject($shipment->getOrder());
$transactionSave->save();
You should save objects in a separate line.
answered yesterday
magefmsmagefms
2,5862426
2,5862426
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add areturn $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
|
show 3 more comments
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add areturn $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
1
1
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
i have update the function with the lines you provided, but still getting error. can you see my updated codes error? i'm not sure if i use this function correctly. basically what i want to achieve is load the tracking number from csv file (#order,carrier,tracking) into magento2 order.
– Kris Wen
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
when you say load, you mean save tracking number from csv to magento sales order?
– magefms
yesterday
1
1
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
yes, save from csv to magento sales order. In the csv file i have 3 columns ( ordernumber, carrier, tracking), i want to save them to magento sales order.
– Kris Wen
yesterday
in your execute function can you add a
return $order->save();
– magefms
yesterday
in your execute function can you add a
return $order->save();
– magefms
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
added the line, still have the same error message.
– Kris Wen
yesterday
|
show 3 more comments
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f268995%2fhow-do-i-create-a-shipment-class-object-in-magento-2%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown