159 lines
4.7 KiB
PHP
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());
|
|
}
|
|
}
|
|
} |