Files
CdsConnector/src/Helper/Jtl.php
Marko 16aac3adc6
Some checks failed
continuous-integration/drone/push Build is failing
add fixed export
2023-11-24 11:36:51 +01:00

159 lines
4.7 KiB
PHP

<?php
namespace App\Helper;
use App\Entity\Warehouse;
use App\Repository\ProductRepository;
use App\Repository\StockRepository;
use App\Repository\WarehouseRepository;
use ArrayIterator;
use Doctrine\Common\Collections\Criteria;
use Exception;
use League\Csv\Writer;
use Psr\Log\LoggerInterface;
class Jtl
{
private $productRepository;
private $stockRepository;
private $warehouseRepository;
private $logger;
private $rootPath;
/**
* @var string[] $arrLager
* Lagernamen aus der JTL Wawi
*/
private array $arrLager = array(
1 => 'Lager 1 - Standardlager',
3 => 'Lager 3 - DLX',
5 => 'Lager 5 - Verkaufsfilale',
8 => 'Lager 8 - Standardlager',
10 => 'Lager 10 - OJ EF',
);
/**
* @param ProductRepository $productRepository
* @param WarehouseRepository $warehouseRepository
* @param StockRepository $stockRepository
* @param LoggerInterface $logger
* @param string $rootPath
*/
public function __construct(
ProductRepository $productRepository,
WarehouseRepository $warehouseRepository,
StockRepository $stockRepository,
LoggerInterface $logger,
string $rootPath)
{
$this->productRepository = $productRepository;
$this->warehouseRepository = $warehouseRepository;
$this->stockRepository = $stockRepository;
$this->logger = $logger;
$this->rootPath = $rootPath;
}
/**
* Holt alle Produkte und deren Lagerbestände
* @param array $warehousesName
* @return array
*/
public function getProducts(array $warehousesName): array
{
$data = array();
$products = $this->productRepository->findAll();
foreach ($warehousesName as $wn) {
$warehouse = $this->warehouseRepository->findByWarehouseByName($wn);
}
if ($warehouse) {
foreach ($warehouse as $w) {
$stock = $this->stockRepository->findBy(['warehouse' => $w]);
if ($stock) {
foreach ($stock as $s) {
$warehouse = $s->getWarehouse();
$warehouseName = $warehouse->getName();
$data[$s->getProductId() . $warehouseName] = [
'gtin' => $products[$s->getProductId()]->getGtin(),
'stock' => $s->getInstock(),
'warehouse' => $this->arrLager[$warehouseName] ?? 'Lager ' . $warehouseName
];
}
} else {
//Wenn Product nicht gefunden werden kann, dann setzte Bestand auf Null
// $data[] = [
// 'gtin' => $products[$s->getProductId()]->getGtin(),
// 'stock' => 0,
// 'warehouse' => 0
// ];
// $this->logger->info('No stock for product ' . s->getProductId()->getId());
}
}
}
// foreach ($r as $product) {
//
// $stock = $this->stockRepository->findBy(['product_id' => $product->getId()]);
//
// if ($stock) {
// foreach ($stock as $s) {
// $warehouse = $s->getWarehouse();
// $warehouseName = $warehouse->getName();
//
// $data[$product->getId() . $warehouseName] = [
// 'gtin' => $product->getGtin(),
// 'stock' => $s->getInstock(),
// 'warehouse' => $this->arrLager[$warehouseName] ?? 'Lager ' . $warehouseName
// ];
//
// }
// } else {
// $data[$product->getId()] = [
// 'gtin' => $product->getGtin(),
// 'stock' => 0,
// 'warehouse' => 0
// ];
//
// $this->logger->info('No stock for product ' . $product->getId());
// }
// }
return $data;
}
/**
* @param array $data
* @param string $warehouse
* @return void
*/
public function createExportFile(array $data, string $warehouse): void
{
try {
$file = $this->rootPath . '/jtl/' . $warehouse . '.csv';
dump($file);
$writer = Writer::createFromPath($file, 'w+');
$bytes = $writer->insertAll(new ArrayIterator($data));
if ($bytes) {
$this->logger->info('Exported ' . $bytes . ' bytes');
$FTP = new Ftp();
$FTP->uploadFile($file, $warehouse);
}
} catch (Exception $e) {
$this->logger->error($e->getMessage());
}
}
}