portal.mkgtu.ru/backend/views/scan/index.php

535 lines
21 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use backend\models\search\UserSearch;
use common\models\Attachment;
use common\models\AttachmentType;
use kartik\grid\GridView;
use yii\data\ActiveDataProvider;
use yii\grid\ActionColumn;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Url;
use yii\web\View;
use yii\widgets\ActiveForm;
$this->title = 'Настройка скан-копий';
$additionalParamsForScanTable = [
'id',
'name',
[
'attribute' => 'related_entity',
'value' => 'relatedTitle',
],
[
'attribute' => 'required',
'value' => 'requiredLabel',
],
[
'attribute' => 'hidden',
'value' => 'hiddenLabel',
],
[
'attribute' => 'allow_delete_file_after_app_approve',
'value' => 'allowDeleteFileLabel',
],
[
'attribute' => 'allow_add_new_file_after_app_approve',
'value' => 'allowAddNewFileLabel',
],
];
?>
<?php $scans_msg = Yii::$app->session->get('scans-msg');
if (isset($scans_msg)) : ?>
<div class="alert alert-warning">
<p><?= $scans_msg ?></p>
</div>
<?php endif; ?>
<?php $scans_error = Yii::$app->session->get('scans-error');
if (isset($scans_error)) : ?>
<div class="alert alert-danger">
<p><?= $scans_error ?></p>
</div>
<?php endif; ?>
<?php if (isset($conflictsPKs) && $conflictsPKs) : ?>
<div class="alert alert-warning">
<p>
Обнаружены конфликты при определении типов скан-копий документов. Пожалуйста, укажите корректный тип
документа на основании существующих скан-копий документов поступающих.
</p>
</div>
<?php $fileErr = Yii::$app->session->get('fileError');
if (isset($fileErr)) : ?>
<div class="alert alert-danger">
<p><?= $fileErr ?></p>
</div>
<?php endif; ?>
<div>
<ul class="nav nav-tabs" role="tablist">
<?php
$active = false;
foreach ($conflictsPKs as $campaignRefUid => $campaign) : ?>
<li role="presentation" class="nav-item <?php if ($active == false) {
echo "active";
$active = true;
} ?>">
<a class="nav-link" href="#<?= $campaignRefUid ?>" aria-controls="<?= $campaignRefUid ?>" role="tab" data-toggle="tab">
<?= $campaign ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<div class="tab-content">
<?php $active = false;
foreach ($conflictsPKs as $campaignRefUid => $campaign) : ?>
<div role="tabcard" class="tab-pane <?php if ($active == false) {
echo "active";
$active = true;
} ?>" id="<?= $campaignRefUid ?>">
<div>
<ul class="nav nav-pills" role="tablist">
<?php
$conflictsTypes = [];
$confs = Attachment::find()
->leftJoin('attachment_type', 'attachment_type.id = attachment.attachment_type_id')
->where(['attachment_type.id' => null])
->all();
foreach ($confs as $conf) {
if (ArrayHelper::getValue($conf, 'application.type.campaign.referenceType.reference_uid') == $campaignRefUid) {
$conflictsTypes[] = $conf->attachment_type_id;
}
}
$conflictsTypes = array_unique($conflictsTypes);
$selectableTypes = [];
foreach (AttachmentType::find()
->joinWith('admissionCampaignRef admission_campaign_ref', false)
->where(['from1c' => true])->andWhere(['is_using' => true])->andWhere(['admission_campaign_ref.reference_uid' => $campaignRefUid])->all() as $type) {
$selectableTypes[$type->id] = $type->name . " (из 1С)";
}
foreach (AttachmentType::find()
->joinWith('admissionCampaignRef admission_campaign_ref', false)
->where(['from1c' => true])->andWhere(['is_using' => false])->andWhere(['admission_campaign_ref.reference_uid' => $campaignRefUid])->all() as $type) {
$selectableTypes[$type->id] = $type->name . " (из 1С, архивная)";
}
foreach (AttachmentType::find()->where(['from1c' => [null, false]])->all() as $type) {
$selectableTypes[$type->id] = $type->name . " (из портала)";
}
foreach ($conflictsTypes as $key => $type) : ?>
<li role="presentation" class="nav-item <?= $key == 0 ? 'active' : '' ?>">
<a class="nav-link" href="#conflict-<?= $type ?>" aria-controls="conflict-<?= $type ?>" role="tab" data-toggle="tab">Конфликт справочника №<?= $type ?></a>
</li>
<?php endforeach; ?>
</ul>
<div class="tab-content">
<?php foreach ($conflictsTypes as $key => $type) : ?>
<div role="tabcard" class="tab-pane fade <?= $key == 0 ? 'in active' : '' ?>" id="conflict-<?= $type ?>">
<div class="row">
<div class="col-12">
<div class="row" style="padding: 20px">
<?php echo Html::beginForm(Url::to(['/scan/solve-conflict', 'id' => $type])); ?>
<div class="col-md-6 col-12 d-flex justify-content-start align-items-end">
<label for="type" style="margin-bottom: 0; margin-right: 20px">
Заменить на
<?php echo Html::dropDownList('type', 'null', $selectableTypes, ['class' => 'form-control']); ?>
</label>
<?php echo Html::submitButton('Заменить', ['class' => 'btn btn-success']) ?>
</div>
<?php echo Html::endForm(); ?>
</div>
</div>
</div>
<div class="row">
<div class="col-12" style="padding: 20px; max-height: 600px; overflow-y: scroll">
<?php echo GridView::widget([
'hover' => true,
'headerContainer' => ['class' => 'thead-light'],
'tableOptions' => ['class' => 'table-sm'],
'striped' => false,
'summary' => false,
'pager' => [
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
],
'dataProvider' => new ActiveDataProvider([
'query' => $conflicts->andWhere(['attachment_type_id' => $type]),
]),
'columns' => [
'id',
'questionary_id',
'application_id',
'file',
[
'attribute' => 'id',
'label' => 'Действия',
'format' => 'raw',
'value' => function ($model) {
$links = Html::a('<i class="fa fa-save"></i> Скачать', Url::toRoute(['download', 'id' => $model->id]), ['class' => 'btn btn-link']);
return Html::tag('div', $links, ['class' => 'd-flex flex-column']);
}
]
],
]) ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<hr>
<?php $form = ActiveForm::begin(['id' => 'sort-scan-form', 'action' => 'set-scan-sort', 'options' => ['class' => 'form-inline']]);
$items = [
'0' => 'не сортировать',
'1' => 'сортировать по алфавиту',
'2' => 'по ID',
'3' => 'как в интерфейсе администратора'
];
$params = [
'prompt' => 'Выберите сортировку по умолчанию...',
'class' => 'form-control',
]; ?>
<div class="row">
<div class="col-12">
<div class="form-group">
<?= Html::dropDownList('order', $orderValue, $items, $params); ?>
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
</div>
</div>
</div>
<?php ActiveForm::end(); ?>
<h3>Скан-копии</h3>
<span>
<a class='btn btn-success' href="<?php echo Url::toRoute('scan/create'); ?>">
Добавить скан-копию
</a>
</span>
<span>
<button class="btn btn-outline-secondary" id="up-sort" data-toggle="tooltip" title="Переместить выше">
<i class="fa fa-caret-up"></i>
</button>
</span>
<span>
<button class="btn btn-outline-secondary" id="down-sort" data-toggle="tooltip" title="Переместить ниже">
<i class="fa fa-caret-down"></i>
</button>
</span>
<?php echo GridView::widget([
'hover' => true,
'headerContainer' => ['class' => 'thead-light'],
'tableOptions' => ['class' => 'table-sm'],
'striped' => false,
'summary' => false,
'pager' => [
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
],
'dataProvider' => $scansDataProvider,
'options' => ['id' => 'scan-copy'],
'rowOptions' => function ($model) {
return ['style' => 'cursor: pointer;'];
},
'columns' => array_merge(
$additionalParamsForScanTable,
[[
'class' => ActionColumn::class,
'template' => '{update} {restore} {delete}',
'contentOptions' => ['class' => 'actions'],
'buttons' => [
'restore' => function ($url, $model) {
if (!$model->hidden) {
return '';
}
return Html::a('<i class="fa fa-undo"></i>', ['/scan/restore', 'scan_id' => $model->id], [
'title' => 'Восстановить',
'data-confirm' => 'Вы уверены что хотите вернуть из архива эту скан-копию?',
'data-method' => 'post',
]);
}
],
]]
),
]); ?>
<h3 style="margin-top: 50px">Скан-копии для индивидуальных достижений</h3>
<span>
<a class='btn btn-success' href="<?php echo Url::toRoute('ia-document-type/create'); ?>">
Добавить скан-копию И.Д.
</a>
</span>
<span>
<button class="btn btn-outline-secondary" id="ia-up-sort" data-toggle="tooltip" title="Переместить выше">
<i class="fa fa-caret-up"></i>
</button>
</span>
<span>
<button class="btn btn-outline-secondary" id="ia-down-sort" data-toggle="tooltip" title="Переместить ниже">
<i class="fa fa-caret-down"></i>
</button>
</span>
<?php echo GridView::widget([
'hover' => true,
'headerContainer' => ['class' => 'thead-light'],
'tableOptions' => ['class' => 'table-sm'],
'striped' => false,
'summary' => false,
'pager' => [
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
],
'dataProvider' => $iaDocTypes,
'options' => ['id' => 'ia-scan-copy'],
'rowOptions' => function ($model) {
return ['style' => 'cursor: pointer;'];
},
'columns' => [
'id',
'documentDescription',
[
'attribute' => 'scan_required',
'value' => 'requiredLabel',
],
[
'label' => 'Приемная кампания',
'attribute' => 'campaign.name',
'value' => 'campaign.name',
],
[
'label' => 'Связанная сущность',
'attribute' => 'availableDocumentTypeFilterRef.0.reference_name',
'value' => 'availableDocumentTypeFilterRef.0.reference_name',
],
[
'class' => ActionColumn::class,
'template' => '{update} {delete}',
'controller' => 'ia-document-type',
'contentOptions' => ['class' => 'actions'],
]
],
]); ?>
<h3 style="margin-top: 50px">Типы скан-копий из 1С</h3>
<ul class="nav nav-tabs" role="tablist">
<?php foreach ($admissionCampaigns as $key => $campaign) : ?>
<li role="presentation" class="nav-item <?= $key == 0 ? 'active' : '' ?>">
<a class="nav-link" href="#camp-<?= $campaign->referenceType->reference_uid ?>" aria-controls="camp-<?= $campaign->referenceType->reference_uid ?>" role="tab" data-toggle="tab">
<?= $campaign->name ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<div class="tab-content">
<?php foreach ($admissionCampaigns as $key => $campaign) : ?>
<div role="tabcard" class="tab-pane <?= $key == 0 ? 'active' : '' ?>" id="camp-<?= $campaign->referenceType->reference_uid ?>">
<span>
<button class="btn btn-outline-secondary" id="1c-up-sort" data-toggle="tooltip" title="Переместить выше">
<iconv_mime_encode class="fa fa-caret-up"></iconv_mime_encode>
</button>
</span>
<span>
<button class="btn btn-outline-secondary" id="1c-down-sort" data-toggle="tooltip" title="Переместить ниже">
<i class="fa fa-caret-down"></i>
</button>
</span>
<?php echo GridView::widget([
'hover' => true,
'headerContainer' => ['class' => 'thead-light'],
'tableOptions' => ['class' => 'table-sm'],
'striped' => false,
'summary' => false,
'pager' => [
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
],
'dataProvider' => new ActiveDataProvider([
'query' => AttachmentType::find()
->where(['from1c' => true])
->joinWith('admissionCampaignRef admission_campaign_ref')
->andWhere(['admission_campaign_ref.reference_uid' => $campaign->referenceType->reference_uid])
->andWhere(['is_using' => true])
->orderBy('custom_order'),
'pagination' => false
]),
'layout' => "{items}\n{pager}",
'rowOptions' => function ($model) {
return ['style' => 'cursor: pointer;'];
},
'columns' => array_merge(
$additionalParamsForScanTable,
[[
'class' => ActionColumn::class,
'contentOptions' => ['class' => 'actions'],
'template' => '{update}',
]]
),
]); ?>
</div>
<?php endforeach; ?>
</div>
<?php
$js = <<<JS
function f(obj, action) {
var array_row = [];
obj.each(function () {
array_row.push($(this).data("key"));
});
$.ajax({
url: action,
type: "POST",
data: {
arrayData: array_row.toString()
},
success: function success(res) {
console.log(res);
},
error: function error(res) {
console.error(res);
}
});
}
var mainBody = $("body");
mainBody.on("click", '.tab-content .tab-pane tbody tr td:not(".actions")', function (e) {
e.preventDefault();
$(".tab-content .tab-pane").find(".danger").removeClass("danger");
var thr = $(this).closest("tr");
thr.addClass("danger");
});
mainBody.on("click", "#1c-up-sort", function () {
var thisRow = $(".tab-content .tab-pane.active").find(".danger");
var prevRow = thisRow.prev();
if (prevRow.length) {
prevRow.before(thisRow);
f($(".tab-content .tab-pane.active tbody tr"), "sort-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
mainBody.on("click", "#1c-down-sort", function () {
var thisRow = $(".tab-content .tab-pane.active").find(".danger");
var nextRow = thisRow.next();
if (nextRow.length) {
nextRow.after(thisRow);
f($(".tab-content .tab-pane.active tbody tr"), "sort-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
$("#scan-copy tbody tr td")
.not(".actions")
.on("click", function (e) {
e.preventDefault();
$("#scan-copy").find(".danger").removeClass("danger");
var thr = $(this).closest("tr");
thr.addClass("danger");
});
$("#ia-scan-copy tbody tr td")
.not(".actions")
.on("click", function (e) {
e.preventDefault();
$("#ia-scan-copy").find(".danger").removeClass("danger");
var thr = $(this).closest("tr");
thr.addClass("danger");
});
$("#up-sort").on("click", function () {
var thisRow = $("#scan-copy").find(".danger");
var prevRow = thisRow.prev();
if (prevRow.length) {
prevRow.before(thisRow);
f($("#scan-copy tbody tr"), "sort-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
$("#down-sort").on("click", function () {
var thisRow = $("#scan-copy").find(".danger");
var nextRow = thisRow.next();
if (nextRow.length) {
nextRow.after(thisRow);
f($("#scan-copy tbody tr"), "sort-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
$("#ia-up-sort").on("click", function () {
var thisRow = $("#ia-scan-copy").find(".danger");
var prevRow = thisRow.prev();
if (prevRow.length) {
prevRow.before(thisRow);
f($("#ia-scan-copy tbody tr"), "sort-ia-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
$("#ia-down-sort").on("click", function () {
var thisRow = $("#ia-scan-copy").find(".danger");
var nextRow = thisRow.next();
if (nextRow.length) {
nextRow.after(thisRow);
f($("#ia-scan-copy tbody tr"), "sort-ia-scan-copys");
} else {
alert("Необходимо выбрать строку для сортировки");
}
});
JS;
$this->registerJs($js,);