<?php
namespace Network\Restext\Model;
use Network\Restext\Api\OrdersInterface;
class GetOrders extends \Magento\Sales\Model\Order implements OrdersInterface
{
/**
* Pobiera zamówienia do SAP
*
* @param $id
* @return string
*
*/
// public function getOrders($id)
// {
// $orders = $this->getOrdersCollection($id);
// $lastId = $id;
//
// $allOrdersData = [];
// foreach ($orders as $order){
// $allOrdersData[] = $this->parseOrderToData($order);
// $lastId = $order->getIncrementId();
// }
//
// $array = [
// 'data' => $allOrdersData,
// 'lastorder' => $lastId
// ];
//
// return json_encode($array, JSON_UNESCAPED_SLASHES);
// }
public function getOrders($id)
{
$orders = $this->getCollection()->addAttributeToFilter('send_sap', ['null' => true]);
$lastId = $id;
$allOrdersData = [];
foreach ($orders as $order){
if($order->getPayment()->getMethodInstance()->getCode() == 'cashbill') {
if(!$order->getCashbillTransactionId())
continue;
}
$allOrdersData[] = $this->parseOrderToDataTestNew($order);
$lastId = $order->getIncrementId();
$order->setSendSap(1)->save();
}
$array = [
'data' => $allOrdersData,
'lastorder' => $lastId
];
}
protected function getOrdersCollection($ordersFrom)
{
$collection = $this->getCollection()->addAttributeToFilter('increment_id', ['gt' => $ordersFrom]);
return $collection;
}
protected function parseOrderToData($order)
{
$data = $order->getData();// array_filter();
$orderId = $data['increment_id'];
$saveData = [];
foreach ($data as $key => $value) {
$saveData[$key] = $value;
}
if(isset($data['punktodbioru']))
$saveData['punktodbioru'] = $data['punktodbioru'];
$saveData['billing_address'] = array_filter($order->getBillingAddress()->getData());
$saveData['shipping_address'] = array_filter($order->getShippingAddress()->getData());
$saveData['payment'] = $order->getPayment()->getMethodInstance()->getCode();
$items = $order->getAllItems();
foreach ($items as $item){
$itemData = $item->getData();
//$stany = [];
if($itemData['ilosc_do_domu'] || $itemData['ilosc_do_doslania_do_ksiegarni']) {
//$stany[] = 'stan01GLOWN';
$ilosc = (int)$itemData['ilosc_do_domu'] + (int)$itemData['ilosc_do_doslania_do_ksiegarni'];
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => $ilosc,
'discount_amount' => $itemData['discount_amount'],
'stocks' => 'stan01GLOWN'
];
}elseif($itemData['ilosc_do_odbioru_w_ksiegarni']) {
//$stany[] = $itemData['ksiegarnia'];
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => (int)$itemData['ilosc_do_odbioru_w_ksiegarni'],
'discount_amount' => $itemData['discount_amount'],
'stocks' => $itemData['ksiegarnia']
];
}else {
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => (int)$itemData['qty_ordered'],
'discount_amount' => $itemData['discount_amount'],
'stocks' => 'stan01GLOWN'
];
}
// $saveData['items'][] = [
// 'sku' => $itemData['sku'],
// 'name' => $itemData['name'],
// 'price' => $itemData['price'],
// 'qty_ordered' => $itemData['qty_ordered'],
// 'discount_amount' => $itemData['discount_amount'],
// 'stocks' => implode(',', $stany)
// ];
}
return $saveData;
}
public function parseOrderToDataTestNew($order)
{
$data = $order->getData();// array_filter();
$orderId = $data['increment_id'];
$saveData = [];
$v_total_qty = 0;
$v_all_item_qty = 0;
foreach ($data as $key => $value) {
$saveData[$key] = $value;
}
if(isset($data['punktodbioru']))
$saveData['punktodbioru'] = $data['punktodbioru'];
$saveData['billing_address'] = array_filter($order->getBillingAddress()->getData());
$saveData['shipping_address'] = array_filter($order->getShippingAddress()->getData());
$saveData['payment'] = $order->getPayment()->getMethodInstance()->getCode();
$items = $order->getAllItems();
foreach ($items as $item){
$itemData = $item->getData();
$sum = (int)$itemData['ilosc_do_domu'] + (int)$itemData['ilosc_do_doslania_do_ksiegarni'] + (int)$itemData['ilosc_do_odbioru_w_ksiegarni'];
if($itemData['qty_ordered'] != ($sum)){
mail("[email protected]","błąd zamówienia w bookland {$order->getIncrementId()}","błąd lub nieprawidłowe ilości w zamówieniu {$order->getIncrementId()} pozycja {$item->getSku()}\n");
}
$price = $itemData['price_incl_tax'];
$priceWithOutTax = $itemData['price'];
$discount = $itemData['discount_amount'];
$tax = $itemData['tax_percent'];
$tax2 = 1 + ($tax/100); //eq 1,05
$discountWithoutVat = $discount / $tax2;
if($itemData['ilosc_do_domu'] || $itemData['ilosc_do_doslania_do_ksiegarni']) {
$ilosc = (int)$itemData['ilosc_do_domu'] + (int)$itemData['ilosc_do_doslania_do_ksiegarni'];
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => $ilosc,
'discount_amount' => $itemData['discount_amount'],
'stocks' => 'stan01GLOWN',
'orderline_total' => (float)$itemData['row_total'] - $discountWithoutVat,
'orderline_totalAfterVAT' => (float)$itemData['row_total_incl_tax'] - (float)$itemData['discount_amount'],
];
}elseif($itemData['ilosc_do_odbioru_w_ksiegarni']) {
$ilosc = (int)$itemData['ilosc_do_odbioru_w_ksiegarni'];
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => $ilosc,
'discount_amount' => $itemData['discount_amount'],
'stocks' => $itemData['ksiegarnia'],
'orderline_total' => (float)$itemData['row_total'] - $discountWithoutVat,
'orderline_totalAfterVAT' => (float)$itemData['row_total_incl_tax'] - (float)$itemData['discount_amount'],
];
}else {
$ilosc = (int)$itemData['qty_ordered'];
$saveData['items'][] = [
'sku' => $itemData['sku'],
'name' => $itemData['name'],
'price' => $itemData['price_incl_tax'],
'qty_ordered' => (int)$itemData['qty_ordered'],
'discount_amount' => $itemData['discount_amount'],
'stocks' => 'stan01GLOWN',
'orderline_total' => (float)$itemData['row_total'] - $discountWithoutVat,
'orderline_totalAfterVAT' => (float)$itemData['row_total_incl_tax'] - (float)$itemData['discount_amount'],
];
}
}
return $saveData;
}
}