Actual prod
This commit is contained in:
parent
1c5027406b
commit
b14570835a
@ -4836,6 +4836,36 @@
|
|||||||
$sql = "SELECT * FROM `requisitions` WHERE id = $id";
|
$sql = "SELECT * FROM `requisitions` WHERE id = $id";
|
||||||
$requisistion = $this->db->fetch_assoc($this->db->query($sql));
|
$requisistion = $this->db->fetch_assoc($this->db->query($sql));
|
||||||
|
|
||||||
|
// Вычисляем последний этап воронки
|
||||||
|
$lastStage = 8; // значение по умолчанию
|
||||||
|
$funnelId = intval($requisistion['funnel_id']);
|
||||||
|
if ($funnelId > 0) {
|
||||||
|
$q_step = $this->db->query("SELECT MAX(order_number) as last_stage FROM funnel_steps WHERE funnel_id = $funnelId AND deleted = 0");
|
||||||
|
if ($q_step && $this->db->num_rows($q_step) > 0) {
|
||||||
|
$r_step = $this->db->fetch_assoc($q_step);
|
||||||
|
if ($r_step['last_stage'] !== null) {
|
||||||
|
$lastStage = intval($r_step['last_stage']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// funnel_id = 0 — дефолтная воронка, берём по agency_id
|
||||||
|
$agencyId = $this->user->agencyId;
|
||||||
|
$q_default = $this->db->query("SELECT id FROM funnel_default WHERE agency_id = $agencyId LIMIT 1");
|
||||||
|
if ($q_default && $this->db->num_rows($q_default) > 0) {
|
||||||
|
$r_default = $this->db->fetch_assoc($q_default);
|
||||||
|
$defaultFunnelId = intval($r_default['id']);
|
||||||
|
if ($defaultFunnelId > 0) {
|
||||||
|
$q_step = $this->db->query("SELECT MAX(order_number) as last_stage FROM funnel_steps WHERE funnel_id = $defaultFunnelId AND deleted = 0");
|
||||||
|
if ($q_step && $this->db->num_rows($q_step) > 0) {
|
||||||
|
$r_step = $this->db->fetch_assoc($q_step);
|
||||||
|
if ($r_step['last_stage'] !== null) {
|
||||||
|
$lastStage = intval($r_step['last_stage']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($requisistion['complex_status_id'] && $requisistion['complex_room_id'])
|
if ($requisistion['complex_status_id'] && $requisistion['complex_room_id'])
|
||||||
{
|
{
|
||||||
$complexStatus = new ComplexStatus((int)$requisistion['complex_status_id']);
|
$complexStatus = new ComplexStatus((int)$requisistion['complex_status_id']);
|
||||||
@ -4845,11 +4875,12 @@
|
|||||||
], false, false);
|
], false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "UPDATE requisitions SET reason='".$select_text.". ".$post['reason']."', who_delete = '$user_id', deleted=1, stage=8, denial = $post[denial] WHERE id=$id";
|
$sql = "UPDATE requisitions SET reason='".$select_text.". ".$post['reason']."', who_delete = '$user_id', deleted=1, stage=$lastStage, denial = $post[denial] WHERE id=$id";
|
||||||
if(isset($post['summa']) && $post['luck']){
|
if(isset($post['summa']) && $post['luck']){
|
||||||
if($dop_text != '') $dop_text .= " ";
|
if($dop_text != '') $dop_text .= " ";
|
||||||
$dop_text1 .= "Совершена сделка на ".$post['summa']." руб. ".$formatted_dateZajavki;
|
$commission = isset($post['commission']) ? intval($post['commission']) : 0;
|
||||||
$sql = "UPDATE requisitions SET reason='$post[reason]', who_delete = '$user_id', deleted=1, summa='$post[summa]', confirm='$post[luck]' WHERE id=$id";
|
$dop_text1 = "Совершена сделка на ".$commission." руб. ".$formatted_dateZajavki;
|
||||||
|
$sql = "UPDATE requisitions SET reason='".$dop_text1."', who_delete = '$user_id', deleted=1, summa='$post[summa]', confirm='$post[luck]' WHERE id=$id";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->db->query($sql)) {
|
if ($this->db->query($sql)) {
|
||||||
|
|||||||
74
js/crm.js
74
js/crm.js
@ -1772,7 +1772,7 @@ function editEvent(id, type, client_id, req_id) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function editEventObj(id, type) {
|
function editEventObj(id, type, object_id) {
|
||||||
|
|
||||||
if (type != 'comment') {
|
if (type != 'comment') {
|
||||||
$("#addTaskBgObj").show();
|
$("#addTaskBgObj").show();
|
||||||
@ -1828,7 +1828,10 @@ function editEventObj(id, type) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$.post("/ajax/getEventForObjId.php", { event_id: id }, function(data) {
|
// object_id (id найденного листинга) — чтобы getEventForObjId читал external_listing_events,
|
||||||
|
// а не чужую user_object_events при пересечении id; res.object_id вернётся id листинга и save (changeEventsObj)
|
||||||
|
// уйдёт в листинговую таблицу.
|
||||||
|
$.post("/ajax/getEventForObjId.php", { event_id: id, object_id: object_id }, function(data) {
|
||||||
|
|
||||||
var res = JSON.parse(data);
|
var res = JSON.parse(data);
|
||||||
//console.log(type);
|
//console.log(type);
|
||||||
@ -1918,8 +1921,8 @@ function editEventObj(id, type) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function editNoteObj(id) {
|
function editNoteObj(id, object_id) {
|
||||||
$.post("/ajax/getNoteForObjId.php", { note_id: id }, function(data) {
|
$.post("/ajax/getNoteForObjId.php", { note_id: id, object_id: object_id }, function(data) {
|
||||||
let res = JSON.parse(data);
|
let res = JSON.parse(data);
|
||||||
//console.log(data);
|
//console.log(data);
|
||||||
|
|
||||||
@ -2107,8 +2110,13 @@ function sendEventFilesWin(id, from) {
|
|||||||
$("body").addClass("lock");
|
$("body").addClass("lock");
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteEvent(id, from) {
|
function deleteEvent(id, from, kind) {
|
||||||
if (confirm("Вы точно хотите удалить эту задачу?")) {
|
var isFile = (kind === 'file');
|
||||||
|
jwConfirm({
|
||||||
|
title: isFile ? 'Удаление файлов' : 'Удаление задачи',
|
||||||
|
text: isFile ? 'Вы точно хотите удалить эти файлы?' : 'Вы точно хотите удалить эту задачу?',
|
||||||
|
btnText: 'Удалить',
|
||||||
|
onConfirm: function() {
|
||||||
$.post('/ajax/deleteEvent.php', {
|
$.post('/ajax/deleteEvent.php', {
|
||||||
deleteId: id,
|
deleteId: id,
|
||||||
from: from || null
|
from: from || null
|
||||||
@ -2122,6 +2130,7 @@ function deleteEvent(id, from) {
|
|||||||
getCalendar();
|
getCalendar();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function showEventSubComment(id, from, event, sub_id) {
|
function showEventSubComment(id, from, event, sub_id) {
|
||||||
@ -2171,6 +2180,9 @@ function showEventSubComment(id, from, event, sub_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addEventSubComment(id, from, id_object, req_id, type = null) {
|
function addEventSubComment(id, from, id_object, req_id, type = null) {
|
||||||
|
// листинг: id_object приходит числовым el.id без маркера; помечаем EXT-{n}, иначе reload панелей
|
||||||
|
// (getObjectInfoForEvents/getLogForEvents) примет el.id за objects.id (коллизия) → пустые паны (белая модалка)
|
||||||
|
if (from === 'listing' && String(id_object).indexOf('EXT-') !== 0) id_object = 'EXT-' + id_object;
|
||||||
user_for = 0;
|
user_for = 0;
|
||||||
if (!isEmpty(type) && type == 'moderation') {
|
if (!isEmpty(type) && type == 'moderation') {
|
||||||
user_for = $('#sub_comment_who_work_' + id).val();
|
user_for = $('#sub_comment_who_work_' + id).val();
|
||||||
@ -2215,11 +2227,18 @@ function addEventSubComment(id, from, id_object, req_id, type = null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function deleteEventSubComment(id, from, id_object, sub_id) {
|
function deleteEventSubComment(id, from, id_object, sub_id) {
|
||||||
|
// листинг: id_object приходит числовым el.id без маркера; помечаем EXT-{n}, иначе reload панелей
|
||||||
|
// (getObjectInfoForEvents/getLogForEvents) примет el.id за objects.id (коллизия) → пустые паны (белая модалка)
|
||||||
|
if (from === 'listing' && String(id_object).indexOf('EXT-') !== 0) id_object = 'EXT-' + id_object;
|
||||||
var subId = 0;
|
var subId = 0;
|
||||||
if (!isEmpty(sub_id)) {
|
if (!isEmpty(sub_id)) {
|
||||||
subId = sub_id;
|
subId = sub_id;
|
||||||
}
|
}
|
||||||
if (confirm("Вы точно хотите удалить комментарий МОП?")) {
|
jwConfirm({
|
||||||
|
title: 'Удаление комментария',
|
||||||
|
text: 'Вы точно хотите удалить комментарий?',
|
||||||
|
btnText: 'Удалить',
|
||||||
|
onConfirm: function() {
|
||||||
$.post('/ajax/deleteEventSubComment.php', {
|
$.post('/ajax/deleteEventSubComment.php', {
|
||||||
eventId: id,
|
eventId: id,
|
||||||
from: from || null,
|
from: from || null,
|
||||||
@ -2246,12 +2265,19 @@ function deleteEventSubComment(id, from, id_object, sub_id) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteNoteObj(id) {
|
function deleteNoteObj(id, from) {
|
||||||
if (confirm("Вы точно хотите удалить данное примечание?")) {
|
jwConfirm({
|
||||||
|
title: 'Удаление примечания',
|
||||||
|
text: 'Вы точно хотите удалить данное примечание?',
|
||||||
|
btnText: 'Удалить',
|
||||||
|
onConfirm: function() {
|
||||||
|
// from='listing' → удаление в external_listing_notes, иначе object_notes (id-нумерации разные)
|
||||||
$.post('/ajax/deleteNote.php', {
|
$.post('/ajax/deleteNote.php', {
|
||||||
deleteId: id
|
deleteId: id,
|
||||||
|
from: from || 'objects'
|
||||||
}, function() {
|
}, function() {
|
||||||
|
|
||||||
if ($('#chat_content_' + id).length > 0) {
|
if ($('#chat_content_' + id).length > 0) {
|
||||||
@ -2267,11 +2293,16 @@ function deleteNoteObj(id) {
|
|||||||
$("body").removeClass("lock");
|
$("body").removeClass("lock");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//Отменить задачу
|
//Отменить задачу
|
||||||
function cancelEvent(id) {
|
function cancelEvent(id) {
|
||||||
if (confirm("Вы точно хотите отменить эту задачу?")) {
|
jwConfirm({
|
||||||
|
title: 'Отмена задачи',
|
||||||
|
text: 'Вы точно хотите отменить эту задачу?',
|
||||||
|
btnText: 'Отменить задачу',
|
||||||
|
onConfirm: function() {
|
||||||
$.post('/ajax/cancelEvent.php', { cancelId: id }, function() {
|
$.post('/ajax/cancelEvent.php', { cancelId: id }, function() {
|
||||||
if ($('#chat_content_' + id).length > 0) {
|
if ($('#chat_content_' + id).length > 0) {
|
||||||
$('#chat_content_' + id).closest('.chat-message').addClass('cancel');
|
$('#chat_content_' + id).closest('.chat-message').addClass('cancel');
|
||||||
@ -2284,6 +2315,7 @@ function cancelEvent(id) {
|
|||||||
getCalendar();
|
getCalendar();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//Для фильтра клиентов в отправке презентаций
|
//Для фильтра клиентов в отправке презентаций
|
||||||
@ -3418,6 +3450,9 @@ function get_select_who_work_task(selector, section, id){
|
|||||||
id = $('#submitTextButton').attr('data-id');
|
id = $('#submitTextButton').attr('data-id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// offset-free: для найденного листинга (section=object) ответственного берём по иерархии видимости, а не по
|
||||||
|
// владельцу objects-строки (её нет, el.id коллизит). Маркер листинга — data-src="ext" окна задач (openEventsWindow).
|
||||||
|
var isExternal = (section == 'object') && ($('#submitTextButton').attr('data-src') === 'ext');
|
||||||
|
|
||||||
$(selector+" .check_who_work").html('<img src="../images/rocket-spinner.svg" width="45px">');
|
$(selector+" .check_who_work").html('<img src="../images/rocket-spinner.svg" width="45px">');
|
||||||
if(id > 0) {
|
if(id > 0) {
|
||||||
@ -3425,7 +3460,8 @@ function get_select_who_work_task(selector, section, id){
|
|||||||
axios.post('/ajax/select_form_who_work_tasks.php',
|
axios.post('/ajax/select_form_who_work_tasks.php',
|
||||||
{
|
{
|
||||||
id: id,
|
id: id,
|
||||||
section: section
|
section: section,
|
||||||
|
is_external: isExternal ? 1 : 0
|
||||||
}
|
}
|
||||||
).then((response) => {
|
).then((response) => {
|
||||||
|
|
||||||
@ -4423,6 +4459,8 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
$('body').on('click', '.complete-action-button-obj', function() {
|
$('body').on('click', '.complete-action-button-obj', function() {
|
||||||
var event_id = $(this).attr('id').replace('groupAB__', '');
|
var event_id = $(this).attr('id').replace('groupAB__', '');
|
||||||
|
// событие найденного листинга парсера завершается в своей таблице (data-from='listing'), иначе user_object_events
|
||||||
|
var from = $(this).attr('data-from') || 'objects';
|
||||||
|
|
||||||
var done = 0;
|
var done = 0;
|
||||||
$(this).toggleClass('active');
|
$(this).toggleClass('active');
|
||||||
@ -4430,7 +4468,7 @@ $(document).ready(function() {
|
|||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
//console.log(done);
|
//console.log(done);
|
||||||
$.post('/ajax/addEditObject.php', { done_event: event_id, done: done }, function(data) {
|
$.post('/ajax/addEditObject.php', { done_event: event_id, done: done, from: from }, function(data) {
|
||||||
//console.log(data);
|
//console.log(data);
|
||||||
|
|
||||||
if (typeof type_calendar == 'object') {
|
if (typeof type_calendar == 'object') {
|
||||||
@ -6249,11 +6287,12 @@ $(document).ready(function() {
|
|||||||
if (window.dealCloseData && window.dealCloseData.id) {
|
if (window.dealCloseData && window.dealCloseData.id) {
|
||||||
param.luck = 10;
|
param.luck = 10;
|
||||||
var factPrice = $('#fact_contract_price').val();
|
var factPrice = $('#fact_contract_price').val();
|
||||||
|
var factCommission = $('#fact_agent_commission').val();
|
||||||
param.summa = (factPrice !== '' && !isNaN(parseInt(factPrice))) ? parseInt(factPrice) : (window.dealCloseData.contract_price || 0);
|
param.summa = (factPrice !== '' && !isNaN(parseInt(factPrice))) ? parseInt(factPrice) : (window.dealCloseData.contract_price || 0);
|
||||||
|
param.commission = (factCommission !== '' && !isNaN(parseInt(factCommission))) ? parseInt(factCommission) : (window.dealCloseData.agent_commission || 0);
|
||||||
param.datazakl = Date.parse(dataZZ);
|
param.datazakl = Date.parse(dataZZ);
|
||||||
|
|
||||||
var factPayload = {};
|
var factPayload = {};
|
||||||
var factCommission = $('#fact_agent_commission').val();
|
|
||||||
if (factPrice !== '' && !isNaN(parseInt(factPrice))) factPayload.contract_price = parseInt(factPrice) || 0;
|
if (factPrice !== '' && !isNaN(parseInt(factPrice))) factPayload.contract_price = parseInt(factPrice) || 0;
|
||||||
if (factCommission !== '' && !isNaN(parseInt(factCommission))) factPayload.agent_commission = parseInt(factCommission) || 0;
|
if (factCommission !== '' && !isNaN(parseInt(factCommission))) factPayload.agent_commission = parseInt(factCommission) || 0;
|
||||||
if (Object.keys(factPayload).length > 0) {
|
if (Object.keys(factPayload).length > 0) {
|
||||||
@ -6264,7 +6303,7 @@ $(document).ready(function() {
|
|||||||
data: JSON.stringify(factPayload)
|
data: JSON.stringify(factPayload)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {Про
|
} else {
|
||||||
if (isNaN(parseInt($('#summa_sdelki').val()))) {
|
if (isNaN(parseInt($('#summa_sdelki').val()))) {
|
||||||
alert("Введите сумму сделки");
|
alert("Введите сумму сделки");
|
||||||
return;
|
return;
|
||||||
@ -6314,7 +6353,6 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
$('#del_client #temp_id').val(0);
|
$('#del_client #temp_id').val(0);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
param.denial = $('#denial_work').val();
|
param.denial = $('#denial_work').val();
|
||||||
//console.log(reason);
|
//console.log(reason);
|
||||||
@ -11695,8 +11733,8 @@ function bindObjReq(clientId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Открыть модл объекта
|
//Открыть модл объекта
|
||||||
function openObjectModal(object_id, zindex) {
|
function openObjectModal(object_id, zindex, is_external) {
|
||||||
object_card.open(object_id, zindex);
|
object_card.open(object_id, zindex, is_external);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Проверка на пустату
|
//Проверка на пустату
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user