Commit 6681090a authored by Sarun Mungthanya's avatar Sarun Mungthanya
Browse files

add create patch masterfile

parent 1097ea6b
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ConvertToJsonController extends Controller
{
public function convert()
{
// Path ของโฟลเดอร์ที่เก็บไฟล์ .inc
$formatPath = storage_path('format');
// Path ของโฟลเดอร์ที่เก็บไฟล์ JSON
$jsonPath = storage_path('json');
// ตรวจสอบว่ามีโฟลเดอร์ JSON หรือไม่ ถ้าไม่มีให้สร้างขึ้นมา
if (!file_exists($jsonPath)) {
mkdir($jsonPath, 0777, true);
}
// อ่านไฟล์ทั้งหมดในโฟลเดอร์ format
$files = scandir($formatPath);
foreach ($files as $file) {
if (pathinfo($file, PATHINFO_EXTENSION) === 'inc') {
// อ่านเนื้อหาของไฟล์ .inc
$fileContent = file_get_contents($formatPath . '/' . $file);
// ตรวจสอบว่ามีข้อมูลที่ไม่ต้องการหรือไม่
$DATABASE = '';
$PKEY = [];
$FORMAT = [];
// ใช้ eval เพื่อทำให้ PHP เข้าใจเนื้อหาในไฟล์ (ควรระวัง)
eval('?>' . $fileContent);
// สร้าง array จากข้อมูลในไฟล์
$data = [
'database' => $DATABASE,
'primary_key' => $PKEY,
'format' => $FORMAT,
];
// แปลง array เป็น JSON
$jsonContent = json_encode($data, JSON_PRETTY_PRINT);
// เขียน JSON ลงในไฟล์ใหม่ในโฟลเดอร์ json
$jsonFileName = pathinfo($file, PATHINFO_FILENAME) . '.json';
file_put_contents($jsonPath . '/' . $jsonFileName, $jsonContent);
}
}
return response()->json(['message' => 'Conversion complete!']);
}
}
<?php
namespace App\Http\Livewire\Pages\Patch;
use Livewire\Component;
use App\Models\ConfFormatFile;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Livewire\WithFileUploads;
class PatchMasterFile extends Component
{
use WithFileUploads;
public $file, $format_file_id, $messages, $formatFile, $limit, $noLimit, $genPatch, $createPatch = false, $sendToEec = false, $genWithSmartUpdate = false;
protected $formatFiles;
protected $rules = [
'name' => 'required|string|max:255',
// 'files.*' => 'required|file|max:100000',
];
public function mount() {
}
public function createPatch()
{
$fileData = $this->file->getRealPath();
$fileFormat = ConfFormatFile::where('formatservice_ID', $this->format_file_id)->first();
$jsonFilePath = storage_path(str_replace(".inc", ".json", $fileFormat->file));
if (!file_exists($jsonFilePath)) {
session()->flash('error', 'Format JSON file not found.');
return;
}
$formatData = json_decode(file_get_contents($jsonFilePath), true);
$message = '';
if ($this->createPatch) {
$sqlPackAll = $this->readTxt($fileData, $formatData, $fileFormat, $this->limit, $this->noLimit);
$this->processPatches($sqlPackAll, $fileFormat, $this->genWithSmartUpdate);
$message .= 'Patch master file created successfully.';
}
$timeStampEec = Carbon::now()->toDateString();
$datetime = Carbon::now()->toDateTimeString();
$typeEec = $fileFormat->ac ?? '';
if ($this->sendToEec && $typeEec !== '') {
$uid = auth()->user()->id;
$response = $this->sendMasterFileToEcc(config('services.eec.url'), [
'type' => $typeEec,
'file' => fopen($fileData, 'r'),
'timestamp' => $timeStampEec,
]);
$reponseStatus = $response->status();
$responseDate = $response->json();
$requestData = json_encode([
'type' => $typeEec,
'file' => $fileData,
'timestamp' => $timeStampEec,
]);
$this->keepTransactionToEcc($uid, $typeEec, basename($fileData), $requestData, $datetime, $reponseStatus, json_encode($responseDate));
$message .= 'Send EEC successfully.';
// if ($RESPSTATUS == 200) {
// return response()->json(['message' => 'Send MasterFile To EEC'], 200);
// } else {
// return response()->json(['message' => 'Can Not Send MasterFile To EEC'], 500);
// }
} else {
// return response()->json(['message' => 'MasterFile Not config to EEC'], 400);
}
return redirect()->route('patch.index')->with('message', $message);
}
private function sendMasterFileToEcc($url, $postData)
{
return Http::attach('file', $postData['file'])
->asMultipart()
->post($url, [
'type' => $postData['type'],
'timestamp' => $postData['timestamp'],
]);
}
private function keepTransactionToEcc($UID, $TYPE, $FILENAME, $REQDATA, $ACTDATETIME, $RESPSTATUS, $RESPDATA)
{
DB::table('log_send_master2eec')->insert([
'UID' => $UID,
'TYPE' => $TYPE,
'FILENAME' => $FILENAME,
'REQDATA' => $REQDATA,
'ACTDATETIME' => $ACTDATETIME,
'RESPSTATUS' => $RESPSTATUS,
'RESPDATA' => $RESPDATA,
]);
}
function processPatches($sqlPackAll, $fileFormat, $genspnsmartupdatedecode)
{
$uid = auth()->user()->id;
$pLevel = "Critical";
$nameFormat = $fileFormat->name ?? 'Unknown Format';
$pDesc = $nameFormat;
$day = Date('j');
$month = Date('n');
$year = Date('Y');
$pApproveDate = date("Y-m-d h:i:s");
$partPatch = '';
$countSql = count($sqlPackAll);
$part = 1;
foreach ($sqlPackAll as $i__ => $sqlPack) {
if ($countSql != 1 && !$this->noLimit) {
$partPatch = 'Part ' . $part++;
}
$tis620_encoded = iconv('UTF-8', 'TIS-620', var_export($sqlPack, true));
$ALL64 = base64_encode(gzcompress($tis620_encoded));
$patchCode = '$ALL64="' . $ALL64 . '";' . "\n";
if ($genspnsmartupdatedecode) {
$updatedecode = '$ALLVAR=gzuncompress(spnsmartupdatedecode($ALL64));' . "\n";
} else {
$updatedecode = '$ALLVAR=gzuncompress(base64_decode($ALL64));' . "\n";
}
$patchCode .= $updatedecode;
$patchCode .= "eval('\$SQL='.".'$ALLVAR.";");'."\n";
$patchCode .= $this->generatePatchCode($countSql , $i__);
if ($this->noLimit && ($i__ == $countSql - 1)) {
$this->savePatch($patchCode, $nameFormat, $day, $month, $year, $partPatch, $pLevel, $pDesc, $uid, $pApproveDate);
} elseif (!$this->noLimit) {
$this->savePatch($patchCode, $nameFormat, $day, $month, $year, $partPatch, $pLevel, $pDesc, $uid, $pApproveDate);
}
}
}
private function generatePatchCode($countSql , $i__)
{
$patchCode = '';
$patchCode .= '$insert=$SQL["insert"];' . "\n";
$patchCode .= '$update=$SQL["update"];' . "\n";
$patchCode .= '$select=$SQL["select"];' . "\n";
$patchCode .= '$select2=$SQL["select2"];' . "\n";
$patchCode .= '$DATABASE=$SQL["DATABASE"];' . "\n";
$patchCode .= '$CountSQL_=count($insert);' . "\n";
$patchCode .= '$succ="0";' . "\n";
$patchCode .= '$succ2="0";' . "\n";
$patchCode .= 'for($i_=0;$i_<$CountSQL_;$i_++){' . "\n";
$patchCode .= ' $INSERT_ID="";' . "\n";
$patchCode .= ' if($DBTYPE=="MYSQL"){' . "\n";
$patchCode .= ' $sql=$insert[$i_]." ON DUPLICATE KEY UPDATE ".$update[$i_];' . "\n";
$patchCode .= ' }' . "\n";
$patchCode .= ' if($DBTYPE=="MSSQL"){' . "\n";
$patchCode .= ' $sql="IF EXISTS (".$select[$i_].") BEGIN UPDATE $DATABASE SET ".$update[$i_].$select2[$i_]." END ELSE ".$insert[$i_];' . "\n";
$patchCode .= ' }' . "\n";
$patchCode .= ' exec_query($sql);' . "\n";
$patchCode .= ' $succ++;' . "\n";
$patchCode .= ' if($INSERT_ID!=""){$succ2++;}' . "\n";
$patchCode .= '}' . "\n";
$patchCode .= 'unset($ALL64);' . "\n";
$patchCode .= 'unset($ALLVAR);' . "\n";
$patchCode .= 'unset($SQL);' . "\n";
$patchCode .= 'unset($insert);' . "\n";
$patchCode .= 'unset($update);' . "\n";
$patchCode .= 'unset($select);' . "\n";
$patchCode .= 'unset($select2);' . "\n";
$patchCode .= '$PRINT_ .= date("h:i:s")." Process '.($i__+1).' / ' . $countSql . ' Successful Update $succ data(s) (Added = $succ2) from $CountSQL_.</br>";' . "\n";
return $patchCode;
}
private function savePatch($patchCode, $nameformat, $day, $month, $year, $partPatch, $PLEVEL, $PDESC, $UID, $PAPPROVEDATE)
{
$patchCode .= '$PRINTOUT=$PRINT_;' . "\n";
$patchCode .= '$PATCH_STATUS="OK";' . "\n";
// $patchCode = str_replace("'", "''", $patchCode);
$data = [
'PATCHNAME' => "Update Master File $nameformat วันที่ $day เดือน $month ปี $year $partPatch",
'PDATE' => Carbon::now(),
'PLEVEL' => $PLEVEL,
'PCODE' => 'SHIPPINGNET',
'MAJOR_VERSION' => 'ALL',
'PDESC' => $PDESC,
'POWNER' => $UID,
'PTYPE' => 'UPDATE MASTER',
'PAPPROVEDATE' => $PAPPROVEDATE,
'PATCHCODE' => iconv("utf-8", "tis-620" ,$patchCode),
'UNINSTALL' => '$DONE=1;',
'PATCHCODE_SERVER' => '$DONE=1;',
];
DB::table('conf_smartupdate')->insert($data);
}
private function readTxt($filePath, $formatData, $ac, $limit = 10000, $noLimit = false)
{
$sqlPackAll = [];
$count = 0;
$fileHandle = fopen($filePath, "r");
while (!feof($fileHandle)) {
$text = fgets($fileHandle);
$text = iconv('TIS-620', 'UTF-8', $text);
$X = $Y = $Z = 0;
$primaryKeyConditions = [];
foreach ($formatData['primary_key'] as $keyIndex => $primaryKey) {
$fieldFormat = $formatData['format'][$keyIndex];
$type = $fieldFormat['TYPE'];
if (strpos($type, 'DE') !== false) {
$type = str_replace('DE', '', $type);
$type = (int) $type + 1;
}
$type = (int) filter_var($type, FILTER_SANITIZE_NUMBER_INT);
$fieldValue = mb_substr($text, $Y, $type, 'UTF-8');
$Y += $type;
if ($fieldFormat['FORMAT'] === 'date') {
$fieldValue = $this->convertDate($fieldValue);
}
$primaryKeyConditions[] = $primaryKey['FILD'] . " = '" . trim($fieldValue) . "'";
}
$select2[] = " WHERE ".implode(' AND ', $primaryKeyConditions);
$select[] = "SELECT * FROM " . $formatData['database'] . " ". " WHERE ".implode(' AND ', $primaryKeyConditions);
$insertFields = [];
$insertValues = [];
foreach ($formatData['format'] as $fieldFormat) {
$type = $fieldFormat['TYPE'];
if (strpos($type, 'DE') !== false) {
$type = str_replace('DE', '', $type);
$type = (int) $type + 1;
}
$type = (int) filter_var($type, FILTER_SANITIZE_NUMBER_INT);
$fieldValue = mb_substr($text, $X, $type, 'UTF-8');
$X += $type;
if ($fieldFormat['FORMAT'] === 'date') {
$fieldValue = $this->convertDate($fieldValue);
}
$insertFields[] = "`" . $fieldFormat['FILD'] . "`";
$insertValues[] = "'" . str_replace("'", "''", trim($fieldValue)) . "'";
}
$insert[] = "INSERT INTO " . $formatData['database'] . " (". implode(',', $insertFields) . ") VALUES (" . implode(',', $insertValues) . ")";
$update[] = $this->generateUpdateQuery($formatData['format'], $text, $Z, $formatData['primary_key']);
$sqlPack = [
'insert' => $insert,
'update' => $update,
'select' => $select,
'select2' => $select2,
'DATABASE' => $formatData['database'],
'counter' => $count+=1
];
$sqlPackAll[] = $sqlPack;
if ($this->noLimit && $this->limit > 10000) {
break;
} elseif ($this->limit >= $limit) {
break;
}
}
fclose($fileHandle);
return $sqlPackAll;
}
private function convertDate($datetime)
{
$year = substr($datetime, 4, 8) - 543;
$month = substr($datetime, 2, 2);
$day = substr($datetime, 0, 2);
return date("Y-m-d", mktime(0, 0, 0, $month, $day, $year));
}
private function generateUpdateQuery($formatData, $text, &$Z, $primaryKeys)
{
$update = "";
foreach ($formatData as $index => $fieldFormat) {
$type = $fieldFormat['TYPE'];
if (strpos($type, 'DE') !== false) {
$type = str_replace('DE', '', $type);
$type = (int) $type + 1;
}
$type = (int) filter_var($type, FILTER_SANITIZE_NUMBER_INT);
$fieldValue = mb_substr($text, $Z, $type, 'UTF-8');
$Z += $type;
if ($fieldFormat['FORMAT'] === 'date') {
$fieldValue = $this->convertDate($fieldValue);
}
if (!in_array($fieldFormat['FILD'], array_column($primaryKeys, 'FILD'))) {
if ($update != "") {
$update .= ", ";
}
$update .= "`" . $fieldFormat['FILD'] . "` = '" . str_replace("'", "''", trim($fieldValue)) . "'";
}
}
return $update;
}
public function render()
{
$this->formatFiles = ConfFormatFile::all();
return view('livewire.pages.patch.patch-master-file', with([
'formatFiles' => $this->formatFiles
]));
}
}
<?php return array (
'code-comparer' => 'App\\Http\\Livewire\\CodeComparer',
'delete-item-modal' => 'App\\Http\\Livewire\\DeleteItemModal',
'delete-modal' => 'App\\Http\\Livewire\\DeleteModal',
'main-container' => 'App\\Http\\Livewire\\MainContainer',
'navbar' => 'App\\Http\\Livewire\\Navbar',
'pages.company.company-create' => 'App\\Http\\Livewire\\Pages\\Company\\CompanyCreate',
'pages.company.company-edit' => 'App\\Http\\Livewire\\Pages\\Company\\CompanyEdit',
'pages.company.company-index' => 'App\\Http\\Livewire\\Pages\\Company\\CompanyIndex',
'pages.dischargeport.dischargeport-index' => 'App\\Http\\Livewire\\Pages\\Dischargeport\\DischargeportIndex',
'pages.dischargeport.dischargeport-upload' => 'App\\Http\\Livewire\\Pages\\Dischargeport\\DischargeportUpload',
'pages.exchangerate.exchangerate-create' => 'App\\Http\\Livewire\\Pages\\Exchangerate\\ExchangerateCreate',
'pages.exchangerate.exchangerate-edit' => 'App\\Http\\Livewire\\Pages\\Exchangerate\\ExchangerateEdit',
'pages.exchangerate.exchangerate-index' => 'App\\Http\\Livewire\\Pages\\Exchangerate\\ExchangerateIndex',
'pages.exchangerate.exchangerate-upload' => 'App\\Http\\Livewire\\Pages\\Exchangerate\\ExchangerateUpload',
'pages.format-file-master.file-create' => 'App\\Http\\Livewire\\Pages\\FormatFileMaster\\FileCreate',
'pages.format-file-master.file-index' => 'App\\Http\\Livewire\\Pages\\FormatFileMaster\\FileIndex',
'pages.group.group-create' => 'App\\Http\\Livewire\\Pages\\Group\\GroupCreate',
'pages.group.group-edit' => 'App\\Http\\Livewire\\Pages\\Group\\GroupEdit',
'pages.group.group-index' => 'App\\Http\\Livewire\\Pages\\Group\\GroupIndex',
'pages.parameter.parameter-create' => 'App\\Http\\Livewire\\Pages\\Parameter\\ParameterCreate',
'pages.parameter.parameter-edit' => 'App\\Http\\Livewire\\Pages\\Parameter\\ParameterEdit',
'pages.parameter.parameter-index' => 'App\\Http\\Livewire\\Pages\\Parameter\\ParameterIndex',
'pages.patch.modal-edit-code' => 'App\\Http\\Livewire\\Pages\\Patch\\ModalEditCode',
'pages.patch.modal-form-patch-file' => 'App\\Http\\Livewire\\Pages\\Patch\\ModalFormPatchFile',
'pages.patch.patch-create' => 'App\\Http\\Livewire\\Pages\\Patch\\PatchCreate',
'pages.patch.patch-edit' => 'App\\Http\\Livewire\\Pages\\Patch\\PatchEdit',
'pages.patch.patch-index' => 'App\\Http\\Livewire\\Pages\\Patch\\PatchIndex',
'pages.patch.patch-master-file' => 'App\\Http\\Livewire\\Pages\\Patch\\PatchMasterFile',
'pages.role.role-create' => 'App\\Http\\Livewire\\Pages\\Role\\RoleCreate',
'pages.role.role-edit' => 'App\\Http\\Livewire\\Pages\\Role\\RoleEdit',
'pages.role.role-index' => 'App\\Http\\Livewire\\Pages\\Role\\RoleIndex',
'pages.send-patch.delete-multi-patch' => 'App\\Http\\Livewire\\Pages\\SendPatch\\DeleteMultiPatch',
'pages.send-patch.delete-multi-patch-box' => 'App\\Http\\Livewire\\Pages\\SendPatch\\DeleteMultiPatchBox',
'pages.send-patch.delete-multi-patch-list' => 'App\\Http\\Livewire\\Pages\\SendPatch\\DeleteMultiPatchList',
'pages.send-patch.send-multi-patch-box' => 'App\\Http\\Livewire\\Pages\\SendPatch\\SendMultiPatchBox',
'pages.send-patch.send-multi-patch-list' => 'App\\Http\\Livewire\\Pages\\SendPatch\\SendMultiPatchList',
'pages.send-patch.send-patch-edit' => 'App\\Http\\Livewire\\Pages\\SendPatch\\SendPatchEdit',
'pages.send-patch.send-patch-index' => 'App\\Http\\Livewire\\Pages\\SendPatch\\SendPatchIndex',
'pages.server-license.server-license-create' => 'App\\Http\\Livewire\\Pages\\ServerLicense\\ServerLicenseCreate',
'pages.server-license.server-license-edit' => 'App\\Http\\Livewire\\Pages\\ServerLicense\\ServerLicenseEdit',
'pages.server-license.server-license-index' => 'App\\Http\\Livewire\\Pages\\ServerLicense\\ServerLicenseIndex',
'pages.user.user-create' => 'App\\Http\\Livewire\\Pages\\User\\UserCreate',
'pages.user.user-edit' => 'App\\Http\\Livewire\\Pages\\User\\UserEdit',
'pages.user.user-index' => 'App\\Http\\Livewire\\Pages\\User\\UserIndex',
);
\ No newline at end of file
...@@ -96,13 +96,13 @@ return [ ...@@ -96,13 +96,13 @@ return [
'temporary_file_upload' => [ 'temporary_file_upload' => [
'disk' => null, // Example: 'local', 's3' Default: 'default' 'disk' => null, // Example: 'local', 's3' Default: 'default'
'rules' => null, // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB) 'rules' => ['required', 'file', 'max:100000'], // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' Default 'livewire-tmp' 'directory' => null, // Example: 'tmp' Default 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1' 'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs. 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs.
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a', 'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma', 'jpg', 'jpeg', 'mpga', 'webp', 'wma', 'inc','php'
], ],
'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated. 'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated.
], ],
......
...@@ -31,4 +31,9 @@ return [ ...@@ -31,4 +31,9 @@ return [
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
], ],
'eec' => [
'url' => env('EEC_URL', '')
]
]; ];
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
@elseif ($currentContent === 'DischargePort') @elseif ($currentContent === 'DischargePort')
<livewire:pages.dischargeport.dischargeport-index /> <livewire:pages.dischargeport.dischargeport-index />
@elseif ($currentContent === 'MasterFile') @elseif ($currentContent === 'MasterFile')
<livewire:pages.masterfile.masterfile-index /> <livewire:pages.patch.patch-master-file/>
@elseif ($currentContent === 'FormatFileMaster') @elseif ($currentContent === 'FormatFileMaster')
<livewire:pages.format-file-master.file-index /> <livewire:pages.format-file-master.file-index />
@else @else
......
<div class="bg-main-container" x-data="{ notLimit: false }">
<div class="max-w-full mx-auto p-6">
<div class="flex justify-between items-center mb-6">
<h2 class="text-3xl font-semibold text-gray-800">Patch Master File</h2>
<a href="/patch" class="btn text-white bg-primary px-4 py-2 rounded hover:bg-primary-focus">
Back
</a>
</div>
<div class="bg-white p-6 rounded-lg shadow-md">
<div class="mb-4">
<label for="format_file_id" class="block text-gray-700 font-medium">Choose Format File</label>
<select id="format_file_id" wire:model.defer="format_file_id"
class="w-full mt-2 p-3 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary">
@foreach ($formatFiles as $format )
<option value="{{ $format->formatservice_ID }}">{{ $format->name }}</option>
@endforeach
</select>
</div>
<div class="mb-4">
<label for="upload_file" class="block text-gray-700 font-medium">Upload File Data</label>
<div class="flex items-center mt-2">
@if ($file)
<div class="text-sm text-gray-600 dark:text-gray-300 mr-4">
Uploaded File: {{ $file->getClientOriginalName() }}
</div>
@endif
<span wire:loading>
<svg class="animate-spin h-5 w-5 text-primary m-3" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4">
</circle>
<path class="opacity-75" fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.964 7.964 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
</path>
</svg>
</span>
<label for="file-upload"
class="btn bg-gray-200 text-gray-800 hover:bg-gray-300 focus:bg-gray-300 active:bg-gray-300 dark:bg-gray-500 dark:text-gray-50 dark:hover:bg-gray-450 dark:focus:bg-gray-450 dark:active:bg-gray-450/90">
<input tabindex="-1" id="file-upload" type="file" wire:model="file"
class="pointer-events-none absolute inset-0 h-full w-full opacity-0" />
<div class="flex items-center space-x-2">
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" />
</svg>
<span>Choose File</span>
</div>
@error('file')
<span class="text-red-600 text-sm mt-2">{{ $message }}</span>
@enderror
</label>
</div>
</div>
<div class="mb-4">
<label for="limit_data" class="block text-gray-700 font-medium">Limit Data per Patch</label>
<select id="limit_data" class="w-full mt-2 p-3 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary"
:disabled="notLimit" wire:model.defer="limit">
<option value="10000">10,000</option>
<!-- Add more options or use a loop to generate -->
</select>
<div class="mt-3">
<label class="inline-flex items-center">
<input class="form-checkbox is-basic h-4 w-4 rounded border-slate-400/70 checked:bg-primary checked:border-primary focus:bordark:bg-navy-900 dark:border-navy-500 dark:checked:bg-accent dark:checked:border-accent dark:hover:border-accent dark:focus:border-accent" type="checkbox"
x-model="notLimit" wire:model.defer="noLimit"/>
<span class="ml-2">Not Limit</span>
</label>
</div>
</div>
<div class="mb-4">
<label class="inline-flex items-center">
<input wire:model.defer="genWithSmartUpdate" class="form-checkbox is-basic h-4 w-4 rounded border-slate-400/70 checked:bg-primary checked:border-primary focus:border-primary dark:bg-navy-900 dark:border-navy-500 dark:checked:bg-accent dark:checked:border-accent dark:hover:border-accent dark:focus:border-accent" type="checkbox" value="">
<span class="ml-2">Gen patch ด้วย function spnsmartupdatedecode</span>
</label>
</div>
<div class="mb-4 flex items-center space-x-4">
<label class="inline-flex items-center">
<input wire:model.defer="createPatch" class="form-checkbox is-basic h-4 w-4 rounded border-slate-400/70 checked:bg-primary checked:border-primary focus:border-primary dark:bg-navy-900 dark:border-navy-500 dark:checked:bg-accent dark:checked:border-accent dark:hover:border-accent dark:focus:border-accent" type="checkbox" value="">
<span class="ml-2">Create Patch</span>
</label>
<label class="inline-flex items-center">
<input wire:model.defer="sendToEec" class="form-checkbox is-basic h-4 w-4 rounded border-slate-400/70 checked:bg-primary checked:border-primary focus:border-primary dark:bg-navy-900 dark:border-navy-500 dark:checked:bg-accent dark:checked:border-accent dark:hover:border-accent dark:focus:border-accent" type="checkbox" value="">
<span class="ml-2">Send To EEC</span>
</label>
</div>
<div class="text-right">
<button class="bg-primary text-white px-4 py-2 rounded-md hover:bg-primary-focus focus:outline-none focus:ring-2 focus:ring-primary focus:ring-opacity-50"
wire:click="createPatch">
Create Patch
</button>
</div>
</div>
</div>
</div>
<div class="bg-main-container"> <div class="bg-main-container">
<div class="max-w-full mx-auto px-5 "> <div class="max-w-full mx-auto p-5 ">
{{-- <div class="flex flex-wrap items-center"> --}} {{-- <div class="flex flex-wrap items-center"> --}}
<h2 class="text-2xl text-black "> <h2 class="text-2xl text-black ">
Server License Management Server License Management
......
<div class="border-0 shadow-none"> <div class="border-0 shadow-none ">
` <div wire:loading.class="" wire:loading.class.remove="hidden" wire:target="save" <div wire:loading.class="" wire:loading.class.remove="hidden" wire:target="save"
class="absolute inset-0 items-center justify-center z-50 bg-slate-50 dark:bg-navy-900 hidden"> class="absolute inset-0 items-center justify-center z-50 bg-slate-50 dark:bg-navy-900 hidden">
<div class="flex justify-center items-center "> <div class="flex justify-center items-center ">
<div class="items-center h-100vh" style="align-content: center;"> <div class="items-center h-100vh" style="align-content: center;">
......
...@@ -16,6 +16,7 @@ use App\Http\Controllers\CompanyController; ...@@ -16,6 +16,7 @@ use App\Http\Controllers\CompanyController;
use App\Http\Controllers\ConfigOptionController; use App\Http\Controllers\ConfigOptionController;
use App\Http\Controllers\ExchangeRateController; use App\Http\Controllers\ExchangeRateController;
use App\Http\Controllers\ConsigneeController; use App\Http\Controllers\ConsigneeController;
use App\Http\Controllers\ConvertToJsonController;
use App\Http\Controllers\DeletePatchController; use App\Http\Controllers\DeletePatchController;
use App\Http\Controllers\DischargePortController; use App\Http\Controllers\DischargePortController;
use App\Http\Controllers\FormatFileMasterContrller; use App\Http\Controllers\FormatFileMasterContrller;
...@@ -51,7 +52,7 @@ Route::middleware('guest')->group(function () { ...@@ -51,7 +52,7 @@ Route::middleware('guest')->group(function () {
Route::middleware('auth')->group(function () { Route::middleware('auth')->group(function () {
Route::post('/logout', [\App\Http\Controllers\AuthController::class, 'logout'])->name('logout'); Route::post('/logout', [\App\Http\Controllers\AuthController::class, 'logout'])->name('logout');
Route::get('/convert-to-json', [ConvertToJsonController::class, 'convert']);
Route::get('/', [HomeController::class, 'index'])->name('index'); Route::get('/', [HomeController::class, 'index'])->name('index');
Route::get('/get-serverlicense', [ServerLicenseController::class, 'getAllServerKey']); Route::get('/get-serverlicense', [ServerLicenseController::class, 'getAllServerKey']);
......
<?php
$DATABASE='master_permissiongoods';
$PKEY[0]['FILD'] = 'tariffClass';
$PKEY[1]['FILD'] = 'tariffStat';
$PKEY[2]['FILD'] = 'startDate';
$PKEY[3]['FILD'] = 'permissionGoodsType';
$PKEY[4]['FILD'] = 'companyTaxNo';
$FORMAT[0]['NAME']='TariffClassification';
$FORMAT[0]['TYPE']='12A';
$FORMAT[0]['FILD']='tariffClass';
$FORMAT[1]['NAME']='Tariff Stat';
$FORMAT[1]['TYPE']='3A';
$FORMAT[1]['FILD']='tariffStat';
$FORMAT[2]['NAME']='Permission Goods Type';
$FORMAT[2]['TYPE']='2A';
$FORMAT[2]['FILD']='permissionGoodsType';
$FORMAT[3]['NAME']='Company Tax Number';
$FORMAT[3]['TYPE']='17A';
$FORMAT[3]['FILD']='companyTaxNo';
$FORMAT[4]['NAME']='Validate Indicator';
$FORMAT[4]['TYPE']='2A';
$FORMAT[4]['FILD']='validateIndicator';
$FORMAT[5]['NAME']='countryCode';
$FORMAT[5]['TYPE']='2A';
$FORMAT[5]['FILD']='countryCode';
$FORMAT[6]['NAME']='Quantity';
$FORMAT[6]['TYPE']='15N';
$FORMAT[6]['FILD']='quantity';
$FORMAT[7]['NAME']='Quantity Unit';
$FORMAT[7]['TYPE']='3A';
$FORMAT[7]['FILD']='quantityUnit';
$FORMAT[8]['NAME']='Permission Goods Thai Description';
$FORMAT[8]['TYPE']='512A';
$FORMAT[8]['FILD']='thDescription';
$FORMAT[9]['NAME']='Permission Goods English Description';
$FORMAT[9]['TYPE']='512A';
$FORMAT[9]['FILD']='enDescription';
$FORMAT[10]['NAME']='Condition';
$FORMAT[10]['TYPE']='512A';
$FORMAT[10]['FILD']='condition';
$FORMAT[11]['NAME']='Announce Number';
$FORMAT[11]['TYPE']='10N';
$FORMAT[11]['FILD']='announceNo';
$FORMAT[12]['NAME']='Announce Date';
$FORMAT[12]['TYPE']='8N';
$FORMAT[12]['FILD']='announceDate';
$FORMAT[13]['NAME']='Start Date';
$FORMAT[13]['TYPE']='8N';
$FORMAT[13]['FILD']='startDate';
$FORMAT[14]['NAME']='Expired Date';
$FORMAT[14]['TYPE']='8N';
$FORMAT[14]['FILD']='expiredDate';
?>
\ No newline at end of file
<?php
$DATABASE='master_permissiongoods';
$PKEY[0]['FILD'] = 'tariffClass';
$PKEY[1]['FILD'] = 'tariffStat';
$PKEY[2]['FILD'] = 'startDate';
$PKEY[3]['FILD'] = 'permissionGoodsType';
$PKEY[4]['FILD'] = 'companyTaxNo';
$FORMAT[0]['NAME']='TariffClassification';
$FORMAT[0]['TYPE']='12A';
$FORMAT[0]['FILD']='tariffClass';
$FORMAT[1]['NAME']='Tariff Stat';
$FORMAT[1]['TYPE']='3A';
$FORMAT[1]['FILD']='tariffStat';
$FORMAT[2]['NAME']='Permission Goods Type';
$FORMAT[2]['TYPE']='2A';
$FORMAT[2]['FILD']='permissionGoodsType';
$FORMAT[3]['NAME']='Company Tax Number';
$FORMAT[3]['TYPE']='17A';
$FORMAT[3]['FILD']='companyTaxNo';
$FORMAT[4]['NAME']='Validate Indicator';
$FORMAT[4]['TYPE']='2A';
$FORMAT[4]['FILD']='validateIndicator';
$FORMAT[5]['NAME']='countryCode';
$FORMAT[5]['TYPE']='2A';
$FORMAT[5]['FILD']='countryCode';
$FORMAT[6]['NAME']='Quantity';
$FORMAT[6]['TYPE']='15N';
$FORMAT[6]['FILD']='quantity';
$FORMAT[7]['NAME']='Quantity Unit';
$FORMAT[7]['TYPE']='3A';
$FORMAT[7]['FILD']='quantityUnit';
$FORMAT[8]['NAME']='Permission Goods Thai Description';
$FORMAT[8]['TYPE']='3000A';
$FORMAT[8]['FILD']='thDescription';
$FORMAT[9]['NAME']='Permission Goods English Description';
$FORMAT[9]['TYPE']='3000A';
$FORMAT[9]['FILD']='enDescription';
$FORMAT[10]['NAME']='Condition';
$FORMAT[10]['TYPE']='512A';
$FORMAT[10]['FILD']='condition';
$FORMAT[11]['NAME']='Announce Number';
$FORMAT[11]['TYPE']='10N';
$FORMAT[11]['FILD']='announceNo';
$FORMAT[12]['NAME']='Announce Date';
$FORMAT[12]['TYPE']='8N';
$FORMAT[12]['FILD']='announceDate';
$FORMAT[13]['NAME']='Start Date';
$FORMAT[13]['TYPE']='8N';
$FORMAT[13]['FILD']='startDate';
$FORMAT[14]['NAME']='Expired Date';
$FORMAT[14]['TYPE']='8N';
$FORMAT[14]['FILD']='expiredDate';
?>
\ No newline at end of file
<?php
$DATABASE='master_tariff';
$PKEY[0]['FILD']='tariffclas';
$FORMAT[0]['NAME']='TariffClassification';
$FORMAT[0]['TYPE']='12N';
$FORMAT[0]['FILD']='tariffclas';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='TariffDescription';
$FORMAT[1]['TYPE']='3000A';
$FORMAT[1]['FILD']='tdesc1';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='TariffEnglishDescription';
$FORMAT[2]['TYPE']='3000A';
$FORMAT[2]['FILD']='edesc1';
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='StartDate';
$FORMAT[3]['TYPE']='8N';
$FORMAT[3]['FILD']='startdate';
$FORMAT[3]['FORMAT']='';
$FORMAT[4]['NAME']='FinishDate';
$FORMAT[4]['TYPE']='8N';
$FORMAT[4]['FILD']='finishdate';
$FORMAT[4]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_statcode';
$PKEY[0]['FILD']='tariffclas';
$PKEY[1]['FILD']='tariffstat';
$FORMAT[0]['NAME']='TariffClassification';
$FORMAT[0]['TYPE']='12N';
$FORMAT[0]['FILD']='tariffclas';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='StatisticalCode';
$FORMAT[1]['TYPE']='3N';
$FORMAT[1]['FILD']='tariffstat';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='StatisticalDescription';
$FORMAT[2]['TYPE']='256A';
$FORMAT[2]['FILD']='desc1';
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='StatisticalEnglishDescription';
$FORMAT[3]['TYPE']='256A';
$FORMAT[3]['FILD']='desc2';
$FORMAT[3]['FORMAT']='';
$FORMAT[4]['NAME']='UnitCode';
$FORMAT[4]['TYPE']='3A';
$FORMAT[4]['FILD']='unitcode';
$FORMAT[4]['FORMAT']='';
$FORMAT[5]['NAME']='AnnounceNumber';
$FORMAT[5]['TYPE']='10A';
$FORMAT[5]['FILD']='announceno';
$FORMAT[5]['FORMAT']='';
$FORMAT[6]['NAME']='AnnounceDate';
$FORMAT[6]['TYPE']='8N';
$FORMAT[6]['FILD']='announcedd';
$FORMAT[6]['FORMAT']='';
$FORMAT[7]['NAME']='StartDate';
$FORMAT[7]['TYPE']='8N';
$FORMAT[7]['FILD']='startdate';
$FORMAT[7]['FORMAT']='';
$FORMAT[8]['NAME']='FinishDate';
$FORMAT[8]['TYPE']='8N';
$FORMAT[8]['FILD']='finishdate';
$FORMAT[8]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_extariff';
$PKEY[0]['FILD']='extariff';
$PKEY[1]['FILD']='tariffseq';
$FORMAT[0]['NAME']='ExportTariff';
$FORMAT[0]['TYPE']='12A';
$FORMAT[0]['FILD']="extariff";
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='TariffSequence';
$FORMAT[1]['TYPE']='5N';
$FORMAT[1]['FILD']="tariffseq";
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='DutyCode';
$FORMAT[2]['TYPE']='1A';
$FORMAT[2]['FILD']="dutycode";
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='DutyRate';
$FORMAT[3]['TYPE']='17N DE3';
$FORMAT[3]['FILD']="advalrate";
$FORMAT[3]['FORMAT']='';
$FORMAT[4]['NAME']='SpecificDutyRate';
$FORMAT[4]['TYPE']='17N DE3';
$FORMAT[4]['FILD']="specrate";
$FORMAT[4]['FORMAT']='';
$FORMAT[5]['NAME']='SpecificCode';
$FORMAT[5]['TYPE']='3A';
$FORMAT[5]['FILD']="speccode";
$FORMAT[5]['FORMAT']='';
$FORMAT[6]['NAME']='Description';
$FORMAT[6]['TYPE']='3000A';
$FORMAT[6]['FILD']="desc1";
$FORMAT[6]['FORMAT']='';
$FORMAT[7]['NAME']='EnglishDescription';
$FORMAT[7]['TYPE']='3000A';
$FORMAT[7]['FILD']="desc3";
$FORMAT[7]['FORMAT']='';
$FORMAT[8]['NAME']='AnnounceNumber';
$FORMAT[8]['TYPE']='10A';
$FORMAT[8]['FILD']="announceno";
$FORMAT[8]['FORMAT']='';
$FORMAT[9]['NAME']='AnnounceDate';
$FORMAT[9]['TYPE']='8N';
$FORMAT[9]['FILD']="announcedd";
$FORMAT[9]['FORMAT']='';
$FORMAT[10]['NAME']='AnnounceDescription';
$FORMAT[10]['TYPE']='256A';
$FORMAT[10]['FILD']="announcedesc";
$FORMAT[10]['FORMAT']='';
$FORMAT[11]['NAME']='StartDate';
$FORMAT[11]['TYPE']='8N';
$FORMAT[11]['FILD']="startdate";
$FORMAT[11]['FORMAT']='';
$FORMAT[12]['NAME']='FinishDate';
$FORMAT[12]['TYPE']='8N';
$FORMAT[12]['FILD']="finishdate";
$FORMAT[12]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_imtariff';
$PKEY[0]['FILD']='imtariff';
$PKEY[1]['FILD']='tariffseq';
$FORMAT[0]['NAME']='TariffCode';
$FORMAT[0]['TYPE']='12A';
$FORMAT[0]['FILD']='imtariff';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='TariffSequence';
$FORMAT[1]['TYPE']='5N';
$FORMAT[1]['FILD']='tariffseq';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='DutyCode';
$FORMAT[2]['TYPE']='1A';
$FORMAT[2]['FILD']='dutycode';
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='DutyRate';
$FORMAT[3]['TYPE']='17N DE 3';
$FORMAT[3]['FILD']='advalrate';
$FORMAT[3]['FORMAT']='';
$FORMAT[4]['NAME']='SpecificDutyRate';
$FORMAT[4]['TYPE']='17N DE 3';
$FORMAT[4]['FILD']='specrate';
$FORMAT[4]['FORMAT']='';
$FORMAT[5]['NAME']='SpecificCode';
$FORMAT[5]['TYPE']='3A';
$FORMAT[5]['FILD']='speccode';
$FORMAT[5]['FORMAT']='';
$FORMAT[6]['NAME']='Description';
$FORMAT[6]['TYPE']='3000A';
$FORMAT[6]['FILD']='desc1';
$FORMAT[6]['FORMAT']='';
$FORMAT[7]['NAME']='EnglishDescription';
$FORMAT[7]['TYPE']='3000A';
$FORMAT[7]['FILD']='desc3';
$FORMAT[7]['FORMAT']='';
$FORMAT[8]['NAME']='AnnounceNumber';
$FORMAT[8]['TYPE']='10A';
$FORMAT[8]['FILD']='announceno';
$FORMAT[8]['FORMAT']='';
$FORMAT[9]['NAME']='AnnounceDate';
$FORMAT[9]['TYPE']='8N';
$FORMAT[9]['FILD']='announcedd';
$FORMAT[9]['FORMAT']='';
$FORMAT[10]['NAME']='AnnounceDescription';
$FORMAT[10]['TYPE']='256A';
$FORMAT[10]['FILD']='announcedesc';
$FORMAT[10]['FORMAT']='';
$FORMAT[11]['NAME']='Start Date';
$FORMAT[11]['TYPE']='8N';
$FORMAT[11]['FILD']='startdate';
$FORMAT[11]['FORMAT']='';
$FORMAT[12]['NAME']='FinishDate';
$FORMAT[12]['TYPE']='8N';
$FORMAT[12]['FILD']='finishdate';
$FORMAT[12]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_imduty';
$PKEY[0]['FILD']='tariffclas';
$PKEY[1]['FILD']='tariffseq';
$PKEY[2]['FILD']='privilege';
$FORMAT[0]['NAME']='TariffCode';
$FORMAT[0]['TYPE']='12N';
$FORMAT[0]['FILD']='tariffclas';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='TariffSequence';
$FORMAT[1]['TYPE']='5N';
$FORMAT[1]['FILD']='tariffseq';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='PrivilegeCode';
$FORMAT[2]['TYPE']='3A';
$FORMAT[2]['FILD']='privilege';
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='DutyCode';
$FORMAT[3]['TYPE']='1A';
$FORMAT[3]['FILD']='dutycode';
$FORMAT[3]['FORMAT']='';
$FORMAT[4]['NAME']='DutyRate';
$FORMAT[4]['TYPE']='17N DE 3';
$FORMAT[4]['FILD']='advalrate';
$FORMAT[4]['FORMAT']='';
$FORMAT[5]['NAME']='SpecificDutyRate';
$FORMAT[5]['TYPE']='17N DE 3';
$FORMAT[5]['FILD']='specrate';
$FORMAT[5]['FORMAT']='';
$FORMAT[6]['NAME']='SpecificCode';
$FORMAT[6]['TYPE']='3A';
$FORMAT[6]['FILD']='speccode';
$FORMAT[6]['FORMAT']='';
$FORMAT[7]['NAME']='AnnounceNumber';
$FORMAT[7]['TYPE']='10A';
$FORMAT[7]['FILD']='announceno';
$FORMAT[7]['FORMAT']='';
$FORMAT[8]['NAME']='AnnounceDate';
$FORMAT[8]['TYPE']='8N';
$FORMAT[8]['FILD']='announcedd';
$FORMAT[8]['FORMAT']='';
$FORMAT[9]['NAME']='AnnounceDescription';
$FORMAT[9]['TYPE']='256A';
$FORMAT[9]['FILD']='desc1';
$FORMAT[9]['FORMAT']='';
$FORMAT[10]['NAME']='Start Date';
$FORMAT[10]['TYPE']='8N';
$FORMAT[10]['FILD']='startdate';
$FORMAT[10]['FORMAT']='';
$FORMAT[11]['NAME']='FinishDate';
$FORMAT[11]['TYPE']='8N';
$FORMAT[11]['FILD']='finishdate';
$FORMAT[11]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_country';
$PKEY[0]['FILD']='code';
$FORMAT[0]['NAME']='Code';
$FORMAT[0]['TYPE']='2A';
$FORMAT[0]['FILD']='code';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='Name';
$FORMAT[1]['TYPE']='72A';
$FORMAT[1]['FILD']='name';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='currency';
$FORMAT[2]['TYPE']='3A';
$FORMAT[2]['FILD']='currency';
$FORMAT[2]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_country';
$PKEY[0]['FILD']='code';
$FORMAT[0]['NAME']='Code';
$FORMAT[0]['TYPE']='2A';
$FORMAT[0]['FILD']='code';
$FORMAT[0]['FORMAT']='';
$FORMAT[1]['NAME']='Name';
$FORMAT[1]['TYPE']='35A';
$FORMAT[1]['FILD']='name';
$FORMAT[1]['FORMAT']='';
$FORMAT[2]['NAME']='currency';
$FORMAT[2]['TYPE']='3A';
$FORMAT[2]['FILD']='currency';
$FORMAT[2]['FORMAT']='';
$FORMAT[3]['NAME']='wtocountry';
$FORMAT[3]['TYPE']='1A';
$FORMAT[3]['FILD']='wtocountry';
$FORMAT[3]['FORMAT']='';
?>
\ No newline at end of file
<?php
$DATABASE='master_privilege';
$PKEY[0]['FILD']='code';
$FORMAT[0]['NAME']='code';
$FORMAT[0]['TYPE']='3A';
$FORMAT[0]['FILD']='code';
$FORMAT[1]['NAME']='desc1';
$FORMAT[1]['TYPE']='256A';
$FORMAT[1]['FILD']='desc1';
$FORMAT[2]['NAME']='announceno';
$FORMAT[2]['TYPE']='10A';
$FORMAT[2]['FILD']='announceno';
$FORMAT[3]['NAME']='announcedd';
$FORMAT[3]['TYPE']='8A';
$FORMAT[3]['FILD']='announcedd';
$FORMAT[4]['NAME']='announcedesc';
$FORMAT[4]['TYPE']='256A';
$FORMAT[4]['FILD']='announcedesc';
$FORMAT[5]['NAME']='startdate';
$FORMAT[5]['TYPE']='8A';
$FORMAT[5]['FILD']='startdate';
$FORMAT[6]['NAME']='finishdate';
$FORMAT[6]['TYPE']='8A';
$FORMAT[6]['FILD']='finishdate';
?>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment