connRO = $EMs->getEM('epicor_ro')->getConnection();
}
/**
* @param string $CustID
* @return array|bool
*/
public function getCurrentDatabase()
{
/* switch(config('app.env'))
{
case "dev":
return '[VorteqPortal-uat]';
case "uat":
return '[VorteqPortal-uat]';
case "mirror":
return '[VorteqPortal-mirror]';
default: //production
return '[VorteqPortal]';
} */
return "[".config("database.connections.ro.database")."]";
}
public function getCoilByCoil($job_num, $Customer)
{
/* AND [JobHead].[JobNum] = :LotNumber
AND [Customer].[CustID] = :Customer*/
$sql = file_get_contents(__DIR__."/epicoreSQL/CoilByCoil.sql");
//dd($sql);
// dd($job_num,$Customer);
$query = $this->connRO->prepare($sql);
//$job_num = '130735';
// $Customer='SVP';
$query->bindValue(':JobNum', $job_num);
$query->bindValue(':JobNum2', $job_num);
$query->bindValue(':Customer', $Customer);
$query->bindValue(':Customer2', $Customer);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if (sizeof($results) >0)
{
return $results;
}
} catch(DriverException) {}
return false;
}
public function getJobNumberByInvoiceNumber($invoiceNumber)
{
$sql ='select TOP 1
[JobProd].[JobNum] as JO
from Erp.InvcHead as InvcHead
inner join Erp.InvcDtl as InvcDtl on
InvcHead.Company = InvcDtl.Company
And
InvcHead.InvoiceNum = InvcDtl.InvoiceNum
and ( InvcDtl.InvoiceLine = 1 )
inner join Erp.JobProd as JobProd on
InvcDtl.Company = JobProd.Company
And
InvcDtl.OrderNum = JobProd.OrderNum
And
InvcDtl.OrderLine = JobProd.OrderLine
And
InvcDtl.OrderRelNum = JobProd.OrderRelNum
where (InvcHead.OrderNum > 0)
AND InvcHead.InvoiceNum = :invoiceNumber;';
$query = $this->connRO->prepare($sql);
$query->bindValue(':invoiceNumber', $invoiceNumber);
$result = $query->executeQuery();
$return = $result->fetchAllAssociative();
if (count($return) == 0)
return null;
else
return $return[0]['JO'];
}
public function createGroupCSV($excelFilePath)
{
//echo $excelFilePath;
$return = new stdClass();
$return->error = false;
$return->terminal = false;
if (!file_exists($excelFilePath))
{
$return->error = true;
$return->terminal = true;
$return->errorCode = "NO_FILE_FOUND";
$return->errorMessage = "The Excel File Was Not Found.. Please try again";
return $return;
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType =trim(finfo_file($finfo, $excelFilePath));
// echo $mimeType."\n";
if (!($mimeType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|| $mimeType == "application/vnd.ms-excel")
)
{
$return->error = true;
$return->terminal = true;
$return->errorCode = "BAD_EXCEL_FORMAT";
$return->errorMessage = "The File provided was not a valid XLS or XLSX format";
return $return;
}
$fileType = 'Xls';
if ($mimeType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )
{
$fileType = 'Xlsx';
}
// $reader =
$reader = IOFactory::createReader($fileType);
// $reader = \PHPExcel_IOFactory::createReader($fileType);
if (!$reader->canRead($excelFilePath))
{
$return->error = true;
$return->terminal = true;
$return->errorCode = "EXCEL_READER_CAN_NOT_OPEN";
$return->errorMessage = "The attached file can't be opened by the excel reader. It is possibly corrupted.";
return $return;
}
$instReader = $reader->load($excelFilePath);
$sheet = $instReader->getSheet(0);
$cell = $sheet->getCell('AB9');
if (!strstr($cell,'Group ID'))
{
$return->error = true;
$return->terminal = true;
$return->errorCode = "GROUP_ID_NOT_FOUND";
$return->errorMessage = "Group ID was not found in expected cell location in the excel file (AB9)";
return $return;
}
$groupID = trim(str_replace(["Group ID:",' ',' '],'',$cell));
$return->group = $groupID;
$sql = file_get_contents(__DIR__."/epicoreSQL/AP-CheckProcessing/CheckLines.sql");
$query = $this->connRO->prepare($sql);
$query->bindValue(':GROUPID', $groupID);
try {
$result = $query->executeQuery();
$CheckResults = $result->fetchAllAssociative();
if (sizeof($CheckResults) <1)
{
$return->error = true;
$return->terminal = true;
$return->errorCode = "NO_CHECK_LINES";
$return->errorMessage = "The check lines query returned zero results for this gruop: $groupID";
return $return;
}
} catch(DriverException) {
$return->error = true;
$return->terminal = true;
$return->errorCode = "SQL_FAIL";
$return->errorMessage = "The check lines query failed to execute";
return $return;
}
//LOOKS LIKE WE ARE CLEAR TO MAKE A CSV!
include(__DIR__."/APCheckProcessing/CreateCSV.php");
$path = str_replace(basename($excelFilePath),'',$excelFilePath);
$path = str_replace('excel_upload', 'csv_output', $path).'VORTEQ_IP_'.date("m-d-Y").'_001.CSV';
///echo "\nPATH: ";
//echo $path."\n\n";
$this->processCSVArray($output,$path );
if (count($missingAddressRows) > 0)
{
$return->error = true;
$return->terminal = false;
$return->errorCode = "ADDRESS_ROWS";
$return->errorMessage = "Address Lines are Missing";
}
$return->csvSerialized = $csvSerialized;
$return->csvRows = $missingAddressRows;
$return->csv = $path;
return $return;
}
public function processCSVArray(array $ar, $path)
{
$newArray = [];
foreach ($ar as $k => $v)
{
$newRow = $v;
if ($v[0] == 'CHECK')
{
/** let's take care of country Codes first */
//FOR
//Missing address Commonwealth of Pennsylvania
//address needs to be filled in... BUNDLE FIELDS NEED TO BE FILLED
//AN AP
if ($v[20] != 'USA')
{
//18 state 17 city
// $newRow[17] = trim($v[18])." ".trim($v[17]);
// dd($v,$newRow);
// $newRow[18]='FOR';
$newRow[20]='FOR';
}
}
$newArray[]=$newRow;
}
$fp = fopen($path, 'w+');
foreach ($newArray as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
$a = file_get_contents($path);
$newCsv = str_replace("\r\n","\n", $a);
$newCsv = str_replace("\n", "\r\n", $newCsv);
// $a = explode("\n", $a);
// $newCsv = implode("\r\n",$a);
//$newCsv.="\r\n";
// $newCsv = str_replace('CARRIAGERETURN', "\r\n", $newCsv);
file_put_contents($path, $newCsv);
}
public function getAcknowledgement($customer, $poNumber = null, $orderNum = null )
{
$sql=file_get_contents(__DIR__."/epicoreSQL/SalesOrder.sql");
if (strlen($poNumber) > 0)
$sql ="$sql [OrderHed].[PONum] = :PO ";
else
$sql ="$sql [OrderHed].[OrderNum] = :ON ";
$sql = $sql . " ORDER BY OrderRel_OrderLine;";
/* WHERE [OrderHed].[OrderNum] =47950 if clicking on an order number*/
/* WHERE [OrderHed].[PONum] = '550853-OP' if clicking on an PO number*/
// echo($sql);
// exit;
$query = $this->connRO->prepare($sql);
//dd($poNumber);
if (strlen($poNumber) > 0)
$query->bindValue(':PO', $poNumber);
else
$query->bindValue(':ON', $orderNum);
$query->bindValue(":CUST", $customer);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if (sizeof($results) >0)
{
return $results;
}
} catch (DriverException) {
}
return false;
}
public function getPaintCodeDataForPart($partNumber)
{
$query = $this->connRO->prepare('
SELECT TOP 1
[Part].[PartDescription] AS [Part_PartDescription],
Part_UD.TopcoatPaintCode_c as [Top Finish],
Part_UD.BackcoatPaintCode_c as [Bottom Finish]
FROM Erp.Part AS Part
INNER JOIN Erp.Part_UD ON Part_UD.ForeignSysRowID = Part.SysRowID
WHERE Part.PartNum=:PartNumber
');
$query->bindValue(':PartNumber', $partNumber);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if(sizeof($results) > 0) {
return $results[0];
}
} catch(DriverException) {}
return null;
}
public function getLotSearchHistory($lotNum)
{
// dd($lotNum);
$query = $this->connRO->prepare("SELECT * FROM portal_LotHistory WHERE [LotNum]= :LotNum order by [DateIssued] ASC;");
$query->bindValue(':LotNum', $lotNum);
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
//dd($results,$lotNum,"SELECT * FROM portal_LotHistory WHERE [LotNum]= :LotNum order by [Date Issued] ASC;");
return $results;
}
public function getJobStatusByPlanByCustomer($CustID)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/JobStatusByPlantByCustomer.sql");
// dd(config('db.database'));
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare($sql);
$query->bindValue(':CUSTID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
//$query->execute();
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
return $results;
} catch(DriverException) {}
return false;
}
public function storeCompanyInfo($Customers)
{
if (Session::has("cacheCustomers"))
return;
$custIDs=[];
foreach ($Customers as $epicoreCustomerID => $v)
{
$custIDs[]="'$epicoreCustomerID'";
}
$query = $this->connRO->prepare("SELECT Name,CustID
FROM Erp.Customer
WHERE CustID IN (".implode(",",$custIDs).")");
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
$ar = [];
foreach ($results as $k => $v)
{
$ar[$v["CustID"]]=$v["Name"];
}
Session::put('cacheCustomers',$ar);
} catch(DriverException) {}
}
public function reactivateCustomers()
{
/*
if (App::environment() === 'prod'):
$query = $this->connRO->prepare('UPDATE COM
SET COM.IsDeactivated = 0
FROM VorteqPortal.dbo.quest_Company COM
JOIN Epicor10Live.Erp.Customer CUST
ON CUST.CustID = COM.EpicorCustID
WHERE COM.IsDeactivated = 1;');
$query->execute();
endif;
*/
}
public function getCustInfoIfExists($CustID)
{
if (Session::has("cacheCustomers"))
{
$results=Session::get('cacheCustomers');
if (isset($results[$CustID]))
return ["Name" => $results[$CustID]];
}
$query = $this->connRO->prepare("SELECT Name
FROM Erp.Customer
WHERE CustID = :custID");
$query->bindValue(':custID', $CustID);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if (sizeof($results) === 1) {
return $results[0];
}
} catch(DriverException) {}
return false;
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryUnprocessedSummaryData($CustID)
{
if ($this->_getSubUser()) return [];
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalUnprocessedInventorySummary] :CustID,:DBNAME");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryUnprocessedSummaryData_Details($CustID, $PartNumber = null, $Plant = null, $Warehouse = null)
{
return $this->getInventoryUnprocessedDetailsData($CustID, $PartNumber, $Plant, $Warehouse);
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryUnprocessedRRSummaryData($CustID)
{
if ($this->_getSubUser()) return [];
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalUnprocessedInventoryRejectsAndReturnsSummary] :CustID,:DBNAME");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryUnprocessedRRSummaryData_Details($CustID, $PartNumber = null, $Plant = null, $Warehouse = null)
{
if ($this->_getSubUser()) return [];
return $this->getInventoryUnprocessedDetailsData($CustID, $PartNumber, $Plant, $Warehouse);
}
public function getInventoryWorkInProgressSummaryData($CustID)
{
$sub=$this->_isSub();
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalWorkInProgressInventorySummaryV6] :CustID,:DBNAME,:sub");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result = $query->executeQuery();
$data = $result->fetchAllAssociative();
$sql = "dbo.PortalWorkInProgressInventoryDetailsALLV6 :CustID,:DBNAME,:sub,1";
$query = $this->connRO->prepare($sql);
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result2 = $query->executeQuery();
$countData = $result2->fetchAllAssociative();
$cs=[];
foreach ($countData as $k =>$datum)
{
$cs[$datum['Plant']."|".$datum['CustID']."|".$datum['VorteqPartNum']."|".$datum['Warehouse']] = $datum['ROWCOUNT'];
}
foreach ($data as $k=>$v)
{
//do it here
$key = $v['Plant']."|".$v['CustID']."|".$v['VorteqPartNum']."|".$v['Warehouse'];
if (isset($cs[$key]))
$data[$k]['NumResults'] = $cs[$key];
else
$data[$k]=null;
}
return $data;
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryFinishedGoodsSummaryData($CustID)
{
$sub=$this->_isSub();
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalFinishedGoodsInventorySummaryV6] :CustID,:DBNAME,:sub");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result = $query->executeQuery();
$data = $result->fetchAllAssociative();
$sql = "dbo.PortalFinishedGoodsInventoryDetailsALLV6 :CustID,:DBNAME,:sub,1";
$query = $this->connRO->prepare($sql);
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result2 = $query->executeQuery();
$countData = $result2->fetchAllAssociative();
$cs=[];
foreach ($countData as $k =>$datum)
{
$cs[$datum['Plant']."|".$datum['CustID']."|".$datum['VorteqPartNum']."|".$datum['Warehouse']] = $datum['ROWCOUNT'];
}
foreach ($data as $k=>$v)
{
//do it here
$key = $v['Plant']."|".$v['CustID']."|".$v['VorteqPartNum']."|".$v['Warehouse'];
if (isset($cs[$key]))
$data[$k]['NumResults'] = $cs[$key];
else
$data[$k]=null;
}
return $data;
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryProcessedOtherSummaryData($CustID)
{
$sub=$this->_isSub();
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalProcessedOtherInventorySummaryV6] :CustID,:DBNAME,:sub");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result = $query->executeQuery();
$data = $result->fetchAllAssociative();
$sql = "dbo.PortalProcessedOtherInventoryDetailsALLV6 :CustID,:DBNAME,:sub,1";
$query = $this->connRO->prepare($sql);
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$query->bindValue(':sub', $sub);
$result2 = $query->executeQuery();
$countData = $result2->fetchAllAssociative();
$cs=[];
foreach ($countData as $k =>$datum)
{
$cs[$datum['Plant']."|".$datum['CustID']."|".$datum['VorteqPartNum']."|".$datum['Warehouse']] = $datum['ROWCOUNT'];
}
foreach ($data as $k=>$v)
{
//do it here
$key = $v['Plant']."|".$v['CustID']."|".$v['VorteqPartNum']."|".$v['Warehouse'];
if (isset($cs[$key]))
$data[$k]['NumResults'] = $cs[$key];
else
$data[$k]=null;
}
return $data;
}
private function _isSub()
{
/** @var \App\Services\QuestPageValues $qpv */
$qpv = app(\App\Services\QuestPageValues::class);
if (app()->runningInConsole())
return 0;
if ( $qpv->getIsSubUser())
return 1;
else
return 0;
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryWorkInProgressSummaryData_Details($CustID, $PartNumber, $Plant, $Warehouse)
{
return $this->getInventoryWorkInProgressDetailsData($CustID, $PartNumber , $Plant, $Warehouse);
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryFinishedGoodsSummaryData_Details($CustID, $PartNumber, $Plant, $Warehouse)
{
return $this->getInventoryFinishedGoodsDetailsData($CustID, $PartNumber , $Plant, $Warehouse);
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryProcessedOtherSummaryData_Details($CustID, $PartNumber, $Plant, $Warehouse)
{
return $this->getInventoryProcessedOtherDetailsData($CustID, $PartNumber , $Plant, $Warehouse);
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryProcessedRRSummaryData($CustID)
{
if ($this->_getSubUser()) return [];
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[PortalProcessedInventoryRejectsAndReturnsSummary] :CustID,:DBNAME");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param string $CustID
* @return array
*/
public function getInventoryProcessedRRSummaryData_Details($CustID, $PartNumber = null, $Plant = null, $Warehouse = null)
{
return $this->getInventoryProcessedRRDetailsData($CustID, $PartNumber, $Plant, $Warehouse);
}
private function _getSubUser()
{
/** @var QuestPageValues $QPV */
$QPV = app(QuestPageValues::class);
return $QPV->getIsSubUser();
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryUnprocessedDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if ($this->_getSubUser()) return [];
$DBNAME = $this->getCurrentDatabase();
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
if ($GetAll)
$sql = "EXEC [dbo].[PortalUnprocessedInventoryDetailsALL] :custID,:DBNAME";
else
$sql = "EXEC dbo.[PortalUnprocessedInventoryDetails] :custID, :plant, :part, :warehouse, :DBNAME;";
// dd($CustID,$Part,$Plant,$Warehouse);
$query = $this->connRO->prepare($sql);
$query->bindValue(':custID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
if (!$GetAll) {
$query->bindValue(':plant', $Plant);
$query->bindValue(':part', $Part);
$query->bindValue(':warehouse', $Warehouse);
}
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryUnprocessedRRDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if ($this->_getSubUser()) return [];
$DBNAME = $this->getCurrentDatabase();
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
if ($GetAll)
$sql = "EXEC [dbo].[PortalUnprocessedInventoryRejectsAndReturnsDetailsALL] :custID,:DBNAME";
else
$sql = "EXEC dbo.[PortalUnprocessedInventoryRejectsAndReturnsDetails] :custID, :plant, :part, :warehouse, :DBNAME;";
$query = $this->connRO->prepare($sql);
$query->bindValue(':custID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
if (!$GetAll) {
$query->bindValue(':plant', $Plant);
$query->bindValue(':part', $Part);
$query->bindValue(':warehouse', $Warehouse);
}
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryWorkInProgressDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if (is_array($this->wipDetailsCache)) {
return $this->wipDetailsCache;
}
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
try {
/* $sql = file_get_contents(__DIR__."/epicoreSQL/processedInventory.sql");
$sql = str_replace('~DATABASE_NAME~', '['.\DB::getDatabaseName().']', $sql);
$Part1 = 'AND ship_RequestDetail.Part = :PART
AND ship_RequestDetail.Warehouse = :WAREHOUSE ';
$Part2 = 'AND ship_Request.Plant = :PLANT ';
$Part3 = 'AND PartBin.PartNum = :MAINPART
AND Plant.Name = :MAINPLANT
AND Warehse.Description = :MAINWH';*/
$DBNAME = $this->getCurrentDatabase();
if (!$GetAll)
{
//$sql = str_replace('~~PART1~~', $Part1, $sql);
//$sql = str_replace('~~PART2~~', $Part2, $sql);
//$sql = str_replace('~~PART3~~', $Part3, $sql);
//EXEC dbo.[PortalProcessedInventoryDetails] 'HDM', 'Franklin Park', 'HDM140A14.375-S', 'FP BOP';
$sql = "EXEC dbo.[PortalWorkInProgressInventoryDetailsV6] :CUSTID, :PLANT, :PART, :WAREHOUSE, :DBNAME, :sub;";
// dd($sql,$CustID,$Plant,$Part,$Warehouse,$DBNAME );
}
else
{
$sql = "EXEC dbo.[PortalWorkInProgressInventoryDetailsALLV6] :CUSTID, :DBNAME, :sub;";
}
$sub=$this->_isSub();
$query = $this->connRO->prepare($sql);
$query->bindValue(':CUSTID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
$query->bindValue(':sub', $sub);
if(!$GetAll)
{
$query->bindValue(':PLANT', $Plant);
$query->bindValue(':PART', $Part);
$query->bindValue(':WAREHOUSE', $Warehouse);
}
$result = $query->executeQuery();
$res = $result->fetchAllAssociative();
// dd($res);
} catch (DriverException $e) {
// dd($e->getMessage());
if ($GetAll)
return [];
else
throw new NoDetailDataForEpicorMultiKey();
}
if(!sizeof($res) && !$GetAll)
throw new NoDetailDataForEpicorMultiKey();
$this->wipDetailsCache=$res;
return $res;
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryFinishedGoodsDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if (is_array($this->fgDetailsCache)) {
return $this->fgDetailsCache;
}
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
try {
/* $sql = file_get_contents(__DIR__."/epicoreSQL/processedInventory.sql");
$sql = str_replace('~DATABASE_NAME~', '['.\DB::getDatabaseName().']', $sql);
$Part1 = 'AND ship_RequestDetail.Part = :PART
AND ship_RequestDetail.Warehouse = :WAREHOUSE ';
$Part2 = 'AND ship_Request.Plant = :PLANT ';
$Part3 = 'AND PartBin.PartNum = :MAINPART
AND Plant.Name = :MAINPLANT
AND Warehse.Description = :MAINWH';*/
$DBNAME = $this->getCurrentDatabase();
if (!$GetAll)
{
//$sql = str_replace('~~PART1~~', $Part1, $sql);
//$sql = str_replace('~~PART2~~', $Part2, $sql);
//$sql = str_replace('~~PART3~~', $Part3, $sql);
//EXEC dbo.[PortalProcessedInventoryDetails] 'HDM', 'Franklin Park', 'HDM140A14.375-S', 'FP BOP';
$sql = "EXEC dbo.[PortalFinishedGoodsInventoryDetailsV6] :CUSTID, :PLANT, :PART, :WAREHOUSE, :DBNAME, :sub;";
// dd($sql,$CustID,$Plant,$Part,$Warehouse,$DBNAME );
}
else
{
$sql = "EXEC dbo.[PortalFinishedGoodsInventoryDetailsALLV6] :CUSTID, :DBNAME, :sub;";
}
$sub=$this->_isSub();
$query = $this->connRO->prepare($sql);
$query->bindValue(':CUSTID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
$query->bindValue(':sub', $sub);
if(!$GetAll)
{
$query->bindValue(':PLANT', $Plant);
$query->bindValue(':PART', $Part);
$query->bindValue(':WAREHOUSE', $Warehouse);
}
$result = $query->executeQuery();
$res = $result->fetchAllAssociative();
// dd($res);
} catch (DriverException $e) {
// dd($e->getMessage());
if ($GetAll)
return [];
else
throw new NoDetailDataForEpicorMultiKey();
}
if(!sizeof($res) && !$GetAll)
throw new NoDetailDataForEpicorMultiKey();
$this->fgDetailsCache=$res;
return $res;
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryProcessedOtherDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if (is_array($this->processedOtherDeatilsCache)) {
return $this->processedOtherDeatilsCache;
}
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
try {
/* $sql = file_get_contents(__DIR__."/epicoreSQL/processedInventory.sql");
$sql = str_replace('~DATABASE_NAME~', '['.\DB::getDatabaseName().']', $sql);
$Part1 = 'AND ship_RequestDetail.Part = :PART
AND ship_RequestDetail.Warehouse = :WAREHOUSE ';
$Part2 = 'AND ship_Request.Plant = :PLANT ';
$Part3 = 'AND PartBin.PartNum = :MAINPART
AND Plant.Name = :MAINPLANT
AND Warehse.Description = :MAINWH';*/
$DBNAME = $this->getCurrentDatabase();
if (!$GetAll)
{
//$sql = str_replace('~~PART1~~', $Part1, $sql);
//$sql = str_replace('~~PART2~~', $Part2, $sql);
//$sql = str_replace('~~PART3~~', $Part3, $sql);
//EXEC dbo.[PortalProcessedInventoryDetails] 'HDM', 'Franklin Park', 'HDM140A14.375-S', 'FP BOP';
$sql = "EXEC dbo.[PortalProcessedOtherInventoryDetailsV6] :CUSTID, :PLANT, :PART, :WAREHOUSE, :DBNAME, :sub;";
// dd($sql,$CustID,$Plant,$Part,$Warehouse,$DBNAME );
}
else
{
$sql = "EXEC dbo.[PortalProcessedOtherInventoryDetailsALLV6] :CUSTID, :DBNAME, :sub;";
}
$sub=$this->_isSub();
$query = $this->connRO->prepare($sql);
$query->bindValue(':CUSTID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
$query->bindValue(':sub', $sub);
if(!$GetAll)
{
$query->bindValue(':PLANT', $Plant);
$query->bindValue(':PART', $Part);
$query->bindValue(':WAREHOUSE', $Warehouse);
}
$result = $query->executeQuery();
$res = $result->fetchAllAssociative();
// dd($res);
} catch (DriverException $e) {
// dd($e->getMessage());
if ($GetAll)
return [];
else
throw new NoDetailDataForEpicorMultiKey();
}
if(!sizeof($res) && !$GetAll)
throw new NoDetailDataForEpicorMultiKey();
$this->processedOtherDeatilsCache=$res;
return $res;
}
/**
* @param string $CustID
* @param string|null $Part
* @param string|null $Plant
* @param string|null $Warehouse
* @return array
* @throws NoDetailDataForEpicorMultiKey
*/
public function getInventoryProcessedRRDetailsData($CustID, $Part = null, $Plant = null, $Warehouse = null)
{
if ($this->_getSubUser()) return [];
$DBNAME = $this->getCurrentDatabase();
$GetAll = (is_null($Part) && is_null($Plant) && is_null($Warehouse));
if ($GetAll)
$sql = "EXEC [dbo].[PortalProcessedInventoryRejectsAndReturnsDetailsALL] :custID,:DBNAME";
else
$sql = "EXEC dbo.[PortalProcessedInventoryRejectsAndReturnsDetails] :custID, :plant, :part, :warehouse, :DBNAME;";
$query = $this->connRO->prepare($sql);
$query->bindValue(':custID', $CustID);
$query->bindValue(':DBNAME', $DBNAME);
if (!$GetAll) {
$query->bindValue(':plant', $Plant);
$query->bindValue(':part', $Part);
$query->bindValue(':warehouse', $Warehouse);
}
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
public function getVorPartDescriptionFromPartNumberWithPaintCode($CustID, $Part)
{
$query = $this->connRO->prepare("SELECT TOP 1
ISNULL(( SELECT TOP 1
CONCAT(Part.PartDescription, ISNULL(CONCAT(CHAR(13) + CHAR(10),
[Vendor].[VendorID], ' ',
Part_UD.TopcoatPaintCode_c, ' / ',
VendorBottomCoat.VendorID, ' ',
Part_UD.BackcoatPaintCode_c),'')) AS [Paint Code]
FROM Erp.Part AS Part
INNER JOIN Erp.Part_UD ON Part_UD.ForeignSysRowID = Part.SysRowID
INNER JOIN Erp.VendPart AS VendPart ON Part.Company = VendPart.Company
AND Part_UD.TopcoatPaintCode_c = VendPart.PartNum
AND ( VendPart.ExpirationDate IS NULL )
INNER JOIN Erp.Vendor AS Vendor ON VendPart.Company = Vendor.Company
AND VendPart.VendorNum = Vendor.VendorNum
INNER JOIN Erp.VendPart AS VendPart2 ON Part.Company = VendPart2.Company
AND Part_UD.BackcoatPaintCode_c = VendPart2.PartNum
AND ( VendPart2.ExpirationDate IS NULL )
INNER JOIN Erp.Vendor AS VendorBottomCoat ON VendPart2.Company = VendorBottomCoat.Company
AND VendPart2.VendorNum = VendorBottomCoat.VendorNum
WHERE ( Part.ClassID = 'FGS'
OR Part.ClassID = 'WIP'
)
AND Part.PartNum = PartBin.PartNum
),Part.PartDescription) AS PartDescription ,
PartBin.PartNum AS VorteqPartNum
FROM Erp.Part JOIN Erp.PartBin ON PartBin.PartNum = Part.PartNum
INNER JOIN Erp.Customer AS Customer ON Part.Company = Customer.Company
WHERE PartBin.PartNum LIKE :partNum AND Customer.CustID = :custID");
$query->bindValue(':custID', $CustID);
$query->bindValue(':partNum', $Part);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if (sizeof($results) === 1)
{
return $results[0]['PartDescription'];
}
} catch(DriverException) {}
return null;
}
/**
* @param string $CustID
* @param string $Part
* @return null|string
*/
public function getVorPartDescriptionFromPartNumber($CustID, $Part)
{
$query = $this->connRO->prepare("SELECT Part.PartDescription
FROM Erp.Part AS Part
INNER JOIN Erp.Customer AS Customer ON Part.Company = Customer.Company
WHERE Part.PartNum = :partNum
AND Customer.CustID = :custID");
$query->bindValue(':custID', $CustID);
$query->bindValue(':partNum', $Part);
try {
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
if (sizeof($results) === 1)
{
return $results[0]['PartDescription'];
}
} catch(DriverException) {}
return null;
}
public function getInventoryUnprocessedQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$query = $this->connRO->prepare("SELECT OnHandQty
FROM dbo.portal_UnprocessedInventorySummary
WHERE CustID = :custID
AND VorteqPartNum = :part
AND Plant = :plant
AND Warehouse = :warehouse");
$query->bindValue(':custID', $CustID);
$query->bindValue(':part', $Part);
$query->bindValue(':plant', $Plant);
$query->bindValue(':warehouse', $Warehouse);
$result = $query->executeQuery();
return $result->fetchOne();
}
public function getInventoryUnprocessedRRQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$query = $this->connRO->prepare("SELECT OnHandQty
FROM dbo.portal_UnprocessedInventoryRejectsAndReturnsSummary
WHERE CustID = :custID
AND VorteqPartNum = :part
AND Plant = :plant
AND Warehouse = :warehouse");
$query->bindValue(':custID', $CustID);
$query->bindValue(':part', $Part);
$query->bindValue(':plant', $Plant);
$query->bindValue(':warehouse', $Warehouse);
$result = $query->executeQuery();
return $result->fetchOne();
}
public function getInventoryWorkInProgressQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$this->getInventoryWorkInProgressDetailsData($CustID, $Part, $Plant, $Warehouse);
return $this->_processOnHandQuantity($this->wipDetailsCache);
}
public function getInventoryFinishedGoodsQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$this->getInventoryFinishedGoodsDetailsData($CustID, $Part, $Plant, $Warehouse);
return $this->_processOnHandQuantity($this->fgDetailsCache);
}
public function getInventoryProcessedOtherQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$this->getInventoryProcessedOtherDetailsData($CustID, $Part, $Plant, $Warehouse);
return $this->_processOnHandQuantity($this->processedOtherDeatilsCache);
}
private function _processOnHandQuantity($detailsCache)
{
$sum =0;
foreach ($detailsCache as $row)
{
$sum+=$row["OnHandQty"];
}
return $sum;
}
public function getCoilAllocationsByJobNumber($JobNum)
{
// dd(config('app.env'));
$sql = file_get_contents(__DIR__ . "/epicoreSQL/CoilAllocation.sql");
$CurrentDB = $this->getCurrentDatabase();
//
// dd($sql, $JobNum, $CurrentDB);
try {
$query = $this->connRO->prepare($sql);
// dd($sql, $JobNum);
$query->bindValue(':JobNum', $JobNum);
$query->bindValue(':DBNAME', $CurrentDB);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
} catch(\Exception $e) {
dd($e, $sql, $JobNum, $CurrentDB);
}
}
public function getInventoryProcessedPaintCodeDetailLine($CustID, $Part, $Plant, $Warehouse, $table)
{
// dd($CustID,$Part,$Plant,$Warehouse);
$query = $this->connRO->prepare("SELECT PaintCode
FROM dbo.{$table}
WHERE CustID = :custID
AND VorteqPartNum = :part
AND Plant = :plant
AND Warehouse = :warehouse");
$query->bindValue(':custID', $CustID);
$query->bindValue(':part', $Part);
$query->bindValue(':plant', $Plant);
$query->bindValue(':warehouse', $Warehouse);
$result = $query->executeQuery();
return $result->fetchOne();
}
public function getBOL($bolNum)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/getBOL.sql");
$query = $this->connRO->prepare($sql);
$query->bindParam(':BOL', $bolNum);
/** @var SelectedCompanyProvider $customer */
$customer = app(SelectedCompanyProvider::class);
$customer = $customer->getSelectedCompanyEpicorCustID();
$query->bindValue(':CUST', $customer);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/** job traveler */
public function getJobTraveler($jobNum)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/jobTraveler.sql");
$query = $this->connRO->prepare($sql);
$query->bindValue(':JobNum', $jobNum);
$query->bindValue(':JobNum1', $jobNum);
//dd($jobNum);
// dd($query->debugDumpParams());
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
public function getTotalCharges(array $JobNum)
{
foreach ($JobNum as $k => $num)
{
$JobNum[$k] = "'$num'";
}
$sql = file_get_contents(__DIR__."/epicoreSQL/getTotalCharges.sql");
$sql = str_replace('$totalCharges', implode(",",$JobNum), $sql);
$query = $this->connRO->prepare($sql);
$result = $query->executeQuery();
$ar = $result->fetchAllAssociative();
$jobs = [];
$grandTotal = 0;
foreach ($ar as $k => $v)
{
$lineTotal = $v['TotalCharges'];
$grandTotal += $lineTotal;
$jobs[$v['JobNum']]='$'.number_format($lineTotal,0);
//$ar[$k]=$v;
}
return [
'jobs' => $jobs,
'total' => number_format($grandTotal,0)
];
}
/** Paint line functions */
public function getPaintLines()
{
$sql = file_get_contents(__DIR__."/epicoreSQL/paintlines.sql");
$query = $this->connRO->prepare($sql);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
// :JobNum AND CustID = :CustID AND ProdGrup.ProdCode = :ProdCode
public function getJobForPaintLine($JobNum, $ProdCode)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/getJobForPaintLine.sql");
$query = $this->connRO->prepare($sql);
//$query->bindParam(':CustID', $CustID);
$JobNum = (string)$JobNum;
$query->bindValue(':JobNum', $JobNum);
$query->bindValue(':ProdCode', $ProdCode);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
public function getJob($JobNum)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/getJob.sql");
$query = $this->connRO->prepare($sql);
//$query->bindParam(':CustID', $CustID);
$JobNum = (string)$JobNum;
$query->bindValue(':JobNum', $JobNum);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
public function DoesPackingSlipExist($slip)
{
$sql ="SELECT
PackingSlip
FROM dbo.portal_CoilActivityReceipts
where PackingSlip = :SLIP
";
$query = $this->connRO->prepare($sql);
$query->bindValue(':SLIP', $slip);
$result = $query->executeQuery();
$result= $result->fetchAllAssociative();
// dd($lot,$result);
if (count($result)>0)
return true;
else
return false;
}
public function getPlantFromPackingSlip($slip)
{
$sql ="
SELECT Erp.Plant.Plant
FROM [Epicor10Live].[dbo].[portal_CoilActivityReceipts]
JOIN Erp.Plant ON Erp.Plant.Name = dbo.portal_CoilActivityReceipts.PlantName
WHERE PackingSlip = :SLIP
GROUP BY Plant";
$query = $this->connRO->prepare($sql);
$query->bindValue(':SLIP', $slip);
$result = $query->executeQuery();
$result = $result->fetchAllAssociative();
return $result;
}
public function getClosedJob($JobNum)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/getClosedJob.sql");
$query = $this->connRO->prepare($sql);
//$query->bindParam(':CustID', $CustID);
$JobNum = (string)$JobNum;
$query->bindValue(':JobNum', $JobNum);
$result = $query->executeQuery();
return $result->fetchAllAssociative(PDO::FETCH_ASSOC);
}
/** end paint line functions */
public function getInventoryProcessedRRPaintCodeDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$query = $this->connRO->prepare("SELECT PaintCode
FROM dbo.[portal_ProcessedInventoryRejectsAndReturns]
WHERE CustID = :custID
AND VorteqPartNum = :part
AND Plant = :plant
AND Warehouse = :warehouse");
$query->bindValue(':custID', $CustID);
$query->bindValue(':part', $Part);
$query->bindValue(':plant', $Plant);
$query->bindValue(':warehouse', $Warehouse);
$result = $query->executeQuery();
return $result->fetchOne();
}
public function getInventoryProcessedRRQOHForSpecificDetailLine($CustID, $Part, $Plant, $Warehouse)
{
$query = $this->connRO->prepare("SELECT OnHandQty
FROM dbo.portal_ProcessedInventoryRejectsAndReturnsSummary
WHERE CustID = :custID
AND VorteqPartNum = :part
AND Plant = :plant
AND Warehouse = :warehouse");
$query->bindValue(':custID', $CustID);
$query->bindValue(':part', $Part);
$query->bindValue(':plant', $Plant);
$query->bindValue(':warehouse', $Warehouse);
$result = $query->executeQuery();
return $result->fetchOne();
}
public function getTop100ShipmentsData($CustID)
{
// $sql = file_get_contents(__DIR__ . "/epicoreSQL/portal_Shipments.sql");
$currentDB = $this->getCurrentDatabase();
$query = $this->connRO->prepare(" [dbo].[portal_GetShipmentsV1] :CustID,:DBNAME");
$query->bindValue(':CustID', $CustID);
$query->bindValue(':DBNAME', $currentDB);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return false;
}
$results = $result->fetchAllAssociative();
//format the ShipToLoc
foreach($results as &$row) {
$row['ShipToLoc'] = str_replace(', ', '
', $row['ShipToLoc']);
}
return $results;
}
public function getTop5ShipmentsData($CustID)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/portal_ShipmentsTop5.sql");
$query = $this->connRO->prepare($sql);
$query->bindValue(':CUST1', $CustID);
$query->bindValue(':CUST2', $CustID);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return false;
}
$results = $result->fetchAllAssociative();
//format the ShipToLoc
foreach($results as &$row) {
$row['ShipToLoc'] = str_replace(', ', '
', $row['ShipToLoc']);
}
return $results;
}
public function getTop100OrdersData($CustID)
{
//$viewName = 'portal_Orders';
$Cust2 = $CustID;
//echo($CustID);exit;
/** exception case for HDC */
if ($CustID == 'HDC')
{
//$viewName = 'portal_OrdersHDC';
$Cust2 = 'BLARGH';
}
$sql = file_get_contents(__DIR__."/epicoreSQL/portal_Orders.sql");
$query = $this->connRO->prepare($sql);
$query->bindValue(':Cust1', $CustID);
$query->bindValue(':Cust2', $Cust2);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return false;
}
return $result->fetchAllAssociative();
}
public function getTop5OrdersData($CustID)
{
$viewName = 'portal_Orders';
/** exception case for HDC */
if ($CustID == 'HDC')
{
$viewName = 'portal_OrdersHDC';
$CustID = 'HDM';
//WHERE [Customer].[CustID]='HDM' AND Part.UserChar2 = 'HDC'
}
$QueryBuilder = $this->connRO->createQueryBuilder();
$QueryBuilder->select('*')
->from('dbo.'.$viewName)
->where('CustomerID = :custID')
->orderBy('CompletionDate', 'DESC')
->setMaxResults(5);
$query = $this->connRO->prepare($QueryBuilder);
$query->bindValue(':custID', $CustID);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return false;
}
return $result->fetchAllAssociative();
}
public function getCustomerNames($CustID)
{
}
public function getCustomerShipToAddresses($CustID)
{
$subuser = $this->_isSub();
try {
if (!$subuser):
$query = $this->connRO->prepare("SELECT ShipToNum, ShipToName, Address1 AS ShipToAddress1, Address2 AS ShipToAddress2,
City AS ShipToCity, State AS ShipToState, Zip AS ShipToZip
FROM portal_CustomerShipToAddresses
WHERE CustID = :custID
ORDER BY ShipToName");
else:
$query = $this->connRO->prepare("SELECT ShipToNum, ShipToName, Address1 AS ShipToAddress1, Address2 AS ShipToAddress2,
City AS ShipToCity, State AS ShipToState, Zip AS ShipToZip
FROM portal_CustomerShipToAddresses
WHERE CustID = :custID
and UPPER(ShipToName) like '%NB HANDY%'
ORDER BY ShipToName");
endif;
$query->bindValue('custID', $CustID);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
} catch(DriverException $e) {
Log::error('LOADING CUSTOMER SHIP TO ADDRESSES FOR '.$CustID.': '.$e->getMessage());
return [];
}
}
public function getCustomerSingleShipToAddressByNum($CustID, $ShipToNum)
{
try {
$query = $this->connRO->prepare("SELECT ShipToName, Address1 AS ShipToAddress1, Address2 AS ShipToAddress2, City AS ShipToCity, State AS ShipToState, Zip AS ShipToZip
FROM portal_CustomerShipToAddresses
WHERE CustID = :custID
AND ShipToNum = :shipToNum");
$query->bindValue('custID', $CustID);
$query->bindValue('shipToNum', $ShipToNum);
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
return (sizeof($results) ? $results[0] : null);
} catch(DriverException $e) {
Log::error('LOADING SINGLE SHIP TO ADDRESS FOR '.$CustID.' '.$ShipToNum.': '.$e->getMessage());
return null;
}
}
/**
* @param string $PlantName
* @return string[]
*/
public function getPlantUserEmailAddresses($PlantName)
{
// don't want to silently trap exceptions here since it's critical the plant get emailed the request if it's being completed
//removed this function
return [];
$query = $this->connRO->prepare("SELECT UserEmailAddress
FROM portal_PlantUserInfo
WHERE PlantName = :plantName
AND UserEmailAddress IS NOT NULL
AND RTRIM(LTRIM(UserEmailAddress)) != ''");
$query->bindValue('plantName', $PlantName);
$result = $query->executeQuery();
$results = $result->fetchAllAssociative();
return array_column($results, 'UserEmailAddress');
}
/**
* @param string $CustID
* @param string $StartDate
* @param string $EndDate
* @return array
*/
public function getCoilActivityUsageData($CustID, $StartDate, $EndDate)
{
/* $query = $this->connRO->prepare("SELECT DateUsed, VorteqPartNum, CustomerPartNum, PartDesc, LotNum, Weight, PlantName, JobNum, CustomerPO, OnHandQty
FROM dbo.portal_CoilActivityUsage
WHERE CustID = :custID
AND DateUsed >= :startDate
AND DateUsed <= :endDate
ORDER BY DateUsed, VorteqPartNum, JobNum, LotNum, Weight DESC"); */
$sql = file_get_contents(__DIR__."/epicoreSQL/portal_CoilActivityUsage.sql");
$query = $this->connRO->prepare($sql);
$query->bindValue(':custID', $CustID);
$query->bindValue(':startDate', $StartDate);
$query->bindValue(':endDate', $EndDate);
$result = $query->executeQuery();
$data = $result->fetchAllAssociative();
$foundRows = [];
$foundLots=[];
foreach ($data as $k => $row)
{
if ((int)$row["OnHandQty"] > 0)
{
if (isset($foundLots[$row["LotNum"]]))
{
if (strtotime($row["DateUsed"]) < $foundRows[$row["LotNum"]]["date"])
{
$data[$k]["OnHandQty"]=null;
}
else
{
$data[$foundRows[$row["LotNum"]]["k"]]["OnHandQty"]=null;
$foundRows[$row["LotNum"]]["date"]=$row["DateUsed"];
$foundRows[$row["LotNum"]]["k"]=$k;
}
}
else
{
$foundRows[$row["LotNum"]]["date"]=$row["DateUsed"];
$foundRows[$row["LotNum"]]["k"]=$k;
$foundLots[$row["LotNum"]]=1;
}
}
if ($data[$k]["Weight"] == 0)
$data[$k]["Weight"] = null;
}
// dd($data);
return $data;
}
/**
* @param string $CustID
* @param string $StartDate
* @param string $EndDate
* @return array
*/
public function getCoilActivityReceiptsData($CustID, $StartDate, $EndDate)
{
if ($CustID == "VGL") {
$sql = file_get_contents(__DIR__."/epicoreSQL/VGLCoilReceiptsData.sql");
$query = $this->connRO->prepare($sql);
}
else {
$query = $this->connRO->prepare("SELECT DateReceived, VorteqPartNum, CustomerPartNum, PartDesc, ManufacturerLotNum, Weight, PlantName, PackingSlip, SupplierName, MillOrderNum, Temper, Alloy, CoilsPerSkid
FROM dbo.portal_CoilActivityReceipts
WHERE CustID = :custID
AND DateReceived >= :startDate
AND DateReceived <= :endDate
ORDER BY DateReceived");
$query->bindParam(':custID', $CustID);
}
$query->bindValue(':startDate', $StartDate);
$query->bindValue(':endDate', $EndDate);
$result = $query->executeQuery();
return $result->fetchAllAssociative();
}
/**
* @param array $InvoiceNumbers
* @return string[]
*/
public function getCustomerIDsForInvoiceNumbers(array $InvoiceNumbers)
{
if(!sizeof($InvoiceNumbers))
return [];
$InvoiceNumbers = array_unique($InvoiceNumbers);
$stmt = $this->connRO->prepare("SELECT erp.InvcHead.InvoiceNum, erp.Customer.CustID
FROM erp.InvcHead
INNER JOIN erp.Customer ON Customer.CustNum = InvcHead.CustNum
WHERE InvoiceNum IN (".implode(',',array_fill(0,sizeof($InvoiceNumbers),"?")).")");
$ret = array_combine($InvoiceNumbers, array_fill(0,sizeof($InvoiceNumbers),null));
$result = $stmt->executeQuery(array_values($InvoiceNumbers));
$res = $result->fetchAllAssociative();
return array_replace($ret, array_combine(array_column($res,'InvoiceNum'),array_column($res,'CustID')));
}
public function getOrdersForCustomerOnOrAfterDate($customerID, $date, $excludedOrderNumbers)
{
$sql = file_get_contents(__DIR__."/epicoreSQL/getOrdersForCustomerOnOrAfterDate.sql");
if(!empty($excludedOrderNumbers)) {
$sql .= str_replace(':OrderNumbers:', implode(',', $excludedOrderNumbers) ," AND Erp.OrderHed.OrderNum NOT IN (:OrderNumbers:);");
} else {
$sql .= ';';
}
$query = $this->connRO->prepare($sql);
$query->bindValue(':CustomerID', $customerID);
$query->bindValue(':Date', $date);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return [];
}
$orders = $result->fetchAllAssociative();
return $orders;
}
/**
* @return string[]
*/
public function getAllCustomerNamesByID()
{
$stmt = $this->connRO->prepare("SELECT CustID, Name
FROM erp.Customer
ORDER BY CustID");
$result = $stmt->executeQuery();
$res = $result->fetchAllAssociative();
return array_combine(array_column($res, 'CustID'),array_column($res,'Name'));
}
public function getShippingForMonth($month)
{
$sql = "exec [portal_GetShipmentsAllCustomersV1] 0, $month, '".$this->getCurrentDatabase()."';";
$query = $this->connRO->prepare($sql);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return [];
}
$orders = $result->fetchAllAssociative();
return $orders;
}
public function getShippingYTD()
{
$sql = "exec [portal_GetShipmentsAllCustomersV1] 1, 0, '".$this->getCurrentDatabase()."';";
$query = $this->connRO->prepare($sql);
try {
$result = $query->executeQuery();
} catch(DriverException) {
return [];
}
$orders = $result->fetchAllAssociative();
return $orders;
}
}