Joywork/docs.php

642 lines
30 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?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>