Magento2: I need to get order Purchase Order Date and Purchased From fields in observer
-
18-03-2021 - |
Question
I need to get order Purchase Order Date and Purchased From fields in the observer.
Here is my code:
namespace Abc\Mkt\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class SalesOrderSaveAfter implements ObserverInterface {
protected $scopeConfig;
protected $date;
public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Abc\Mkt\Model\Orderapi $orderData)
{
$this->scopeConfig = $scopeConfig;
$this->date = $date;
$this->orderData = $orderData;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$enable=$this->scopeConfig->getValue('abc_mkt/orderconfig/mkt_order_integration', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
if($enable){
$order = $observer->getEvent()->getOrder();
$status = 0;
$name='';
$data['Email'] = $order->getCustomerEmail();
$data['FirstName'] = $order->getCustomerFirstname();
$data['LastName'] = $order->getCustomerLastName();
$response= $this->orderData->orderData($data,$status,$name);
$res= json_decode($response, true);
if($res['success']==1){
$status = 1;
$oname= $orderobjectname;
$tdiscount = explode('-', $order["base_discount_amount"]);
$couponApplied = $order->getCouponCode();
$odata['orderId']= $order->getIncrementId();
$odata['emailAddress'] = $order->getCustomerEmail();
$odata['totalOrderAmount'] = $order->getGrandTotal();
$odata['shippingCostInOrder'] =$order["shipping_amount"];
$odata['totalQuantity'] = $order["total_qty_ordered"];
$purchasedOrderDate = $order->getCreatedAt();
$odata['purchaseOrderDate'] = $purchasedOrderDate;
$billingObj = $order->getBillingAddress();
$billStreet = $billingObj->getStreet();
if(isset($billStreet[1])){ $billStreetComplete = $billStreet[0].' '.$billStreet[1]; } else { $billStreetComplete = $billStreet[0]; }
$odata['billingDetails'] = trim($billingObj->getCompany()).','.$billStreetComplete.','.$billingObj->getRegion().','.$billingObj->getCity().','.$billingObj->getPostcode().';'.'T: '.$billingObj->getTelephone();
$shippingObj = $order->getShippingAddress();
if(!empty($shippingObj)){
$shipStreet = $shippingObj->getStreet();
if(isset($shipStreet[1])){ $shipStreetComplete = $shipStreet[0].' '.$shipStreet[1]; } else { $shipStreetComplete = $shipStreet[0]; }
$odata['shippingDetails'] = trim($shippingObj->getCompany()).','.$shipStreetComplete.','.$shippingObj->getRegion().','.$shippingObj->getCity().','.$shippingObj->getPostcode().';'.'T: '.$shippingObj->getTelephone();
}
$odata['couponApplied'] = $couponApplied ;
if($order["tax"]){
$odata['taxInOrder'] =$order["tax"] ;
} else {
$odata['taxInOrder'] =0.00 ;
}
if($order->getBaseDiscountAmount()){
$tdiscount = explode('-', $order->getBaseDiscountAmount());
if($tdiscount){
$odata['totalOrderDiscount'] = $tdiscount[1];
}else{
$odata['totalOrderDiscount'] = 0.00;
}
}else{
$odata['totalOrderDiscount'] = 0.00;
}
$response= $this->orderData->orderData($odata,$status,$oname);
}
}
return $this;
}
}
Anyone have a solution for this?
Thanks
Solution
Your code is fine you just have to change event
from sales_order_place_after
to sales_order_save_after
after that you can get create at by this:
$order->getCreatedAt();
and Purchased From with this:
$order->getStoreName();
Note: The only issue that you would face is, this even will also fire when you save order on backend
OTHER TIPS
Try to use this code Spinnet:
$appState = $objectManager->get('\Magento\Framework\App\State');
$appState->setAreaCode('frontend');
$orderDatamodel = $objectManager->get('\Magento\Sales\Model\Order')->getCollection();
foreach($orderDatamodel as $orderDatamodel1){
echo '<pre>'; print_r($orderDatamodel1->getData());
}
If this works fine, Use this as DI.
Hope this will help you!!
You can use sales_order_save_after event and get order date.
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange