<?php
namespace App\Controller;
use App\Entity\GoodsOrder;
use App\Entity\GoodsOrderTarget;
use App\Entity\Multibonus\Order as MultibonusOrder;
use App\Entity\OzonPosting;
use App\Entity\OzonPostingTarget;
use App\Entity\WBOrder;
use App\Entity\WildberriesPostingTarget;
use App\Entity\YandexOrder;
use App\Entity\YandexOrderTarget;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class OrderController extends AbstractController
{
/**
* @Route(
* "order/{number}/",
* name="get_order",
* host="%host.monitoring%",
* methods={"GET"}
* )
*
* @param string $number
*
* @return Response
*/
public function getOrderAction(string $number, Request $request): Response
{
if($request->get('api_key') != $this->tokenOrderInfo) {
return new JsonResponse('Invalid token', 400);
}
try {
/** OZON */
/** @var OzonPostingTarget $ozonPostingTarget */
$posting = $this->em
->getRepository(OzonPosting::class)
->findOneBy(["postingNumber" => $number]);
/** OZON */
/** WB */
if(null == $posting) {
/** @var WBOrder $posting */
$posting = $this->em
->getRepository(WBOrder::class)
->findOneBy(["orderId" => $number]);
}
/** WB */
/** Yandex */
if(null == $posting) {
/** @var YandexOrder $posting */
$posting = $this->em
->getRepository(YandexOrder::class)
->findOneBy(["orderId" => $number]);
}
/** Yandex */
/** Sber */
if(null == $posting) {
/** @var GoodsOrder $posting */
$posting = $this->em
->getRepository(GoodsOrder::class)
->findOneBy(["shipmentId" => $number]);
}
/** Sber */
/** Multibonus */
if (null == $posting) {
/** @var MultibonusOrder $goodsPostingTarget */
$posting = $this->em
->getRepository(MultibonusOrder::class)
->findOneBy(["externalId" => $number]);
}
/** Multibonus */
if(null == $posting) {
return new JsonResponse([
'status' => false,
'error' => 'Order not found'
]);
}
$data = $this->postingToOrder($posting);
$json = json_encode($data, JSON_PRETTY_PRINT |JSON_UNESCAPED_UNICODE);
return new JsonResponse($json, 200, [], true);
} catch (\Exception $e) {
$this->logger->debug('getOrderNumberAction: ' . $e->getMessage());
return new JsonResponse(['status' => false, 'error' => 'Something went wrong']);
}
}
private function postingToOrder($posting): array
{
//дата заказа, площадка, юр лицо магазина, информация о товарах в заказе массивом (СП код, наименование, кол-во, стоимость единицы, сумма
$orderDate = null;
$mp = null;
$company = null;
$products = [];
/** @var OzonPosting $posting */
if ($posting instanceof OzonPosting) {
$orderDate = $posting->getCreatedAt();
$mp = 'Ozon';
$company = $posting->getClient()->getLegalName();
foreach ($posting->getPostingProducts() as $postingProduct) {
$product = $postingProduct->getProduct();
$products[] = [
'article' => $postingProduct->getOfferId(),
'name' => $product->getName(),
'quantity' => $postingProduct->getQuantity(),
'price' => $postingProduct->getPrice(),
'cost' => $postingProduct->getQuantity() * $postingProduct->getPrice()
];
}
/** @var WBOrder $posting */
} else if ($posting instanceof WBOrder) {
$orderDate = $posting->getOrderDate();
$mp = 'Wildberries';
$company = $posting->getClient()->getCompany();
foreach ($posting->getItems() as $orderItem) {
$product = $orderItem->getWildberriesProduct();
$products[] = [
'article' => $product->getArticle(),
'name' => $product->getName(),
'quantity' => 1,
'price' => $orderItem->getTotalPrice(),
'cost' => $orderItem->getTotalPrice()
];
}
/** @var YandexOrder $posting */
} else if ($posting instanceof YandexOrder) {
$orderDate = $posting->getCreatedAt();
$mp = "Yandex";
$company = $posting->getClient()->getCompany();
foreach ($posting->getOrderItems() as $orderItem) {
$product = $orderItem->getProduct();
$price = (int)round($orderItem->getPrice() * 100);
$products[] = [
'article' => $product->getArticle(),
'name' => $product->getName(),
'quantity' => $orderItem->getQuantity(),
'price' => $price,
'cost' => $orderItem->getQuantity() * $price
];
}
/** @var GoodsOrder $posting */
} else if ($posting instanceof GoodsOrder) {
$orderDate = $posting->getCreatedAt();
$mp = "МегаМаркет";
$company = $posting->getClient()->getCompany();
foreach ($posting->getItems() as $orderItem) {
$price = (int)round($orderItem->getFinalPrice() * 100);
$products[] = [
'article' => $orderItem->getOfferId(),
'name' => $orderItem->getItemName(),
'quantity' => $orderItem->getQuantity(),
'price' => $price,
'cost' => $orderItem->getQuantity() * $price
];
}
/** @var MultibonusOrder $posting */
} else if ($posting instanceof MultibonusOrder) {
$orderDate = $posting->getCreatedAt();
$mp = "Мультибонус";
$company = $posting->getClient()->getCompany();
foreach ($posting->getItems() as $orderItem) {
$product = $orderItem->getProduct();
$price = (int)round($orderItem->getPrice() * 100);
$products[] = [
'article' => $orderItem->getOfferId(),
'name' => $product->getName(),
'quantity' => $orderItem->getAmount(),
'price' => $price,
'cost' => $orderItem->getAmount() * $price
];
}
}
return [
'created_at' => $orderDate instanceof \DateTime ? $orderDate->format('d.m.Y H:i') : '',
'client' => $mp,
'company' => $company,
'products' => $products
];
}
}