Joywork/docs.php
2026-05-22 21:21:54 +03:00

642 lines
30 KiB
PHP
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
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
if(!$_SESSION['id']) { header("location:index.php"); die("Доступ запрещён!");}
$get = clearInputData($_GET);
require($_SERVER['DOCUMENT_ROOT']."/templates/new-header.php");
?>
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">-->
<link rel="stylesheet" href="/css/jquery.fileupload.css">
<div class="content-right" style="min-height: 100%;">
<div class="inner">
<div class="main-title">
<h1>Документы</h1>
</div>
<div class="main-title">
<p style="font-size: 16px;">В данном разделе вы можете сохранить документы Вашей компании для доступа к ним всех сотрудников: договоры, соглашения и др.</p>
</div>
<div class="my-docs flat__modal">
<div class="add-folder" style="padding: 20px 20px 0px 20px">
<?php
if(isset($hasRestrictedAccess) && $hasRestrictedAccess){ ?>
<a href="javascript:{}" class="tab tab__new-object" onclick="trialperiod.modalDoc();">
<i class="ti-plus"></i><span>Новая папка</span>
</a>
<?php
} else {
?>
<a href="javascript:{}" class="tab tab__new-object new_folder_add">
<i class="ti-plus"></i><span>Новая папка</span>
</a>
<?php } ?>
</div>
<div class="tabs__content" style="display: none; padding: 20px" id="docs_info_tab">
</div>
</div>
<div class="control-groups" style="padding-top: 40px;">
<div class="main-title">
<h1>Интерактивные документы</h1>
</div>
<div class="main-title">
<p style="font-size: 16px;">В данном разделе вы можете создавать бланки документов Вашей компании, которые позже могут быть заполнены данными из карточки объекта или клиента.</p>
</div>
<div class="control-group first-level" id="inner_blanks_list" style="border-bottom: none;padding-bottom: 0px !important;">
<h2 style="position: sticky; top:0; padding: 15px 0; background: white;">Бланки документов</h2>
<div class="docs">
<div class="docs-list blanks">
<table>
<thead>
<tr>
<th></th>
<th>Название бланка</th>
<th>Тип бланка</th>
<th>Автор</th>
<th>Дата/время</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="6" style="text-align: center;">Нет сохранённых бланков</td>
</tr>
</tbody>
</table>
</div>
<div class="clear"></div>
<div class="bottom">
<?php
if(isset($hasRestrictedAccess) && $hasRestrictedAccess){ ?>
<a class="fr-btn steel" onclick="trialperiod.modalDoc();" href="javascript:{};">
<i class="ti-plus"></i><span> Создать бланк</span>
</a>
<?php
} else { ?>
<a class="fr-btn steel" onclick="createNewInnerBlank();" href="javascript:{};">
<i class="ti-plus"></i><span> Создать бланк</span>
</a>
<?php } ?>
<?php if ($_SESSION['agency'] > 0 || $_SESSION['manager'] > 0 || $_SESSION['users_admin'] > 0) { ?>
<a class="fr-btn steel" onclick="addInnerFields();" href="javascript:{};" style="margin-right: 15px;">
<i class="ti-pencil"></i><span> Редактор переменных</span>
</a>
<?php } ?>
</div>
<div class="clear"></div>
</div>
</div>
<div class="control-group first-level" id="inner_docs_list">
<h2 style="position: sticky; top:0; padding: 15px 0; background: white;">Сохранённые документы</h2>
<div class="docs">
<div class="docs-list docs">
<table>
<thead>
<tr>
<th></th>
<th>Название документа</th>
<th>Основной бланк</th>
<th>Автор</th>
<th>Дата/время</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="6" style="text-align: center;">Нет сохранённых документов</td>
</tr>
</tbody>
</table>
<div class="clear"></div>
</div>
<div class="bottom">
<?php
if(isset($hasRestrictedAccess) && $hasRestrictedAccess){ ?>
<a class="fr-btn steel"
onclick="trialperiod.modalDoc();"
href="javascript:{};">
<i class="ti-plus"></i><span> Создать документ</span>
</a>
<?php
} else { ?>
<a class="fr-btn steel"
onclick="createNewInnerDoc();"
href="javascript:{};">
<i class="ti-plus"></i><span> Создать документ</span>
</a>
<?php } ?>
</div>
<div class="clear"></div>
</div>
</div>
</div>
<div class="object-content__preloader" style="display: block;">
<img src="../images/rocket-spinner.svg" width="96px">
</div>
</div>
</div>
<script>
$(document).ready(function() {
get_folders();
getInnerBlanks();
getInnerDocs();
});
</script>
<div class="full_modal-bg" id="folder_add_bg" style="display: none">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="full_modal edit-modal" id="folder_add" style="display: none;">
<form id="form_add_folder" class="form-validate" method="post">
<div class="modal-inner">
<h2>Новая папка</h2>
<div class="form-block">
<div class="label">Наименование</div>
<div class="inputs">
<div class="button-row">
<input type="text" class="text" required name="name" value="">
<div class="clear"></div>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Права на папку</div>
<div class="filter-popup-input">
<div class="crm__filter-input">
<select id="filter-perm-doc-type" multiple name="perm_folder">
<?php
$sql = 'SELECT * FROM `users` WHERE `id_manager` = '.$_SESSION["agency_id"].' order by id desc';
$q = mysql_query($sql);
while ($row = mysql_fetch_assoc($q)) {
echo '<option data-op="'.$row["last_name"].' '.$row["first_name"].' '.$row["middle_name"].'"value="'.$row["id"].'">'.$row["last_name"].' '.$row["first_name"].' '.$row["middle_name"].'</option>';
}
?>
</select>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="modal-submit">
<input type="hidden" name="user_id" id="folder_idUser" value="<?php echo $_SESSION['id']; ?>">
<button type="submit">Добавить&nbsp;<i class="ti-angle-right"></i></button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" id="files_upload" style="display: none">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="container full_modal edit-modal" id="file_upload" style="display: none;">
<input id="fileupload_folder_id" type="hidden" value="">
<form id="form_add_folder" class="form-validate" method="post">
<div class="modal-inner">
<h2>Загрузка файлов</h2>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Выберите файлы...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" accept="video/*,image/*,.pdf,.doc,.docx,.zip,.rar" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
</div>
</form>
</div>
</div>
<script src="/js/jquery.fileupload.js"></script>
<div class="full_modal-bg" id="inner_blank_modal_bg" style="display: none">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="full_modal edit-modal" id="inner_blank_modal" style="display: none;">
<form id="inner_blank_form" class="form-validate" method="post">
<div class="modal-inner">
<h2 id="inner_blank_title">Новый бланк</h2>
<div class="error_msg hidden" style="width:100%;"></div>
<div class="jw-tabs">
<ul class="tabs__caption">
<li data-target="info" data-page="0" class="active">
<i class="tabs-li__icon info"><i class="ti-user"></i></i><span>Общие</span>
</li>
<li data-target="document" data-page="1">
<i class="tabs-li__icon document"><i class="ti-file"></i></i><span>Бланк документа</span>
</li>
</ul>
</div>
<div style="overflow: hidden;">
<div class="tabs__content info" style="display: block;">
<div class="form-block">
<div class="label">Название бланка</div>
<div class="inputs">
<div class="button-row">
<input type="text" class="text" name="name" value="" required>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Префикс договора
<span class="quest_funnel" style="font-size:18px;">
<a style="border-bottom: none;" onclick="prefixHelp();" href="javascript:{}"><i class="ti-help-alt"></i></a>
</span>
</div>
<div class="inputs">
<div class="button-row">
<input type="text" class="text" name="prefix_doc" value="" required>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Тип бланка</div>
<div class="inputs">
<div class="button-row">
<select type="text" class="text" name="type" required>
<option value="0">Не выбран</option>
<?php
$types = Docs::getBlankTypes();
foreach ($types as $value => $type) {
echo '<option value="'.$value.'">'.$type.'</option>';
}
?>
</select>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="tabs__content document" style="display: none;">
<textarea name="content" id="blankContent" rows="14" cols="80"></textarea>
<script>
$(document).ready(function () {
CKEDITOR.replace('blankContent', {
baseFloatZIndex: 99998,
height: $(window).height()/2.4,
toolbarGroups: [
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker', 'editing' ] },
{ name: 'forms', groups: [ 'forms' ] },
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'paragraph' ] },
{ name: 'links', groups: [ 'links' ] },
{ name: 'insert', groups: [ 'insert' ] },
'/',
{ name: 'styles', groups: [ 'styles' ] },
{ name: 'colors', groups: [ 'colors' ] },
{ name: 'tools', groups: [ 'tools' ] },
{ name: 'others', groups: [ 'others' ] },
],
removeButtons: 'Source,Save,NewPage,Form,Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,Language,Flash,Smiley,Iframe,About,ShowBlocks',
customValues: {
variablesList: getInnerVariables(true),
variablesListSob: getInnerVariables(true, 'infosob'),
},
extraPlugins: 'variablessob,variables,tableresize,docprefix',
});
});
</script>
</div>
<div class="clear"></div>
</div>
</div>
<div class="modal-submit">
<input type="hidden" name="user_id" value="<?php echo $_SESSION['id']; ?>">
<input type="hidden" name="blank_id" value="">
<button type="submit">Добавить&nbsp;<i class="ti-angle-right"></i></button>
</div>
<div id="modal-prefix-help" class="modal">
<div id="modal-content" class="modal-content">
<p></p>
<a id="prefixHelpClose" onclick="prefixHelpClose();">OK</a>
</div>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" id="inner_fields_modal_bg" style="display: none">
<span class="pseudo-link closer"><i class="ti-close"></i></span>
<div class="full_modal edit-modal" id="inner_fields_modal" style="display: none;">
<form id="inner_fields_form" class="form-validate" method="post">
<div class="modal-inner">
<h2 id="inner_blank_title">Переменные</h2>
<div class="error_msg hidden" style="width:100%;"></div>
<div class="variables-list"></div>
<div class="inputs" style="margin-top: 10px;">
<div class="inputs-group">
<input type="checkbox" name="show_system_vars" class="part_check" style="margin: 10px;float: left;">
<div class="label" style="line-height: 30px;">- отображать системные переменные</div>
</div>
</div>
<div id="variablesForm" class="variables-form">
<div class="error_msg hidden" style="width:100%;"></div>
<div class="form-block" style="margin-top: 20px;">
<a href="javascript:{}" id="add_variable" class="tab tab__new-variable">
<i class="ti-plus"></i> <span>Добавить переменную</span>
</a>
<div class="clear"></div>
</div>
</div>
<div class="clear"></div>
</div>
<div class="modal-submit">
<input type="hidden" name="user_id" value="<?php echo $_SESSION['id']; ?>">
<button type="submit">Сохранить&nbsp;<i class="ti-angle-right"></i></button>
</div>
</form>
</div>
</div>
<div id="inner_doc_modal_bg" class="chat-modal__bg hidden">
<div id="inner_doc_modal" class="chat-modal hidden">
<span class="pseudo-link closer-obj-events">
<i class="ti-close"></i>
</span>
<div class="chat-modal__inner">
<h2 id="inner_blank_title">Новый документ</h2>
<div class="error_msg hidden" style="width:100%;"></div>
<form id="inner_doc_form" class="form-validate" method="post">
<!--<div class="form-block">
<div class="label">
Клиент
</div>
<div class="inputs">
<select name="client_id" multiple></select>
</div>
<div class="clear"></div>
</div>-->
<div class="form-block">
<div class="label">
Клиенты
</div>
<input name="deal_clients" value='' type="hidden" id="docs-docs-new-client-vue"/>
<div style="margin-right: 20px;" class="inputs visibleSearch" id="docs-docs-new-client-input-vue">
<v-select v-model="clientSelect" :components="{OpenIndicator}" multiple transition="" placeholder=" Выберите клиентов" class="vue_select" style="width: 400px; border: none;" :options="clients" label="name" @search="getClientsListNew" :filterable="false" @option:selected="selectClientList" @option:deselected="setValueInput">
<div class="spinner" v-show="spinner">Загрузка...</div>
<template v-slot:option="clients">
<span :style="'color:'+clients.color" v-html="clients.fio"></span>
</template>
<div slot="no-options">Не найдено клиентов...</div>
</v-select>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">
Объект
</div>
<div class="inputs">
<select name="object_id"></select>
</div>
<div class="clear"></div>
</div>
<div class="form-block blank-id-input">
<div class="label">
Бланк документа
</div>
<div class="inputs">
<select name="blank_id"></select>
</div>
<div class="clear"></div>
</div>
<input type="hidden" name="user_id" value="<?php echo $_SESSION['id']; ?>">
<input type="hidden" name="blank_id_save" value="">
</form>
</div>
<div class="modal-submit">
<button type="button" onclick="addInnerDoc()">Создать документ</button>
</div>
</div>
</div>
<div id="change-perm_modal_bg" class="chat-modal__bg hidden">
<div id="change-perm_modal" class="chat-modal hidden">
<span class="pseudo-link closer-obj-events">
<i class="ti-close"></i>
</span>
<div class="chat-modal__inner">
<h2 id="inner_blank_title">Изменить права доступа</h2>
<div class="error_msg hidden" style="width:100%;"></div>
<div class="form-block">
<div class="label">Уже имеют права</div>
<div class="have_perm" style="width: 60%; float: left;">
<ul class="have_perm_inner"></ul>
</div>
<div class="clear"></div>
</div>
<form id="change-perm_form" class="form-validate" method="post">
<div class="form-block">
<div class="label">Участники</div>
<div class="inputs" style="width: 60%;">
<select id="change-perm-doc" multiple name="perm_folder"></select>
</div>
<div class="clear"></div>
</div>
<input type="hidden" name="folder_id" value="">
</form>
</div>
<div class="modal-submit">
<button type="button" onclick="changePermDoc()">Изменить права</button>
</div>
</div>
</div>
<?php
require($_SERVER['DOCUMENT_ROOT']."/templates/footer.php"); ?>
<script>
function prefixHelp() {
let modal = $("#modal-prefix-help");
modal.css("display", "block");
let modalContent = $("#modal-content p");
modalContent.html("<p>При помощи префикса, вы можете задавать автоматическую нумерацию договора. Вставьте префикс по типу договора, чтобы система автоматически нумеровала их при создании</p>");
}
function prefixHelpClose() {
let modal = $("#modal-prefix-help");
modal.css("display", "none");
}
</script>
<script>
//Для клиентов в задачах для документов
if ($('#docs-docs-new-client-input-vue').length > 0) {
var docs_docs_new_client_input_vue = new Vue({
el: '#docs-docs-new-client-input-vue',
components: {
// Multiselect: window.VueMultiselect.default,
//vuejsDatepicker: window.vuejsDatepicker
},
data() {
return {
OpenIndicator: {
render: createElement => createElement('span', { class: { 'vueToggleSpan': true } }),
},
clients: [],
client_id: 0,
spinner: true,
clientSelect: [],
debounceTimer: null,
values: [],
}
},
methods: {
clear(){
this.clientId = 0;
this.clientSelect = [];
},
selectClientList() {
//console.log(selectedOption);
this.client_id = 0;
//console.log(this.clientSelect);
//bindObjReq();
if (!isEmpty(this.clientSelect)) {
this.client_id = this.clientSelect[this.clientSelect.length - 1].id;
this.setValueInput();
} else {
this.client_id = 0;
this.setValueInput();
}
},
setValueInput() {
var values = [];
for (var i = 0; i < this.clientSelect.length; i++) {
values.push(this.clientSelect[i].id);
}
this.values = values;
//$("#docs-new-client-vue").val(JSON.stringify(values));
},
get_clientid_req(req_id){
// console.log(req_id);
axios.post('/ajax/ajax_vue_requisitions.php', {
request: 'get_clientid_req',
req_id: req_id,
})
.then((response) => {
//console.log(response.data);
if(!isEmpty(response.data.client_id)){
this.search_client(response.data.client_id);
}
})
.catch(function(error) {
console.log(error);
});
},
getClientsList(search, loading) {
// console.log(typeof loading);
if (typeof loading == 'function') {
loading(true);
}
var search_val = '';
if (!isEmpty(search)) {
search_val = search;
}
axios.post('/ajax/ajax_vue_requisitions.php', {
request: 'get_clients_list',
search: search_val,
})
.then((response) => {
// console.log(response.data);
this.clients = response.data;
if (typeof loading == 'function') {
loading(false);
}
})
.catch(function(error) {
console.log(error);
});
},
getClientsListNew(search, loading) {
clearTimeout(this.debounceTimer);
this.debounceTimer = setTimeout(() => this.getClientsList(search, loading), 500);
},
search_client(client_id) {
// console.log(client_id);
if (parseInt(client_id) > 0) {
// $("#object-new-client-vue").val(client_id);
axios.post('/ajax/ajax_vue_requisitions.php', {
request: 'get_client',
client_id: client_id
}, )
.then((response) => {
//console.log(response.data);
var this_client = response.data;
var index = this.clientSelect.length;
this.$set(this.clientSelect, index, { id: client_id, color: '#000', name: this_client.text, fio: this_client.fio });
this.setValueInput();
})
.catch(function(error) {
console.log(error);
});
}
},
checkClient(client_id) {
//var clientsId = JSON.parse($("#docs-new-client-vue").val());
// console.log(clientsId.length);
if (client_id > 0) {
// for (var i = 0; i < clientsId.length; i++) {
this.clientId = client_id;
this.search_client(client_id);
// }
}
}
},
mounted() {
},
created: function() {
this.getClientsList();
//this.checkClient();
$("#docs-docs-new-client-input-vue").closest('.inputs').removeClass("hidden");
}
})
console.log(typeof docs_new_client_input_vue);
}
</script>