Joywork/new-stat-table.php

476 lines
16 KiB
PHP
Raw Permalink 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("Доступ запрещён!");
}
require($_SERVER['DOCUMENT_ROOT'] . "/templates/new-header.php");
$currentUserId = $_SESSION['id'];
$user_view = new User;
$user_view->get($currentUserId);
if (!isset($user_view->agencyId)) {
$user_view->agencyId = $currentUserId;
$user_view->agencyName = $user_view->fio;
}
$agency_id = (int) $user_view->agencyId;
$funnelsDBO = mysql_query("select * from funnel WHERE agency_id = {$agency_id}");
$funnels = array();
while ($row = mysql_fetch_assoc($funnelsDBO)) {
$funnel = array();
$funnel['id'] = $row['id'];
$funnel['name'] = $row['name'];
$funnel['steps'] = array();
$funnelSteps = mysql_query("select * from funnel_steps WHERE funnel_id = " . $funnel['id']);
while ($row2 = mysql_fetch_assoc($funnelSteps)) {
$a = array();
$a['id'] = $row2['id'];
$a['name'] = $row2['name'];
$a['fields'] = htmlspecialchars_decode($row2['pole_end_list']);
array_push($funnel['steps'], $a);
}
array_push($funnels, $funnel);
}
$__funnelsText = json_encode($funnels);
?>
<style>
.__main {
background: #fff;
margin: 23px 35px 0;
border: 2px solid rgb(67,160,71);
-webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
border-radius: 2px;
}
.__main .__div {
padding: 17px 35px 23px;
}
.__main h2 {
width: 100%;
color: #757575;
margin: 0 0 16px 0;
font-weight: normal;
}
.__main .__div input {
width: 350px;
padding: 8px 10px 9px;
font-size: 15px;
border: 1px solid #e0e0e0;
font-family: "Lato";
border-radius: 3px;
}
.__main .__div .__item {
padding: 6px 57px;
cursor: pointer;
background: -webkit-linear-gradient(top, #fff, #f5f5f5);
border: 1px solid #d0d0d0;
border-radius: 4px;
text-align: center;
margin: 13px 0;
width: fit-content;
}
.__main .__div .__item p {
display: inline;
}
.__main .__div .__item[data-active="1"] {
background: #fff !important;
border-color: rgba(56, 142, 60, .6) !important;
}
.__main .__field_selection, #__FUNNELS, #__TYPE, #__ADD_DATA {
border-top: 1px solid #d0d0d0;
}
.__main .__field_selection p {
position: relative;
padding: 0 0 5px;
cursor: pointer;
width: fit-content;
}
.__main .__field_selection p:before {
position: absolute;
top: 1px;
left: -36px;
box-shadow: inset 0 2px 3px rgba(0,0,0,.2);
border: 1px solid #000;
border-radius: 9px;
width: 30px;
height: 17px;
background: #dddddd;
content: '';
transition: all .2s ease-out;
}
.__main .__field_selection p:after {
position: absolute;
top: 3px;
left: -34px;
box-shadow: 0 2px 3px rgba(0,0,0,.2);
border: 1px solid #000;
border-radius: 50%;
width: 13px;
height: 13px;
background: #fff;
content: '';
transition: all .2s ease-out;
}
.__main .__field_selection div[data-active="1"] p:before {
background: #4caf50;
content: '';
}
.__main .__field_selection div[data-active="1"] p:after {
left: -21px;
content: '';
}
.__main .__div .__step {
padding: 15px 36px 0;
}
.__main .__div .__step p {
font-size: 18px;
}
.__main .__div .__field {
padding: 0 46px;
}
.__main > div .__field p {
font-size: 16px;
}
.__main .__button {
background: linear-gradient(to bottom, rgba(67,160,71,1) 0%,rgba(56,142,60,1) 100%);
cursor: pointer;
}
.__main .__button p {
text-align: center;
font-family: "Lato";
color: #ffffff;
font-size: 20px;
font-weight: bold;
}
#__TYPE {
display: flex;
flex-wrap: wrap;
}
#__TYPE p {
padding: 9px 20px 11px;
}
#__TYPE p[data-active="0"] {
cursor: pointer;
color: #757575;
border: 1px solid #d0d0d0;
background: linear-gradient(180deg, #fff, #f5f5f5);
}
#__TYPE p[data-active="1"] {
color: rgb(255, 255, 255);
border: 1px solid #424242;
cursor: default;
background: #424242;
}
</style>
<div class="content-right">
<div class="inner">
<div class="main-title">
<h1>Новая таблица</h1>
</div>
<div class="__main">
<div class="__div">
<h2>Название таблицы</h2>
<input id="__TABLE_NAME" type="text">
</div>
<div id="__TYPE" class="__div" style="display:none;">
<h2>Тип таблицы</h2>
<p data-active="0" data-type="1">Менеджеры</p>
<p data-active="1" data-type="2">Клиенты</p>
</div>
<div id="__FUNNELS" class="__div"></div>
<div id="__ADD_DATA" class="__field_selection __div">
<h2>Дополнительные данные по клиенту</h2>
<div class="__step" data-active="0">
<p>Эл. почта</p>
</div>
<div class="__step" data-active="0">
<p>Телефон</p>
</div>
<div class="__step" data-active="0">
<p>Тип клиента</p>
</div>
<div class="__step" data-active="0">
<p>Роль клиента</p>
</div>
<div class="__step" data-active="0">
<p>Тип недвижимости</p>
</div>
<div class="__step" data-active="0">
<p>Объекты</p>
</div>
<div class="__step" data-active="0">
<p>Бюджет</p>
</div>
<div class="__step" data-active="0">
<p>Описание</p>
</div>
<div class="__step" data-active="0">
<p>Ответственный</p>
</div>
<div class="__step sources" data-active="0">
<p>Источник</p>
</div>
<div class="__step" data-active="0">
<p>Текущий этап</p>
</div>
</div>
<div id="__STEPS"></div>
<div id="__SAVE" class="__button __div">
<p>Добавить</p>
</div>
</div>
</div>
<div id="__funnelsText" style="display:none;"><?php echo($__funnelsText) ?></div>
<script>
let __funnels = JSON.parse($('#__funnelsText').html());
$('#__TYPE p').click(function (e) {
let t = $(e.target);
if (t.attr('data-active') == 1) {
return;
}
let type = t.attr('data-type');
$('#__TYPE p').attr('data-active', 0);
$('#__TYPE p[data-type="' + type + '"]').attr('data-active', 1);
if (type == 2) {
$('#__ADD_DATA').css('display', 'block');
} else {
$('#__ADD_DATA').css('display', 'none');
}
});
$('#__ADD_DATA p').click(function (e) {
let t = $(e.target);
if (!t.attr('class')) {
t = $(e.target).parent();
}
if (t.attr('data-active') == 0) {
t.attr('data-active', 1);
if($(this).parent().hasClass('sources')){
getSources();
}
} else {
t.attr('data-active', 0);
}
});
let __FUNNELS_HTML = '<h2>Воронки</h2>';
for (let i = 0; i < __funnels.length; i++) {
__FUNNELS_HTML += '<div class="__item" data-active="0" data-i="' + i + '"><p>' + __funnels[i].name + '</p></div>';
}
$('#__FUNNELS').html(__FUNNELS_HTML);
$('#__FUNNELS .__item').click(function (e) {
let t = $(e.target);
if (!t.attr('class')) {
t = $(e.target).parent();
}
if (t.attr('data-active') == 0) {
t.attr('data-active', 1);
} else {
t.attr('data-active', 0);
}
__printSteps();
});
function __printSteps() {
let html = '';
for (let i = 0; i < $('#__FUNNELS .__item').length; i++) {
if ($($('#__FUNNELS .__item')[i]).attr('data-active') == 1) {
let j = $($('#__FUNNELS .__item')[i]).attr('data-i');
html += __getStepsHtml(__funnels[j]);
}
}
$('#__STEPS').html(html);
$('#__STEPS p').click(function (e) {
let t = $(e.target);
if (!t.attr('class')) {
t = $(e.target).parent();
}
if (t.attr('data-active') == 0) {
t.attr('data-active', 1);
} else {
t.attr('data-active', 0);
}
});
}
function __getStepsHtml(funnel) {
let html = '';
if ($('#__STEPS .__field_selection[data-id="' + funnel.id + '"]').length > 0) {
html = '<div class="__field_selection __div" data-id="' + funnel.id + '">';
html += $('#__STEPS .__field_selection[data-id="' + funnel.id + '"]').html();
html += '</div>';
} else {
html = '<div class="__field_selection __div" data-id="' + funnel.id + '"><h2 style="margin:0;">Этапы и поля из "' + funnel.name + '"</h2>';
for (let i = 0; i < funnel.steps.length; i++) {
html += '<div data-id="' + funnel.steps[i].id + '"><div class="__step" data-active="0"><p>' + funnel.steps[i].name + '</p></div>';
let fields = JSON.parse(funnel.steps[i].fields);
for (let j = 0; j < fields.length; j++) {
if (fields[j].type === 'Текст') {
html += '<div class="__field" data-active="0"><p>' + fields[j].name + '</p></div>';
}
}
html += '</div>';
}
html += '</div>';
}
return html;
}
function getSources(){
$.post("/ajax/getSources.php", function(data){
var res = JSON.parse(data);
var shtml = '<div id="soursesDiv">';
for(var i=0; i<res.length; i++){
var active = 0;
shtml += '<div class="__field" data-id="'+res[i].id+'" data-active="'+active+'"><p>'+res[i].name+'</p></div>';
}
shtml += '</div>';
$("#__ADD_DATA .sources").after(shtml);
$('#soursesDiv .__field p').click(function (e) {
let t = $(e.target);
if (!t.attr('class')) {
t = $(e.target).parent();
}
if (t.attr('data-active') == 0) {
t.attr('data-active', 1);
} else {
t.attr('data-active', 0);
}
});
})
}
$('#__SAVE').click(function () {
let name = $('#__TABLE_NAME').val();
let type = Number($('#__TYPE p[data-active="1"').attr('data-type'));
let funnels = [];
let funnelSelected = $('#__STEPS .__field_selection').length;
for (let i = 0; i < funnelSelected; i++) {
let el = $($('#__STEPS .__field_selection')[i]);
let funnel = {};
funnel.id = Number(el.attr('data-id'));
funnel.steps = [];
for (let j = 0; j < el.children('div[data-id]').length; j++) {
let stepEl = $(el.children('div[data-id]')[j]);
let step = {};
step.id = Number(stepEl.attr('data-id'));
step.self = Number($(stepEl.children('div[data-active]')[0]).attr('data-active'));
step.fields = [];
for (let k = 1; k < $(stepEl.children('div[data-active]')).length; k++) {
let fieldEl = $(stepEl.children('div[data-active]')[k]);
if (fieldEl.attr('data-active') == 1) {
step.fields.push(fieldEl.children('p').html());
}
}
if (step.self === 1 || step.fields.length > 0) {
funnel.steps.push(step);
}
}
funnels.push(funnel);
}
let addFields = {};
if (type === 2) {
if (Number($($('#__ADD_DATA > div')[0]).attr('data-active'))) {
addFields.email = 1;
}
if (Number($($('#__ADD_DATA > div')[1]).attr('data-active'))) {
addFields.phone = 1;
}
if (Number($($('#__ADD_DATA > div')[2]).attr('data-active'))) {
addFields.client_type = 1;
}
if (Number($($('#__ADD_DATA > div')[3]).attr('data-active'))) {
addFields.client_role = 1;
}
if (Number($($('#__ADD_DATA > div')[4]).attr('data-active'))) {
addFields.property_type = 1;
}
if (Number($($('#__ADD_DATA > div')[5]).attr('data-active'))) {
addFields.objects = 1;
}
if (Number($($('#__ADD_DATA > div')[6]).attr('data-active'))) {
addFields.budget = 1;
}
if (Number($($('#__ADD_DATA > div')[7]).attr('data-active'))) {
addFields.description = 1;
}
if (Number($($('#__ADD_DATA > div')[8]).attr('data-active'))) {
addFields.responsible = 1;
}
if (Number($($('#__ADD_DATA > div')[9]).attr('data-active'))) {
addFields.source = 1;
}
if (Number($($('#__ADD_DATA > div')[10]).attr('data-active'))) {
addFields.curr = 1;
}
}
var sources = [];
if($('#__ADD_DATA .sources').attr('data-active') > 0){
$('#soursesDiv .__field').each(function(){
if($(this).attr('data-active') > 0){
if($(this).attr('data-id')){
sources.push(parseInt($(this).attr('data-id')));
}
}
});
addFields.sources = sources;
}
let tableData = {
name: name,
type: type,
funnels: JSON.stringify(funnels),
addFields: JSON.stringify(addFields)
};
var fo = new FormData();
for (var k in tableData) {
fo.append(k, tableData[k]);
}
var xhr = new XMLHttpRequest();
xhr.open('POST', '/ajax/createNewStatTable.php', true);
xhr.onreadystatechange = function () {
if (this.readyState != 4) {
return;
}
if (this.status == 200) {
window.location = 'https://joywork.ru/charts.php';
}
};
xhr.send(fo);
});
</script>
</div>
<?php require($_SERVER['DOCUMENT_ROOT'] . "/templates/footer.php"); ?>