290 lines
12 KiB
PHP
290 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Modules\M3\Console;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
use Modules\M3\Http\Controllers\Controller;
|
|
use DB;
|
|
use Config;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Log;
|
|
use Str;
|
|
|
|
use File;
|
|
use DateTime;
|
|
|
|
use Storage;
|
|
use Cache;
|
|
use Picqer\Barcode\BarcodeGeneratorPNG;
|
|
use Dompdf\Dompdf;
|
|
|
|
use Ayeo\Barcode;
|
|
use PDF;
|
|
use App;
|
|
|
|
use Zebra\Client;
|
|
use Zebra\Zpl\Image;
|
|
use Zebra\Zpl\Builder;
|
|
use Zebra\Zpl\GdDecoder;
|
|
|
|
class GenerateGS1Cmd extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'command:GenerateGS1Cmd {user?} {--gsarray=}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Generate GS1-128 Label';
|
|
|
|
/**
|
|
* Create a new command instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function handle()
|
|
{
|
|
//$this->info('Start CallCloseAPI...');
|
|
ini_set('max_execution_time', Config::get('arrays.PHPTimeOutCL'));
|
|
ini_set('max_input_time', Config::get('arrays.PHPTimeOutCL'));
|
|
ini_set('default_socket_timeout', Config::get('arrays.PHPTimeOutCL'));
|
|
ini_set('memory_limit', '1024M');
|
|
|
|
try {
|
|
$this->info('>>> Run GS1 Label creation Command...');
|
|
Log::channel('LabelCron')->info(">>> Run GS1 Label creation Command...");
|
|
|
|
# Get the Calling User
|
|
$userId = $this->argument('user');
|
|
$SHUSER = isset($userId) ? $userId : (m3_user() !== '' ? Str::upper(trim(m3_user())) : 'TWOSHIP');
|
|
$this->info('User: '.$SHUSER);
|
|
|
|
# Get Manifest Array
|
|
$GSArray1 = $this->option('gsarray');
|
|
$GSArray = json_decode($GSArray1, true);
|
|
// dump($GSArray);
|
|
|
|
# MAK : Used for debug only
|
|
$GSArray = ["Macpkr"=> "55555","Recipient_Address1"=>"9571 Pan American DR", "Recipient_Address2"=>"C/O AEE Solar","Recipient_City"=>"El Paso",
|
|
"Recipient_CompanyName"=>"SNAPRACK EL PASO PRODUCTION","Recipient_CountryCode"=>"US","Recipient_PostalCode"=>"79927","Recipient_State"=>"TX",
|
|
"Sender_Address1"=>"6800 Arnold Miller Pkwy","Sender_Address2"=>"","Sender_City"=>"Solon",
|
|
"Sender_CompanyName"=>"Erico International","Sender_Country"=>"US","Sender_PostalCode"=>"44139","Sender_State"=>"OH",
|
|
"CarrierName"=>"R&L Carriers","trackingno"=>"306539838","BOLnumber"=>"693103848064454","ShipmentPONumber"=>"4523039092",
|
|
"PackagesArray"=> ["package 1" , "package 2"]
|
|
];
|
|
|
|
|
|
if ($SHUSER!='') {
|
|
# Get User CO & WH from Table ICM428M
|
|
$ICM428M = DB::connection(config('m3.connection', 'pgsql'))->table('icm428m')
|
|
->select('R428US','R428CO', 'R428WH','R428PL')
|
|
->where('R428US','=',$SHUSER)
|
|
->first();
|
|
|
|
$R428US = isset($ICM428M->R428US) ? $ICM428M->R428US : ''; # User
|
|
$COMPANY = isset($ICM428M->R428CO) ? $ICM428M->R428CO : ''; # Company
|
|
$PLANT = isset($ICM428M->R428PL) ? $ICM428M->R428PL : ''; # Plant
|
|
$WHS = isset($ICM428M->R428WH) ? $ICM428M->R428WH : ''; # WareHouse
|
|
|
|
$Macpkr = $GSArray['Macpkr'];
|
|
$packageType = '0';
|
|
$manufactID = '0826528'; # MAK : get ID from Nvent and save to Config File
|
|
$total_length = 9;
|
|
|
|
$html = '
|
|
<html>
|
|
<head>
|
|
<style>
|
|
.border_btm {
|
|
border-bottom: 1px solid;
|
|
}
|
|
.border_rght {
|
|
border-right: 1px solid;
|
|
}
|
|
|
|
.margin_t {
|
|
padding-top : 10px;
|
|
}
|
|
|
|
.align_lft {
|
|
text-align: left;
|
|
}
|
|
.align_center {
|
|
text-align: center;
|
|
}
|
|
|
|
@page { margin: 5px; }
|
|
body { margin: 0px; }
|
|
</style>
|
|
</head>
|
|
<body style="font-family: Arial, sans-serif;">';
|
|
|
|
# Get number of Pallets
|
|
$packageCount = count($GSArray['PackagesArray']);
|
|
$packageNum = 1;
|
|
foreach ($GSArray['PackagesArray'] as $key => $value) {
|
|
$table_style = $packageNum < $packageCount ? ' style="page-break-after: always;" ' : '';
|
|
|
|
if (Cache::has('GS1SEQUENCE')) {
|
|
$GS1SEQUENCE = Cache::get('GS1SEQUENCE');
|
|
$GS1SEQUENCE++;
|
|
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, "0", STR_PAD_LEFT);
|
|
}
|
|
# Box Number Not Found Get it from DB
|
|
else{
|
|
$GS1SEQUENCE = 1;
|
|
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, "0", STR_PAD_LEFT);
|
|
}
|
|
Cache::forever('GS1SEQUENCE', $GS1SEQUENCEID);
|
|
$this->info(">>> GS1 sequence Id: ".$GS1SEQUENCEID);
|
|
|
|
$gs1_128_bc_1 = '00' .$packageType . $manufactID . $GS1SEQUENCEID;
|
|
|
|
# Calculate Check Digit
|
|
$digits = str_split($gs1_128_bc_1);
|
|
$sum = 0;
|
|
$length = count($digits);
|
|
|
|
# Loop through each digit starting from the right
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$digit = $digits[$length - $i - 1];
|
|
# Assign a weight of 3 or 1 alternately
|
|
$weight = ($i % 2 == 0) ? 3 : 1;
|
|
# Add the product of the digit and its weight to the sum
|
|
$sum += $digit * $weight;
|
|
}
|
|
# Calculate the remainder when sum is divided by 10
|
|
$remainder = $sum % 10;
|
|
# If remainder is 0, check digit is 0; otherwise, subtract remainder from 10
|
|
$checkDigit = ($remainder == 0) ? 0 : 10 - $remainder;
|
|
|
|
$gs1_128_bc = $gs1_128_bc_1 . $checkDigit;
|
|
$gs1_128_bc_desc = '(00)' .$packageType . $manufactID . $GS1SEQUENCEID .$checkDigit;
|
|
|
|
$data = [
|
|
'ship_to' => $GSArray["Recipient_CompanyName"].'<br>'.$GSArray["Recipient_Address1"].'<br>'.
|
|
$GSArray["Recipient_City"].','. $GSArray["Recipient_State"]
|
|
.'<br>'.$GSArray["Recipient_PostalCode"] ,
|
|
'from' => $GSArray["Sender_CompanyName"].'<br>'.$GSArray["Sender_Address1"].'<br>'.
|
|
$GSArray["Sender_City"].','. $GSArray["Sender_State"]
|
|
.'<br>'.$GSArray["Sender_PostalCode"] ,
|
|
'ship_to_lbl' => '420'.$GSArray["Recipient_PostalCode"],
|
|
'ship_to_desc' => '(420)'.$GSArray["Recipient_PostalCode"],
|
|
'pro' => '190071217845706',
|
|
'item_number' => '10000B',
|
|
'upc' => '098506095310',
|
|
'quantity' => '1',
|
|
'serial_shipping_container' => $gs1_128_bc_desc
|
|
];
|
|
|
|
# Initialize barcode generator
|
|
$generator = new BarcodeGeneratorPNG();
|
|
|
|
# Generate barcodes
|
|
$shipToPostalCodeBarcode = $generator->getBarcode($data['ship_to_lbl'], $generator::TYPE_CODE_128);
|
|
$serialShippingContainerBarcode = $generator->getBarcode($data['serial_shipping_container'], $generator::TYPE_CODE_128, 2 ,50);
|
|
|
|
# HTML content for the label
|
|
$html .= '
|
|
<table '.$table_style.'>
|
|
<tr>
|
|
<td colspan="2" class="border_btm border_rght align_lft">
|
|
FROM:<br>' . $data['from'] . '
|
|
</td>
|
|
<td colspan="2" class="border_btm align_lft">
|
|
SHIP TO:<br>' . $data['ship_to'] . '
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="3" class="border_btm border_rght margin_t align_center">
|
|
<img src="data:image/png;base64,' . base64_encode($shipToPostalCodeBarcode) . '"> <br>
|
|
' . $data['ship_to_desc'] . '
|
|
</td>
|
|
<td class="border_btm margin_t align_lft">
|
|
Carrier: '.$GSArray["CarrierName"].' <br>
|
|
PRO #: '.$GSArray["ShipmentPONumber"].' <br>
|
|
B/L #: '.$GSArray["BOLnumber"].'
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" class="border_btm margin_t align_lft border_rght">
|
|
PURCHASE ORDER: '.$GSArray["Macpkr"].' <br>
|
|
Vendor: ' . $manufactID . '
|
|
</td>
|
|
<td colspan="2" class="border_btm margin_t align_center">
|
|
Pallet # : '.$packageNum.' of '.$packageCount.'
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" style="text-align: center;" class="margin_t">
|
|
<img src="data:image/png;base64,' . base64_encode($serialShippingContainerBarcode) . '"><br>
|
|
' . $data['serial_shipping_container'] . '
|
|
</td>
|
|
</tr>
|
|
</table>';
|
|
|
|
$packageNum++;
|
|
}
|
|
|
|
$html .='</body> </html>';
|
|
// dump($html);
|
|
// App::call('App\Http\Controllers\utilitiesContoller@generateGS128');
|
|
|
|
ob_start();
|
|
|
|
# Initialize Dompdf
|
|
$dompdf = new Dompdf();
|
|
$dompdf->loadHtml($html);
|
|
$dompdf->setPaper('a6', 'portrait');
|
|
# Render the HTML as PDF
|
|
$dompdf->render();
|
|
|
|
# Output the generated PDF to Browser
|
|
// $dompdf->stream();
|
|
|
|
$pdfContent = $dompdf->output();
|
|
// dump($pdfContent);
|
|
|
|
$labelsPath = Config::get('arrays.PdfPath');
|
|
# Put the PDF in labels/CarrierLabel
|
|
$GSFolder = "GSLabel";
|
|
$carrierFileName = $GSFolder.'_'.$Macpkr.'_'.$COMPANY.'_'.$WHS;
|
|
file_put_contents($labelsPath.$GSFolder.'/'.$carrierFileName.'.pdf',$pdfContent);
|
|
|
|
# Check if the PDF was generated correctly
|
|
// if (!file_exists($tempPdfPath) || filesize($tempPdfPath) === 0) {
|
|
// throw new Exception('PDF generation failed.');
|
|
// }
|
|
|
|
ob_end_clean();
|
|
}
|
|
|
|
Log::channel('LabelCron')->info("<<< GS1-128...End of Label Creation");
|
|
$this->info("<<< GS1-128...End of Label Creation");
|
|
|
|
}
|
|
catch (\Throwable $th) {
|
|
// Log::error($th);
|
|
Log::channel('LabelCron')->error($th);
|
|
}
|
|
}
|
|
}
|