Fix many bugs...
and there are still...
remotes/origin/PR-71
booblegum 9 years ago
parent b2bdaddfc7
commit 6740e6607d
  1. 2
      assets/css/extra.css
  2. 21
      assets/css/main.css
  3. 477
      assets/js/build/chat_contractor_oop.js
  4. 480
      assets/js/build/chat_customer_oop.js
  5. 87
      assets/js/src/chat/BINDS.js
  6. 28
      assets/js/src/chat/StagesContractorController.js
  7. 31
      assets/js/src/chat/StagesCustomerController.js
  8. 30
      assets/js/src/chat/chats.js
  9. 2
      assets/js/src/chat/loaders.js
  10. 27
      assets/js/src/chat/parts.js
  11. 12
      assets/js/src/chat/templates/buttons/btnSendReview_tmpl.html
  12. 9
      assets/js/src/chat/templates/links/document_attach_file_tmpl.html
  13. 4
      assets/js/src/chat/templates/links/document_link_tmpl.html
  14. 8
      assets/js/src/chat/templates/message_tmpl.html
  15. 5
      assets/js/src/chat/templates/stage_approved_tmpl.html
  16. 3
      assets/js/src/chat/templates/stage_contractor_approve_tmpl.html
  17. 2
      assets/js/src/chat/templates/stage_tmpl.html
  18. 2
      assets/js/src/chat/templates/switch_to_protected_tmpl.html
  19. 4
      assets/js/src/chat/templates/work_in_process_tmpl.html
  20. 2
      assets/js/src/chat_contractor_oop.js
  21. 2
      assets/js/src/chat_customer_oop.js
  22. 2
      chat/chat.py
  23. 2
      chat/serializers.py
  24. 66
      chat/static/sass/chat_add.sass
  25. 54
      chat/templates/chat_contractor.html
  26. 43
      chat/templates/chat_customer.html
  27. 15
      chat/templates/partials/inc-attach-documents.html
  28. 1
      chat/templates/partials/inc-websocket-connect.htm
  29. 2
      chat/templates/review_add_modal.html
  30. 2
      projects/forms.py
  31. 3
      projects/templates/project_detail.html
  32. 4
      projects/views.py
  33. 15
      users/templates/contractor_office.html
  34. 20
      users/templates/contractor_profile.html
  35. 3
      users/templates/trash/contractor_filter.html
  36. 16
      users/views.py

@ -209,7 +209,7 @@
font-size: 14px;
font-family: 'Arial-MT-Regular', sans-serif;
position: absolute;
top: 14px;
top: 6px;
cursor: pointer;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;

@ -1955,7 +1955,7 @@ footer:after {
font-family: 'pfbeausanspro-reg', sans-serif;
position: relative;
text-align: left;
padding: 20px 61px 20px 21px;
padding: 15px 61px 15px 21px;
/*height: 94px;*/
}
@ -1963,10 +1963,10 @@ footer:after {
content: '';
position: absolute;
width: 100%;
height: 3px;
height: 1px;
top: -1px;
left: 0;
background-color: black;
background-color: #545454;
}
.addWork {
@ -3690,6 +3690,7 @@ footer:after {
float: left;
border-top: 1px solid black;
border-bottom: 1px solid black;
margin-bottom: 3px;
}
.documentsChat > p {
@ -3791,7 +3792,7 @@ footer:after {
}
.orderBlock {
width: 100%;
width: 260px;
float: left;
margin-bottom: -1px;
padding: 15px;
@ -3983,8 +3984,7 @@ footer:after {
.stepssBlock {
width: 100%;
float: left;
padding: 15px;
padding-bottom: 0;
padding: 5px 15px 0;
/*border-top: 1px solid black;*/
/*border-bottom: 1px solid black;*/
z-index: 9;
@ -3995,16 +3995,17 @@ footer:after {
.titleStepss {
width: 100%;
padding-left: 15px;
padding-top: 10px;
font-size: 18px;
font-family: 'Arial-MT-Regular', sans-serif;
margin: 0 0 15px 0;
margin: 0 0 5px 0;
color: #2c2c2c;
}
.textStepss {
width: 100%;
padding-left: 15px;
font-size: 14px;
font-size: 12px;
line-height: 17px;
font-family: 'Arial-MT-Regular', sans-serif;
color: #575757;
@ -4015,7 +4016,7 @@ footer:after {
float: left;
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
padding: 15px;
padding: 15px 15px 5px;
/*margin-bottom: -15px;*/
background-color: white;
position: relative;
@ -5795,7 +5796,7 @@ input[type="radio"]:checked + span {
}
#order-stages label{
margin-bottom: 0;
margin-top: 8px;
margin-top: 0px;
}
#order-stages .checkbox label{
margin-top: 0;

@ -48,13 +48,11 @@
var _ChatContractorPageController = __webpack_require__(1);
var _BINDS = __webpack_require__(21);
var _BINDS = __webpack_require__(22);
var _documents = __webpack_require__(24);
var _documents = __webpack_require__(25);
var _notes = __webpack_require__(23);
var _parts = __webpack_require__(25);
var _notes = __webpack_require__(24);
var _archiveProjects = __webpack_require__(26);
@ -98,7 +96,7 @@
(0, _notes.bindTeamNotes)();
//restore
(0, _parts.restoreTabFromHash)();
(0, _BINDS.restoreTabFromHash)();
});
/***/ },
@ -116,9 +114,9 @@
var _StagesContractorController = __webpack_require__(2);
var _MessagesControllers = __webpack_require__(19);
var _MessagesControllers = __webpack_require__(20);
var _DocumentsControllers = __webpack_require__(20);
var _DocumentsControllers = __webpack_require__(21);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -167,7 +165,7 @@
var _loaders = __webpack_require__(4);
var _Stages = __webpack_require__(18);
var _Stages = __webpack_require__(19);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -184,12 +182,12 @@
var STATUSES = {
'not_agreed': 'не согласован',
'send_approve': 'на согласовании',
'agreed': 'согласовано',
'cancel_approve': 'исполнитель отказался',
'in_process': 'в процессе',
'completed': 'завершен',
'closed': 'закрыт'
'send_approve': '...на согласовании',
'agreed': '...согласовано',
'cancel_approve': '...исполнитель отказался',
'in_process': '...в процессе',
'completed': '...завершен',
'closed': '...закрыт'
};
@ -293,6 +291,11 @@
this.stages_elements.$approve.find('.js-select').addClass("select");
this.stages_elements.$reserve.find('.js-select').addClass("select");
this.stages_elements.$works.find('.js-select').addClass("select");
this.stages_elements.$reserve.css({ 'border-top': 'none' });
this.stages_elements.$works.css({ 'border-top': 'none' });
$('#stagesWork').find('.js-select').addClass('select');
this.stages_elements.$reserve.find('.js-select').addClass('select');
if ($('#send-review').length) $('#send-review').remove();
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
@ -327,6 +330,7 @@
if (this.secureOrder) {
this.stages_elements.$reserve.find('.js-help-text').show();
} else {
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.find('.js-help-text').show();
this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-help-text').html('<span class="select">Резервирование не предусмотрено, безопасная сделака не активна</span>');
@ -373,6 +377,7 @@
this._renderStageReserved('reserved_tmpl');
this.stages_elements.$reserve.find('.js-help-text').show();
} else {
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.find('.stages-paid').html("");
this.stages_elements.$reserve.find('.js-help-text').hide();
}
@ -388,13 +393,16 @@
this.buildAgreedStage();
// Block-Stage-2
this.stages_elements.$reserve.find('.js-help-text').hide();
this.stages_elements.$reserve.css({ 'border-top': '1px solid black' });
// Block-Stage-3
this.stages_elements.$works.show();
this.stages_elements.$works.css({ 'border-top': '1px solid black' });
this._renderStageInWork('work_in_process_tmpl');
if (this.secureOrder) {
// this._renderStageInWork('work_in_process_tmpl');
} else {
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.hide();
}
} // Статус "В процессе"/"Завершен"/"Закрыт"
@ -538,6 +546,8 @@
} else {
if (this.stages_elements.$works.find('#send-review').length) this.stages_elements.$works.find('#send-review').remove();
}
$('#stagesWork').find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-select').removeClass('select');
} else {
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
@ -696,7 +706,11 @@
key: '_onBtnReviewOpenModal',
value: function _onBtnReviewOpenModal(event) {
event.preventDefault();
var review_type = $(event.target).data('review-type');
$('#review-add').find('input[type=radio][value=' + review_type + ']').prop("checked", true);
$('#review-add').modal('show');
console.log('Modal show review_type = ', review_type);
} // Открыть модальное окно "Оставить отзыв"
}, {
@ -861,23 +875,27 @@
var _document_attach_file_tmpl2 = _interopRequireDefault(_document_attach_file_tmpl);
var _note_tmpl = __webpack_require__(13);
var _document_link_tmpl = __webpack_require__(13);
var _document_link_tmpl2 = _interopRequireDefault(_document_link_tmpl);
var _note_tmpl = __webpack_require__(14);
var _note_tmpl2 = _interopRequireDefault(_note_tmpl);
var _order_info_tmpl = __webpack_require__(14);
var _order_info_tmpl = __webpack_require__(15);
var _order_info_tmpl2 = _interopRequireDefault(_order_info_tmpl);
var _stage_contractor_approve_tmpl = __webpack_require__(15);
var _stage_contractor_approve_tmpl = __webpack_require__(16);
var _stage_contractor_approve_tmpl2 = _interopRequireDefault(_stage_contractor_approve_tmpl);
var _document_before_upload_tmpl = __webpack_require__(16);
var _document_before_upload_tmpl = __webpack_require__(17);
var _document_before_upload_tmpl2 = _interopRequireDefault(_document_before_upload_tmpl);
var _switch_to_protected_tmpl = __webpack_require__(17);
var _switch_to_protected_tmpl = __webpack_require__(18);
var _switch_to_protected_tmpl2 = _interopRequireDefault(_switch_to_protected_tmpl);
@ -893,6 +911,7 @@
bntCompleteStage_tmpl: _bntCompleteStage_tmpl2.default,
btnSendReview_tmpl: _btnSendReview_tmpl2.default,
document_attach_file_tmpl: _document_attach_file_tmpl2.default,
document_link_tmpl: _document_link_tmpl2.default,
note_tmpl: _note_tmpl2.default,
order_info_tmpl: _order_info_tmpl2.default,
stage_contractor_approve_tmpl: _stage_contractor_approve_tmpl2.default,
@ -921,7 +940,7 @@
};
function _template() {
return '<!-- this {stage_num: \'...\', form_name: \'...\', orderId: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <!-- <p>\u042D\u0422\u0410\u041F ' + this.stage_num + ' </p> ' + this.stage_status + ' -->\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : 'не согласован') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n <form class="' + this.form_name + ' js-stage-form" data-stage-id="' + (this.stage && this.stage.id ? this.stage.id : '') + '"\n id="stage-form-' + (this.stage && this.stage.id ? this.stage.id : '') + '">\n <label>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</label>\n <input class="form-control" type="text" name="name"\n value="' + (this.stage && this.stage.name ? this.stage.name : '') + '">\n <p class="error error-name"></p>\n <label>\u0426\u0435\u043D\u0430</label>\n <input class="form-control" type="text" name="cost"\n value="' + (this.stage && this.stage.cost ? this.stage.cost : '') + '">\n <p class="error error-cost"></p>\n <input class="form-control" name="pos" type="hidden"\n value="' + (this.stage && this.stage.pos ? this.stage.pos : this.stage_num) + '">\n <p class="error error-pos"></p>\n <input class="form-control orderStagesInput" type="hidden" name="order"\n value="' + this.orderId + '">\n <input class="form-control" type="hidden" name="status" value="send_approve">\n <label>\u0421\u0440\u043E\u043A</label>\n <input class="term-picker form-control datepicker" type="text" name="term"\n value="' + (this.stage && this.stage.term ? this.stage.term : '') + '">\n <p class="error error-term"></p>\n <label>\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430 ' + this.stage_num + '</label>\n <input class="form-control" type="text" name="result"\n value="' + (this.stage && this.stage.result ? this.stage.result : '') + '">\n <p class="error error-result"></p>\n </form>\n</div>';
return '<!-- this {stage_num: \'...\', form_name: \'...\', orderId: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <!-- <p>\u042D\u0422\u0410\u041F ' + this.stage_num + ' </p> ' + this.stage_status + ' -->\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : '') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n <form class="' + this.form_name + ' js-stage-form" data-stage-id="' + (this.stage && this.stage.id ? this.stage.id : '') + '"\n id="stage-form-' + (this.stage && this.stage.id ? this.stage.id : '') + '">\n <label>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</label>\n <input class="form-control" type="text" name="name"\n value="' + (this.stage && this.stage.name ? this.stage.name : '') + '">\n <p class="error error-name"></p>\n <label>\u0426\u0435\u043D\u0430</label>\n <input class="form-control" type="text" name="cost"\n value="' + (this.stage && this.stage.cost ? this.stage.cost : '') + '">\n <p class="error error-cost"></p>\n <input class="form-control" name="pos" type="hidden"\n value="' + (this.stage && this.stage.pos ? this.stage.pos : this.stage_num) + '">\n <p class="error error-pos"></p>\n <input class="form-control orderStagesInput" type="hidden" name="order"\n value="' + this.orderId + '">\n <input class="form-control" type="hidden" name="status" value="send_approve">\n <label>\u0421\u0440\u043E\u043A</label>\n <input class="term-picker form-control datepicker" type="text" name="term"\n value="' + (this.stage && this.stage.term ? this.stage.term : '') + '">\n <p class="error error-term"></p>\n <label>\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430 ' + this.stage_num + '</label>\n <input class="form-control" type="text" name="result"\n value="' + (this.stage && this.stage.result ? this.stage.result : '') + '">\n <p class="error error-result"></p>\n </form>\n</div>';
};
/***/ },
@ -939,7 +958,7 @@
};
function _template() {
return '<!-- this {stage_num: \'...\', stage_status: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : 'не согласован') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n\n <div class="stage-data">\n ' + this.stage.name + '\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class="stage-data">\n ' + this.stage.result + '\n </div>\n \u0426\u0435\u043D\u0430\n <div class="stage-data">\n ' + this.stage.cost + ' \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class="stage-data">\n \u0434\u043E ' + this.stage.term + '\n </div>\n <div class="annotate">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>';
return '<!-- this {stage_num: \'...\', stage_status: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing"\n style="border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px">\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : '') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n\n <div class="stage-data">\n ' + this.stage.name + '\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class="stage-data">\n ' + this.stage.result + '\n </div>\n \u0426\u0435\u043D\u0430\n <div class="stage-data">\n ' + this.stage.cost + ' \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class="stage-data">\n \u0434\u043E ' + this.stage.term + '\n </div>\n <div class="annotate">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>';
};
/***/ },
@ -975,7 +994,7 @@
};
function _template() {
return "<!--className senderName message={...}-->\n<div class=\"col-lg-12 insetCommChat " + this.className + "\">\n <div class=\"topCommChat\">\n <p class=\"nameCommChat\">" + this.senderName + "</p><span>" + this.message.created + "</span>\n </div>\n <p class=\"textCommChat\">" + this.message.text + "</p>\n</div>";
return "<!--className senderName message={...}-->\n<div class=\"col-lg-12 insetCommChat " + this.className + "\">\n <div class=\"message-header\">\n <div class=\"sender_name\">" + this.senderName + "</div><div class=\"created\">" + this.message.created + "</div>\n </div>\n <div class=\"message-body\">\n " + this.message.text + "\n </div>\n</div>";
};
/***/ },
@ -993,7 +1012,7 @@
};
function _template() {
return "<!-- this {stage: {...}, note_text-->\n<div style=\"margin: 10px 0\">\n \u0412 \u0440\u0430\u0431\u043E\u0442\u0435: " + this.stage.name + " <br>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430: " + this.stage.result + " <br>\n \u0421\u0440\u043E\u043A \u0441\u0434\u0430\u0447\u0438: " + this.stage.term + "<br>\n <span class=\"select\">" + this.stage.cost + "</span> \u0440\n <div class=\"note\">\n " + this.note_text + "\n </div>\n</div>";
return "<!-- this {stage: {...}, note_text-->\n<div style=\"margin: 10px 0\">\n \u0412 \u0440\u0430\u0431\u043E\u0442\u0435: " + this.stage.name + " <br>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430: " + this.stage.result + " <br>\n \u0421\u0440\u043E\u043A \u0441\u0434\u0430\u0447\u0438: <span class=\"select js-select\">" + this.stage.term + "</span><br>\n <span class=\"select js-select\">" + this.stage.cost + "</span> \u0440\n <div class=\"note\">\n " + this.note_text + "\n </div>\n</div>";
};
/***/ },
@ -1029,7 +1048,7 @@
};
function _template() {
return "<div style=\"margin-left: -27px; margin-right: -27px; text-align: center\" id=\"send-review\">\n <a href=\"#\"\n class=\"chat-button icon-check js-btnSendReview\"\n style=\"padding-left: 10px; padding-right: 10px\">\u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n</div>";
return "<div id=\"send-review\" style=\"margin-left: -27px; margin-right: -27px; text-align: center\">\n <a href=\"#\"\n class=\"chat-button icon-close_chat-positive js-btnComplete\"\n style=\"padding: 25px 10px;\"\n data-review-type=\"positive\"> \u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n <a href=\"#\"\n class=\"chat-button icon-close_chat-negative js-btnComplete\"\n style=\"padding: 25px 10px;\"\n data-review-type=\"negative\"> \u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n</div>\n";
};
/***/ },
@ -1047,7 +1066,7 @@
};
function _template() {
return "<!--href, text, document_id, -->\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"" + this.href + " \">" + this.text + "</a>\n <div class=\"remove-document\" data-id=\"" + this.document_id + "\" style=\"right:-10px;\"></div>\n</li>\n\n<!--\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"/chat/download/ v.file \"> v.file </a>\n <div class=\"remove-document\" data-id=\" v.id \" style=\"right:-10px;\"></div>\n</li>\n-->";
return "<!--href, document_id, text -->\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"" + this.href + " \">" + this.text + "</a>\n <div class=\"remove-document\" data-id=\"" + this.document_id + "\" style=\"right:-10px;\"></div>\n</li>";
};
/***/ },
@ -1065,14 +1084,14 @@
};
function _template() {
return "<!-- this {text: '...', node_id: '...' -->\n<div class=\"note-wrapper\">\n <li>\n " + this.text + "\n </li>\n <div class=\"remove-note\" data-id=\"" + this.note_id + "\" style=\"right:-10px;\"></div>\n</div>\n";
return "<!-- href, text -->\n<div>\n \u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \u0444\u0430\u0439\u043B. \u0441\u043A\u0430\u0447\u0430\u0442\u044C: <br>\n <a href=\"" + this.href + "\">\n " + this.text + "\n </a>\n</div>";
};
/***/ },
/* 14 */
/***/ function(module, exports) {
'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
@ -1083,14 +1102,14 @@
};
function _template() {
return '<!-- this {order: {...} -->\n<tr>\n <td>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</td>\n <td>' + this.order.project.name + '</td>\n</tr>\n<tr>\n <td>\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430</td>\n <td>' + (this.order.secure ? 'Выбрана' : 'Не выбрана') + '</td>\n</tr>\n<tr>\n <td>\u0422\u0438\u043F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.building_classification ? this.order.project.realty.building_classification.name : 'не задан') + '</td>\n<tr>\n <td>\u041A\u043B\u0430\u0441\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.construction_type ? this.order.project.realty.construction_type.name : 'не задана') + '</td>\n</tr>';
return "<!-- this {text: '...', node_id: '...' -->\n<div class=\"note-wrapper\">\n <li>\n " + this.text + "\n </li>\n <div class=\"remove-note\" data-id=\"" + this.note_id + "\" style=\"right:-10px;\"></div>\n</div>\n";
};
/***/ },
/* 15 */
/***/ function(module, exports) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
@ -1101,7 +1120,7 @@
};
function _template() {
return "<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->\n<div class=\"numberStepp box-sizing\">\n <div class=\"review-type\" style=\"width: 100%\">\n <div class=\"alignleft\">\n <span>\u042D\u0422\u0410\u041F " + this.stage_num + "</span>\n </div>\n <div class=\"alignright\">\n <span class=\"stage-status\"> " + this.stage_status + "</span>\n </div>\n <div style=\"clear: both;\"></div>\n </div>\n\n <div class=\"select\">\n " + this.stage.name + "\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class=\"select\">\n " + this.stage.result + "\n </div>\n \u0426\u0435\u043D\u0430\n <div class=\"select\">\n " + this.stage.cost + " \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class=\"select\">\n \u0434\u043E " + this.stage.term + "\n </div>\n <div class=\"annotate\">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>";
return '<!-- this {order: {...} -->\n<tr>\n <td>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</td>\n <td>' + this.order.project.name + '</td>\n</tr>\n<tr>\n <td>\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430</td>\n <td>' + (this.order.secure ? 'Выбрана' : 'Не выбрана') + '</td>\n</tr>\n<tr>\n <td>\u0422\u0438\u043F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.building_classification ? this.order.project.realty.building_classification.name : 'не задан') + '</td>\n<tr>\n <td>\u041A\u043B\u0430\u0441\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.construction_type ? this.order.project.realty.construction_type.name : 'не задана') + '</td>\n</tr>';
};
/***/ },
@ -1119,7 +1138,7 @@
};
function _template() {
return "<!-- this {text: '...', file: {...} -->\n<div style=\"float: left\">\n <a href=\"/chat/download/" + this.file.name + "\" class=\"send-doc\" data-id=\"" + this.file.id + "\"> " + this.file.name + " </a>\n <div class=\"remove-document\" data-id=\"" + this.file.id + "\"\n style=\"right:-10px;float:left;position: static;\"></div>\n</div>\n<div style=\"clear: both\"></div>;";
return "<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->\n<div class=\"numberStepp box-sizing\"\n style=\"border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px\">\n <div class=\"review-type\" style=\"width: 100%\">\n <div class=\"alignleft\">\n <span>\u042D\u0422\u0410\u041F " + this.stage_num + "</span>\n </div>\n <div class=\"alignright\">\n <span class=\"stage-status\"> " + this.stage_status + "</span>\n </div>\n <div style=\"clear: both;\"></div>\n </div>\n\n <div class=\"select\">\n " + this.stage.name + "\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class=\"select\">\n " + this.stage.result + "\n </div>\n \u0426\u0435\u043D\u0430\n <div class=\"select\">\n " + this.stage.cost + " \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class=\"select\">\n \u0434\u043E " + this.stage.term + "\n </div>\n <div class=\"annotate\">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>";
};
/***/ },
@ -1137,11 +1156,29 @@
};
function _template() {
return "<!-- no context -->\n<div class=\"switch\">\n <span class=\"select\">\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0430</span>\n <div class=\"row mod-align-center\">\n <div class=\"col-lg-1\">\n <input name=\"price_and_term_required\" id=\"switch-to-protected\" class=\"custom-checkbox\" type=\"checkbox\">\n </div>\n <div class=\"col-lg-11\">\n <label for=\"safe\" style=\"font-weight: normal\" class=\"\">\n \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0439 \u0441\u0434\u0435\u043B\u043A\u0438\n </label>\n </div>\n </div>\n</div>";
return "<!-- this {text: '...', file: {...} -->\n<div style=\"float: left\">\n <a href=\"/chat/download/" + this.file.name + "\" class=\"send-doc\" data-id=\"" + this.file.id + "\"> " + this.file.name + " </a>\n <div class=\"remove-document\" data-id=\"" + this.file.id + "\"\n style=\"right:-10px;float:left;position: static;\"></div>\n</div>\n<div style=\"clear: both\"></div>;";
};
/***/ },
/* 18 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (ctx) {
return _template.call(ctx, ctx);
};
function _template() {
return "<!-- no context -->\n<div class=\"switch\" style=\"font-size: 12px\">\n <span class=\"select\">\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0430</span>\n <div class=\"row mod-align-center\">\n <div class=\"col-lg-1\">\n <input name=\"price_and_term_required\" id=\"switch-to-protected\" class=\"custom-checkbox\" type=\"checkbox\">\n </div>\n <div class=\"col-lg-11\">\n <label for=\"safe\" style=\"font-weight: normal\" class=\"\">\n \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0439 \u0441\u0434\u0435\u043B\u043A\u0438\n </label>\n </div>\n </div>\n</div>";
};
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1538,7 +1575,7 @@
exports.StageInWork = StageInWork;
/***/ },
/* 19 */
/* 20 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1591,9 +1628,6 @@
key: '_onLoadData',
value: function _onLoadData(json) {
var self = this;
// console.log('mesages json = ', json);
// console.log('$inbox = ', this.$inbox);
// console.log("messages render start");
self.$inbox.html("");
$.each(json.results, function (i, v) {
var senderName = 'Вы';
@ -1621,7 +1655,7 @@
exports.MessagesController = MessagesController;
/***/ },
/* 20 */
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1708,7 +1742,7 @@
exports.DocumentsController = DocumentsController;
/***/ },
/* 21 */
/* 22 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1716,15 +1750,15 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bindCtrlEnterSendMessage = exports.bindDeleteContact = exports.bindTeams = exports.bindGetUserMessages = exports.bindUserContacts = exports.bindOnTabs = exports.bindArbitrationSend = exports.bindOrderInfo = exports.bindOrders = undefined;
exports.restoreTabFromHash = exports.bindCtrlEnterSendMessage = exports.bindDeleteContact = exports.bindTeams = exports.bindGetUserMessages = exports.bindUserContacts = exports.bindOnTabs = exports.bindArbitrationSend = exports.bindOrderInfo = exports.bindOrders = undefined;
var _utils = __webpack_require__(3);
var _messageCounters = __webpack_require__(22);
var _messageCounters = __webpack_require__(23);
var _loaders = __webpack_require__(4);
var _notes = __webpack_require__(23);
var _notes = __webpack_require__(24);
function dialog(message, yesCallback, notCallback) {
$("#dialog_delete .modal-title").html(message);
@ -1741,6 +1775,62 @@
});
}
function isNullOrders() {
var buttons = {
btnApprove: $('#btnApprove'), // "Согласовать"
btnChange: $('#btnChange'), // "Отправить на внесение изменений"
btnsToArchive: $('.js-btnToArchive'), // "Отказаться от заказа"
btnToArchive: $('#btnToArchive'), // "Отказаться и отправить в Архив"
btnReserve: $('#btnReserve'), // "Зарезервировать"
btnsArbitration: $('.js-btnArbitration'), // "Обратиться в арбитраж"
btnSendReview: $('#order-review-add') // "Оставить отзыв"
};
var stages_elements = {
$approve: $('#conditions-approve'), //1. Согласование условия
$reserve: $('#reserveSpace'), //2. Резервирование (Отобразить)
$works: $('#completeWork') //3. Выполненная работа
};
var $orderStagesContainer = $('#order-stages');
// hide all buttons
for (var key in buttons) {
if (buttons[key].length) buttons[key].hide();
}
for (var _key in stages_elements) {
stages_elements[_key].show();
}
if ($orderStagesContainer.length) $orderStagesContainer.parent().hide();
}
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
var obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
var $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
function bindOrders() {
$('.order-block').on('click', function (event) {
event.preventDefault();
@ -1837,6 +1927,7 @@
}
function bindTeams() {
var message_tmpl = (0, _loaders.loadTemplate)('message_tmpl');
$('.team-block').on('click', function () {
(0, _messageCounters.onClickCardWithCount)($(this));
$('.team-order-block, .team-block').each(function () {
@ -1887,7 +1978,10 @@
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({ className: className, senderName: senderName, message: v });
// inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>';
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -1995,7 +2089,13 @@
var ordHashId = liveHash.replace("#order", "");
$("#orderBlock" + ordHashId).trigger('click');
} else {
$(".order-block").first().trigger('click');
var $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
}, 100);
break;
@ -2069,6 +2169,7 @@
}
function bindGetUserMessages() {
var message_tmpl = (0, _loaders.loadTemplate)('message_tmpl');
$('.user-block').on('click', function () {
(0, _messageCounters.onClickCardWithCount)($(this));
// var newCount = parseInt($("#count-tab-contact").text());
@ -2086,9 +2187,6 @@
var sumSenderRecipent = parseInt(userId) + parseInt(contactId);
$("#message-chat-space").removeClass().addClass("contact-space" + sumSenderRecipent);
// var currNewCount = parseInt($(".contact-count-" + sumSenderRecipent).text());
// var resCount = newCount - currNewCount;
// $("#count-tab-contact").text(resCount);
$(".contact-count-" + sumSenderRecipent).text(0);
var docList = document.getElementById('documentSpace');
inbox.innerHTML = '';
@ -2114,7 +2212,10 @@
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({ className: className, senderName: senderName, message: v });
// '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>'
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -2228,9 +2329,10 @@
exports.bindTeams = bindTeams;
exports.bindDeleteContact = bindDeleteContact;
exports.bindCtrlEnterSendMessage = bindCtrlEnterSendMessage;
exports.restoreTabFromHash = restoreTabFromHash;
/***/ },
/* 22 */
/* 23 */
/***/ function(module, exports) {
'use strict';
@ -2310,7 +2412,7 @@
exports.onClickCardWithCount = onClickCardWithCount;
/***/ },
/* 23 */
/* 24 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -2440,7 +2542,7 @@
exports.bindRemoveNotes = bindRemoveNotes;
/***/ },
/* 24 */
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -2475,9 +2577,6 @@
dataType: 'json',
done: function done(e, data) {
$.each(data.result.files, function (index, file) {
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>' +
// '<div style="clear: both"></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send-contact");
});
@ -2499,7 +2598,6 @@
recipent: $("#chat-order-add #recipentId").val(),
order: $("#chat-order-add #orderId").val()
};
// console.log(data.formData);
});
$('#upload-document-order').fileupload({
@ -2512,8 +2610,6 @@
dataType: 'json',
done: function done(e, data) {
$.each(data.result.files, function (index, file) {
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="'+ file.id+'" style="right:-10px;float:left;position: static;"></div></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send-order");
});
@ -2552,8 +2648,6 @@
var currentValue = $("#documentSendIds").val();
currentValue += file.id + ';';
$("#documentSendIds").val(currentValue);
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send");
});
@ -2597,42 +2691,6 @@
exports.uploadDocumentsTeamInit = uploadDocumentsTeamInit;
exports.bindRemoveDocuments = bindRemoveDocuments;
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.restoreTabFromHash = undefined;
var _utils = __webpack_require__(3);
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
var obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
$('.order-block').first().trigger('click');
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
exports.restoreTabFromHash = restoreTabFromHash;
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
@ -2675,54 +2733,9 @@
$(this).removeClass('orAct');
});
$this.addClass('orAct');
// var inbox = document.getElementById('message-chat-order-space');
// var docList = document.getElementById('documentOrderSpace');
// inbox.innerHTML = '';
// docList.innerHTML = '';
var orderId = $this.data('id');
// let projectId = $this.data('project-id');
// let recipentId = $this.data('recipent-id');
// let orderName = $this.data('order-name');
location.hash = '#order' + orderId;
// console.log(orderId);
window.chatController.create(orderId);
// hide all buttons
// console.log('chat-buttons -->', $(".chat-button"));
// $(".chat-button").hide();
// $.ajax({
// url: '/api/message',
// type: 'GET',
// beforeSend: function (xhr) {
// xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
// },
// data: {'order': orderId, 'team__isnull': 'true'},
// dataType: 'json',
// success: function (json) {
// $.each(json.results, function (i, v) {
// var senderName = 'Вы';
// var className = 'youChat';
//
// if (v.sender.id !== userId) {
// senderName = v.sender.username;
// className = '';
// }
//
// inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>';
//
// });
// var height = inbox.scrollHeight;
// inbox.scrollTop = height;
// }
// });
// $("#order-stages").html("");
// $("#completeWork").hide();
// $("#add-form-order-note").hide();
// $("#reserveSpace").hide();
});
}
@ -2730,13 +2743,17 @@
/***/ },
/* 27 */
/***/ function(module, exports) {
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.chatTeamsInit = exports.chatOrdersInit = exports.chatContactsInit = undefined;
var _loaders = __webpack_require__(4);
function chatContactsInit() {
/**
* Bind на кнопку "Отправить" в Закладке "Личные контакты"
@ -2749,33 +2766,40 @@
var sendLinks = $("#document-send-contact a");
if (chatMessage || sendLinks.length > 0) {
$("#contact-chat-form .errorEmptyMessage").hide();
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
// console.log("sendLinkIds = ", sendLinkIds);
socket.send_message({
"format_type": "add_message_contact",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
$("#contact-chat-form .errorEmptyMessage").hide();
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_contact",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
$("#chat").val("");
$("#document-send-contact").html("");
});
$("#chat").val("");
$("#document-send-contact").html("");
})();
} else {
$("#contact-chat-form .errorEmptyMessage").show();
}
@ -2794,31 +2818,40 @@
var orderId = $("#chat-order-add #orderId").val();
var sendLinks = $("#document-send-order a");
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
socket.send_message({
"format_type": "add_message_order",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_order",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
$("#chat-order-add #chat").val("");
$("#document-send-order").html("");
});
$("#chat-order-add #chat").val("");
$("#document-send-order").html("");
})();
} else {
$("#chat-order-add .errorEmptyMessage").show();
}
@ -2836,35 +2869,45 @@
var documentSendIds = $("#documentSendIds").val();
var teamIds = $("#team-chat-form #teamIds").val();
var sendLinks = $("#document-send a");
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
socket.send_message({
"format_type": "add_message_team",
"data": {
"sender_id": senderId,
// "recipent_id": recipentId,
"chat_message": chatMessage,
"team_id": teamId,
"team_ids": teamIds,
// "order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_team",
"data": {
"sender_id": senderId,
// "recipent_id": recipentId,
"chat_message": chatMessage,
"team_id": teamId,
"team_ids": teamIds,
// "order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
});
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
})();
} else {
$("#team-chat-form .errorEmptyMessage").show();
}
@ -2888,7 +2931,7 @@
var _loaders = __webpack_require__(4);
var _messageCounters = __webpack_require__(22);
var _messageCounters = __webpack_require__(23);
function getUserPlace() {
/**

@ -48,17 +48,15 @@
var _ChatCustomerPageController = __webpack_require__(29);
var _BINDS = __webpack_require__(21);
var _parts = __webpack_require__(25);
var _BINDS = __webpack_require__(22);
var _chats = __webpack_require__(27);
var _documents = __webpack_require__(24);
var _documents = __webpack_require__(25);
var _wsChatConnect = __webpack_require__(28);
var _notes = __webpack_require__(23);
var _notes = __webpack_require__(24);
var _archiveProjects = __webpack_require__(26);
@ -82,7 +80,7 @@
(0, _BINDS.bindOrders)();
(0, _BINDS.bindOrderInfo)();
(0, _BINDS.bindOnTabs)();
(0, _parts.restoreTabFromHash)();
(0, _BINDS.restoreTabFromHash)();
(0, _BINDS.bindUserContacts)();
(0, _BINDS.bindGetUserMessages)();
(0, _archiveProjects.bindArchiveProjects)();
@ -191,23 +189,27 @@
var _document_attach_file_tmpl2 = _interopRequireDefault(_document_attach_file_tmpl);
var _note_tmpl = __webpack_require__(13);
var _document_link_tmpl = __webpack_require__(13);
var _document_link_tmpl2 = _interopRequireDefault(_document_link_tmpl);
var _note_tmpl = __webpack_require__(14);
var _note_tmpl2 = _interopRequireDefault(_note_tmpl);
var _order_info_tmpl = __webpack_require__(14);
var _order_info_tmpl = __webpack_require__(15);
var _order_info_tmpl2 = _interopRequireDefault(_order_info_tmpl);
var _stage_contractor_approve_tmpl = __webpack_require__(15);
var _stage_contractor_approve_tmpl = __webpack_require__(16);
var _stage_contractor_approve_tmpl2 = _interopRequireDefault(_stage_contractor_approve_tmpl);
var _document_before_upload_tmpl = __webpack_require__(16);
var _document_before_upload_tmpl = __webpack_require__(17);
var _document_before_upload_tmpl2 = _interopRequireDefault(_document_before_upload_tmpl);
var _switch_to_protected_tmpl = __webpack_require__(17);
var _switch_to_protected_tmpl = __webpack_require__(18);
var _switch_to_protected_tmpl2 = _interopRequireDefault(_switch_to_protected_tmpl);
@ -223,6 +225,7 @@
bntCompleteStage_tmpl: _bntCompleteStage_tmpl2.default,
btnSendReview_tmpl: _btnSendReview_tmpl2.default,
document_attach_file_tmpl: _document_attach_file_tmpl2.default,
document_link_tmpl: _document_link_tmpl2.default,
note_tmpl: _note_tmpl2.default,
order_info_tmpl: _order_info_tmpl2.default,
stage_contractor_approve_tmpl: _stage_contractor_approve_tmpl2.default,
@ -251,7 +254,7 @@
};
function _template() {
return '<!-- this {stage_num: \'...\', form_name: \'...\', orderId: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <!-- <p>\u042D\u0422\u0410\u041F ' + this.stage_num + ' </p> ' + this.stage_status + ' -->\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : 'не согласован') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n <form class="' + this.form_name + ' js-stage-form" data-stage-id="' + (this.stage && this.stage.id ? this.stage.id : '') + '"\n id="stage-form-' + (this.stage && this.stage.id ? this.stage.id : '') + '">\n <label>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</label>\n <input class="form-control" type="text" name="name"\n value="' + (this.stage && this.stage.name ? this.stage.name : '') + '">\n <p class="error error-name"></p>\n <label>\u0426\u0435\u043D\u0430</label>\n <input class="form-control" type="text" name="cost"\n value="' + (this.stage && this.stage.cost ? this.stage.cost : '') + '">\n <p class="error error-cost"></p>\n <input class="form-control" name="pos" type="hidden"\n value="' + (this.stage && this.stage.pos ? this.stage.pos : this.stage_num) + '">\n <p class="error error-pos"></p>\n <input class="form-control orderStagesInput" type="hidden" name="order"\n value="' + this.orderId + '">\n <input class="form-control" type="hidden" name="status" value="send_approve">\n <label>\u0421\u0440\u043E\u043A</label>\n <input class="term-picker form-control datepicker" type="text" name="term"\n value="' + (this.stage && this.stage.term ? this.stage.term : '') + '">\n <p class="error error-term"></p>\n <label>\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430 ' + this.stage_num + '</label>\n <input class="form-control" type="text" name="result"\n value="' + (this.stage && this.stage.result ? this.stage.result : '') + '">\n <p class="error error-result"></p>\n </form>\n</div>';
return '<!-- this {stage_num: \'...\', form_name: \'...\', orderId: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <!-- <p>\u042D\u0422\u0410\u041F ' + this.stage_num + ' </p> ' + this.stage_status + ' -->\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : '') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n <form class="' + this.form_name + ' js-stage-form" data-stage-id="' + (this.stage && this.stage.id ? this.stage.id : '') + '"\n id="stage-form-' + (this.stage && this.stage.id ? this.stage.id : '') + '">\n <label>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</label>\n <input class="form-control" type="text" name="name"\n value="' + (this.stage && this.stage.name ? this.stage.name : '') + '">\n <p class="error error-name"></p>\n <label>\u0426\u0435\u043D\u0430</label>\n <input class="form-control" type="text" name="cost"\n value="' + (this.stage && this.stage.cost ? this.stage.cost : '') + '">\n <p class="error error-cost"></p>\n <input class="form-control" name="pos" type="hidden"\n value="' + (this.stage && this.stage.pos ? this.stage.pos : this.stage_num) + '">\n <p class="error error-pos"></p>\n <input class="form-control orderStagesInput" type="hidden" name="order"\n value="' + this.orderId + '">\n <input class="form-control" type="hidden" name="status" value="send_approve">\n <label>\u0421\u0440\u043E\u043A</label>\n <input class="term-picker form-control datepicker" type="text" name="term"\n value="' + (this.stage && this.stage.term ? this.stage.term : '') + '">\n <p class="error error-term"></p>\n <label>\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430 ' + this.stage_num + '</label>\n <input class="form-control" type="text" name="result"\n value="' + (this.stage && this.stage.result ? this.stage.result : '') + '">\n <p class="error error-result"></p>\n </form>\n</div>';
};
/***/ },
@ -269,7 +272,7 @@
};
function _template() {
return '<!-- this {stage_num: \'...\', stage_status: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing">\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : 'не согласован') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n\n <div class="stage-data">\n ' + this.stage.name + '\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class="stage-data">\n ' + this.stage.result + '\n </div>\n \u0426\u0435\u043D\u0430\n <div class="stage-data">\n ' + this.stage.cost + ' \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class="stage-data">\n \u0434\u043E ' + this.stage.term + '\n </div>\n <div class="annotate">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>';
return '<!-- this {stage_num: \'...\', stage_status: \'...\', stage: {...} -->\n<div class="numberStepp box-sizing"\n style="border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px">\n <div class="review-type" style="width: 100%">\n <div class="alignleft">\n <span>\u042D\u0422\u0410\u041F ' + this.stage_num + '</span>\n </div>\n <div class="alignright">\n <span class="stage-status"> ' + (this.stage_status ? this.stage_status : '') + '</span>\n </div>\n <div style="clear: both;"></div>\n </div>\n\n <div class="stage-data">\n ' + this.stage.name + '\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class="stage-data">\n ' + this.stage.result + '\n </div>\n \u0426\u0435\u043D\u0430\n <div class="stage-data">\n ' + this.stage.cost + ' \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class="stage-data">\n \u0434\u043E ' + this.stage.term + '\n </div>\n <div class="annotate">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>';
};
/***/ },
@ -305,7 +308,7 @@
};
function _template() {
return "<!--className senderName message={...}-->\n<div class=\"col-lg-12 insetCommChat " + this.className + "\">\n <div class=\"topCommChat\">\n <p class=\"nameCommChat\">" + this.senderName + "</p><span>" + this.message.created + "</span>\n </div>\n <p class=\"textCommChat\">" + this.message.text + "</p>\n</div>";
return "<!--className senderName message={...}-->\n<div class=\"col-lg-12 insetCommChat " + this.className + "\">\n <div class=\"message-header\">\n <div class=\"sender_name\">" + this.senderName + "</div><div class=\"created\">" + this.message.created + "</div>\n </div>\n <div class=\"message-body\">\n " + this.message.text + "\n </div>\n</div>";
};
/***/ },
@ -323,7 +326,7 @@
};
function _template() {
return "<!-- this {stage: {...}, note_text-->\n<div style=\"margin: 10px 0\">\n \u0412 \u0440\u0430\u0431\u043E\u0442\u0435: " + this.stage.name + " <br>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430: " + this.stage.result + " <br>\n \u0421\u0440\u043E\u043A \u0441\u0434\u0430\u0447\u0438: " + this.stage.term + "<br>\n <span class=\"select\">" + this.stage.cost + "</span> \u0440\n <div class=\"note\">\n " + this.note_text + "\n </div>\n</div>";
return "<!-- this {stage: {...}, note_text-->\n<div style=\"margin: 10px 0\">\n \u0412 \u0440\u0430\u0431\u043E\u0442\u0435: " + this.stage.name + " <br>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430: " + this.stage.result + " <br>\n \u0421\u0440\u043E\u043A \u0441\u0434\u0430\u0447\u0438: <span class=\"select js-select\">" + this.stage.term + "</span><br>\n <span class=\"select js-select\">" + this.stage.cost + "</span> \u0440\n <div class=\"note\">\n " + this.note_text + "\n </div>\n</div>";
};
/***/ },
@ -359,7 +362,7 @@
};
function _template() {
return "<div style=\"margin-left: -27px; margin-right: -27px; text-align: center\" id=\"send-review\">\n <a href=\"#\"\n class=\"chat-button icon-check js-btnSendReview\"\n style=\"padding-left: 10px; padding-right: 10px\">\u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n</div>";
return "<div id=\"send-review\" style=\"margin-left: -27px; margin-right: -27px; text-align: center\">\n <a href=\"#\"\n class=\"chat-button icon-close_chat-positive js-btnComplete\"\n style=\"padding: 25px 10px;\"\n data-review-type=\"positive\"> \u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n <a href=\"#\"\n class=\"chat-button icon-close_chat-negative js-btnComplete\"\n style=\"padding: 25px 10px;\"\n data-review-type=\"negative\"> \u0417\u0410\u041A\u0420\u042B\u0422\u042C \u041F\u0420\u041E\u0415\u041A\u0422 \u0418 \u041E\u0421\u0422\u0410\u0412\u0418\u0422\u042C \u041E\u0422\u0417\u042B\u0412\n </a>\n</div>\n";
};
/***/ },
@ -377,7 +380,7 @@
};
function _template() {
return "<!--href, text, document_id, -->\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"" + this.href + " \">" + this.text + "</a>\n <div class=\"remove-document\" data-id=\"" + this.document_id + "\" style=\"right:-10px;\"></div>\n</li>\n\n<!--\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"/chat/download/ v.file \"> v.file </a>\n <div class=\"remove-document\" data-id=\" v.id \" style=\"right:-10px;\"></div>\n</li>\n-->";
return "<!--href, document_id, text -->\n<li style=\"word-break: break-all;\">\n <a class=\"file-link\" href=\"" + this.href + " \">" + this.text + "</a>\n <div class=\"remove-document\" data-id=\"" + this.document_id + "\" style=\"right:-10px;\"></div>\n</li>";
};
/***/ },
@ -395,14 +398,14 @@
};
function _template() {
return "<!-- this {text: '...', node_id: '...' -->\n<div class=\"note-wrapper\">\n <li>\n " + this.text + "\n </li>\n <div class=\"remove-note\" data-id=\"" + this.note_id + "\" style=\"right:-10px;\"></div>\n</div>\n";
return "<!-- href, text -->\n<div>\n \u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \u0444\u0430\u0439\u043B. \u0441\u043A\u0430\u0447\u0430\u0442\u044C: <br>\n <a href=\"" + this.href + "\">\n " + this.text + "\n </a>\n</div>";
};
/***/ },
/* 14 */
/***/ function(module, exports) {
'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
@ -413,14 +416,14 @@
};
function _template() {
return '<!-- this {order: {...} -->\n<tr>\n <td>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</td>\n <td>' + this.order.project.name + '</td>\n</tr>\n<tr>\n <td>\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430</td>\n <td>' + (this.order.secure ? 'Выбрана' : 'Не выбрана') + '</td>\n</tr>\n<tr>\n <td>\u0422\u0438\u043F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.building_classification ? this.order.project.realty.building_classification.name : 'не задан') + '</td>\n<tr>\n <td>\u041A\u043B\u0430\u0441\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.construction_type ? this.order.project.realty.construction_type.name : 'не задана') + '</td>\n</tr>';
return "<!-- this {text: '...', node_id: '...' -->\n<div class=\"note-wrapper\">\n <li>\n " + this.text + "\n </li>\n <div class=\"remove-note\" data-id=\"" + this.note_id + "\" style=\"right:-10px;\"></div>\n</div>\n";
};
/***/ },
/* 15 */
/***/ function(module, exports) {
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
@ -431,7 +434,7 @@
};
function _template() {
return "<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->\n<div class=\"numberStepp box-sizing\">\n <div class=\"review-type\" style=\"width: 100%\">\n <div class=\"alignleft\">\n <span>\u042D\u0422\u0410\u041F " + this.stage_num + "</span>\n </div>\n <div class=\"alignright\">\n <span class=\"stage-status\"> " + this.stage_status + "</span>\n </div>\n <div style=\"clear: both;\"></div>\n </div>\n\n <div class=\"select\">\n " + this.stage.name + "\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class=\"select\">\n " + this.stage.result + "\n </div>\n \u0426\u0435\u043D\u0430\n <div class=\"select\">\n " + this.stage.cost + " \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class=\"select\">\n \u0434\u043E " + this.stage.term + "\n </div>\n <div class=\"annotate\">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>";
return '<!-- this {order: {...} -->\n<tr>\n <td>\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435</td>\n <td>' + this.order.project.name + '</td>\n</tr>\n<tr>\n <td>\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430</td>\n <td>' + (this.order.secure ? 'Выбрана' : 'Не выбрана') + '</td>\n</tr>\n<tr>\n <td>\u0422\u0438\u043F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.building_classification ? this.order.project.realty.building_classification.name : 'не задан') + '</td>\n<tr>\n <td>\u041A\u043B\u0430\u0441\u0441\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0437\u0434\u0430\u043D\u0438\u044F</td>\n <td>' + (this.order.project.realty.construction_type ? this.order.project.realty.construction_type.name : 'не задана') + '</td>\n</tr>';
};
/***/ },
@ -449,7 +452,7 @@
};
function _template() {
return "<!-- this {text: '...', file: {...} -->\n<div style=\"float: left\">\n <a href=\"/chat/download/" + this.file.name + "\" class=\"send-doc\" data-id=\"" + this.file.id + "\"> " + this.file.name + " </a>\n <div class=\"remove-document\" data-id=\"" + this.file.id + "\"\n style=\"right:-10px;float:left;position: static;\"></div>\n</div>\n<div style=\"clear: both\"></div>;";
return "<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->\n<div class=\"numberStepp box-sizing\"\n style=\"border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px\">\n <div class=\"review-type\" style=\"width: 100%\">\n <div class=\"alignleft\">\n <span>\u042D\u0422\u0410\u041F " + this.stage_num + "</span>\n </div>\n <div class=\"alignright\">\n <span class=\"stage-status\"> " + this.stage_status + "</span>\n </div>\n <div style=\"clear: both;\"></div>\n </div>\n\n <div class=\"select\">\n " + this.stage.name + "\n </div>\n \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u044D\u0442\u0430\u043F\u0430\n <div class=\"select\">\n " + this.stage.result + "\n </div>\n \u0426\u0435\u043D\u0430\n <div class=\"select\">\n " + this.stage.cost + " \u20BD\n </div>\n \u0421\u0440\u043E\u043A\n <div class=\"select\">\n \u0434\u043E " + this.stage.term + "\n </div>\n <div class=\"annotate\">\n \u0421\u0440\u043E\u043A \u044D\u0442\u0430\u043F\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\n </div>\n\n</div>";
};
/***/ },
@ -467,11 +470,29 @@
};
function _template() {
return "<!-- no context -->\n<div class=\"switch\">\n <span class=\"select\">\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0430</span>\n <div class=\"row mod-align-center\">\n <div class=\"col-lg-1\">\n <input name=\"price_and_term_required\" id=\"switch-to-protected\" class=\"custom-checkbox\" type=\"checkbox\">\n </div>\n <div class=\"col-lg-11\">\n <label for=\"safe\" style=\"font-weight: normal\" class=\"\">\n \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0439 \u0441\u0434\u0435\u043B\u043A\u0438\n </label>\n </div>\n </div>\n</div>";
return "<!-- this {text: '...', file: {...} -->\n<div style=\"float: left\">\n <a href=\"/chat/download/" + this.file.name + "\" class=\"send-doc\" data-id=\"" + this.file.id + "\"> " + this.file.name + " </a>\n <div class=\"remove-document\" data-id=\"" + this.file.id + "\"\n style=\"right:-10px;float:left;position: static;\"></div>\n</div>\n<div style=\"clear: both\"></div>;";
};
/***/ },
/* 18 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (ctx) {
return _template.call(ctx, ctx);
};
function _template() {
return "<!-- no context -->\n<div class=\"switch\" style=\"font-size: 12px\">\n <span class=\"select\">\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0441\u0434\u0435\u043B\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0430</span>\n <div class=\"row mod-align-center\">\n <div class=\"col-lg-1\">\n <input name=\"price_and_term_required\" id=\"switch-to-protected\" class=\"custom-checkbox\" type=\"checkbox\">\n </div>\n <div class=\"col-lg-11\">\n <label for=\"safe\" style=\"font-weight: normal\" class=\"\">\n \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0439 \u0441\u0434\u0435\u043B\u043A\u0438\n </label>\n </div>\n </div>\n</div>";
};
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -868,7 +889,7 @@
exports.StageInWork = StageInWork;
/***/ },
/* 19 */
/* 20 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -921,9 +942,6 @@
key: '_onLoadData',
value: function _onLoadData(json) {
var self = this;
// console.log('mesages json = ', json);
// console.log('$inbox = ', this.$inbox);
// console.log("messages render start");
self.$inbox.html("");
$.each(json.results, function (i, v) {
var senderName = 'Вы';
@ -951,7 +969,7 @@
exports.MessagesController = MessagesController;
/***/ },
/* 20 */
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1038,7 +1056,7 @@
exports.DocumentsController = DocumentsController;
/***/ },
/* 21 */
/* 22 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1046,15 +1064,15 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bindCtrlEnterSendMessage = exports.bindDeleteContact = exports.bindTeams = exports.bindGetUserMessages = exports.bindUserContacts = exports.bindOnTabs = exports.bindArbitrationSend = exports.bindOrderInfo = exports.bindOrders = undefined;
exports.restoreTabFromHash = exports.bindCtrlEnterSendMessage = exports.bindDeleteContact = exports.bindTeams = exports.bindGetUserMessages = exports.bindUserContacts = exports.bindOnTabs = exports.bindArbitrationSend = exports.bindOrderInfo = exports.bindOrders = undefined;
var _utils = __webpack_require__(3);
var _messageCounters = __webpack_require__(22);
var _messageCounters = __webpack_require__(23);
var _loaders = __webpack_require__(4);
var _notes = __webpack_require__(23);
var _notes = __webpack_require__(24);
function dialog(message, yesCallback, notCallback) {
$("#dialog_delete .modal-title").html(message);
@ -1071,6 +1089,62 @@
});
}
function isNullOrders() {
var buttons = {
btnApprove: $('#btnApprove'), // "Согласовать"
btnChange: $('#btnChange'), // "Отправить на внесение изменений"
btnsToArchive: $('.js-btnToArchive'), // "Отказаться от заказа"
btnToArchive: $('#btnToArchive'), // "Отказаться и отправить в Архив"
btnReserve: $('#btnReserve'), // "Зарезервировать"
btnsArbitration: $('.js-btnArbitration'), // "Обратиться в арбитраж"
btnSendReview: $('#order-review-add') // "Оставить отзыв"
};
var stages_elements = {
$approve: $('#conditions-approve'), //1. Согласование условия
$reserve: $('#reserveSpace'), //2. Резервирование (Отобразить)
$works: $('#completeWork') //3. Выполненная работа
};
var $orderStagesContainer = $('#order-stages');
// hide all buttons
for (var key in buttons) {
if (buttons[key].length) buttons[key].hide();
}
for (var _key in stages_elements) {
stages_elements[_key].show();
}
if ($orderStagesContainer.length) $orderStagesContainer.parent().hide();
}
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
var obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
var $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
function bindOrders() {
$('.order-block').on('click', function (event) {
event.preventDefault();
@ -1167,6 +1241,7 @@
}
function bindTeams() {
var message_tmpl = (0, _loaders.loadTemplate)('message_tmpl');
$('.team-block').on('click', function () {
(0, _messageCounters.onClickCardWithCount)($(this));
$('.team-order-block, .team-block').each(function () {
@ -1217,7 +1292,10 @@
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({ className: className, senderName: senderName, message: v });
// inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>';
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -1325,7 +1403,13 @@
var ordHashId = liveHash.replace("#order", "");
$("#orderBlock" + ordHashId).trigger('click');
} else {
$(".order-block").first().trigger('click');
var $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
}, 100);
break;
@ -1399,6 +1483,7 @@
}
function bindGetUserMessages() {
var message_tmpl = (0, _loaders.loadTemplate)('message_tmpl');
$('.user-block').on('click', function () {
(0, _messageCounters.onClickCardWithCount)($(this));
// var newCount = parseInt($("#count-tab-contact").text());
@ -1416,9 +1501,6 @@
var sumSenderRecipent = parseInt(userId) + parseInt(contactId);
$("#message-chat-space").removeClass().addClass("contact-space" + sumSenderRecipent);
// var currNewCount = parseInt($(".contact-count-" + sumSenderRecipent).text());
// var resCount = newCount - currNewCount;
// $("#count-tab-contact").text(resCount);
$(".contact-count-" + sumSenderRecipent).text(0);
var docList = document.getElementById('documentSpace');
inbox.innerHTML = '';
@ -1444,7 +1526,10 @@
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({ className: className, senderName: senderName, message: v });
// '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>'
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -1558,9 +1643,10 @@
exports.bindTeams = bindTeams;
exports.bindDeleteContact = bindDeleteContact;
exports.bindCtrlEnterSendMessage = bindCtrlEnterSendMessage;
exports.restoreTabFromHash = restoreTabFromHash;
/***/ },
/* 22 */
/* 23 */
/***/ function(module, exports) {
'use strict';
@ -1640,7 +1726,7 @@
exports.onClickCardWithCount = onClickCardWithCount;
/***/ },
/* 23 */
/* 24 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1770,7 +1856,7 @@
exports.bindRemoveNotes = bindRemoveNotes;
/***/ },
/* 24 */
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1805,9 +1891,6 @@
dataType: 'json',
done: function done(e, data) {
$.each(data.result.files, function (index, file) {
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>' +
// '<div style="clear: both"></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send-contact");
});
@ -1829,7 +1912,6 @@
recipent: $("#chat-order-add #recipentId").val(),
order: $("#chat-order-add #orderId").val()
};
// console.log(data.formData);
});
$('#upload-document-order').fileupload({
@ -1842,8 +1924,6 @@
dataType: 'json',
done: function done(e, data) {
$.each(data.result.files, function (index, file) {
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="'+ file.id+'" style="right:-10px;float:left;position: static;"></div></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send-order");
});
@ -1882,8 +1962,6 @@
var currentValue = $("#documentSendIds").val();
currentValue += file.id + ';';
$("#documentSendIds").val(currentValue);
// var htmlImg = '<div style="float: left"><a href="/chat/download/' + file.name + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>' +
// '<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>';
var htmlImg = document_before_upload_tmpl({ file: file });
$(htmlImg).appendTo("#document-send");
});
@ -1927,42 +2005,6 @@
exports.uploadDocumentsTeamInit = uploadDocumentsTeamInit;
exports.bindRemoveDocuments = bindRemoveDocuments;
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.restoreTabFromHash = undefined;
var _utils = __webpack_require__(3);
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
var obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
$('.order-block').first().trigger('click');
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
exports.restoreTabFromHash = restoreTabFromHash;
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
@ -2005,54 +2047,9 @@
$(this).removeClass('orAct');
});
$this.addClass('orAct');
// var inbox = document.getElementById('message-chat-order-space');
// var docList = document.getElementById('documentOrderSpace');
// inbox.innerHTML = '';
// docList.innerHTML = '';
var orderId = $this.data('id');
// let projectId = $this.data('project-id');
// let recipentId = $this.data('recipent-id');
// let orderName = $this.data('order-name');
location.hash = '#order' + orderId;
// console.log(orderId);
window.chatController.create(orderId);
// hide all buttons
// console.log('chat-buttons -->', $(".chat-button"));
// $(".chat-button").hide();
// $.ajax({
// url: '/api/message',
// type: 'GET',
// beforeSend: function (xhr) {
// xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
// },
// data: {'order': orderId, 'team__isnull': 'true'},
// dataType: 'json',
// success: function (json) {
// $.each(json.results, function (i, v) {
// var senderName = 'Вы';
// var className = 'youChat';
//
// if (v.sender.id !== userId) {
// senderName = v.sender.username;
// className = '';
// }
//
// inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>';
//
// });
// var height = inbox.scrollHeight;
// inbox.scrollTop = height;
// }
// });
// $("#order-stages").html("");
// $("#completeWork").hide();
// $("#add-form-order-note").hide();
// $("#reserveSpace").hide();
});
}
@ -2060,13 +2057,17 @@
/***/ },
/* 27 */
/***/ function(module, exports) {
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.chatTeamsInit = exports.chatOrdersInit = exports.chatContactsInit = undefined;
var _loaders = __webpack_require__(4);
function chatContactsInit() {
/**
* Bind на кнопку "Отправить" в Закладке "Личные контакты"
@ -2079,33 +2080,40 @@
var sendLinks = $("#document-send-contact a");
if (chatMessage || sendLinks.length > 0) {
$("#contact-chat-form .errorEmptyMessage").hide();
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
// console.log("sendLinkIds = ", sendLinkIds);
socket.send_message({
"format_type": "add_message_contact",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
$("#contact-chat-form .errorEmptyMessage").hide();
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_contact",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
$("#chat").val("");
$("#document-send-contact").html("");
});
$("#chat").val("");
$("#document-send-contact").html("");
})();
} else {
$("#contact-chat-form .errorEmptyMessage").show();
}
@ -2124,31 +2132,40 @@
var orderId = $("#chat-order-add #orderId").val();
var sendLinks = $("#document-send-order a");
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
socket.send_message({
"format_type": "add_message_order",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_order",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
$("#chat-order-add #chat").val("");
$("#document-send-order").html("");
});
$("#chat-order-add #chat").val("");
$("#document-send-order").html("");
})();
} else {
$("#chat-order-add .errorEmptyMessage").show();
}
@ -2166,35 +2183,45 @@
var documentSendIds = $("#documentSendIds").val();
var teamIds = $("#team-chat-form #teamIds").val();
var sendLinks = $("#document-send a");
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' + '<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' + '<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
});
socket.send_message({
"format_type": "add_message_team",
"data": {
"sender_id": senderId,
// "recipent_id": recipentId,
"chat_message": chatMessage,
"team_id": teamId,
"team_ids": teamIds,
// "order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
var sendLinkIds;
var documentLinks;
var documentAttachFiles;
(function () {
sendLinkIds = "";
documentLinks = "";
documentAttachFiles = "";
var document_attach_file_tmpl = (0, _loaders.loadTemplate)('document_attach_file_tmpl');
var document_link_tmpl = (0, _loaders.loadTemplate)('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += document_link_tmpl({ href: $(this).attr('href'), text: $(this).text() });
documentAttachFiles += document_attach_file_tmpl({ href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text() });
});
socket.send_message({
"format_type": "add_message_team",
"data": {
"sender_id": senderId,
// "recipent_id": recipentId,
"chat_message": chatMessage,
"team_id": teamId,
"team_ids": teamIds,
// "order_id": orderId,
"document_send_links": sendLinkIds,
"document_data": {
"document_links": documentLinks,
"document_attach_files": documentAttachFiles
}
}
}
});
});
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
})();
} else {
$("#team-chat-form .errorEmptyMessage").show();
}
@ -2218,7 +2245,7 @@
var _loaders = __webpack_require__(4);
var _messageCounters = __webpack_require__(22);
var _messageCounters = __webpack_require__(23);
function getUserPlace() {
/**
@ -2351,9 +2378,9 @@
var _StagesCustomerController = __webpack_require__(30);
var _MessagesControllers = __webpack_require__(19);
var _MessagesControllers = __webpack_require__(20);
var _DocumentsControllers = __webpack_require__(20);
var _DocumentsControllers = __webpack_require__(21);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -2401,7 +2428,7 @@
var _loaders = __webpack_require__(4);
var _Stages = __webpack_require__(18);
var _Stages = __webpack_require__(19);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -2418,12 +2445,12 @@
var STATUSES = {
'not_agreed': 'не согласован',
'send_approve': 'на согласовании',
'agreed': 'согласовано',
'cancel_approve': 'исполнитель отказался',
'in_process': 'в процессе',
'completed': 'завершен',
'closed': 'закрыт'
'send_approve': '...на согласовании',
'agreed': '...согласовано',
'cancel_approve': '...исполнитель отказался',
'in_process': '...в процессе',
'completed': '...завершен',
'closed': '...закрыт'
};
@ -2536,6 +2563,11 @@
this.stages_elements.$works.find('.js-select').addClass("select");
var $swith_to_protected = this.$orderStagesContainer.siblings('.switch');
if ($swith_to_protected.length) $swith_to_protected.remove();
this.stages_elements.$reserve.css({ 'border-top': 'none' });
this.stages_elements.$works.css({ 'border-top': 'none' });
$('#stagesWork').find('.js-select').addClass('select');
this.stages_elements.$reserve.find('.js-select').addClass('select');
if ($('#send-review').length) $('#send-review').remove();
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
@ -2573,6 +2605,7 @@
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
this.buttons.btnsArbitration.hide();
}
} // Нет Этапов
@ -2588,6 +2621,7 @@
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
this.buttons.btnsArbitration.hide();
}
} // Статус "Не согласован"
@ -2632,11 +2666,14 @@
// Block-Stage-2
this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-btnArbitration').hide();
this.stages_elements.$reserve.css({ 'border-top': '1px solid black' });
// Block-Stage-3
this.stages_elements.$works.show();
this.stages_elements.$works.css({ 'border-top': '1px solid black' });
this._renderStageInWork('work_in_process_tmpl');
if (this.secureOrder) {} else {
this.stages_elements.$reserve.hide();
this.buttons.btnsArbitration.hide();
}
} // Статус "В процессе"/"Завершен"/"Закрыт"
@ -2775,6 +2812,8 @@
} else {
if (this.stages_elements.$works.find('#send-review').length) this.stages_elements.$works.find('#send-review').remove();
}
$('#stagesWork').find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-select').removeClass('select');
} else {
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
@ -2918,8 +2957,9 @@
this.buttons.btnSendReview.unbind().on("click", this._onBtnSendReview.bind(self));
$('#paymentfromSite').unbind().on('click', this._onBtnPaymentFromSite.bind(self));
$("#reserve-stage-modal").find('#stage-num').unbind().on('change', function (event) {
// console.log("select stage cost = ", self.stages[this.value - 1].data.cost);
$("#reserve-stage-modal").find('#stage-cost').html(self.stages[this.value - 1].data.cost);
console.log("this.value = ", this.value);
console.log(this.value ? this.value : 1 - 1);
$("#reserve-stage-modal").find('#stage-cost').html(self.stages[(this.value ? this.value : 1) - 1].data.cost);
});
}
@ -3139,6 +3179,8 @@
key: '_onBtnReviewOpenModal',
value: function _onBtnReviewOpenModal(event) {
event.preventDefault();
var review_type = $(event.target).data('review-type');
$('#review-add').find('input[type=radio][value=' + review_type + ']').prop("checked", true);
$('#review-add').modal('show');
} // Открыть модальное окно "Оставить отзыв"

@ -18,6 +18,65 @@ function dialog(message, yesCallback, notCallback) {
});
}
function isNullOrders() {
let buttons = {
btnApprove: $('#btnApprove'), // "Согласовать"
btnChange: $('#btnChange'), // "Отправить на внесение изменений"
btnsToArchive: $('.js-btnToArchive'), // "Отказаться от заказа"
btnToArchive: $('#btnToArchive'), // "Отказаться и отправить в Архив"
btnReserve: $('#btnReserve'), // "Зарезервировать"
btnsArbitration: $('.js-btnArbitration'),// "Обратиться в арбитраж"
btnSendReview: $('#order-review-add') // "Оставить отзыв"
};
let stages_elements = {
$approve: $('#conditions-approve'), //1. Согласование условия
$reserve: $('#reserveSpace'), //2. Резервирование (Отобразить)
$works: $('#completeWork') //3. Выполненная работа
};
let $orderStagesContainer = $('#order-stages');
// hide all buttons
for (let key in buttons) {
if (buttons[key].length)buttons[key].hide();
}
for (let key in stages_elements) {
stages_elements[key].show();
}
if ($orderStagesContainer.length) $orderStagesContainer.parent().hide();
}
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
let obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
let $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
function bindOrders() {
$('.order-block').on('click', function (event) {
event.preventDefault();
@ -114,6 +173,7 @@ function bindOrderInfo() {
}
function bindTeams() {
let message_tmpl = loadTemplate('message_tmpl');
$('.team-block').on('click', function () {
onClickCardWithCount($(this));
$('.team-order-block, .team-block').each(function () {
@ -164,9 +224,10 @@ function bindTeams() {
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({className: className, senderName: senderName, message: v});
// inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>';
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -276,7 +337,13 @@ function bindOnTabs() {
var ordHashId = liveHash.replace("#order", "");
$("#orderBlock" + ordHashId).trigger('click');
} else {
$(".order-block").first().trigger('click');
let $order_block = $(".order-block");
if ($order_block.length) {
$order_block.first().trigger('click');
} else {
window.location.hash = '#order';
isNullOrders();
}
}
}, 100);
break;
@ -351,6 +418,7 @@ function bindUserContacts() {
}
function bindGetUserMessages() {
let message_tmpl = loadTemplate('message_tmpl');
$('.user-block').on('click', function () {
onClickCardWithCount($(this));
// var newCount = parseInt($("#count-tab-contact").text());
@ -368,9 +436,6 @@ function bindGetUserMessages() {
var sumSenderRecipent = parseInt(userId) + parseInt(contactId);
$("#message-chat-space").removeClass().addClass("contact-space" + sumSenderRecipent);
// var currNewCount = parseInt($(".contact-count-" + sumSenderRecipent).text());
// var resCount = newCount - currNewCount;
// $("#count-tab-contact").text(resCount);
$(".contact-count-" + sumSenderRecipent).text(0);
var docList = document.getElementById('documentSpace');
inbox.innerHTML = '';
@ -396,9 +461,10 @@ function bindGetUserMessages() {
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>';
inbox.innerHTML += message_tmpl({className: className, senderName: senderName, message: v});
// '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
// '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
// '<p class="textCommChat">' + v.text + '</p></div>'
});
var height = inbox.scrollHeight;
inbox.scrollTop = height;
@ -520,4 +586,5 @@ export {
bindTeams,
bindDeleteContact,
bindCtrlEnterSendMessage,
restoreTabFromHash,
}

@ -15,12 +15,12 @@ let message_format = {
const STATUSES = {
'not_agreed': 'не согласован',
'send_approve': 'на согласовании',
'agreed': 'согласовано',
'cancel_approve': 'исполнитель отказался',
'in_process': 'в процессе',
'completed': 'завершен',
'closed': 'закрыт',
'send_approve': '...на согласовании',
'agreed': '...согласовано',
'cancel_approve': '...исполнитель отказался',
'in_process': '...в процессе',
'completed': '...завершен',
'closed': '...закрыт',
};
@ -119,6 +119,11 @@ class StagesController {
this.stages_elements.$approve.find('.js-select').addClass("select");
this.stages_elements.$reserve.find('.js-select').addClass("select");
this.stages_elements.$works.find('.js-select').addClass("select");
this.stages_elements.$reserve.css({'border-top': 'none'});
this.stages_elements.$works.css({'border-top': 'none'});
$('#stagesWork').find('.js-select').addClass('select');
this.stages_elements.$reserve.find('.js-select').addClass('select');
if ($('#send-review').length)$('#send-review').remove();
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
@ -152,6 +157,7 @@ class StagesController {
if (this.secureOrder){
this.stages_elements.$reserve.find('.js-help-text').show();
} else {
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.find('.js-help-text').show();
this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-help-text').html(
@ -197,6 +203,7 @@ class StagesController {
this._renderStageReserved('reserved_tmpl');
this.stages_elements.$reserve.find('.js-help-text').show();
}else{
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.find('.stages-paid').html("");
this.stages_elements.$reserve.find('.js-help-text').hide();
}
@ -210,13 +217,16 @@ class StagesController {
this.buildAgreedStage();
// Block-Stage-2
this.stages_elements.$reserve.find('.js-help-text').hide();
this.stages_elements.$reserve.css({'border-top': '1px solid black'});
// Block-Stage-3
this.stages_elements.$works.show();
this.stages_elements.$works.css({'border-top': '1px solid black'});
this._renderStageInWork('work_in_process_tmpl');
if (this.secureOrder) {
// this._renderStageInWork('work_in_process_tmpl');
} else {
this.buttons.btnsArbitration.hide();
this.stages_elements.$reserve.hide();
}
} // Статус "В процессе"/"Завершен"/"Закрыт"
@ -292,6 +302,8 @@ class StagesController {
} else {
if (this.stages_elements.$works.find('#send-review').length) this.stages_elements.$works.find('#send-review').remove()
}
$('#stagesWork').find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-select').removeClass('select');
} else {
for (let stage_data of this.data.stages) {
@ -422,7 +434,11 @@ class StagesController {
_onBtnReviewOpenModal(event) {
event.preventDefault();
let review_type = $(event.target).data('review-type');
$('#review-add').find(`input[type=radio][value=${review_type}]`).prop("checked", true);
$('#review-add').modal('show');
console.log('Modal show review_type = ', review_type);
} // Открыть модальное окно "Оставить отзыв"
_onBtnSendReview(event) {

@ -15,12 +15,12 @@ let message_format = {
const STATUSES = {
'not_agreed': 'не согласован',
'send_approve': 'на согласовании',
'agreed': 'согласовано',
'cancel_approve': 'исполнитель отказался',
'in_process': 'в процессе',
'completed': 'завершен',
'closed': 'закрыт',
'send_approve': '...на согласовании',
'agreed': '...согласовано',
'cancel_approve': '...исполнитель отказался',
'in_process': '...в процессе',
'completed': '...завершен',
'closed': '...закрыт',
};
@ -126,6 +126,11 @@ class StagesController {
this.stages_elements.$works.find('.js-select').addClass("select");
let $swith_to_protected = this.$orderStagesContainer.siblings('.switch');
if ($swith_to_protected.length) $swith_to_protected.remove();
this.stages_elements.$reserve.css({'border-top': 'none'});
this.stages_elements.$works.css({'border-top': 'none'});
$('#stagesWork').find('.js-select').addClass('select');
this.stages_elements.$reserve.find('.js-select').addClass('select');
if ($('#send-review').length)$('#send-review').remove();
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
@ -162,6 +167,7 @@ class StagesController {
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
this.buttons.btnsArbitration.hide();
}
} // Нет Этапов
@ -176,6 +182,7 @@ class StagesController {
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
this.buttons.btnsArbitration.hide();
}
} // Статус "Не согласован"
@ -215,13 +222,16 @@ class StagesController {
// Block-Stage-2
this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-btnArbitration').hide();
this.stages_elements.$reserve.css({'border-top': '1px solid black'});
// Block-Stage-3
this.stages_elements.$works.show();
this.stages_elements.$works.css({'border-top': '1px solid black'});
this._renderStageInWork('work_in_process_tmpl');
if (this.secureOrder) {
} else {
this.stages_elements.$reserve.hide();
this.buttons.btnsArbitration.hide();
}
} // Статус "В процессе"/"Завершен"/"Закрыт"
@ -290,6 +300,8 @@ class StagesController {
} else {
if (this.stages_elements.$works.find('#send-review').length) this.stages_elements.$works.find('#send-review').remove()
}
$('#stagesWork').find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-select').removeClass('select');
} else {
for (let stage_data of this.data.stages) {
@ -369,8 +381,9 @@ class StagesController {
this.buttons.btnSendReview.unbind().on("click", this._onBtnSendReview.bind(self));
$('#paymentfromSite').unbind().on('click', this._onBtnPaymentFromSite.bind(self));
$("#reserve-stage-modal").find('#stage-num').unbind().on('change', function (event) {
// console.log("select stage cost = ", self.stages[this.value - 1].data.cost);
$("#reserve-stage-modal").find('#stage-cost').html(self.stages[this.value - 1].data.cost);
console.log("this.value = ", this.value);
console.log(this.value?this.value:1 - 1);
$("#reserve-stage-modal").find('#stage-cost').html(self.stages[(this.value?this.value:1) - 1].data.cost);
});
}
@ -546,6 +559,8 @@ class StagesController {
_onBtnReviewOpenModal(event) {
event.preventDefault();
let review_type = $(event.target).data('review-type');
$('#review-add').find(`input[type=radio][value=${review_type}]`).prop("checked", true);
$('#review-add').modal('show');
} // Открыть модальное окно "Оставить отзыв"

@ -1,3 +1,5 @@
import {loadTemplate} from './loaders'
function chatContactsInit() {
/**
* Bind на кнопку "Отправить" в Закладке "Личные контакты"
@ -15,15 +17,13 @@ function chatContactsInit() {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
let document_attach_file_tmpl = loadTemplate('document_attach_file_tmpl');
let document_link_tmpl = loadTemplate('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
documentLinks += document_link_tmpl({href: $(this).attr('href'), text: $(this).text()});
documentAttachFiles += document_attach_file_tmpl({href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text()});
});
// console.log("sendLinkIds = ", sendLinkIds);
socket.send_message({
"format_type": "add_message_contact",
"data": {
@ -61,12 +61,12 @@ function chatOrdersInit() {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
let document_attach_file_tmpl = loadTemplate('document_attach_file_tmpl');
let document_link_tmpl = loadTemplate('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
documentLinks += document_link_tmpl({href: $(this).attr('href'), text: $(this).text()});
documentAttachFiles += document_attach_file_tmpl({href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text()});
});
socket.send_message({
"format_type": "add_message_order",
@ -103,17 +103,17 @@ function chatTeamsInit() {
var documentSendIds = $("#documentSendIds").val();
var teamIds = $("#team-chat-form #teamIds").val();
var sendLinks = $("#document-send a");
let document_attach_file_tmpl = loadTemplate('document_attach_file_tmpl');
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
let document_attach_file_tmpl = loadTemplate('document_attach_file_tmpl');
let document_link_tmpl = loadTemplate('document_link_tmpl');
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
documentLinks += document_link_tmpl({href: $(this).attr('href'), text: $(this).text()});
documentAttachFiles += document_attach_file_tmpl({href: $(this).attr('href'), document_id: $(this).attr('data-id'), text: $(this).text()});
});
socket.send_message({
"format_type": "add_message_team",

@ -6,6 +6,7 @@ import work_in_process_tmpl from './templates/work_in_process_tmpl.html'
import bntCompleteStage_tmpl from './templates/buttons/bntCompleteStage_tmpl.html'
import btnSendReview_tmpl from './templates/buttons/btnSendReview_tmpl.html'
import document_attach_file_tmpl from './templates/links/document_attach_file_tmpl.html'
import document_link_tmpl from './templates/links/document_link_tmpl.html'
import note_tmpl from './templates/note_tmpl.html'
import order_info_tmpl from './templates/order_info_tmpl.html'
import stage_contractor_approve_tmpl from './templates/stage_contractor_approve_tmpl.html'
@ -22,6 +23,7 @@ function loadTemplate(template_name) {
bntCompleteStage_tmpl: bntCompleteStage_tmpl,
btnSendReview_tmpl: btnSendReview_tmpl,
document_attach_file_tmpl: document_attach_file_tmpl,
document_link_tmpl: document_link_tmpl,
note_tmpl: note_tmpl,
order_info_tmpl: order_info_tmpl,
stage_contractor_approve_tmpl: stage_contractor_approve_tmpl,

@ -1,27 +0,0 @@
import {getCookie} from '../utils'
function restoreTabFromHash() {
var currentHash = URI(location.href).hash();
if (currentHash.indexOf("#order") == 0) {
$("a[href='#tab2']").trigger('click');
// console.log("click on ", "#orderBlock" + currentHash.replace("#order", ""));
let obj_id = currentHash.replace("#order", "");
// console.log("obj_id = ", obj_id);
if (obj_id) {
$("#orderBlock" + currentHash.replace("#order", "")).trigger('click');
} else {
$('.order-block').first().trigger('click');
}
} else if (currentHash.indexOf("#user") == 0) {
$("a[href='#tab1']").trigger('click');
} else if (currentHash.indexOf("#teamorder") == 0 || currentHash.indexOf("#myteam") == 0) {
$("a[href='#tab3']").trigger('click');
} else {
$("a[href='#tab1']").trigger('click');
}
}
export {restoreTabFromHash}

@ -1,6 +1,12 @@
<div style="margin-left: -27px; margin-right: -27px; text-align: center" id="send-review">
<div id="send-review" style="margin-left: -27px; margin-right: -27px; text-align: center">
<a href="#"
class="chat-button icon-check js-btnSendReview"
style="padding-left: 10px; padding-right: 10px">ЗАКРЫТЬ ПРОЕКТ И ОСТАВИТЬ ОТЗЫВ
class="chat-button icon-close_chat-positive js-btnComplete"
style="padding: 25px 10px;"
data-review-type="positive"> ЗАКРЫТЬ ПРОЕКТ И ОСТАВИТЬ ОТЗЫВ
</a>
<a href="#"
class="chat-button icon-close_chat-negative js-btnComplete"
style="padding: 25px 10px;"
data-review-type="negative"> ЗАКРЫТЬ ПРОЕКТ И ОСТАВИТЬ ОТЗЫВ
</a>
</div>

@ -1,12 +1,5 @@
<!--href, text, document_id, -->
<!--href, document_id, text -->
<li style="word-break: break-all;">
<a class="file-link" href="${this.href} ">${this.text}</a>
<div class="remove-document" data-id="${this.document_id}" style="right:-10px;"></div>
</li>
<!--
<li style="word-break: break-all;">
<a class="file-link" href="/chat/download/ v.file "> v.file </a>
<div class="remove-document" data-id=" v.id " style="right:-10px;"></div>
</li>
-->

@ -1,7 +1,7 @@
<!-- href, text -->
<div>
Приложенный файл. скачать: <br>
<a href="$(this.href)">
$(this.text)
<a href="${this.href}">
${this.text}
</a>
</div>

@ -1,7 +1,9 @@
<!--className senderName message={...}-->
<div class="col-lg-12 insetCommChat ${this.className}">
<div class="topCommChat">
<p class="nameCommChat">${this.senderName}</p><span>${this.message.created}</span>
<div class="message-header">
<div class="sender_name">${this.senderName}</div><div class="created">${this.message.created}</div>
</div>
<div class="message-body">
${this.message.text}
</div>
<p class="textCommChat">${this.message.text}</p>
</div>

@ -1,11 +1,12 @@
<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->
<div class="numberStepp box-sizing">
<div class="numberStepp box-sizing"
style="border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px">
<div class="review-type" style="width: 100%">
<div class="alignleft">
<span>ЭТАП ${this.stage_num}</span>
</div>
<div class="alignright">
<span class="stage-status"> ${this.stage_status?this.stage_status:'не согласован'}</span>
<span class="stage-status"> ${this.stage_status?this.stage_status:''}</span>
</div>
<div style="clear: both;"></div>
</div>

@ -1,5 +1,6 @@
<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->
<div class="numberStepp box-sizing">
<div class="numberStepp box-sizing"
style="border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;margin-bottom: 3px">
<div class="review-type" style="width: 100%">
<div class="alignleft">
<span>ЭТАП ${this.stage_num}</span>

@ -6,7 +6,7 @@
<span>ЭТАП ${this.stage_num}</span>
</div>
<div class="alignright">
<span class="stage-status"> ${this.stage_status?this.stage_status:'не согласован'}</span>
<span class="stage-status"> ${this.stage_status?this.stage_status:''}</span>
</div>
<div style="clear: both;"></div>
</div>

@ -1,5 +1,5 @@
<!-- no context -->
<div class="switch">
<div class="switch" style="font-size: 12px">
<span class="select">Безопасная сделка не активна</span>
<div class="row mod-align-center">
<div class="col-lg-1">

@ -2,8 +2,8 @@
<div style="margin: 10px 0">
В работе: ${this.stage.name} <br>
Результат этапа: ${this.stage.result} <br>
Срок сдачи: ${this.stage.term}<br>
<span class="select">${this.stage.cost}</span> р
Срок сдачи: <span class="select js-select">${this.stage.term}</span><br>
<span class="select js-select">${this.stage.cost}</span> р
<div class="note">
${this.note_text}
</div>

@ -9,6 +9,7 @@ import {
bindTeams,
bindDeleteContact,
bindCtrlEnterSendMessage,
restoreTabFromHash,
} from './chat/BINDS'
import {
@ -20,7 +21,6 @@ import {
import {bindContractorNotes, bindOrderNotes, bindTeamNotes} from './chat/notes'
import {restoreTabFromHash} from './chat/parts'
import {bindArchiveProjects} from './chat/archiveProjects'

@ -8,9 +8,9 @@ import {
bindGetUserMessages,
bindDeleteContact,
bindCtrlEnterSendMessage,
restoreTabFromHash
} from './chat/BINDS'
import {restoreTabFromHash} from './chat/parts'
import {chatContactsInit, chatOrdersInit} from './chat/chats'
import {uploadDocumentsOrderInit, uploadDocumentsContactInit} from './chat/documents'

@ -130,7 +130,7 @@ class ChatHandler(websocket.WebSocketHandler):
sender_name = msg_data[5]
msg_time = msg_data[2].strftime("%Y-%m-%d %H:%M:%S")
if docs_links:
message += '<br><br>' + docs_links
message += docs_links
# if message_type:
# waiters = tuple(w for c, w in self.waiters if c == recipent_id)

@ -66,7 +66,7 @@ class MessageSerializer(ModelSerializer):
documents_str = '<br>'.join([
'Приложенный файл. скачать: <br><a target="_blank" href="/chat/download/' + doc.file.name + '">' + doc.file.name + '</a>'
for doc in documents])
out += '<br><br>' + documents_str
out += documents_str
return out

@ -15,6 +15,9 @@
position: relative
left: -5px
ul.nav li.active
border-top: 2px solid black
.contractor-notes-block, .team-notes-block, .order-notes-block
text-align: left
padding-left: 45px
@ -55,12 +58,47 @@ ol
.systemChat
background-color: #ffe9ed
// Chat message
.insetCommChat
.message-header
padding-top: 10px
padding-bottom: 5px
.sender_name
display: inline-block
font-weight: bold
.created
display: inline-block
margin-left: 15px
.message-body
word-wrap: break-word
max-width: 500px
.invite
white-space: nowrap
.group_name
display: inline-block
overflow: hidden
text-overflow: ellipsis
max-width: 150px
.btn.btn-chat
display: inline-block
padding: 5px 10px
font-size: 12pt
border: 1px solid #BEBEBE
margin-left: 5px
margin-right: 5px
&:hover
color: #4e4c4c
&:visited, &:link
color: #0b0b0b
.numberStepp
border-bottom: 1px solid #CFCFCF
&:last-child
border-bottom: none
.review-type
margin-bottom: 10px
.alignleft
float: left
//width: 33%
@ -158,6 +196,27 @@ ol
image: url("#{$static}/img/icons/icon_complete_stage.png")
size: 25px 28px
repeat: no-repeat
&.icon-close_chat-positive
@extend %icons
&:before
width: 22px
height: 20px
background:
image: url("#{$static}/img/closeChat1.png")
size: 20px 20px
repeat: no-repeat
&.icon-close_chat-negative
@extend %icons
&:before
width: 22px
height: 20px
background:
image: url("#{$static}/img/closeChat2.png")
size: 20px 20px
repeat: no-repeat
&.icon-check
@extend %icons
&:before
@ -286,7 +345,7 @@ a.btn.btn-send
.bird
position: absolute
border: 30px solid transparent
border-top: 12px solid #CFCFCF
border-top: 15px solid #CFCFCF
top: 0
left: 50%
margin-left: -30px
@ -295,8 +354,8 @@ a.btn.btn-send
display: block
position: absolute
border: 30px solid transparent
border-top: 12px solid white
top: -13px
border-top: 15px solid white
top: -16px
left: 50%
margin-left: -30px
@ -342,6 +401,7 @@ a.btn.btn-send
a.docs
&-more, &-less
font-style: italic
color: #{map_get($component_colors, select)}
cursor: pointer
&:hover

@ -89,7 +89,7 @@
</div>
<div class="col-lg-3 wrstepschat">
<div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentSpace' %}
{% include 'partials/inc-attach-documents.html' with class='documentSpace' tab='contacts' %}
</div>
<div class="textAreaBlock2 box-sizing disTab">
<ol class="contractor-notes-block"></ol>
@ -135,6 +135,7 @@
{% if archive_orders %}
{# <div style="margin-left: -13px; margin-right: -13px; text-align: center">#}
<div style="width:100%; height: 4px; float: left; background-color: white"></div>
<a href="#" data-show="true" id="trashed-button"
class="chat-button icon-books">
Показать архивные заказы
@ -182,7 +183,19 @@
</div>
</div>
<div class="col-lg-6 commChat">
<div id="message-chat-order-space"></div>
<div id="message-chat-order-space">
{# <div class="invite mod-align-center">#}
{# Приглашаю в группу <span class="group_name">"TestGroup-2aaaaaaaaaaaaaaafffffffffffffaaawwwwwwwwwa"</span>#}
{# <a href="/users/accept-team-invitation/609/"#}
{# class="btn btn-simple btn-chat">#}
{# Присоединиться#}
{# </a>#}
{# <a href="/users/refuse-team-invitation/609/"#}
{# class="btn btn-simple btn-chat">#}
{# Отказаться#}
{# </a>#}
{# </div>#}
</div>
<form id="chat-order-add">
<input type="hidden" id="orderId" name="orderId">
@ -216,7 +229,8 @@
</div>
</div>
{# 1.Согласование условий #}
<div class="stepssBlock box-sizing disTab" id="conditions-approve" style="border-bottom: none">
<div class="stepssBlock box-sizing disTab" id="conditions-approve"
style="border-bottom: none; border-top: 1px solid black">
<p class="titleStepss">
<span class="stage-header">
<span class="select js-select"> 1.</span> <span class="js-stage-header">Согласование условий</span>
@ -260,7 +274,7 @@
<div class="textStepss js-help-text">
Заказчик резервирует сумму на оплату работы.
Деньги перечисляются и хранятся на сайте. <br>
<span class="note">Заказ проходит по безопасной сделке</span>
<span class="note" style="display: none">Заказ проходит по безопасной сделке</span>
</div>
<div class="border">
<div class="bird"></div>
@ -295,23 +309,23 @@
</div>
</div>
<div id="leaveReview" style="display: none;">
<div class="closeChat closeChat1">
<a href="#" data-toggle="modal" data-target="#review-add"
data-review-type="positive">
Закрыть проект<br>и оставить отзыв
</a>
</div>
<div class="closeChat closeChat2">
<a href="#" data-toggle="modal" data-target="#review-add"
data-review-type="negative">
Закрыть проект<br>и оставить отзыв
</a>
</div>
</div>
{# <div id="leaveReview" style="">#}
{# <div class="closeChat closeChat1">#}
{# <a href="#" data-toggle="modal" data-target="#review-add"#}
{# data-review-type="positive">#}
{# Закрыть проект<br>и оставить отзыв#}
{# </a>#}
{# </div>#}
{# <div class="closeChat closeChat2">#}
{# <a href="#" data-toggle="modal" data-target="#review-add"#}
{# data-review-type="negative">#}
{# Закрыть проект<br>и оставить отзыв#}
{# </a>#}
{# </div>#}
{# </div>#}
<div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %}
{% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' tab='orders' %}
</div>
<div class="textAreaBlock2 box-sizing disTab">
@ -397,7 +411,7 @@
<div class="col-lg-3 wrstepschat">
<div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentTeamSpace' %}
{% include 'partials/inc-attach-documents.html' with class='documentTeamSpace' tab='teams' %}
</div>
<div class="textAreaBlock2 box-sizing disTab">

@ -148,12 +148,11 @@
{% endfor %}
</div>
{% if archive_projects %}
<div style="width:100%; height: 4px; float: left; background-color: white"></div>
<a href="#" data-show="true" id="trashed-button"
class="chat-button icon-books"
style="margin-top: 4px">
style="margin-top: 4px">
Показать архивные заказы
</a>
<div class="header-wrapper" id="show-archive-label" style="display: none;">
@ -197,7 +196,8 @@
</div>
<!-- Второй столбик "Чат" -->
<div class="col-lg-6 commChat">
<div id="message-chat-order-space"></div>
<div id="message-chat-order-space">
</div>
<form id="chat-order-add">
<input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipentId" id="recipentId">
@ -232,7 +232,7 @@
</div>
{# 1.Согласование условий #}
<div class="stepssBlock box-sizing disTab" id="conditions-approve"
style="border-bottom: none">
style="border-bottom: none; border-top: 1px solid black">
<p class="titleStepss">
<span class="select js-select"> 1.</span> Согласование условий</p>
<p class="textStepss js-help-text">
@ -244,7 +244,8 @@
</div>
<div class="stepssBlock" style="border-top: none">
<div class="textStepss mod-align-center-soft">Количество этапов в данном проекте
<div class="textStepss mod-align-center-soft" style="font-size: 14px">
Количество этапов в данном проекте
<input style="text-align: center" type="text" id="countStage" value="" size="3"/>
</div>
<div id="order-stages">
@ -254,7 +255,7 @@
<div style="margin-left: -27px; margin-right: -27px; text-align: center">
<a href="#"
class="chat-button icon-hand"
{# style="padding-left: 60px;"#}
style="margin-top: 4px;"
id="btnApprove">отправить на согласование
</a>
<a href="#"
@ -327,20 +328,20 @@
</div>
</div>
<div id="leaveReview" style="display: none;">
<div class="closeChat closeChat1">
<a href="#" data-toggle="modal" data-target="#review-add"
data-review-type="positive">
Закрыть проект<br>и оставить отзыв
</a>
</div>
<div class="closeChat closeChat2">
<a href="#" data-toggle="modal" data-target="#review-add"
data-review-type="negative">
Закрыть проект<br>и оставить отзыв
</a>
</div>
</div>
{# <div id="leaveReview" style="">#}
{# <div class="closeChat closeChat1">#}
{# <a href="#" data-toggle="modal" data-target="#review-add"#}
{# data-review-type="positive">#}
{# Закрыть проект<br>и оставить отзыв#}
{# </a>#}
{# </div>#}
{# <div class="closeChat closeChat2">#}
{# <a href="#" data-toggle="modal" data-target="#review-add"#}
{# data-review-type="negative">#}
{# Закрыть проект<br>и оставить отзыв#}
{# </a>#}
{# </div>#}
{# </div>#}
<div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %}

@ -1,5 +1,16 @@
<div class="documentsChat">
<p style="text-align: center">Прикрепленные документы</p>
<div class="documentsChat" {% if tab != 'orders' %}style="border-top: none" {% endif %}>
{% if tab == 'orders' %}
<p style="text-align: center">Прикрепленные документы</p>
{% else %}
<div style="margin-left: -30px; margin-right: -30px">
<div class="header-wrapper">
<span class="header" style="font-size: 18px; padding-bottom: 3px">
Прикрепленные документы
</span>
<div class="triangle-header"></div>
</div>
</div>
{% endif %}
<ul id="{{ class }}"></ul>
<div style="text-align: center">
<a class="docs-more js-more" style="display: none"></a>

@ -77,7 +77,6 @@
this.socket.onclose = function (event) {
print.ws_print("Websocket closed: " + JSON.stringify(event));
// TODO: Сдеалть реконнект#}
setTimeout(function () {
console.log("reconnect to WS");
wsConnect = new WSConnection().connect(url);

@ -18,7 +18,7 @@
Положительный
</label>
<label class="aligncenter mod-align-center">
<label class="aligncenter mod-align-center" style="padding-left: 240px">
<input style="margin: 0 5px" type="radio" value="neutral" name="type">
Нейтральный
</label>

@ -235,6 +235,8 @@ class RealtyForm(forms.ModelForm):
if not self.data.get('extra_fields'):
self.fields['name'].required = False
self.fields['building_classification'].required = False
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['building_classification'].queryset = BuildingClassfication.objects.root_nodes()[
0].get_descendants()

@ -1321,7 +1321,8 @@
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg
chat_message: msg,
is_system: true
}
});
$(this).closest('form').submit();

@ -575,6 +575,7 @@ class CustomerProjectEditView(BaseMixin, View):
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
print('Edit: form valid')
project = form.save(commit=False)
project.customer = request.user
# print("files = ", form.cleaned_data.get('files'))
@ -603,11 +604,12 @@ class CustomerProjectEditView(BaseMixin, View):
return redirect(redirect_to)
else:
if form.errors:
print('Edit: form.errors = ', form.errors)
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
print('Edit: realty_form.errors = ', realty_form.errors)
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'

@ -400,13 +400,26 @@
$.post(createTeamInvitationUrl).then(function (res) {
if (res.status === 'success') {
{# 'Приглашаю в группу "{{ contractor.team.name }}" <a href="{% url 'users:accept-team-invitation' owner_id=contractor.pk %}" class="message_connect">Присоединиться</a><a href="{% url 'users:refuse-team-invitation' owner_id=contractor.pk %}" class="message_connect">Отказаться</a>'#}
var message = '<div class="invite mod-align-center">' +
'Приглашаю в группу "<span class="group_name">{{ contractor.team.name }}</span>"' +
'<a href="{% url 'users:accept-team-invitation' owner_id=contractor.pk %}"' +
'class="btn btn-simple btn-chat">' +
'Присоединиться' +
'</a>' +
'<a href="{% url 'users:refuse-team-invitation' owner_id=contractor.pk %}"' +
'class="btn btn-simple btn-chat">' +
'Отказаться' +
'</a>' +
'</div>';
socket.add_message({
format_type: 'add_message_contact',
message_type: 'invite_team',
data: {
sender_id: '{{ contractor.pk }}',
recipent_id: String(contractor2Id),
chat_message: 'Приглашаю в группу "{{ contractor.team.name }}" <a href="{% url 'users:accept-team-invitation' owner_id=contractor.pk %}" class="message_connect">Присоединиться</a><a href="{% url 'users:refuse-team-invitation' owner_id=contractor.pk %}" class="message_connect">Отказаться</a>',
chat_message: message,
is_system: true
},
})

@ -182,8 +182,8 @@
{% if contractor.pk == request.user.pk %}
<div class="col-lg-9">
<p class="addWork">
{# <a href="#" data-toggle="modal" data-target="#portfolio-modal">Добавить работу</a>#}
<a href="{% url 'projects:contractor-portfolio-create' %}" >Добавить работу</a>
{# <a href="#" data-toggle="modal" data-target="#portfolio-modal">Добавить работу</a>#}
<a href="{% url 'projects:contractor-portfolio-create' %}">Добавить работу</a>
</p>
</div>
@ -695,13 +695,26 @@
$.post(createTeamInvitationUrl).then(function (res) {
if (res.status === 'success') {
{# 'Приглашаю в группу "{{ request.user.team.name }}" <a href="http://{{ request.get_host }}{% url 'users:accept-team-invitation' owner_id=request.user.pk %}" class="message_connect">Присоединиться</a>'#}
var message = '<div class="invite mod-align-center">' +
'Приглашаю в группу "<span class="group_name">{{ request.user.team.name }}</span>"' +
'<a href="{% url 'users:accept-team-invitation' owner_id=contractor.pk %}"' +
'class="btn btn-simple btn-chat">' +
'Присоединиться' +
'</a>' +
'<a href="{% url 'users:refuse-team-invitation' owner_id=contractor.pk %}"' +
'class="btn btn-simple btn-chat">' +
'Отказаться' +
'</a>' +
'</div>';
socket.add_message({
format_type: 'add_message_contact',
message_type: 'invite_team',
data: {
sender_id: '{{ request.user.pk }}',
recipent_id: '{{ contractor.pk }}',
chat_message: 'Приглашаю в группу "{{ request.user.team.name }}" <a href="http://{{ request.get_host }}{% url 'users:accept-team-invitation' owner_id=request.user.pk %}" class="message_connect">Присоединиться</a>',
chat_message: message,
is_system: true
},
})
@ -762,6 +775,7 @@
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
is_system: true
},
})
}

@ -482,6 +482,7 @@
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
is_system: true
},
})
}
@ -503,6 +504,8 @@
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
is_system: true,
},
})
}

@ -999,6 +999,20 @@ class AcceptTeamInvitation(NoCsrfMixin, ContractorRequiredMixin, View):
class RefuseTeamInvitation(NoCsrfMixin, ContractorRequiredMixin, View):
def get(self, request, *args, owner_id, **kwargs):
pass
if self.request.is_ajax():
contractor1 = get_object_or_404(User.contractor_objects, pk=owner_id)
contractor2 = request.user
team_invitation = util.get_or_none(TeamInvitation, contractor1=contractor1, contractor2=contractor2)
if team_invitation:
team_invitation.delete()
data = {
'pk': team_invitation.pk,
'status': 'ok',
}
return JsonResponse(data)
return JsonResponse({'error': 'Вы уже отказались от приглашения'}, status=400)
# import code; code.interact(local=dict(globals(), **locals()))

Loading…
Cancel
Save