File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/InventoryController.php
<?php
namespace App\Http\Controllers;
use App\Erp;
use App\Repositories\ERPRepository;
class InventoryController extends Controller
{
public function syncInventoryERP(
$priceList,
$storeMain = 'main',
$syncParent = false,
$parent = null,
$locationName,
$currency = null,
$barcode = null
) {
$erps = Erp::select('id', 'class')->where('active', true)->get();
foreach ($erps as $index => $erp) {
$classPath = $erp->class;
$ERPRepository = new $classPath($erp->id);
$response = $ERPRepository->getInventory($priceList, $locationName);
if (!$response || !$response['r']) {
return;
}
$products = $response['d']->detalle->Table;
if ($barcode) {
$products = array_filter($products, function ($productVariant) use ($barcode) {
return isset($productVariant->CodigoDeBarras) && $productVariant->CodigoDeBarras == $barcode;
}, ARRAY_FILTER_USE_BOTH);
}
$productController = new ProductController;
foreach ($products as $item) {
sleep(2);
$reference = $item->Referencia;
$productAttributes = array_filter($products, function ($productVariant) use ($reference) {
return isset($productVariant->Referencia) && $productVariant->Referencia == $reference;
}, ARRAY_FILTER_USE_BOTH);
$item->productAmount = array_reduce($productAttributes, function ($carry, $item) {
return $carry + $item->Existencias;
});
$productController->saveProductFromSiesa($item, $storeMain);
if ($syncParent) {
$parent->syncProductByReference($item, $locationName, $currency);
}
}
return $products;
}
}
}