Fix many many bugs...
remotes/origin/PR-71
booblegum 9 years ago
parent a7ecf559ea
commit b2bdaddfc7
  1. 46
      assets/css/main.css
  2. BIN
      assets/img/icons/icon_books.png
  3. BIN
      assets/img/icons/icon_hand_pen.png
  4. BIN
      assets/img/icons/icon_print.png
  5. 677
      assets/js/build/chat_contractor_oop.js
  6. 816
      assets/js/build/chat_customer_oop.js
  7. 16
      assets/js/build/contractor_filter.js
  8. 83
      assets/js/build/create_project.js
  9. 20
      assets/js/build/create_worksell.js
  10. 8
      assets/js/build/custom_components.js
  11. 16
      assets/js/build/customer_profile.js
  12. 4
      assets/js/build/debugUtilsInit.js
  13. 4
      assets/js/build/home_page.js
  14. 34
      assets/js/build/init_contractor_filter.js
  15. 58
      assets/js/build/init_create_worksell.js
  16. 58
      assets/js/build/init_customer_project_create.js
  17. 58
      assets/js/build/init_modal_realty_edit.js
  18. 50
      assets/js/build/init_portfolio_create_edit.js
  19. 34
      assets/js/build/init_worksell_filter.js
  20. 12
      assets/js/build/portfolio_create_edit.js
  21. 12
      assets/js/build/project_filter.js
  22. 4
      assets/js/build/registration.js
  23. 16
      assets/js/build/user_profile_edit.js
  24. 16
      assets/js/build/worksell_filter.js
  25. 82
      assets/js/src/chat/BINDS.js
  26. 2
      assets/js/src/chat/ChatContractorPageController.js
  27. 2
      assets/js/src/chat/ChatCustomerPageController.js
  28. 5
      assets/js/src/chat/MessagesControllers.js
  29. 3
      assets/js/src/chat/Stages.js
  30. 100
      assets/js/src/chat/StagesContractorController.js
  31. 130
      assets/js/src/chat/StagesCustomerController.js
  32. 46
      assets/js/src/chat/archiveProjects.js
  33. 19
      assets/js/src/chat/documents.js
  34. 8
      assets/js/src/chat/loaders.js
  35. 2
      assets/js/src/chat/messageCounters.js
  36. 117
      assets/js/src/chat/notes.js
  37. 7
      assets/js/src/chat/templates/links/document_before_upload_tmpl.html
  38. 1
      assets/js/src/chat/templates/note_tmpl.html
  39. 16
      assets/js/src/chat/templates/order_info_tmpl.html
  40. 5
      assets/js/src/chat/templates/stage_approved_tmpl.html
  41. 32
      assets/js/src/chat/templates/stage_contractor_approve_tmpl.html
  42. 13
      assets/js/src/chat/templates/stage_tmpl.html
  43. 14
      assets/js/src/chat/templates/switch_to_protected_tmpl.html
  44. 10
      assets/js/src/chat/wsChatConnect.js
  45. 6
      assets/js/src/chat_contractor_oop.js
  46. 17
      assets/js/src/chat_customer_oop.js
  47. 2
      assets/js/trash/chat.js
  48. 1
      assets/js/trash/chat_customer.js
  49. 10
      assets/sass/modules/_mods.sass
  50. 1
      chat/serializers.py
  51. 59
      chat/static/sass/chat_add.sass
  52. 161
      chat/templates/chat_contractor.html
  53. 158
      chat/templates/chat_customer.html
  54. 8
      chat/templates/order_info.html
  55. 20
      chat/templates/partials/inc-attach-documents.html
  56. 2
      chat/templates/partials/inc-team-card.html
  57. 2
      reviews/models.py
  58. 5
      reviews/serializers.py
  59. 2
      users/templates/contractor_office.html
  60. 3
      users/urls.py
  61. 6
      users/views.py

@ -3291,7 +3291,7 @@ footer:after {
.insetCommChat { .insetCommChat {
width: 100%; width: 100%;
float: left; float: left;
margin: 20px 0 -7px 0; margin: 9px 0 -7px 0;
} }
.topCommChat{ .topCommChat{
@ -3479,7 +3479,7 @@ footer:after {
.wrMessages { .wrMessages {
padding: 0; padding: 0;
background-color: #F7F7F7; /*background-color: #F7F7F7;*/
border-right: 1px solid #DADADA; border-right: 1px solid #DADADA;
/*border-left: 1px solid #DADADA;*/ /*border-left: 1px solid #DADADA;*/
} }
@ -3487,8 +3487,10 @@ footer:after {
.messageBlock { .messageBlock {
width: 100%; width: 100%;
float: left; float: left;
margin: 0 0 0 0; background-color: #F7F7F7;
padding: 0 0; /*margin: 0 0 0 0;*/
/*padding: 0 0;*/
padding-bottom: 20px;
} }
.messageBlock > p { .messageBlock > p {
@ -3686,6 +3688,8 @@ footer:after {
.documentsChat { .documentsChat {
width: 100%; width: 100%;
float: left; float: left;
border-top: 1px solid black;
border-bottom: 1px solid black;
} }
.documentsChat > p { .documentsChat > p {
@ -3915,19 +3919,19 @@ footer:after {
/*transform: rotate(90deg);*/ /*transform: rotate(90deg);*/
/*}*/ /*}*/
.orAct .dimovChat { /*.orAct .dimovChat {*/
-webkit-transform: rotate(90deg); /*-webkit-transform: rotate(90deg);*/
-moz-transform: rotate(90deg); /*-moz-transform: rotate(90deg);*/
transform: rotate(90deg); /*transform: rotate(90deg);*/
} /*}*/
/*.orderBlock:hover .hideOBB {*/ /*.orderBlock:hover .hideOBB {*/
/*display: block;*/ /*display: block;*/
/*}*/ /*}*/
.orAct .hideOBB { /*.orAct .hideOBB {*/
display: block !important; /*display: block !important;*/
} /*}*/
.wrstepschat { .wrstepschat {
float: left; float: left;
@ -3953,11 +3957,12 @@ footer:after {
/*display: inline-block;*/ /*display: inline-block;*/
font-size: 24px; font-size: 24px;
font-family: 'pfbeausanspro-reg', sans-serif; font-family: 'pfbeausanspro-reg', sans-serif;
padding: 26px 0px; padding: 26px 0 40px 0;
width: 100%; width: 100%;
color: black; color: black;
background-color: #F3F3F3; background-color: #F3F3F3;
text-align: center; text-align: center;
position: relative;
} }
.tab-content .header-wrapper .header{ .tab-content .header-wrapper .header{
@ -3979,8 +3984,9 @@ footer:after {
width: 100%; width: 100%;
float: left; float: left;
padding: 15px; padding: 15px;
border-top: 1px solid black; padding-bottom: 0;
border-bottom: 1px solid black; /*border-top: 1px solid black;*/
/*border-bottom: 1px solid black;*/
z-index: 9; z-index: 9;
position: relative; position: relative;
/*margin-bottom: -1px;*/ /*margin-bottom: -1px;*/
@ -3988,7 +3994,7 @@ footer:after {
.titleStepss { .titleStepss {
width: 100%; width: 100%;
/*float: left;*/ padding-left: 15px;
font-size: 18px; font-size: 18px;
font-family: 'Arial-MT-Regular', sans-serif; font-family: 'Arial-MT-Regular', sans-serif;
margin: 0 0 15px 0; margin: 0 0 15px 0;
@ -3997,7 +4003,7 @@ footer:after {
.textStepss { .textStepss {
width: 100%; width: 100%;
/*float: left;*/ padding-left: 15px;
font-size: 14px; font-size: 14px;
line-height: 17px; line-height: 17px;
font-family: 'Arial-MT-Regular', sans-serif; font-family: 'Arial-MT-Regular', sans-serif;
@ -5801,9 +5807,9 @@ input[type="radio"]:checked + span {
/*border-bottom: 1px solid #2c2c2c;*/ /*border-bottom: 1px solid #2c2c2c;*/
/*margin-bottom: 14px;*/ /*margin-bottom: 14px;*/
/*}*/ /*}*/
#order-stages > div:nth-last-child(2), #order-stages > div:last-child{ /*#order-stages > div:nth-last-child(2), #order-stages > div:last-child{*/
border: none; /*border: none;*/
} /*}*/
.linkSort button{ .linkSort button{
font-size: 14px; font-size: 14px;
font-family: 'Arial-MT-Regular', sans-serif; font-family: 'Arial-MT-Regular', sans-serif;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -47,13 +47,13 @@
'use strict'; 'use strict';
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
var _extended_field = __webpack_require__(28); var _extended_field = __webpack_require__(32);
var _ajax_set_filter = __webpack_require__(29); var _ajax_set_filter = __webpack_require__(33);
var _filter_toggle = __webpack_require__(30); var _filter_toggle = __webpack_require__(34);
function paginateTo(pageNum) { function paginateTo(pageNum) {
var $form = $('#filter-form'); var $form = $('#filter-form');
@ -75,7 +75,7 @@
/***/ }, /***/ },
/***/ 27: /***/ 31:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -105,7 +105,7 @@
/***/ }, /***/ },
/***/ 28: /***/ 32:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -136,7 +136,7 @@
/***/ }, /***/ },
/***/ 29: /***/ 33:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -200,7 +200,7 @@
/***/ }, /***/ },
/***/ 30: /***/ 34:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -40,29 +40,30 @@
/******/ return __webpack_require__(0); /******/ return __webpack_require__(0);
/******/ }) /******/ })
/************************************************************************/ /************************************************************************/
/******/ ([ /******/ ({
/* 0 */
/***/ 0:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
var _file_upload = __webpack_require__(31); var _file_upload = __webpack_require__(35);
var _extended_field = __webpack_require__(28); var _extended_field = __webpack_require__(32);
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
var _read_more = __webpack_require__(32); var _read_more = __webpack_require__(36);
var _only_one_checkbox = __webpack_require__(33); var _only_one_checkbox = __webpack_require__(37);
var _popups = __webpack_require__(34); var _popups = __webpack_require__(38);
var _scroll_on_required = __webpack_require__(35); var _scroll_on_required = __webpack_require__(39);
var _ajax_registration = __webpack_require__(36); var _ajax_registration = __webpack_require__(40);
var _test_seeds = __webpack_require__(37); var _test_seeds = __webpack_require__(41);
function showHideRealry() { function showHideRealry() {
var check = $('#checkbox-sb-realty'); var check = $('#checkbox-sb-realty');
@ -97,9 +98,8 @@
}); });
/***/ }, /***/ },
/* 1 */,
/* 2 */, /***/ 3:
/* 3 */
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -143,30 +143,8 @@
exports.getCookie = getCookie; exports.getCookie = getCookie;
/***/ }, /***/ },
/* 4 */,
/* 5 */, /***/ 31:
/* 6 */,
/* 7 */,
/* 8 */,
/* 9 */,
/* 10 */,
/* 11 */,
/* 12 */,
/* 13 */,
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */,
/* 18 */,
/* 19 */,
/* 20 */,
/* 21 */,
/* 22 */,
/* 23 */,
/* 24 */,
/* 25 */,
/* 26 */,
/* 27 */
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -195,7 +173,8 @@
exports.customCheckInit = customCheckInit; exports.customCheckInit = customCheckInit;
/***/ }, /***/ },
/* 28 */
/***/ 32:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -225,9 +204,8 @@
exports.extendedFieldInit = extendedFieldInit; exports.extendedFieldInit = extendedFieldInit;
/***/ }, /***/ },
/* 29 */,
/* 30 */, /***/ 35:
/* 31 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -275,7 +253,8 @@
exports.fileUploadInit = fileUploadInit; exports.fileUploadInit = fileUploadInit;
/***/ }, /***/ },
/* 32 */
/***/ 36:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -295,7 +274,8 @@
exports.readMoreInit = readMoreInit; exports.readMoreInit = readMoreInit;
/***/ }, /***/ },
/* 33 */
/***/ 37:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -326,7 +306,8 @@
exports.onlyOneCheckboxInit = onlyOneCheckboxInit; exports.onlyOneCheckboxInit = onlyOneCheckboxInit;
/***/ }, /***/ },
/* 34 */
/***/ 38:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -381,7 +362,8 @@
exports.addMessage = addMessage; exports.addMessage = addMessage;
/***/ }, /***/ },
/* 35 */
/***/ 39:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -401,7 +383,8 @@
exports.scrollOnRequiredInit = scrollOnRequiredInit; exports.scrollOnRequiredInit = scrollOnRequiredInit;
/***/ }, /***/ },
/* 36 */
/***/ 40:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -499,7 +482,8 @@
exports.ajaxRegistrationInit = ajaxRegistrationInit; exports.ajaxRegistrationInit = ajaxRegistrationInit;
/***/ }, /***/ },
/* 37 */
/***/ 41:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -514,4 +498,5 @@
exports.print = print; exports.print = print;
/***/ } /***/ }
/******/ ]);
/******/ });

@ -47,15 +47,15 @@
'use strict'; 'use strict';
var _image_upload = __webpack_require__(38); var _image_upload = __webpack_require__(42);
var _scroll_on_required = __webpack_require__(35); var _scroll_on_required = __webpack_require__(39);
var _popups = __webpack_require__(34); var _popups = __webpack_require__(38);
var _ajax_registration = __webpack_require__(36); var _ajax_registration = __webpack_require__(40);
var _ajax_send_form_data = __webpack_require__(39); var _ajax_send_form_data = __webpack_require__(43);
$(function () { $(function () {
(0, _image_upload.imageUploadInit)(); (0, _image_upload.imageUploadInit)();
@ -114,7 +114,7 @@
/***/ }, /***/ },
/***/ 34: /***/ 38:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -170,7 +170,7 @@
/***/ }, /***/ },
/***/ 35: /***/ 39:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -191,7 +191,7 @@
/***/ }, /***/ },
/***/ 36: /***/ 40:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -290,7 +290,7 @@
/***/ }, /***/ },
/***/ 38: /***/ 42:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -370,7 +370,7 @@
/***/ }, /***/ },
/***/ 39: /***/ 43:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
"use strict"; "use strict";

@ -47,9 +47,9 @@
'use strict'; 'use strict';
var _custom_select = __webpack_require__(40); var _custom_select = __webpack_require__(44);
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
$(function () { $(function () {
(0, _custom_select.customSelectInit)(); (0, _custom_select.customSelectInit)();
@ -58,7 +58,7 @@
/***/ }, /***/ },
/***/ 27: /***/ 31:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -88,7 +88,7 @@
/***/ }, /***/ },
/***/ 40: /***/ 44:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,13 +47,13 @@
'use strict'; 'use strict';
var _show_hide = __webpack_require__(41); var _show_hide = __webpack_require__(45);
var _bootstrap_tabs = __webpack_require__(42); var _bootstrap_tabs = __webpack_require__(46);
var _sort_by = __webpack_require__(43); var _sort_by = __webpack_require__(47);
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
$(function () { $(function () {
(0, _bootstrap_tabs.restoreTab)(); (0, _bootstrap_tabs.restoreTab)();
@ -111,7 +111,7 @@
/***/ }, /***/ },
/***/ 27: /***/ 31:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -141,7 +141,7 @@
/***/ }, /***/ },
/***/ 41: /***/ 45:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -158,7 +158,7 @@
/***/ }, /***/ },
/***/ 42: /***/ 46:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -194,7 +194,7 @@
/***/ }, /***/ },
/***/ 43: /***/ 47:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
"use strict"; "use strict";

@ -47,7 +47,7 @@
'use strict'; 'use strict';
var _utils_debug = __webpack_require__(44); var _utils_debug = __webpack_require__(48);
// DEBUG // DEBUG
window.print = {}; window.print = {};
@ -55,7 +55,7 @@
/***/ }, /***/ },
/***/ 44: /***/ 48:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,7 +47,7 @@
'use strict'; 'use strict';
var _popupYoutube = __webpack_require__(45); var _popupYoutube = __webpack_require__(49);
$(function () { $(function () {
(0, _popupYoutube.popupYoutubeInit)(); (0, _popupYoutube.popupYoutubeInit)();
@ -55,7 +55,7 @@
/***/ }, /***/ },
/***/ 45: /***/ 49:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,15 +47,15 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
@ -122,7 +122,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -137,15 +137,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -378,7 +378,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -534,7 +534,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -591,7 +591,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -676,7 +676,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -690,9 +690,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -754,7 +754,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1306,7 +1306,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1320,9 +1320,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);

@ -47,27 +47,27 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(53); var _SelectedContainerCreate = __webpack_require__(57);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SingleTreeSelect = __webpack_require__(54); var _SingleTreeSelect = __webpack_require__(58);
var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect); var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect);
var _SelectOrCreate = __webpack_require__(55); var _SelectOrCreate = __webpack_require__(59);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -169,7 +169,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -184,15 +184,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -425,7 +425,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -581,7 +581,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -638,7 +638,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -723,7 +723,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -737,9 +737,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -801,7 +801,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1353,7 +1353,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1367,9 +1367,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1479,7 +1479,7 @@
/***/ }, /***/ },
/***/ 53: /***/ 57:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1495,11 +1495,11 @@
var _desc, _value, _class; var _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(46); var _SelectedContainer2 = __webpack_require__(50);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -1581,7 +1581,7 @@
/***/ }, /***/ },
/***/ 54: /***/ 58:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1593,9 +1593,9 @@
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _AbsBaseSelect = __webpack_require__(51); var _AbsBaseSelect = __webpack_require__(55);
var _TreeSelect2 = __webpack_require__(52); var _TreeSelect2 = __webpack_require__(56);
var _TreeSelect3 = _interopRequireDefault(_TreeSelect2); var _TreeSelect3 = _interopRequireDefault(_TreeSelect2);
@ -1677,7 +1677,7 @@
/***/ }, /***/ },
/***/ 55: /***/ 59:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1691,9 +1691,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -47,27 +47,27 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(53); var _SelectedContainerCreate = __webpack_require__(57);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SingleTreeSelect = __webpack_require__(54); var _SingleTreeSelect = __webpack_require__(58);
var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect); var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect);
var _SelectOrCreate = __webpack_require__(55); var _SelectOrCreate = __webpack_require__(59);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -216,7 +216,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -231,15 +231,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -472,7 +472,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -628,7 +628,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -685,7 +685,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -770,7 +770,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -784,9 +784,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -848,7 +848,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1400,7 +1400,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1414,9 +1414,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1526,7 +1526,7 @@
/***/ }, /***/ },
/***/ 53: /***/ 57:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1542,11 +1542,11 @@
var _desc, _value, _class; var _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(46); var _SelectedContainer2 = __webpack_require__(50);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -1628,7 +1628,7 @@
/***/ }, /***/ },
/***/ 54: /***/ 58:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1640,9 +1640,9 @@
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _AbsBaseSelect = __webpack_require__(51); var _AbsBaseSelect = __webpack_require__(55);
var _TreeSelect2 = __webpack_require__(52); var _TreeSelect2 = __webpack_require__(56);
var _TreeSelect3 = _interopRequireDefault(_TreeSelect2); var _TreeSelect3 = _interopRequireDefault(_TreeSelect2);
@ -1724,7 +1724,7 @@
/***/ }, /***/ },
/***/ 55: /***/ 59:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1738,9 +1738,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -47,27 +47,27 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(53); var _SelectedContainerCreate = __webpack_require__(57);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SingleTreeSelect = __webpack_require__(54); var _SingleTreeSelect = __webpack_require__(58);
var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect); var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect);
var _SelectOrCreate = __webpack_require__(55); var _SelectOrCreate = __webpack_require__(59);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -276,7 +276,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -291,15 +291,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -532,7 +532,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -688,7 +688,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -745,7 +745,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -830,7 +830,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -844,9 +844,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -908,7 +908,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1460,7 +1460,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1474,9 +1474,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1586,7 +1586,7 @@
/***/ }, /***/ },
/***/ 53: /***/ 57:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1602,11 +1602,11 @@
var _desc, _value, _class; var _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(46); var _SelectedContainer2 = __webpack_require__(50);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -1688,7 +1688,7 @@
/***/ }, /***/ },
/***/ 54: /***/ 58:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1700,9 +1700,9 @@
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _AbsBaseSelect = __webpack_require__(51); var _AbsBaseSelect = __webpack_require__(55);
var _TreeSelect2 = __webpack_require__(52); var _TreeSelect2 = __webpack_require__(56);
var _TreeSelect3 = _interopRequireDefault(_TreeSelect2); var _TreeSelect3 = _interopRequireDefault(_TreeSelect2);
@ -1784,7 +1784,7 @@
/***/ }, /***/ },
/***/ 55: /***/ 59:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1798,9 +1798,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -47,23 +47,23 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(53); var _SelectedContainerCreate = __webpack_require__(57);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SelectOrCreate = __webpack_require__(55); var _SelectOrCreate = __webpack_require__(59);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -124,7 +124,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -139,15 +139,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -380,7 +380,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -536,7 +536,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -593,7 +593,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -678,7 +678,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -692,9 +692,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -756,7 +756,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1308,7 +1308,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1322,9 +1322,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1434,7 +1434,7 @@
/***/ }, /***/ },
/***/ 53: /***/ 57:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1450,11 +1450,11 @@
var _desc, _value, _class; var _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(46); var _SelectedContainer2 = __webpack_require__(50);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -1536,7 +1536,7 @@
/***/ }, /***/ },
/***/ 55: /***/ 59:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1550,9 +1550,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -47,15 +47,15 @@
'use strict'; 'use strict';
var _SelectedContainer = __webpack_require__(46); var _SelectedContainer = __webpack_require__(50);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _NoTreeSelect = __webpack_require__(50); var _NoTreeSelect = __webpack_require__(54);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(52); var _TreeSelect = __webpack_require__(56);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect); var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
@ -122,7 +122,7 @@
/***/ }, /***/ },
/***/ 46: /***/ 50:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -137,15 +137,15 @@
var _desc, _value, _class; // ` var _desc, _value, _class; // `
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(49); var _decorators = __webpack_require__(53);
var _decorators2 = _interopRequireDefault(_decorators); var _decorators2 = _interopRequireDefault(_decorators);
@ -378,7 +378,7 @@
/***/ }, /***/ },
/***/ 47: /***/ 51:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -534,7 +534,7 @@
/***/ }, /***/ },
/***/ 48: /***/ 52:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -591,7 +591,7 @@
/***/ }, /***/ },
/***/ 49: /***/ 53:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -676,7 +676,7 @@
/***/ }, /***/ },
/***/ 50: /***/ 54:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -690,9 +690,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _NoTreeData = __webpack_require__(48); var _NoTreeData = __webpack_require__(52);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData); var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -754,7 +754,7 @@
/***/ }, /***/ },
/***/ 51: /***/ 55:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -1306,7 +1306,7 @@
/***/ }, /***/ },
/***/ 52: /***/ 56:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -1320,9 +1320,9 @@
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _AbsBaseSelect2 = __webpack_require__(51); var _AbsBaseSelect2 = __webpack_require__(55);
var _DataTree = __webpack_require__(47); var _DataTree = __webpack_require__(51);
var _DataTree2 = _interopRequireDefault(_DataTree); var _DataTree2 = _interopRequireDefault(_DataTree);

@ -47,11 +47,11 @@
'use strict'; 'use strict';
var _image_upload = __webpack_require__(38); var _image_upload = __webpack_require__(42);
var _scroll_on_required = __webpack_require__(35); var _scroll_on_required = __webpack_require__(39);
var _ajax_send_form_data = __webpack_require__(39); var _ajax_send_form_data = __webpack_require__(43);
$(function () { $(function () {
(0, _image_upload.imageUploadInit)(); (0, _image_upload.imageUploadInit)();
@ -107,7 +107,7 @@
/***/ }, /***/ },
/***/ 35: /***/ 39:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -128,7 +128,7 @@
/***/ }, /***/ },
/***/ 38: /***/ 42:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
'use strict'; 'use strict';
@ -208,7 +208,7 @@
/***/ }, /***/ },
/***/ 39: /***/ 43:
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
"use strict"; "use strict";

@ -47,11 +47,11 @@
'use strict'; 'use strict';
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
var _extended_field = __webpack_require__(28); var _extended_field = __webpack_require__(32);
var _ajax_set_filter = __webpack_require__(29); var _ajax_set_filter = __webpack_require__(33);
function paginateTo(pageNum) { function paginateTo(pageNum) {
var $form = $('#filter-form'); var $form = $('#filter-form');
@ -72,7 +72,7 @@
/***/ }, /***/ },
/***/ 27: /***/ 31:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -102,7 +102,7 @@
/***/ }, /***/ },
/***/ 28: /***/ 32:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -133,7 +133,7 @@
/***/ }, /***/ },
/***/ 29: /***/ 33:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,7 +47,7 @@
'use strict'; 'use strict';
var _popups = __webpack_require__(34); var _popups = __webpack_require__(38);
function checkHash() { function checkHash() {
// on load of the page: switch to the currently selected tab // on load of the page: switch to the currently selected tab
@ -65,7 +65,7 @@
/***/ }, /***/ },
/***/ 34: /***/ 38:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,13 +47,13 @@
'use strict'; 'use strict';
var _avatar_upload = __webpack_require__(56); var _avatar_upload = __webpack_require__(60);
var _bootstrap_tabs = __webpack_require__(42); var _bootstrap_tabs = __webpack_require__(46);
var _user_check_statuses = __webpack_require__(57); var _user_check_statuses = __webpack_require__(61);
var _custom_select = __webpack_require__(40); var _custom_select = __webpack_require__(44);
$(function () { $(function () {
(0, _avatar_upload.avatarUploadInit)(); (0, _avatar_upload.avatarUploadInit)();
@ -64,7 +64,7 @@
/***/ }, /***/ },
/***/ 40: /***/ 44:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -108,7 +108,7 @@
/***/ }, /***/ },
/***/ 42: /***/ 46:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -144,7 +144,7 @@
/***/ }, /***/ },
/***/ 56: /***/ 60:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -197,7 +197,7 @@
/***/ }, /***/ },
/***/ 57: /***/ 61:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -47,13 +47,13 @@
'use strict'; 'use strict';
var _custom_check = __webpack_require__(27); var _custom_check = __webpack_require__(31);
var _extended_field = __webpack_require__(28); var _extended_field = __webpack_require__(32);
var _ajax_set_filter = __webpack_require__(29); var _ajax_set_filter = __webpack_require__(33);
var _filter_toggle = __webpack_require__(30); var _filter_toggle = __webpack_require__(34);
function paginateTo(pageNum) { function paginateTo(pageNum) {
var $form = $('#filter-form'); var $form = $('#filter-form');
@ -75,7 +75,7 @@
/***/ }, /***/ },
/***/ 27: /***/ 31:
/***/ function(module, exports) { /***/ function(module, exports) {
"use strict"; "use strict";
@ -105,7 +105,7 @@
/***/ }, /***/ },
/***/ 28: /***/ 32:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -136,7 +136,7 @@
/***/ }, /***/ },
/***/ 29: /***/ 33:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';
@ -200,7 +200,7 @@
/***/ }, /***/ },
/***/ 30: /***/ 34:
/***/ function(module, exports) { /***/ function(module, exports) {
'use strict'; 'use strict';

@ -1,6 +1,7 @@
import {getCookie} from '../utils' import {getCookie} from '../utils'
import {onClickCardWithCount} from './messageCounters' import {onClickCardWithCount} from './messageCounters'
import {loadTemplate} from './loaders' import {loadTemplate} from './loaders'
import {bindRemoveNotes} from './notes'
function dialog(message, yesCallback, notCallback) { function dialog(message, yesCallback, notCallback) {
$("#dialog_delete .modal-title").html(message); $("#dialog_delete .modal-title").html(message);
@ -21,6 +22,7 @@ function bindOrders() {
$('.order-block').on('click', function (event) { $('.order-block').on('click', function (event) {
event.preventDefault(); event.preventDefault();
let $this = $(this); let $this = $(this);
$("#chat-order-add").show();
onClickCardWithCount($this); onClickCardWithCount($this);
$('.order-block').each(function (i, v) { $('.order-block').each(function (i, v) {
$(v).removeClass('orAct'); $(v).removeClass('orAct');
@ -42,14 +44,75 @@ function bindOrders() {
$("#chat-order-add #recipentId").val(recipentId); $("#chat-order-add #recipentId").val(recipentId);
window.chatController.create(orderId, projectId, recipentId, orderName, secureOrder); window.chatController.create(orderId, projectId, recipentId, orderName, secureOrder);
$.ajax({
url: '/api/note/',
type: 'GET',
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
data: {
'order': orderId,
},
dataType: 'json',
success: function (json) {
var noteHtmlInbox = '';
var note_tmpl = loadTemplate('note_tmpl');
// console.log("note json -->", json);
$.each(json.results, function (i, v) {
noteHtmlInbox += note_tmpl({text: v.text, note_id: v.id});
});
$(".order-notes-block").html(noteHtmlInbox);
bindRemoveNotes();
}
});
}); });
$('.order-block .dimovChat').on('click', function (event) { $('.order-block .dimovChat').on('click', function (event) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
// .toggle();
let $arrow = $(event.target);
let $info = $arrow.siblings('.hideOBB');
if ($info.hasClass("open")) {
$arrow.css('transform', 'rotate(0deg)');
$info.hide();
} else {
$arrow.css('transform', 'rotate(90deg)');
$info.show();
}
$info.toggleClass("open");
// console.log('click on tr'); // console.log('click on tr');
}); });
} }
function bindOrderInfo() {
$(".messageBlock").on('click', '.full-order-info', function (e) {
e.preventDefault();
e.stopPropagation();
var orderId = $(this).closest('.orderBlock').data('id');
if (!orderId) {
orderId = $(this).closest('.trashedOrderBlock').data('id');
}
$.ajax({
url: '/api/orders/' + orderId + '/',
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
dataType: 'json',
success: function (data) {
let outTable_tmpl = loadTemplate('order_info_tmpl');
var outTable = outTable_tmpl({order: data});
$("#order-info table").html(outTable);
$("#order-info").modal('show');
},
error: function (e, jqxhr) {
console.log(e);
}
});
});
}
function bindTeams() { function bindTeams() {
$('.team-block').on('click', function () { $('.team-block').on('click', function () {
onClickCardWithCount($(this)); onClickCardWithCount($(this));
@ -145,10 +208,11 @@ function bindTeams() {
var noteHtmlInbox = ''; var noteHtmlInbox = '';
var note_tmpl = loadTemplate('note_tmpl'); var note_tmpl = loadTemplate('note_tmpl');
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
noteHtmlInbox += note_tmpl({text: v.text}); noteHtmlInbox += note_tmpl({text: v.text, note_id: v.id});
}); });
$(".team-notes-block").html(noteHtmlInbox); $(".team-notes-block").html(noteHtmlInbox);
bindRemoveNotes();
} }
}); });
@ -385,9 +449,10 @@ function bindGetUserMessages() {
var noteHtmlInbox = ''; var noteHtmlInbox = '';
var note_tmpl = loadTemplate('note_tmpl'); var note_tmpl = loadTemplate('note_tmpl');
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
noteHtmlInbox += note_tmpl({text: v.text}); noteHtmlInbox += note_tmpl({text: v.text, note_id: v.id});
}); });
$(".contractor-notes-block").html(noteHtmlInbox); $(".contractor-notes-block").html(noteHtmlInbox);
bindRemoveNotes();
} }
}); });
@ -434,12 +499,25 @@ function bindDeleteContact() {
}); });
} }
function bindCtrlEnterSendMessage() {
$('textarea.js-chat').keydown(function (e) {
let $target = $(e.target);
if (e.ctrlKey && e.keyCode == 13) {
// console.log("Send button -->", $target.parent().find('.btn-send'))
let $btn_send = $target.parent().find('.btn-send');
$btn_send.trigger('click');
}
})
}
export { export {
bindOrders, bindOrders,
bindOrderInfo,
bindArbitrationSend, bindArbitrationSend,
bindOnTabs, bindOnTabs,
bindUserContacts, bindUserContacts,
bindGetUserMessages, bindGetUserMessages,
bindTeams, bindTeams,
bindDeleteContact, bindDeleteContact,
bindCtrlEnterSendMessage,
} }

@ -1 +1 @@
import {StagesController} from './StagesContractorController' import {MessagesController} from './MessagesControllers' import {DocumentsController} from './DocumentsControllers' class ChatPageController { constructor() { let self = this; console.log("NEW CONTRACTOR ChatPageController"); this.statesController = undefined; this.messagesController = undefined; this.documentsController = undefined; // TODO: не забыть! // $('.order-block').on('click', function (event) { // console.log("CLICK!!!"); // event.preventDefault(); // let $this = $(this); // $('.order-block').each(function (i, v) { // $(v).removeClass('orAct'); // }); // $this.addClass('orAct'); // let orderId = $this.data('id'); // let projectId = $this.data('project-id'); // let recipentId = $this.data('recipent-id'); // let orderName = $this.data('order-name'); // // console.log('orderId = ', orderId); // new StagesController(orderId, projectId, recipentId, orderName); // new MessagesController(orderId); // window.location.hash = `order${orderId}`; // // $("#chat-order-add #orderId").val(orderId); // $("#add-form-order-note #orderNote").val(orderId); // $("#orderArbitrationId").val(orderId); // $("#projectReviewId").val(projectId); // // console.log("recipentId = ", recipentId); // $("#chat-order-add #recipentId").val(recipentId); // $("#targetCustomerId").val(recipentId); // $("#add-form-order-note #recipentNote").val(recipentId); // // }); // $('.order-block .dimovChat').on('click', function (event) { // event.preventDefault(); // event.stopPropagation(); // // TODO: доделать сворачивание/разворачивание блока // // console.log('click on tr'); // }); } create(orderId, projectId, recipentId, orderName, secureOrder) { this.statesController = new StagesController(orderId, projectId, recipentId, orderName, secureOrder); this.messagesController = new MessagesController(orderId); this.documentsController = new DocumentsController(orderId); } // refresh() } export {ChatPageController} import {StagesController} from './StagesContractorController' import {MessagesController} from './MessagesControllers' import {DocumentsController} from './DocumentsControllers' class ChatPageController { constructor() { let self = this; console.log("NEW CONTRACTOR ChatPageController"); this.statesController = undefined; this.messagesController = undefined; this.documentsController = undefined; } create(orderId, projectId, recipentId, orderName, secureOrder) { this.statesController = new StagesController(orderId, projectId, recipentId, orderName, secureOrder); this.messagesController = new MessagesController(orderId); this.documentsController = new DocumentsController(orderId); } // refresh() } export {ChatPageController}

@ -1 +1 @@
import {StagesController} from './StagesCustomerController' import {MessagesController} from './MessagesControllers' import {recalculateMessages} from './messageCounters' class ChatPageController { constructor() { let self = this; // console.log("NEW Chat CUSTOMER PageController"); this.statesController = undefined; this.messagesController = undefined; // TODO: не забыть! recalculateMessages} from './messageCounters' recalculateMessages} from './messageCounters' recalculateMessages} from './messageCounters' recalculateMessages} from './messageCounters' recalculateMessages} from './messageCounters' class ChatPageController { recalculateMessages} from './messageCounters' constructor() { recalculateMessages} from './messageCounters' let self = this; sController(orderId); } } export {ChatPageController} import {StagesController} from './StagesCustomerController' import {MessagesController} from './MessagesControllers' import {recalculateMessages} from './messageCounters' // console.log("NEW Chat CUSTOMER PageController"); recalculateMessages} from './messageCounters' this.statesController = undefined; recalculateMessages} from './messageCounters' this.messagesController = undefined; recalculateMessages} from './messageCounters' // TODO: не забыть! recalculateMessages} from './messageCounters' class ChatPageController { constructor() { recalculateMessages} from './messageCounters' this.statesController = undefined; let self = this; create(orderId, projectId, recipentId, orderName, secureOrder, kwargs={archive:false}) { this.statesController = new StagesController(orderId, projectId, recipentId, orderName, secureOrder, kwargs); this.messagesController = new MessagesController(orderId); this.documentsController = new DocumentsController(orderId); } } export {ChatPageController}

@ -33,9 +33,6 @@ class MessagesController {
_onLoadData(json) { _onLoadData(json) {
const self = this; const self = this;
// console.log('mesages json = ', json);
// console.log('$inbox = ', this.$inbox);
// console.log("messages render start");
self.$inbox.html(""); self.$inbox.html("");
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
var senderName = 'Вы'; var senderName = 'Вы';
@ -46,7 +43,7 @@ class MessagesController {
className = ''; className = '';
} }
if (v.is_system) { if (v.is_system) {
senderName = 'Системное'; senderName = (senderName == 'Вы') ? 'Системное от Вас': `Системное от ${senderName}`;
className = 'systemChat' className = 'systemChat'
} }
let message = $(self.messageTemplate({className: className, senderName: senderName, message: v})); let message = $(self.messageTemplate({className: className, senderName: senderName, message: v}));

@ -188,7 +188,6 @@ class StageForm {
beforeSend: function (xhr) { beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
}, },
//TODO: слать только изменения
data: { data: {
status: secureOrder ? 'agreed': 'in_process', status: secureOrder ? 'agreed': 'in_process',
}, },
@ -209,7 +208,6 @@ class StageForm {
beforeSend: function (xhr) { beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
}, },
//TODO: слать только изменения
data: {status: 'not_agreed'}, data: {status: 'not_agreed'},
dataType: 'json', dataType: 'json',
}) })
@ -322,7 +320,6 @@ class StageInWork {
beforeSend: function (xhr) { beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
}, },
//TODO: слать только изменения
data: {status: 'closed'}, data: {status: 'closed'},
dataType: 'json', dataType: 'json',
}) })

@ -25,6 +25,7 @@ const STATUSES = {
}; };
//Contractor //Contractor
//TODO: Вынесли общую логику в родительский класс
class StagesController { class StagesController {
constructor(orderId, projectId, recipentId, orderName, secureOrder) { constructor(orderId, projectId, recipentId, orderName, secureOrder) {
const self = this; const self = this;
@ -62,6 +63,10 @@ class StagesController {
$reserve: $('#reserveSpace'), //2. Резервирование (Отобразить) $reserve: $('#reserveSpace'), //2. Резервирование (Отобразить)
$works: $('#completeWork') //3. Выполненная работа $works: $('#completeWork') //3. Выполненная работа
}; };
this.temp = {
approve_stage_header_text: this.stages_elements.$approve.find('.js-stage-header').html(),
reserve_help_text: this.stages_elements.$approve.find('.js-help-text').html(),
};
this.init(); this.init();
} }
@ -98,13 +103,39 @@ class StagesController {
this.init(); this.init();
} }
reload() {
/**
* Перезагружаем страницу Чата(при удалении заказа)
*/
window.location = '/chat/#order';
location.reload();
}
_buildPage() {
// console.log("Build PAge");
// Restore html to default
this.stages_elements.$approve.find('.js-stage-header').html(this.temp.approve_stage_header_text);
this.stages_elements.$reserve.find('.js-help-text').html(this.temp.reserve_help_text);
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.hide();
this.stages_elements.$works.hide();
if (this.data.stages.length == 0) {
this.buildStartStage()
} else {
let stageStatus = this.data.stages[0].status;
// console.log('stageStatus = ', stageStatus);
this.STAGE_STATUSES[stageStatus]();
}
this._bindEvents();
}
buildStartStage() { buildStartStage() {
/** /**
* Стадия: "Проект Предложен"(нет этапов) * Стадия: "Проект Предложен"(нет этапов)
*/ */
// Выделить цифру 1. красным
// $('#conditions-approve').find('.select')
this.stages_elements.$approve.show(); this.stages_elements.$approve.show();
this.stages_elements.$reserve.show(); this.stages_elements.$reserve.show();
this.stages_elements.$works.show(); this.stages_elements.$works.show();
@ -121,8 +152,11 @@ class StagesController {
if (this.secureOrder){ if (this.secureOrder){
this.stages_elements.$reserve.find('.js-help-text').show(); this.stages_elements.$reserve.find('.js-help-text').show();
} else { } else {
this.stages_elements.$reserve.find('.js-help-text').hide(); this.stages_elements.$reserve.find('.js-help-text').show();
// this.stages_elements.$reserve.find('.js-help-text').html('Резервирование не предусмотрено, безопасная сделака не активна'); this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-help-text').html(
'<span class="select">Резервирование не предусмотрено, безопасная сделака не активна</span>'
);
} }
} // Нет Этапов / "Не согласован" } // Нет Этапов / "Не согласован"
@ -138,7 +172,7 @@ class StagesController {
buildSendApproveStage() { buildSendApproveStage() {
console.log("Stage: send_approve"); console.log("Stage: send_approve");
this._renderStage('stage_approved_tmpl', true); this._renderStage('stage_contractor_approve_tmpl', true);
this.$orderStagesContainer.parent().show(); this.$orderStagesContainer.parent().show();
this.buttons.btnApprove.show(); this.buttons.btnApprove.show();
this.buttons.btnChange.show(); this.buttons.btnChange.show();
@ -157,6 +191,7 @@ class StagesController {
this.buttons.btnsArbitration.last().show(); this.buttons.btnsArbitration.last().show();
this._renderStage('stage_approved_tmpl', true); this._renderStage('stage_approved_tmpl', true);
this.stages_elements.$approve.find('.js-help-text').hide(); this.stages_elements.$approve.find('.js-help-text').hide();
this.stages_elements.$approve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.show(); this.stages_elements.$reserve.show();
if (this.secureOrder){ if (this.secureOrder){
this._renderStageReserved('reserved_tmpl'); this._renderStageReserved('reserved_tmpl');
@ -169,29 +204,23 @@ class StagesController {
buildProcessStage() { buildProcessStage() {
console.log('Stage: in_process'); console.log('Stage: in_process');
// Block-Stage-1
this.stages_elements.$approve.find('.js-stage-header').html('Согласованные условия');
this.stages_elements.$approve.find('.js-select').removeClass('select');
this.buildAgreedStage(); this.buildAgreedStage();
// Block-Stage-2
this.stages_elements.$reserve.find('.js-help-text').hide(); this.stages_elements.$reserve.find('.js-help-text').hide();
// Block-Stage-3
this.stages_elements.$works.show(); this.stages_elements.$works.show();
this._renderStageInWork('work_in_process_tmpl');
if (this.secureOrder) { if (this.secureOrder) {
this._renderStageInWork('work_in_process_tmpl'); // this._renderStageInWork('work_in_process_tmpl');
} else { } else {
this.stages_elements.$reserve.find('.stages-paid').html(""); this.stages_elements.$reserve.hide();
} }
} // Статус "В процессе"/"Завершен"/"Закрыт" } // Статус "В процессе"/"Завершен"/"Закрыт"
_buildPage() {
// console.log("Build PAge");
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
if (this.data.stages.length == 0) {
this.buildStartStage()
} else {
let stageStatus = this.data.stages[0].status;
// console.log('stageStatus = ', stageStatus);
this.STAGE_STATUSES[stageStatus]();
}
this._bindEvents();
}
_renderStage(template_name, disable = false) { _renderStage(template_name, disable = false) {
let i = 0; let i = 0;
@ -287,6 +316,11 @@ class StagesController {
_onLoadData(json) { _onLoadData(json) {
this.data = json; this.data = json;
this._buildPage(); this._buildPage();
if (this.data.project.state == 'deleted') {
for (let key in this.buttons){
this.buttons[key].hide();
}
}
} }
_bindEvents() { _bindEvents() {
@ -315,7 +349,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Условия заказа ${self.orderName} приняты`; message.data.msg = `Условия заказа "${self.orderName}" приняты`;
console.log("Send-WS Условия приняты"); console.log("Send-WS Условия приняты");
socket.send_stages_approve(message); socket.send_stages_approve(message);
//TODO: раскомментировать дурацкое окно //TODO: раскомментировать дурацкое окно
@ -333,7 +367,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Заказ ${self.orderName} отправлен для внесения изменений`; message.data.msg = `Заказ "${self.orderName}" отправлен для внесения изменений`;
console.log("Send-WS Внести изменения"); console.log("Send-WS Внести изменения");
socket.send_stages_approve(message); socket.send_stages_approve(message);
}); });
@ -376,7 +410,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Этап ${json.name} закрыт`; message.data.msg = `Этап "${json.name}" закрыт`;
console.log("Send-WS Закрытие этапа"); console.log("Send-WS Закрытие этапа");
socket.send_stages_approve(message); socket.send_stages_approve(message);
}) })
@ -412,18 +446,22 @@ class StagesController {
// $('#review-add').modal('hide'); // $('#review-add').modal('hide');
// self.stages_elements.$works.find('.js-btnSendReview').hide(); // self.stages_elements.$works.find('.js-btnSendReview').hide();
$('#review-add').modal('hide'); $('#review-add').modal('hide');
self.redraw();
let message = message_format; let message = message_format;
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Отзыв на заказ ${self.orderName} оставлен`; message.data.msg = `Отзыв на заказ "${self.orderName}" оставлен`;
console.log("Send-WS Оставить отзыв"); console.log("Send-WS Оставить отзыв");
// TODO: в этом сообщении отослать команду на reload if(json.count_reviews == 2)
socket.send_stages_approve(message); socket.send_stages_approve(message);
// $("a[href='#tab2']").trigger('click'); // $("a[href='#tab2']").trigger('click');
window.location = '/chat/#order'; if(json.count_reviews == 1){
location.reload(); self.redraw();
}else {
self.reload();
}
// window.location = '/chat/#order';
// location.reload();
}, },
error: function (e) { error: function (e) {
console.log('error'); console.log('error');
@ -432,6 +470,12 @@ class StagesController {
}); });
} // "Оставить отзыв" } // "Оставить отзыв"
_changeOrderProtect(secure) {
this.secureOrder = secure;
console.log('secure = ', this.secureOrder);
this.redraw();
}// Если заказчик изменил secure
_onBtnArbitration(event) { _onBtnArbitration(event) {
event.preventDefault(); event.preventDefault();

@ -24,15 +24,17 @@ const STATUSES = {
}; };
//Customer
//TODO: Вынесли общую логику в родительский класс
class StagesController { class StagesController {
constructor(orderId, projectId, recipentId, orderName, secureOrder) { constructor(orderId, projectId, recipentId, orderName, secureOrder, kwargs = {}) {
const self = this; const self = this;
this.orderId = orderId; this.orderId = orderId;
this.orderName = orderName; this.orderName = orderName;
this.projectId = projectId; this.projectId = projectId;
this.recipentId = recipentId; this.recipentId = recipentId;
this.secureOrder = secureOrder; this.secureOrder = secureOrder;
// this.is_archive_project
this.data = {}; //JSON this.data = {}; //JSON
this.stages = []; this.stages = [];
this.stages_reserved = []; this.stages_reserved = [];
@ -47,6 +49,8 @@ class StagesController {
}; };
this.btnCompleteTmpl = loadTemplate('bntCompleteStage_tmpl'); this.btnCompleteTmpl = loadTemplate('bntCompleteStage_tmpl');
this.btnSendReviewTmpl = loadTemplate('btnSendReview_tmpl'); this.btnSendReviewTmpl = loadTemplate('btnSendReview_tmpl');
this.switch_to_protected_tmpl = loadTemplate('switch_to_protected_tmpl');
this.$orderStagesContainer = $('#order-stages'); this.$orderStagesContainer = $('#order-stages');
this.$orderStagesContainer.html(''); this.$orderStagesContainer.html('');
this.$stagesCount = $('#countStage'); this.$stagesCount = $('#countStage');
@ -65,6 +69,9 @@ class StagesController {
$reserve: $('#reserveSpace'), //2. Резервирование $reserve: $('#reserveSpace'), //2. Резервирование
$works: $('#completeWork') //3. Выполненная работа $works: $('#completeWork') //3. Выполненная работа
}; };
this.temp = {
approve_stage_header_text: this.stages_elements.$approve.find('.js-stage-header').html(),
};
this.init(); this.init();
} }
@ -101,6 +108,37 @@ class StagesController {
this.init(); this.init();
} }
reload() {
/**
* Перезагружаем страницу Чата(при удалении заказа)
*/
window.location = '/chat/#order';
location.reload();
}
_buildPage() {
console.log("Build Page!");
// Restore html to default
this.stages_elements.$approve.find('.js-stage-header').html(this.temp.approve_stage_header_text);
console.log("restore this -->", this.stages_elements.$approve.find('.js-select'));
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");
let $swith_to_protected = this.$orderStagesContainer.siblings('.switch');
if ($swith_to_protected.length) $swith_to_protected.remove();
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
if (this.data.stages.length == 0) {
this.buildStartStage()
} else {
let stageStatus = this.data.stages[0].status;
// console.log('stageStatus = ', stageStatus);
this.STAGE_STATUSES[stageStatus]();
}
this._bindEvents();
}
buildStartStage() { buildStartStage() {
/** /**
* Стадия: "Проект Предложен"(нет этапов) * Стадия: "Проект Предложен"(нет этапов)
@ -114,11 +152,17 @@ class StagesController {
this.$stagesCount.removeAttr('disabled'); this.$stagesCount.removeAttr('disabled');
this.$stagesCount.val(1); this.$stagesCount.val(1);
this.$stagesCount.trigger('change'); this.$stagesCount.trigger('change');
this.stages_elements.$approve.find('.js-select').addClass('select');
// this.stages_elements.$approve.find('.js-help-text').show(); // this.stages_elements.$approve.find('.js-help-text').show();
// this.stages_elements.$reserve.find('.js-help-text').show(); // this.stages_elements.$reserve.find('.js-help-text').show();
// this.stages_elements.$reserve.find('.stages-paid').hide(); // this.stages_elements.$reserve.find('.stages-paid').hide();
// this.stages_elements.$works.find('.js-help-text').show(); // this.stages_elements.$works.find('.js-help-text').show();
// this.stages_elements.$works.find('#stagesWork').show(); // this.stages_elements.$works.find('#stagesWork').show();
if (!this.secureOrder) {
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
}
} // Нет Этапов } // Нет Этапов
@ -128,6 +172,11 @@ class StagesController {
this.buttons.btnApprove.show(); this.buttons.btnApprove.show();
this.buttons.btnChange.hide(); this.buttons.btnChange.hide();
this.buttons.btnToArchive.hide(); this.buttons.btnToArchive.hide();
if (!this.secureOrder) {
// console.log("add switch to protect");
this.$orderStagesContainer.after(this.switch_to_protected_tmpl());
$('#switch-to-protected').unbind().on('change', this._onChangeToProtect.bind(this));
}
} // Статус "Не согласован" } // Статус "Не согласован"
buildSendApproveStage() { buildSendApproveStage() {
@ -149,6 +198,7 @@ class StagesController {
this.$stagesCount.parent().hide(); this.$stagesCount.parent().hide();
this._renderStage('stage_approved_tmpl', true); this._renderStage('stage_approved_tmpl', true);
this.stages_elements.$approve.find('.js-help-text').hide(); this.stages_elements.$approve.find('.js-help-text').hide();
this.stages_elements.$approve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-help-text').show(); this.stages_elements.$reserve.find('.js-help-text').show();
this.stages_elements.$reserve.show(); this.stages_elements.$reserve.show();
this.buttons.btnReserve.show(); this.buttons.btnReserve.show();
@ -160,24 +210,21 @@ class StagesController {
buildProcessStage() { buildProcessStage() {
console.log('Stage: in_process'); console.log('Stage: in_process');
this.buildAgreedStage(); this.buildAgreedStage();
// Block-Stage-1
this.stages_elements.$approve.find('.js-select').removeClass('select');
// Block-Stage-2
this.stages_elements.$reserve.find('.js-select').removeClass('select');
this.stages_elements.$reserve.find('.js-btnArbitration').hide(); this.stages_elements.$reserve.find('.js-btnArbitration').hide();
// Block-Stage-3
this.stages_elements.$works.show(); this.stages_elements.$works.show();
this._renderStageInWork('work_in_process_tmpl'); this._renderStageInWork('work_in_process_tmpl');
} // Статус "В процессе"/"Завершен"/"Закрыт" if (this.secureOrder) {
_buildPage() {
// console.log("Build PAge");
this.stages_elements.$reserve.hide();
this.stages_elements.$works.hide();
if (this.data.stages.length == 0) {
this.buildStartStage()
} else { } else {
let stageStatus = this.data.stages[0].status; this.stages_elements.$reserve.hide();
// console.log('stageStatus = ', stageStatus);
this.STAGE_STATUSES[stageStatus]();
} }
this._bindEvents(); } // Статус "В процессе"/"Завершен"/"Закрыт"
}
_renderStage(template_name, disable = false) { _renderStage(template_name, disable = false) {
let i = 0; let i = 0;
@ -232,7 +279,6 @@ class StagesController {
{ {
template_name, template_name,
data: stage_data, data: stage_data,
note_text: 'Закройте этап или подробно опишите замечания в чате'
}); });
this.stages_work.push(stage); this.stages_work.push(stage);
} }
@ -250,7 +296,7 @@ class StagesController {
if (stage_data.status == 'closed') continue; if (stage_data.status == 'closed') continue;
let stage = new StageInWork($container, let stage = new StageInWork($container,
{ {
template_name, data: stage_data template_name, data: stage_data, note_text: 'Закройте этап или подробно опишите замечания в чате'
}); });
if (stage_data.status == 'completed') { if (stage_data.status == 'completed') {
let $btn = $(this.btnCompleteTmpl({stage: stage_data, text: 'Закрыть этап'})); let $btn = $(this.btnCompleteTmpl({stage: stage_data, text: 'Закрыть этап'}));
@ -267,6 +313,11 @@ class StagesController {
_onLoadData(json) { _onLoadData(json) {
this.data = json; this.data = json;
this._buildPage(); this._buildPage();
if (this.data.project.state == 'deleted') {
for (let key in this.buttons) {
this.buttons[key].hide();
}
}
} }
_changeNumStages(event) { _changeNumStages(event) {
@ -345,7 +396,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Условия заказа ${self.orderName} отправлены на согласование`; message.data.msg = `Условия заказа "${self.orderName}" отправлены на согласование`;
console.log("Send-WS Отправить на согласование"); console.log("Send-WS Отправить на согласование");
socket.send_stages_approve(message); socket.send_stages_approve(message);
//TODO: раскомментировать дурацкое окно //TODO: раскомментировать дурацкое окно
@ -366,7 +417,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Заказ ${self.orderName} отозван для внесения изменений`; message.data.msg = `Заказ "${self.orderName}" отозван для внесения изменений`;
console.log("Send-WS Внести изменения"); console.log("Send-WS Внести изменения");
socket.send_stages_approve(message); socket.send_stages_approve(message);
}); });
@ -388,7 +439,7 @@ class StagesController {
}) })
.done(function (json) { .done(function (json) {
console.log('delete complete'); console.log('delete complete');
window.location.href = window.location.href.replace(getHash(), ""); // window.location.href = window.location.href.replace(getHash(), "");
let message = message_format; let message = message_format;
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
@ -396,6 +447,7 @@ class StagesController {
message.data.msg = `Заказа ${self.orderName} отправлен в архив`; message.data.msg = `Заказа ${self.orderName} отправлен в архив`;
console.log("Send-WS Отправить в архив"); console.log("Send-WS Отправить в архив");
socket.send_stages_approve(message); socket.send_stages_approve(message);
self.reload();
}) })
.fail(function (xhr, errorMsg, error) { .fail(function (xhr, errorMsg, error) {
console.log("delete fail, json -->", xhr); console.log("delete fail, json -->", xhr);
@ -481,7 +533,7 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Заказчик закрыл этап ${json.name}`; message.data.msg = `Заказчик закрыл этап "${json.name}"`;
console.log("Send-WS Оплата Этапа/Этапов"); console.log("Send-WS Оплата Этапа/Этапов");
socket.send_stages_approve(message); socket.send_stages_approve(message);
self.redraw(); self.redraw();
@ -517,12 +569,16 @@ class StagesController {
message.data.sender_id = userId; message.data.sender_id = userId;
message.data.recipent_id = self.recipentId; message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId; message.data.order_id = self.orderId;
message.data.msg = `Отзыв на заказ ${self.orderName} оставлен`; message.data.msg = `Отзыв на заказ "${self.orderName}" оставлен`;
console.log("Send-WS Оставить отзыв"); console.log("Send-WS Оставить отзыв");
// TODO: в этом сообщении отослать команду на reload if(json.count_reviews == 2)
socket.send_stages_approve(message); socket.send_stages_approve(message);
window.location = '/chat/#order'; // console.log('json = ', json);
location.reload(); if(json.count_reviews == 1){
// $("a[href='#tab2']").trigger('click'); self.redraw();
}else {
self.reload();
}
}, },
error: function (e) { error: function (e) {
console.log('error'); console.log('error');
@ -531,6 +587,32 @@ class StagesController {
}); });
} // "Оставить отзыв" } // "Оставить отзыв"
_onChangeToProtect(event) {
const self = this;
let checked = $(event.target).prop('checked');
console.log('checked = ', checked);
$.ajax({
url: '/api/orders/' + this.orderId + '/',
type: 'PATCH',
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
data: {secure: checked},
dataType: 'json',
success: function (json) {
console.log("Protect switch success, json = ", json);
let message = message_format;
message.data.sender_id = userId;
message.data.recipent_id = self.recipentId;
message.data.order_id = self.orderId;
// Key words "перевел заказ" - на них завязан анализатор на стороне Исполнителя (костыль)
message.data.msg = `Заказчик перевел заказ "${self.orderName}" на ${checked ? 'безопасную сделку': 'прямую оплату'} `;
console.log("Send-WS Оставить отзыв");
socket.send_stages_approve(message);
}
})
} // "Перевести на Безопасный заказ"
_onBtnArbitration(event) { _onBtnArbitration(event) {
event.preventDefault(); event.preventDefault();

@ -25,59 +25,17 @@ function bindArchiveProjects() {
}); });
// Нажимаем на заказ в архмвных заказах // Нажимаем на заказ в архивных заказах
$(".messageBlock").on('click', '.trashedOrderBlock', function () { $(".messageBlock").on('click', '.trashedOrderBlock', function () {
let $this = $(this); let $this = $(this);
$("#chat-order-add").css("display", "none"); $("#chat-order-add").hide();
$('.order-block, .trashedOrderBlock').each(function () { $('.order-block, .trashedOrderBlock').each(function () {
$(this).removeClass('orAct'); $(this).removeClass('orAct');
}); });
$this.addClass('orAct'); $this.addClass('orAct');
// var inbox = document.getElementById('message-chat-order-space');
// var docList = document.getElementById('documentOrderSpace');
// inbox.innerHTML = '';
// docList.innerHTML = '';
let orderId = $this.data('id'); let 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; location.hash = '#order' + orderId;
// console.log(orderId);
window.chatController.create(orderId); window.chatController.create(orderId);
// $.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();
}); });
} }

@ -1,4 +1,7 @@
import {getCookie} from '../utils' import {getCookie} from '../utils'
import {loadTemplate} from './loaders'
let document_before_upload_tmpl = loadTemplate('document_before_upload_tmpl');
function uploadDocumentsContactInit() { function uploadDocumentsContactInit() {
$("#upload-document-contact").bind('fileuploadsubmit', function (e, data) { $("#upload-document-contact").bind('fileuploadsubmit', function (e, data) {
@ -23,9 +26,8 @@ function uploadDocumentsContactInit() {
dataType: 'json', dataType: 'json',
done: function (e, data) { done: function (e, data) {
$.each(data.result.files, function (index, file) { $.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>' + let htmlImg = document_before_upload_tmpl({file: file});
'<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>'; $(htmlImg).appendTo("#document-send-contact");
var document_send = $(htmlImg).appendTo("#document-send-contact");
}); });
}, },
fail: function (e) { fail: function (e) {
@ -49,7 +51,6 @@ function uploadDocumentsOrderInit() {
recipent: $("#chat-order-add #recipentId").val(), recipent: $("#chat-order-add #recipentId").val(),
order: $("#chat-order-add #orderId").val(), order: $("#chat-order-add #orderId").val(),
} }
// console.log(data.formData);
}); });
$('#upload-document-order').fileupload({ $('#upload-document-order').fileupload({
@ -65,9 +66,8 @@ function uploadDocumentsOrderInit() {
dataType: 'json', dataType: 'json',
done: function (e, data) { done: function (e, data) {
$.each(data.result.files, function (index, file) { $.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>' + let htmlImg = document_before_upload_tmpl({file: file});
'<div class="remove-document" data-id="'+ file.id+'" style="right:-10px;float:left;position: static;"></div></div>'; $(htmlImg).appendTo("#document-send-order");
var document_send = $(htmlImg).appendTo("#document-send-order");
}); });
}, },
fail: function (e) { fail: function (e) {
@ -111,9 +111,8 @@ function uploadDocumentsTeamInit() {
var currentValue = $("#documentSendIds").val(); var currentValue = $("#documentSendIds").val();
currentValue += file.id + ';'; currentValue += file.id + ';';
$("#documentSendIds").val(currentValue); $("#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>' + let htmlImg = document_before_upload_tmpl({file: file});
'<div class="remove-document" data-id="' + file.id + '" style="right:-10px;float:left;position: static;"></div></div>'; $(htmlImg).appendTo("#document-send");
var document_send = $(htmlImg).appendTo("#document-send");
}); });
}, },
fail: function (e) { fail: function (e) {

@ -7,6 +7,10 @@ import bntCompleteStage_tmpl from './templates/buttons/bntCompleteStage_tmpl.htm
import btnSendReview_tmpl from './templates/buttons/btnSendReview_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_attach_file_tmpl from './templates/links/document_attach_file_tmpl.html'
import note_tmpl from './templates/note_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'
import document_before_upload_tmpl from './templates/links/document_before_upload_tmpl.html'
import switch_to_protected_tmpl from './templates/switch_to_protected_tmpl.html'
function loadTemplate(template_name) { function loadTemplate(template_name) {
let templates = { let templates = {
@ -19,6 +23,10 @@ function loadTemplate(template_name) {
btnSendReview_tmpl: btnSendReview_tmpl, btnSendReview_tmpl: btnSendReview_tmpl,
document_attach_file_tmpl: document_attach_file_tmpl, document_attach_file_tmpl: document_attach_file_tmpl,
note_tmpl: note_tmpl, note_tmpl: note_tmpl,
order_info_tmpl: order_info_tmpl,
stage_contractor_approve_tmpl: stage_contractor_approve_tmpl,
document_before_upload_tmpl: document_before_upload_tmpl,
switch_to_protected_tmpl: switch_to_protected_tmpl,
}; };
if (!templates[template_name]) throw new Error(`Template ${template_name} does not exist`); if (!templates[template_name]) throw new Error(`Template ${template_name} does not exist`);

@ -21,7 +21,7 @@ function countPlus(message, place) {
let $container; let $container;
if (message.answer_type == "add_message_contact"){ if (message.answer_type == "add_message_contact"){
$container = $(`.contact-count-${message.sender_id}`); $container = $(`.contact-count-${message.sender_id}`);
} else if (message.answer_type == "add_message_order"){ } else if (message.answer_type == "add_message_order" || message.answer_type == "approve_stages"){
$container = $(`#count-order-${message.order_id}`); $container = $(`#count-order-${message.order_id}`);
} else if (message.answer_type == "add_message_team") { } else if (message.answer_type == "add_message_team") {
$container = $(`#count-team-${message.team_id}`); $container = $(`#count-team-${message.team_id}`);

@ -15,8 +15,9 @@ function bindContractorNotes() {
success: function (json) { success: function (json) {
// console.log(json); // console.log(json);
$("#add-form-contractor-note #chat2").val(""); $("#add-form-contractor-note #chat2").val("");
let li = note_tmpl({text: json.text}); let li = note_tmpl({text: json.text, note_id: json.id});
$(li).appendTo(".contractor-notes-block"); $(li).appendTo(".contractor-notes-block");
bindRemoveNotes();
}, },
error: function (e) { error: function (e) {
console.log('error'); console.log('error');
@ -27,51 +28,87 @@ function bindContractorNotes() {
} }
function bindOrderNotes() { function bindOrderNotes() {
/**
* Create new Note
*/
$('#add-note-button').on('click', function (e) { $('#add-note-button').on('click', function (e) {
e.preventDefault(); e.preventDefault();
$.ajax({ $.ajax({
url: '/api/note/', url: '/api/note/',
type: 'POST', type: 'POST',
beforeSend: function (xhr) { beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
}, },
data: $("#add-form-order-note").serialize(), data: $("#add-form-order-note").serialize(),
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
// $("<li>" + json.text + "</li>").appendTo(".order-notes-block"); // $("<li>" + json.text + "</li>").appendTo(".order-notes-block");
let li = note_tmpl({text: json.text}); // console.log('note json = ', json);
$(li).appendTo(".order-notes-block"); let li = note_tmpl({text: json.text, note_id: json.id});
$("#add-form-order-note #chat2").val(""); $(li).appendTo(".order-notes-block");
}, $("#add-form-order-note #chat2").val("");
error: function (e) { bindRemoveNotes();
console.log('error'); },
console.log(e); error: function (e) {
} console.log('error');
console.log(e);
}
});
}); });
});
} }
function bindTeamNotes() { function bindTeamNotes() {
$('#add-team-note-button').on('click', function (e) { $('#add-team-note-button').on('click', function (e) {
e.preventDefault(); e.preventDefault();
$.ajax({ $.ajax({
url: '/api/note/', url: '/api/note/',
type: 'POST', type: 'POST',
beforeSend: function (xhr) { beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
}, },
data: $("#add-form-team-note").serialize(), data: $("#add-form-team-note").serialize(),
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
$("<li>" + json.text + "</li>").appendTo(".team-notes-block"); let li = note_tmpl({text: json.text, note_id: json.id});
$("#add-form-team-note #chat2").val(""); $(li).appendTo(".team-notes-block");
}, $("#add-form-team-note #chat2").val("");
error: function (e) { bindRemoveNotes();
console.log('error'); },
console.log(e); error: function (e) {
} console.log('error');
console.log(e);
}
});
}); });
});
} }
export {bindContractorNotes, bindOrderNotes, bindTeamNotes} function bindRemoveNotes() {
// console.log('num notes = ', $('.remove-note').length);
$('.remove-note').unbind().on('click', function (e) {
let $note = $(e.target).parent();
let noteId = $(e.target).data('id');
// console.log('click remove note');
$.ajax({
url: `/api/note/${noteId}`,
type: 'DELETE',
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
dataType: 'json',
success: function (json) {
$note.remove();
// console.log('Note deleted!');
// let li = note_tmpl({text: json.text, note_id: json.id});
// $(li).appendTo(".team-notes-block");
// $("#add-form-team-note #chat2").val("");
},
error: function (e) {
console.log('error');
console.log(e);
}
});
})
}
export {bindContractorNotes, bindOrderNotes, bindTeamNotes, bindRemoveNotes}

@ -0,0 +1,7 @@
<!-- this {text: '...', file: {...} -->
<div style="float: left">
<a href="/chat/download/${this.file.name}" class="send-doc" data-id="${this.file.id}"> ${this.file.name} </a>
<div class="remove-document" data-id="${this.file.id}"
style="right:-10px;float:left;position: static;"></div>
</div>
<div style="clear: both"></div>;

@ -1,3 +1,4 @@
<!-- this {text: '...', node_id: '...' -->
<div class="note-wrapper"> <div class="note-wrapper">
<li> <li>
${this.text} ${this.text}

@ -0,0 +1,16 @@
<!-- this {order: {...} -->
<tr>
<td>Название</td>
<td>${this.order.project.name}</td>
</tr>
<tr>
<td>Безопасная сделка</td>
<td>${this.order.secure ? 'Выбрана': 'Не выбрана'}</td>
</tr>
<tr>
<td>Тип здания</td>
<td>${this.order.project.realty.building_classification ? this.order.project.realty.building_classification.name : 'не задан'}</td>
<tr>
<td>Классификация здания</td>
<td>${this.order.project.realty.construction_type ? this.order.project.realty.construction_type.name: 'не задана'}</td>
</tr>

@ -5,7 +5,7 @@
<span>ЭТАП ${this.stage_num}</span> <span>ЭТАП ${this.stage_num}</span>
</div> </div>
<div class="alignright"> <div class="alignright">
<span class="stage-status"> ${this.stage_status}</span> <span class="stage-status"> ${this.stage_status?this.stage_status:'не согласован'}</span>
</div> </div>
<div style="clear: both;"></div> <div style="clear: both;"></div>
</div> </div>
@ -25,5 +25,8 @@
<div class="stage-data"> <div class="stage-data">
до ${this.stage.term} до ${this.stage.term}
</div> </div>
<div class="annotate">
Срок этапа расчитывается с момента резервирования средств
</div>
</div> </div>

@ -0,0 +1,32 @@
<!-- this {stage_num: '...', stage_status: '...', stage: {...} -->
<div class="numberStepp box-sizing">
<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}</span>
</div>
<div style="clear: both;"></div>
</div>
<div class="select">
${this.stage.name}
</div>
Результат этапа
<div class="select">
${this.stage.result}
</div>
Цена
<div class="select">
${this.stage.cost} ₽
</div>
Срок
<div class="select">
до ${this.stage.term}
</div>
<div class="annotate">
Срок этапа расчитывается с момента резервирования средств
</div>
</div>

@ -1,6 +1,15 @@
<!-- this {stage_num: '...', form_name: '...', orderId: '...', stage: {...} --> <!-- this {stage_num: '...', form_name: '...', orderId: '...', stage: {...} -->
<div class="numberStepp box-sizing"> <div class="numberStepp box-sizing">
<p>ЭТАП ${this.stage_num} </p> <!-- <p>ЭТАП ${this.stage_num} </p> ${this.stage_status} -->
<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>
</div>
<div style="clear: both;"></div>
</div>
<form class="${this.form_name} js-stage-form" data-stage-id="${(this.stage && this.stage.id) ? this.stage.id : ''}" <form class="${this.form_name} js-stage-form" data-stage-id="${(this.stage && this.stage.id) ? this.stage.id : ''}"
id="stage-form-${(this.stage && this.stage.id) ? this.stage.id : ''}"> id="stage-form-${(this.stage && this.stage.id) ? this.stage.id : ''}">
<label>Название</label> <label>Название</label>
@ -21,7 +30,7 @@
<input class="term-picker form-control datepicker" type="text" name="term" <input class="term-picker form-control datepicker" type="text" name="term"
value="${(this.stage && this.stage.term) ? this.stage.term : ''}"> value="${(this.stage && this.stage.term) ? this.stage.term : ''}">
<p class="error error-term"></p> <p class="error error-term"></p>
<label>Результат</label> <label>Результат этапа ${this.stage_num}</label>
<input class="form-control" type="text" name="result" <input class="form-control" type="text" name="result"
value="${(this.stage && this.stage.result) ? this.stage.result : ''}"> value="${(this.stage && this.stage.result) ? this.stage.result : ''}">
<p class="error error-result"></p> <p class="error error-result"></p>

@ -0,0 +1,14 @@
<!-- no context -->
<div class="switch">
<span class="select">Безопасная сделка не активна</span>
<div class="row mod-align-center">
<div class="col-lg-1">
<input name="price_and_term_required" id="switch-to-protected" class="custom-checkbox" type="checkbox">
</div>
<div class="col-lg-11">
<label for="safe" style="font-weight: normal" class="">
Перейти в режим безопасной сделки
</label>
</div>
</div>
</div>

@ -66,7 +66,7 @@ function connect() {
classMessage = ''; classMessage = '';
} }
if (data.is_system){ if (data.is_system){
senderName = 'Системное'; senderName = (senderName == 'Вы') ? 'Системное от Вас': `Системное от ${senderName}`;
classMessage = 'systemChat' classMessage = 'systemChat'
} }
@ -80,7 +80,12 @@ function connect() {
$documents_container.append(data.docs_attach); $documents_container.append(data.docs_attach);
if (data.answer_type == 'approve_stages') { if (data.answer_type == 'approve_stages' && data.sender_id != userId) {
if (data.msg.indexOf('перевел заказ') != -1){
let secure = false;
if (data.msg.indexOf('безопасную сделку') != -1) secure = true;
window.chatController.statesController._changeOrderProtect(secure);
}
window.chatController.statesController.redraw(); window.chatController.statesController.redraw();
} }
@ -102,7 +107,6 @@ function connect() {
}; };
socket.send_stages_approve = function (messageData) { socket.send_stages_approve = function (messageData) {
// TODO: Пометить сообщения как "системные"
socket.send(JSON.stringify(messageData)); socket.send(JSON.stringify(messageData));
}; };
}); });

@ -1,12 +1,14 @@
import {ChatPageController} from './chat/ChatContractorPageController' import {ChatPageController} from './chat/ChatContractorPageController'
import { import {
bindOrders, bindOrders,
bindOrderInfo,
bindArbitrationSend, bindArbitrationSend,
bindOnTabs, bindOnTabs,
bindUserContacts, bindUserContacts,
bindGetUserMessages, bindGetUserMessages,
bindTeams, bindTeams,
bindDeleteContact bindDeleteContact,
bindCtrlEnterSendMessage,
} from './chat/BINDS' } from './chat/BINDS'
import { import {
@ -35,12 +37,14 @@ $(function () {
}; };
window.chatController = new ChatPageController(); window.chatController = new ChatPageController();
bindOrders(); bindOrders();
bindOrderInfo();
bindTeams(); bindTeams();
bindOnTabs(); bindOnTabs();
bindUserContacts(); bindUserContacts();
bindGetUserMessages(); bindGetUserMessages();
bindArchiveProjects(); bindArchiveProjects();
bindDeleteContact(); bindDeleteContact();
bindCtrlEnterSendMessage();
// Chats // Chats
chatContactsInit(); chatContactsInit();

@ -1,18 +1,23 @@
import {ChatPageController} from './chat/ChatCustomerPageController' import {ChatPageController} from './chat/ChatCustomerPageController'
import { import {
bindOrders, bindOrders,
bindOrderInfo,
bindArbitrationSend, bindArbitrationSend,
bindOnTabs, bindOnTabs,
bindUserContacts, bindUserContacts,
bindGetUserMessages, bindGetUserMessages,
bindDeleteContact bindDeleteContact,
bindCtrlEnterSendMessage,
} from './chat/BINDS' } from './chat/BINDS'
import {restoreTabFromHash} from './chat/parts' import {restoreTabFromHash} from './chat/parts'
import {chatContactsInit, chatOrdersInit} from './chat/chats' import {chatContactsInit, chatOrdersInit} from './chat/chats'
import {uploadDocumentsOrderInit, uploadDocumentsContactInit} from './chat/documents'
import {connect} from './chat/wsChatConnect' import {connect} from './chat/wsChatConnect'
import {bindContractorNotes, bindOrderNotes} from './chat/notes'
import {bindArchiveProjects} from './chat/archiveProjects' import {bindArchiveProjects} from './chat/archiveProjects'
window.connect = connect; window.connect = connect;
@ -33,15 +38,25 @@ $(function () {
window.chatController = new ChatPageController(); window.chatController = new ChatPageController();
bindOrders(); bindOrders();
bindOrderInfo();
bindOnTabs(); bindOnTabs();
restoreTabFromHash(); restoreTabFromHash();
bindUserContacts(); bindUserContacts();
bindGetUserMessages(); bindGetUserMessages();
bindArchiveProjects(); bindArchiveProjects();
bindDeleteContact(); bindDeleteContact();
bindCtrlEnterSendMessage();
//Chats //Chats
chatContactsInit(); chatContactsInit();
chatOrdersInit(); chatOrdersInit();
//Documents
uploadDocumentsContactInit();
uploadDocumentsOrderInit();
//Notes
bindContractorNotes();
bindOrderNotes();
}); });

@ -203,7 +203,7 @@ $(function () {
// $("a[href='#tab1']").trigger('click'); // $("a[href='#tab1']").trigger('click');
// } // }
// Информация о заказе // Информация о заказе (copy)
$(".messageBlock").on('click','.full-order-info', function (e) { $(".messageBlock").on('click','.full-order-info', function (e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();

@ -504,6 +504,7 @@ $(function () {
} }
}); });
// Нечто непонятное
$.ajax({ $.ajax({
url: '/api/users/' + userId + '/', url: '/api/users/' + userId + '/',
type: 'GET', type: 'GET',

@ -26,3 +26,13 @@
display: -webkit-flex display: -webkit-flex
display: -ms-flexbox display: -ms-flexbox
display: flex display: flex
.mod-align-center-soft
display: flex
-ms-flex-align: center
-webkit-align-items: center
-webkit-box-align: center
align-items: center
&-inline
display: inline-flex
align-items: center

@ -75,6 +75,7 @@ class NoteSerializer(ModelSerializer):
model = Notes model = Notes
fields = ( fields = (
'id',
'text', 'text',
'created', 'created',
'order', 'order',

@ -3,7 +3,7 @@
@import "base/colors" @import "base/colors"
%icons %icons
margin-left: 0px margin-left: 0
display: inline-flex display: inline-flex
align-items: center align-items: center
&:before &:before
@ -20,6 +20,14 @@
padding-left: 45px padding-left: 45px
font-family: Arial, Verdana, Helvetica, sans-serif font-family: Arial, Verdana, Helvetica, sans-serif
.team-block
a:visited, a:link
color: #a8a8a8
a.my-group
color: #3d3d3d
a:hover
color: black
ol ol
li li
display: list-item display: list-item
@ -35,10 +43,23 @@ ol
.modal-header .modal-header
text-align: center text-align: center
.fix-wrapper
width: 100%
padding-left: 15px
padding-right: 15px
.switch
padding-left: 15px
// Системное сообщение // Системное сообщение
.systemChat .systemChat
background-color: #ffe9ed background-color: #ffe9ed
.numberStepp
border-bottom: 1px solid #CFCFCF
&:last-child
border-bottom: none
.review-type .review-type
.alignleft .alignleft
float: left float: left
@ -103,11 +124,11 @@ ol
&.icon-change &.icon-change
@extend %icons @extend %icons
&:before &:before
width: 20px width: 24px
height: 24px height: 24px
background: background:
image: url("#{$static}/img/icons/icon_edit.png") image: url("#{$static}/img/icons/icon_edit.png")
size: 20px 24px size: 24px 24px
repeat: no-repeat repeat: no-repeat
&.icon-credit_card &.icon-credit_card
@extend %icons @extend %icons
@ -149,23 +170,30 @@ ol
a.btn.btn-send a.btn.btn-send
transition: all 0.3s transition: all 0.3s
padding: 5px 25px !important padding: 4px 25px !important
background-color: white background-color: white
border: 1px solid #BEBEBE border: 1px solid #BEBEBE
border-radius: 40px border-radius: 40px
&:hover &:hover
transform: scale(1.04) //transform: scale(1.04)
box-shadow: 0 0 15px rgba(0, 0, 0, 0.2) //box-shadow: 0 0 15px rgba(0, 0, 0, 0.2)
background-color: #e6e6e6
border-color: #adadad
&.icon-send &.icon-send
@extend %icons @extend %icons
&:before &:before
width: 25px width: 20px
height: 25px height: 20px
background: background:
image: url("#{$static}/img/icons/icon_arrow_gray.png") image: url("#{$static}/img/icons/icon_arrow_gray.png")
size: 24px 24px size: 20px 20px
repeat: no-repeat repeat: no-repeat
.upload-new p
font-family: 'pfdintextcomppro-regular', sans-serif !important
font-size: 15px !important
letter-spacing: 1px !important
.icon-protect .icon-protect
display: inline-block display: inline-block
@extend %icons @extend %icons
@ -186,16 +214,27 @@ a.btn.btn-send
height: 20px height: 20px
left: 0 left: 0
background: background:
image: url("#{$static}/img/icons/icon_pen_black.png") image: url("#{$static}/img/icons/icon_hand_pen.png")
size: 20px 20px size: 20px 20px
repeat: no-repeat repeat: no-repeat
.linkChat11:hover > .glyphicon-info-sign
color: red
.stage-data .stage-data
padding-left: 3px padding-left: 3px
background-color: #f1f1f1 background-color: #f1f1f1
color: #8c8c8c color: #8c8c8c
font-size: 12px font-size: 12px
.stage-header
white-space: nowrap
.annotate
padding-top: 5px
color: #8c8c8c
font-size: 12px
.stage-status .stage-status
font-style: italic font-style: italic
color: #5e5e5e color: #5e5e5e

@ -12,7 +12,7 @@
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<h1>Чат</h1> <h1>Переговорная</h1>
</div> </div>
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
@ -46,19 +46,21 @@
<div class="chatBlock disTab tab-pane fade in" id="tab1"> <div class="chatBlock disTab tab-pane fade in" id="tab1">
<div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0"> <div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="remove-margin">
<div class="remove-margin"> <div class="messageBlock box-sizing disTab">
<div class="header-wrapper"> <div class="header-wrapper">
<span class="header"> <span class="header">
Контакты Контакты
</span> </span>
<div class="triangle-header"></div> <div class="triangle-header"></div>
</div> </div>
</div> <div class="fix-wrapper">
{% for contact in contacts_users %} {% for contact in contacts_users %}
{% include 'inc-contact-card.html' %} {% include 'inc-contact-card.html' %}
{% endfor %} {% endfor %}
</div>
</div>
</div> </div>
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat"> <div class="col-lg-6 commChat" id="contact-chat">
@ -67,7 +69,7 @@
<input type="hidden" value="{{ request.user.pk }}" name="senderId" <input type="hidden" value="{{ request.user.pk }}" name="senderId"
id="senderContactId"/> id="senderContactId"/>
<input type="hidden" value="" name="recipentId" id="recipentContactId"/> <input type="hidden" value="" name="recipentId" id="recipentContactId"/>
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing js-chat"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя <p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя
отправить</p> отправить</p>
@ -86,17 +88,8 @@
</form> </form>
</div> </div>
<div class="col-lg-3 wrstepschat"> <div class="col-lg-3 wrstepschat">
<div class="col-lg-12 documentsChat"> <div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentSpace' %} {% include 'partials/inc-attach-documents.html' with class='documentSpace' %}
{# <p>Прикрепленные документы</p>#}
{# <ul id="documentSpace">#}
{# </ul>#}
{# <div style="margin-left: -27px; margin-right: -27px;">#}
{# <a href="{% url 'common:create' %}"#}
{# class="chat-button icon-print"#}
{# style="padding: 25px 10px"#}
{# >Распечатать с помощью ресурса</a>#}
{# </div>#}
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<ol class="contractor-notes-block"></ol> <ol class="contractor-notes-block"></ol>
@ -125,35 +118,45 @@
<div class="chatBlock disTab tab-pane fade" id="tab2"> <div class="chatBlock disTab tab-pane fade" id="tab2">
<div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0"> <div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="remove-margin">
<div class="remove-margin"> <div class="messageBlock box-sizing disTab">
<div class="header-wrapper"> <div class="header-wrapper">
<span class="header"> <span class="header">
Заказы Заказы
</span> </span>
<div class="triangle-header"></div> <div class="triangle-header"></div>
</div> </div>
</div> <div class="fix-wrapper">
{% for order in orders %} {% for order in orders %}
{% include 'partials/inc-order-card.html' %} {% include 'partials/inc-order-card.html' %}
{% endfor %} {% endfor %}
</div>
{% if archive_orders %} {% if archive_orders %}
<div style="margin-left: -13px; margin-right: -13px; text-align: center"> {# <div style="margin-left: -13px; margin-right: -13px; text-align: center">#}
<a href="#" data-show="true" id="trashed-button" class="chat-button icon-books"> <a href="#" data-show="true" id="trashed-button"
class="chat-button icon-books">
Показать архивные заказы Показать архивные заказы
</a> </a>
</div> {# </div>#}
<p id="show-archive-label" style="display: none;">Архивные заказы</p> {# <p id="show-archive-label" style="display: none;">Архивные заказы</p>#}
<div id="archive-space" style="display:none;"> <div class="header-wrapper" id="show-archive-label" style="display: none;">
<span class="header">
<div id="trashed-orders"> Архивные заказы
{% for order in archive_orders %} </span>
<div data-id="{{ order.id }}" class="trashedOrderBlock box-sizing"> <div class="triangle-header"></div>
<span class="dimovChat"></span> </div>
<p class="titleOB"> {{ order.project.name }}</p> <div class="fix-wrapper">
<div class="hideOBB"><p class="pOB"> <div id="archive-space" style="display:none;">
<div id="trashed-orders">
{% for order in archive_orders %}
<div data-id="{{ order.id }}"
class="trashedOrderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB"> {{ order.project.name }}</p>
<div class="hideOBB"><p class="pOB">
<span>Исполнитель: <span>Исполнитель:
{% if order.contractor %} {% if order.contractor %}
{{ order.contractor.get_full_name }} {{ order.contractor.get_full_name }}
@ -161,20 +164,22 @@
{{ order.team.name }} {{ order.team.name }}
{% endif %} {% endif %}
</span> </span>
</p> </p>
<a href="#" class="linkChat11 full-order-info"> <a href="#" class="linkChat11 full-order-info">
<span class="glyphicon glyphicon-info-sign" <span class="glyphicon glyphicon-info-sign"
aria-hidden="true"></span> aria-hidden="true"></span>
Полное описание заказа Полное описание заказа
</a> </a>
</div> </div>
</div>
{% endfor %}
</div> </div>
{% endfor %} </div>
</div> </div>
</div> {% endif %}
{% endif %}
</div>
</div>
</div>
</div> </div>
<div class="col-lg-6 commChat"> <div class="col-lg-6 commChat">
<div id="message-chat-order-space"></div> <div id="message-chat-order-space"></div>
@ -183,7 +188,7 @@
<input type="hidden" id="orderId" name="orderId"> <input type="hidden" id="orderId" name="orderId">
<input type="hidden" id="senderId" name="senderId" value="{{ request.user.pk }}"> <input type="hidden" id="senderId" name="senderId" value="{{ request.user.pk }}">
<input type="hidden" id="recipentId" name="recipentId" value=""> <input type="hidden" id="recipentId" name="recipentId" value="">
<textarea id="chat" class="box-sizing"></textarea> <textarea id="chat" class="box-sizing js-chat"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя <p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя
отправить</p> отправить</p>
<div class="bunChat"> <div class="bunChat">
@ -211,9 +216,12 @@
</div> </div>
</div> </div>
{# 1.Согласование условий #} {# 1.Согласование условий #}
<div class="stepssBlock box-sizing disTab" id="conditions-approve"> <div class="stepssBlock box-sizing disTab" id="conditions-approve" style="border-bottom: none">
<p class="titleStepss"> <p class="titleStepss">
<span class="select"> 1.</span> Согласование условий</p> <span class="stage-header">
<span class="select js-select"> 1.</span> <span class="js-stage-header">Согласование условий</span>
</span>
</p>
<p class="textStepss js-help-text"> <p class="textStepss js-help-text">
Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем. Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем.
</p> </p>
@ -235,7 +243,7 @@
</a> </a>
<a href="#" <a href="#"
class="chat-button icon-change" class="chat-button icon-change"
style="padding: 25px 5px; padding-left: 15px;" style="padding: 25px 5px 25px 10px;"
id="btnChange">Отправить на внесение изменений id="btnChange">Отправить на внесение изменений
</a> </a>
<a href="#" <a href="#"
@ -248,7 +256,7 @@
<div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;"> <div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;">
<div class="titleStepss"><span class="select">2.</span> Резервирование</div> <div class="titleStepss"><span class="select js-select">2.</span> Резервирование</div>
<div class="textStepss js-help-text"> <div class="textStepss js-help-text">
Заказчик резервирует сумму на оплату работы. Заказчик резервирует сумму на оплату работы.
Деньги перечисляются и хранятся на сайте. <br> Деньги перечисляются и хранятся на сайте. <br>
@ -264,7 +272,7 @@
</div> </div>
<div class="stepssBlock box-sizing disTab" id="completeWork" style="display: none"> <div class="stepssBlock box-sizing disTab" id="completeWork" style="display: none">
<p class="titleStepss"><span class="select">3.</span> Выполнение работы</p> <p class="titleStepss"><span class="select js-select">3.</span> Выполнение работы</p>
<p class="textStepss js-help-text"> <p class="textStepss js-help-text">
Процесс выполнения задания в заказе до получения Процесс выполнения задания в заказе до получения
заказчиком итогового результата работы. заказчиком итогового результата работы.
@ -302,7 +310,7 @@
</div> </div>
</div> </div>
<div class="col-lg-12 documentsChat"> <div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %} {% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %}
</div> </div>
@ -341,23 +349,20 @@
<div class="chatBlock disTab tab-pane fade" id="tab3"> <div class="chatBlock disTab tab-pane fade" id="tab3">
<div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0"> <div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="remove-margin">
<div class="remove-margin"> <div class="messageBlock box-sizing disTab">
<div class="header-wrapper"> <div class="header-wrapper">
<span class="header"> <span class="header">
Группы Группы
</span> </span>
<div class="triangle-header"></div> <div class="triangle-header"></div>
</div> </div>
<div class="fix-wrapper">
{% for yteam in your_teams %}
{% include 'partials/inc-team-card.html' %}
{% endfor %}
</div>
</div> </div>
{# {% for torder in team_orders %}#}
{# {% include 'partials/inc-order-card.html' with order=torder %}#}
{# {% endfor %}#}
{% for yteam in your_teams %}
{% include 'partials/inc-team-card.html' %}
{% endfor %}
</div> </div>
</div> </div>
<div class="col-lg-6 commChat"> <div class="col-lg-6 commChat">
@ -369,7 +374,7 @@
<input type="hidden" name="team" id="teamId"> <input type="hidden" name="team" id="teamId">
<input type="hidden" name="team_ids" id="teamIds"> <input type="hidden" name="team_ids" id="teamIds">
<input type="hidden" name="document-send" id="documentSendIds"> <input type="hidden" name="document-send" id="documentSendIds">
<textarea id="chatText" class="chat-textarea box-sizing"></textarea> <textarea id="chatText" class="chat-textarea box-sizing js-chat"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя <p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя
отправить</p> отправить</p>
<div class="bunChat"> <div class="bunChat">
@ -391,16 +396,8 @@
</div> </div>
<div class="col-lg-3 wrstepschat"> <div class="col-lg-3 wrstepschat">
<div class="col-lg-12 documentsChat"> <div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentTeamSpace' %} {% include 'partials/inc-attach-documents.html' with class='documentTeamSpace' %}
{# <p>Прикрепленные документы</p>#}
{# <ul id="documentTeamSpace"></ul>#}
{# <div style="margin-left: -27px; margin-right: -27px;">#}
{# <a href="{% url 'common:create' %}"#}
{# class="chat-button icon-print"#}
{# style="padding: 25px 10px"#}
{# >Распечатать с помощью ресурса</a>#}
{# </div>#}
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">

@ -53,8 +53,9 @@
<div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0"> <div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0">
<!-- Первый столбик "Контакты" --> <!-- Первый столбик "Контакты" -->
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="remove-margin">
<div class="remove-margin"> <div class="messageBlock box-sizing disTab">
<div class="header-wrapper"> <div class="header-wrapper">
<span class="header"> <span class="header">
Контакты Контакты
@ -62,11 +63,14 @@
<div class="triangle-header"></div> <div class="triangle-header"></div>
</div> </div>
</div> <div class="fix-wrapper">
{% for contact in contacts_users %} {% for contact in contacts_users %}
{% include 'inc-contact-card.html' %} {% include 'inc-contact-card.html' %}
{% endfor %} {% endfor %}
<div style="clear: both"></div>
</div>
</div>
</div> </div>
</div> </div>
<!-- Второй столбик "Чат" --> <!-- Второй столбик "Чат" -->
@ -76,19 +80,9 @@
<input type="hidden" value="{{ request.user.pk }}" name="senderId" <input type="hidden" value="{{ request.user.pk }}" name="senderId"
id="senderContactId"/> id="senderContactId"/>
<input type="hidden" name="recipentId" id="recipentContactId"> <input type="hidden" name="recipentId" id="recipentContactId">
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing js-chat"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя <p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя
отправить</p> отправить</p>
{# <div class="bunChat">#}
{# <div class="setChat box-sizing upload">#}
{# <input type="file" name="file" id="upload-document-contact">#}
{# <p>Прикрепить файл</p>#}
{# </div>#}
{# <div id="document-send-contact"></div>#}
{# <a id="contact-chat-add-message" href="#">отправить</a>#}
{# </div>#}
{# EDIT#}
<div class="bunChat"> <div class="bunChat">
<input style="display: none" type="file" name="file" id="upload-document-contact"> <input style="display: none" type="file" name="file" id="upload-document-contact">
<div onclick="$('#upload-document-contact').trigger('click')" <div onclick="$('#upload-document-contact').trigger('click')"
@ -96,9 +90,10 @@
class="upload-new paper-clip"> class="upload-new paper-clip">
<p id="fileUploadAddBtn" style="margin: 0">прикрепить файл</p> <p id="fileUploadAddBtn" style="margin: 0">прикрепить файл</p>
</div> </div>
<div id="document-send-contact"></div>
<a style="float: right" class="btn btn-send icon-send" href="#" <a style="float: right" class="btn btn-send icon-send" href="#"
id="contact-chat-add-message">отправить</a> id="contact-chat-add-message">отправить</a>
<div style="clear: both"></div>
<div style="padding-top: 10px;" id="document-send-contact"></div>
</div> </div>
</form> </form>
@ -106,14 +101,8 @@
</div> </div>
<!-- Второй столбик "Прикрепленные документы" --> <!-- Второй столбик "Прикрепленные документы" -->
<div class="col-lg-3 wrstepschat"> <div class="col-lg-3 wrstepschat">
<div class="col-lg-12 documentsChat"> <div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentSpace' %} {% include 'partials/inc-attach-documents.html' with class='documentSpace' %}
{# <p>Прикрепленные документы</p>#}
{# <ul id="documentSpace">#}
{# </ul>#}
{# <a href="{% url 'common:create' %}">#}
{# Распечатать с помощью ресурса#}
{# </a>#}
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
@ -143,8 +132,9 @@
<div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0"> <div class="row mod-row-eq-height" style="margin-left: 0; margin-right: 0">
<!-- Первый столбик "Заказы" --> <!-- Первый столбик "Заказы" -->
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="remove-margin">
<div class="remove-margin"> <div class="messageBlock box-sizing disTab">
<div class="header-wrapper"> <div class="header-wrapper">
<span class="header"> <span class="header">
Заказы Заказы
@ -152,31 +142,36 @@
<div class="triangle-header"></div> <div class="triangle-header"></div>
</div> </div>
</div> <div class="fix-wrapper">
{% for order in orders %} {% for order in orders %}
{% include 'partials/inc-order-card.html' %} {% include 'partials/inc-order-card.html' %}
{% endfor %} {% endfor %}
</div>
{% if archive_projects %} {% if archive_projects %}
{# <div class="textAreaBlock2 FFD box-sizing disTab">#} <a href="#" data-show="true" id="trashed-button"
{# <a href="#" data-show="true" id="trashed-button">Показать архивные заказы</a>#} class="chat-button icon-books"
{# </div>#} style="margin-top: 4px">
<div style="margin-left: -13px; margin-right: -13px; text-align: center">
<a href="#" data-show="true" id="trashed-button" class="chat-button icon-books">
Показать архивные заказы Показать архивные заказы
</a> </a>
</div> <div class="header-wrapper" id="show-archive-label" style="display: none;">
<p id="show-archive-label" style="display: none;">Архивные заказы</p> <span class="header">
<div id="archive-space" style="display:none;"> Архивные заказы
</span>
<div id="trashed-orders"> <div class="triangle-header"></div>
{% for proj in archive_projects %} </div>
<div data-id="{{ proj.order.id }}" class="trashedOrderBlock box-sizing"> <div class="fix-wrapper">
<span class="dimovChat"></span> <div id="archive-space" style="display:none;">
<p class="titleOB"> {{ proj.name }}</p>
<div class="hideOBB"><p class="pOB"> <div id="trashed-orders">
{% for proj in archive_projects %}
<div data-id="{{ proj.order.id }}"
class="trashedOrderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB"> {{ proj.name }}</p>
<div class="hideOBB"><p class="pOB">
<span>Исполнитель: <span>Исполнитель:
{% if proj.order.contractor %} {% if proj.order.contractor %}
{{ proj.order.contractor.get_full_name }} {{ proj.order.contractor.get_full_name }}
@ -184,18 +179,20 @@
{{ proj.order.team.name }} {{ proj.order.team.name }}
{% endif %} {% endif %}
</span> </span>
</p> </p>
<a href="#" class="linkChat11 full-order-info"> <a href="#" class="linkChat11 full-order-info">
<span class="glyphicon glyphicon-info-sign" <span class="glyphicon glyphicon-info-sign"
aria-hidden="true"></span> aria-hidden="true"></span>
Полное описание заказа Полное описание заказа
</a> </a>
</div> </div>
</div>
{% endfor %}
</div> </div>
{% endfor %} </div>
</div> </div>
</div> {% endif %}
{% endif %} </div>
</div> </div>
</div> </div>
<!-- Второй столбик "Чат" --> <!-- Второй столбик "Чат" -->
@ -205,7 +202,7 @@
<input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/> <input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipentId" id="recipentId"> <input type="hidden" name="recipentId" id="recipentId">
<input type="hidden" name="orderId" id="orderId"> <input type="hidden" name="orderId" id="orderId">
<textarea id="chat" class="box-sizing"></textarea> <textarea id="chat" class="box-sizing js-chat"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя <p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя
отправить</p> отправить</p>
<div class="bunChat"> <div class="bunChat">
@ -215,9 +212,11 @@
class="upload-new paper-clip"> class="upload-new paper-clip">
<p id="fileUploadAddBtn" style="margin: 0">прикрепить файл</p> <p id="fileUploadAddBtn" style="margin: 0">прикрепить файл</p>
</div> </div>
<div id="document-send-order"></div> {# <div id="document-send-order"></div>#}
<a style="float: right" class="btn btn-send icon-send" href="#" <a style="float: right" class="btn btn-send icon-send" href="#"
id="order-chat-add-message">отправить</a> id="order-chat-add-message">отправить</a>
<div style="clear: both"></div>
<div style="padding-top: 10px;" id="document-send-order"></div>
</div> </div>
</form> </form>
</div> </div>
@ -232,9 +231,10 @@
</div> </div>
</div> </div>
{# 1.Согласование условий #} {# 1.Согласование условий #}
<div class="stepssBlock box-sizing disTab" id="conditions-approve"> <div class="stepssBlock box-sizing disTab" id="conditions-approve"
style="border-bottom: none">
<p class="titleStepss"> <p class="titleStepss">
<span class="select>"> 1.</span> Согласование условий</p> <span class="select js-select"> 1.</span> Согласование условий</p>
<p class="textStepss js-help-text"> <p class="textStepss js-help-text">
Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем. Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем.
</p> </p>
@ -243,10 +243,10 @@
</div> </div>
</div> </div>
<div class="stepssBlock" style=""> <div class="stepssBlock" style="border-top: none">
<p class="textStepss">Количество этапов в данном проекте <div class="textStepss mod-align-center-soft">Количество этапов в данном проекте
<input type="text" id="countStage" value="" size="3"/> <input style="text-align: center" type="text" id="countStage" value="" size="3"/>
</p> </div>
<div id="order-stages"> <div id="order-stages">
</div> </div>
@ -273,7 +273,7 @@
<div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;"> <div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;">
<div class="titleStepss">2. Резервирование</div> <div class="titleStepss"><span class="select js-select">2.</span> Резервирование</div>
<div class="textStepss js-help-text"> <div class="textStepss js-help-text">
Заказчик резервирует сумму на оплату работы. Заказчик резервирует сумму на оплату работы.
Деньги перечисляются и хранятся на сайте. Деньги перечисляются и хранятся на сайте.
@ -308,7 +308,7 @@
<!-- Конец блока --> <!-- Конец блока -->
<div class="stepssBlock box-sizing disTab" id="completeWork" style="display: none"> <div class="stepssBlock box-sizing disTab" id="completeWork" style="display: none">
<p class="titleStepss"><span class="select">3.</span> Выполнение работы</p> <p class="titleStepss"><span class="select js-select">3.</span> Выполнение работы</p>
<p class="textStepss js-help-text"> <p class="textStepss js-help-text">
Процесс выполнения задания в заказе до получения Процесс выполнения задания в заказе до получения
заказчиком итогового результата работы. заказчиком итогового результата работы.
@ -342,39 +342,21 @@
</div> </div>
</div> </div>
<div class="col-lg-12 documentsChat"> <div class="col-lg-12">
{% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %} {% include 'partials/inc-attach-documents.html' with class='documentOrderSpace' %}
{# <p>Прикрепленные документы</p>#}
{# <ul id="documentOrderSpace"></ul>#}
{# <div style="margin-left: -27px; margin-right: -27px;">#}
{# <a href="{% url 'common:create' %}"#}
{# class="chat-button icon-print"#}
{# style="padding: 25px 10px"#}
{# >Распечатать с помощью ресурса</a>#}
{# </div>#}
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
{# <ul class="order-notes-block">#} <ol class="order-notes-block"></ol>
{# </ul>#}
{# <p>Для заметок</p>#}
{# <form id="add-form-order-note">#}
{# <textarea id="chat2" name="text"></textarea>#}
{# <input type="hidden" name="order" id="orderNote" value=""/>#}
{# <input type="hidden" name="sender" id="senderNote" value="{{ request.user.pk }}"/>#}
{# <input type="hidden" name="recipent" id="recipentNote" value=""/>#}
{# <a href="#" id="add-note-button">сохранить</a>#}
{# </form>#}
<ol class="contractor-notes-block"></ol>
<form id="add-form-order-note"> <form id="add-form-order-note">
<div class="icon-note mod-align-center">Для заметок</div> <div class="icon-note mod-align-center">Для заметок</div>
<textarea id="chat2" name="text"></textarea> <textarea id="chat2" name="text"></textarea>
<input type="hidden" name="order" id="orderNote" value=""/> <input type="hidden" name="order" id="orderNote" value=""/>
<input type="hidden" name="sender" id="senderNote" value="{{ request.user.pk }}"/> <input type="hidden" name="sender" id="senderNote" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipent" id="recipentNote" value=""/> <input type="hidden" name="recipent" id="recipentNote" value=""/>
<a style="float: right" class="btn btn-send icon-send" href="#" id="add-note-button"> <a style="float: right" class="btn btn-send icon-send" href="#"
сохранить id="add-note-button">
сохранить!
</a> </a>
</form> </form>

@ -6,10 +6,10 @@
</button> </button>
<h4 class="modal-title">Полное описапие заказа</h4> <h4 class="modal-title">Полное описапие заказа</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<table class="table table-bordered"></table> <table class="table table-bordered"></table>
</div> </div>
<div class="modal-footer"></div> <div class="modal-footer"></div>
</div> </div>
</div> </div>
</div> </div>

@ -1,27 +1,27 @@
<p>Прикрепленные документы</p> <div class="documentsChat">
<ul id="{{ class }}"></ul> <p style="text-align: center">Прикрепленные документы</p>
<div style="text-align: center"> <ul id="{{ class }}"></ul>
<a class="docs-more js-more" style="display: none"></a> <div style="text-align: center">
<a class="docs-more js-more" style="display: none"></a>
</div>
</div> </div>
<div style="margin-left: -27px; margin-right: -27px;"> <div style="margin-left: -27px; margin-right: -27px;">
<a href="{% url 'common:create' %}" <a href="{% url 'common:create' %}"
class="chat-button icon-print" class="chat-button icon-print"
style="padding: 25px 10px" style="padding: 25px 10px">
>Распечатать с помощью ресурса</a> Распечатать с помощью ресурса
</a>
</div> </div>
<script> <script>
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
var $documents_container = $('#' + '{{ class }}'); var $documents_container = $('#' + '{{ class }}');
var $more = $documents_container.parent().find('.js-more'); var $more = $documents_container.parent().find('.js-more');
{# console.log("more -->", $more);#}
$documents_container.bind('DOMSubtreeModified', function (e) { $documents_container.bind('DOMSubtreeModified', function (e) {
{# console.log('Documents container change!!!');#}
var $elements = $documents_container.children('li'); var $elements = $documents_container.children('li');
var num_elements = $elements.length; var num_elements = $elements.length;
if (num_elements > 2) { if (num_elements > 2) {
$more.show(); $more.show();
console.log("more class = ", $more.attr('class'));
if ($more.hasClass('docs-more')) { if ($more.hasClass('docs-more')) {
$elements.slice(0, 2).show(); $elements.slice(0, 2).show();
$elements.slice(2).hide(); $elements.slice(2).hide();
@ -44,7 +44,7 @@
$more.removeClass('docs-less'); $more.removeClass('docs-less');
$more.addClass('docs-more'); $more.addClass('docs-more');
} }
{# $more.toggleClass('docs-more', 'docs-less')#} {# $more.toggleClass('docs-more', 'docs-less')#}
}) })
}) })
</script> </script>

@ -5,7 +5,7 @@
<div class="titleOB mod-align-center"> <div class="titleOB mod-align-center">
<div class="max-rows" style="display: inline-block"> <div class="max-rows" style="display: inline-block">
{{ yteam }} {% if yteam.owner.pk == request.user.pk %} {{ yteam }} {% if yteam.owner.pk == request.user.pk %}
[<a href="{% url 'users:team-profile' pk=yteam.pk %}">Моя группа</a>] {% endif %} [<a class="my-group" href="{% url 'users:team-profile' pk=yteam.pk %}">Моя группа</a>] {% endif %}
</div> </div>
<div class="mod-align-center-inline"> <div class="mod-align-center-inline">
<span class="js-count count-order" id="count-team-{{ yteam.pk }}">{% get_new_count_for_team request.user yteam.id %}</span> <span class="js-count count-order" id="count-team-{{ yteam.pk }}">{% get_new_count_for_team request.user yteam.id %}</span>

@ -12,7 +12,7 @@ TYPE_REVIEWS = (
class Review(models.Model): class Review(models.Model):
project = models.ForeignKey('projects.Project', related_name='reviews') project = models.ForeignKey('projects.Project', related_name='reviews')
type = models.CharField(max_length=30, choices=TYPE_REVIEWS, default='neutral') type = models.CharField(max_length=30, choices=TYPE_REVIEWS, default='neutral')
text = models.TextField() text = models.TextField(blank=True)
created = models.DateTimeField(default=timezone.now) created = models.DateTimeField(default=timezone.now)
target_customer = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True) target_customer = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True)
target_contractor = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True) target_contractor = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True)

@ -7,6 +7,7 @@ from .models import Review
class ReviewSerializer(ModelSerializer): class ReviewSerializer(ModelSerializer):
target_user = serializers.SerializerMethodField(read_only=True) target_user = serializers.SerializerMethodField(read_only=True)
order = serializers.SerializerMethodField(read_only=True) order = serializers.SerializerMethodField(read_only=True)
count_reviews = serializers.SerializerMethodField(read_only=True)
class Meta: class Meta:
model = Review model = Review
@ -16,6 +17,7 @@ class ReviewSerializer(ModelSerializer):
'text', 'text',
'type', 'type',
'created', 'created',
'count_reviews',
'project', 'project',
'from_customer', 'from_customer',
'from_contractor', 'from_contractor',
@ -30,6 +32,9 @@ class ReviewSerializer(ModelSerializer):
def get_order(self, obj): def get_order(self, obj):
return obj.project.order.pk return obj.project.order.pk
def get_count_reviews(self, obj):
return Review.objects.filter(project=obj.project).count()
def get_target_user(self, obj): def get_target_user(self, obj):
if obj.target_customer: if obj.target_customer:
return obj.target_customer.pk return obj.target_customer.pk

@ -406,7 +406,7 @@
data: { data: {
sender_id: '{{ contractor.pk }}', sender_id: '{{ contractor.pk }}',
recipent_id: String(contractor2Id), recipent_id: String(contractor2Id),
chat_message: 'Приглашаю в группу "{{ contractor.team.name }}" <a href="http://{{ request.get_host }}{% url 'users:accept-team-invitation' owner_id=contractor.pk %}" class="message_connect">Присоединиться</a>', 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>',
}, },
}) })

@ -2,6 +2,7 @@ from django.conf import urls
from .views import ( from .views import (
AcceptTeamInvitation, AcceptTeamInvitation,
RefuseTeamInvitation,
contractor_resumefile_create, contractor_resumefile_create,
ContractorChatProjectsView, ContractorChatProjectsView,
ContractorFilterView, ContractorFilterView,
@ -52,4 +53,6 @@ urlpatterns = [
name='create-team-invitation'), name='create-team-invitation'),
urls.url(r'^accept-team-invitation/(?P<owner_id>\d+)/$', AcceptTeamInvitation.as_view(), urls.url(r'^accept-team-invitation/(?P<owner_id>\d+)/$', AcceptTeamInvitation.as_view(),
name='accept-team-invitation'), name='accept-team-invitation'),
urls.url(r'^refuse-team-invitation/(?P<owner_id>\d+)/$', RefuseTeamInvitation.as_view(),
name='refuse-team-invitation'),
] ]

@ -995,4 +995,10 @@ class AcceptTeamInvitation(NoCsrfMixin, ContractorRequiredMixin, View):
else: else:
raise Http404 raise Http404
class RefuseTeamInvitation(NoCsrfMixin, ContractorRequiredMixin, View):
def get(self, request, *args, owner_id, **kwargs):
pass
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))

Loading…
Cancel
Save