PR-58 модификация поиска исполнителей

Страница поиска Исполнителей переделана на ajax
Изменены внутренние инструменты стараницы поиска Заказов
remotes/origin/PR-58
booblegum 9 years ago
parent 1c7ebb0905
commit 278ee2b207
  1. 24
      archilance/util.py
  2. 228
      assets/js/build/contractor_filter.js
  3. 154
      assets/js/build/create_project.js
  4. 38
      assets/js/build/create_worksell.js
  5. 39
      assets/js/build/customer_profile.js
  6. 4
      assets/js/build/home_page.js
  7. 1443
      assets/js/build/init_contractor_filter.js
  8. 256
      assets/js/build/init_create_worksell.js
  9. 257
      assets/js/build/init_customer_project_create.js
  10. 195
      assets/js/build/project_filter.js
  11. 4
      assets/js/build/user_profile_edit.js
  12. 22
      assets/js/src/contractor_filter.js
  13. 64
      assets/js/src/init_contractor_filter.js
  14. 20
      assets/js/src/project_filter.js
  15. 49
      assets/js/src/seeds/ajax_set_filter.js
  16. 20
      assets/js/src/seeds/filter_toggle.js
  17. 6
      assets/sass/components/custom-components.sass
  18. 76
      assets/sass/old_main.sass
  19. 2
      projects/static/css/project_filter.css
  20. 6
      projects/templates/partials/inc-projects-filter.html
  21. 2
      projects/templates/project_filter.html
  22. 40
      projects/views.py
  23. 19
      templates/partials/ajax_pagination.html
  24. 523
      users/templates/contractor_filter.html
  25. 154
      users/templates/partials/inc-contractors-filter.html
  26. 196
      users/templates/partials/inc-contractors-results.html
  27. 0
      users/templates/partials/inc-contractors-sort_by.html
  28. 521
      users/templates/trash/contractor_filter.html
  29. 491
      users/views.py
  30. 7
      webpack.config.js

@ -2,12 +2,14 @@ import datetime
from pprint import pprint
import natsort
import re
import pydash as _;
from django.core import validators
from django.core.exceptions import ObjectDoesNotExist
from django.core.files.storage import FileSystemStorage
from django.shortcuts import _get_queryset
from django.utils import timezone
from django.db.models import Q
_.map = _.map_;
_.filter = _.filter_
@ -175,3 +177,25 @@ class ASCIIFileSystemStorage(FileSystemStorage):
tr = {ord(a): ord(b) for a, b in zip(*symbols)}
name = name.translate(tr)
return super().get_valid_name(name)
def build_query(id_str, _class, *args):
"""
Возвращает QuerySet для строки id-ников по заданным args (см. примеры вызова - там понятнее)
:param id_str: 'id1, id2, ...idn'
:param _class: model
:param args:
:return: queryset
"""
query = Q()
id_list = tuple(filter(None, re.split(r'\s|,|;', id_str)))
for id in id_list:
obj = _class.objects.get(id=id)
try:
kwargs = dict(zip(args, (obj.lft, obj.rght)))
except AttributeError:
kwargs = {args[0]: obj.id}
# print("kwargs = ", type(kwargs))
query |= Q(**kwargs)
return query

@ -0,0 +1,228 @@
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _custom_check = __webpack_require__(1);
var _extended_field = __webpack_require__(2);
var _ajax_set_filter = __webpack_require__(3);
var _filter_toggle = __webpack_require__(4);
function paginateTo(pageNum) {
var $form = $('#filter-form');
var postfix = "&page=" + pageNum;
var $container = $('#contractorsBlock');
(0, _ajax_set_filter.sendData)($form, $container, pageNum);
(0, _ajax_set_filter.modUrl)($form, postfix);
return false;
}
$(function () {
(0, _custom_check.customCheckInit)();
(0, _extended_field.extendedFieldInit)();
(0, _filter_toggle.filterToggleInit)();
window.sendFilterData = _ajax_set_filter.sendFilterData;
window.paginateTo = paginateTo;
});
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function customCheckInit() {
function tuneCheckBoxes($boxes) {
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
}
exports.customCheckInit = customCheckInit;
/***/ },
/* 2 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function extendedFieldInit() {
var $buttonF1 = $('.resButton');
if ($('.slide').hasClass("active")) $buttonF1.css('transform', 'rotate(0deg)');
$buttonF1.on("click", function (e) {
e.preventDefault();
var $slide = $('.slide');
if ($slide.hasClass("active")) {
$buttonF1.css('transform', 'rotate(180deg)');
$slide.slideUp(300);
} else {
$buttonF1.css('transform', 'rotate(0deg)');
$slide.slideDown(300);
}
$slide.toggleClass("active");
});
}
exports.extendedFieldInit = extendedFieldInit;
/***/ },
/* 3 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function getFormData($form, pageNum) {
var unindexed_array = $form.serializeArray();
var indexed_array = {};
$.map(unindexed_array, function (n, i) {
indexed_array[n['name']] = n['value'];
});
indexed_array["page"] = pageNum || "";
return indexed_array;
}
// TODO: Восстановление фильтров из URL
function modUrl($form, postfix) {
var curLoc = '?' + $form.serialize() + (postfix || "");
try {
history.replaceState($form.serialize(), null, curLoc);
} catch (e) {
console.log("Error!");
}
}
function sendData($form, $update_container, pageNum) {
function updateResults(html) {
$update_container.html(html);
var title = $('#titleScore').val();
$('.search-num').html(title);
}
console.log("form method = ", $form.attr("method"));
$.ajax({
url: $form.attr("action"),
type: $form.attr("method"),
dataType: 'html',
data: getFormData($form, pageNum),
beforeSend: function beforeSend(xhr) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
},
success: updateResults,
error: function error(data) {
return console.log("Error", data);
}
});
}
function sendFilterData($form, $update_container) {
sendData($form, $update_container);
modUrl($form);
return false;
}
exports.sendFilterData = sendFilterData;
exports.sendData = sendData;
exports.modUrl = modUrl;
/***/ },
/* 4 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function filterToggleInit() {
var $group = $('.btn-group.toggle');
var $buttons = $group.find('a.btn').add('.link-sort a.btn');
// let $input = $('input[name="party_types"]');
$buttons.on("click", function (e) {
e.preventDefault();
var $target = $(e.target);
var $parent = $target.parent();
// console.log('parent class = ', $parent.attr("class"));
$parent.children().removeClass('active');
$target.addClass('active');
// console.log('type = ', $target.data("type"));
$parent.find('input').val($target.data("type"));
// console.log('click');
sendFilterData($('#filter-form'), $('#contractorsBlock'));
});
}
exports.filterToggleInit = filterToggleInit;
/***/ }
/******/ ]);

@ -46,23 +46,23 @@
'use strict';
var _file_upload = __webpack_require__(1);
var _file_upload = __webpack_require__(5);
var _extended_field = __webpack_require__(3);
var _extended_field = __webpack_require__(2);
var _custom_check = __webpack_require__(4);
var _custom_check = __webpack_require__(1);
var _read_more = __webpack_require__(5);
var _read_more = __webpack_require__(7);
var _only_one_checkbox = __webpack_require__(6);
var _only_one_checkbox = __webpack_require__(8);
var _popups = __webpack_require__(7);
var _popups = __webpack_require__(9);
var _scroll_on_required = __webpack_require__(8);
var _scroll_on_required = __webpack_require__(10);
var _ajax_registration = __webpack_require__(9);
var _ajax_registration = __webpack_require__(11);
var _test_seeds = __webpack_require__(10);
var _test_seeds = __webpack_require__(12);
function showHideRealry() {
var check = $('#checkbox-sb-realty');
@ -91,6 +91,67 @@
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function customCheckInit() {
function tuneCheckBoxes($boxes) {
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
}
exports.customCheckInit = customCheckInit;
/***/ },
/* 2 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function extendedFieldInit() {
var $buttonF1 = $('.resButton');
if ($('.slide').hasClass("active")) $buttonF1.css('transform', 'rotate(0deg)');
$buttonF1.on("click", function (e) {
e.preventDefault();
var $slide = $('.slide');
if ($slide.hasClass("active")) {
$buttonF1.css('transform', 'rotate(180deg)');
$slide.slideUp(300);
} else {
$buttonF1.css('transform', 'rotate(0deg)');
$slide.slideDown(300);
}
$slide.toggleClass("active");
});
}
exports.extendedFieldInit = extendedFieldInit;
/***/ },
/* 3 */,
/* 4 */,
/* 5 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -100,7 +161,7 @@
});
exports.fileUploadInit = undefined;
var _utils = __webpack_require__(2);
var _utils = __webpack_require__(6);
function fileUploadInit() {
var $fileUploadContainer = $('#fileUploadContainer');
@ -138,7 +199,7 @@
exports.fileUploadInit = fileUploadInit;
/***/ },
/* 2 */
/* 6 */
/***/ function(module, exports) {
'use strict';
@ -182,66 +243,7 @@
exports.getCookie = getCookie;
/***/ },
/* 3 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function extendedFieldInit() {
var $buttonF1 = $('.resButton');
if ($('.slide').hasClass("active")) $buttonF1.css('transform', 'rotate(0deg)');
$buttonF1.on("click", function (e) {
e.preventDefault();
var $slide = $('.slide');
if ($slide.hasClass("active")) {
$buttonF1.css('transform', 'rotate(180deg)');
$slide.slideUp(300);
} else {
$buttonF1.css('transform', 'rotate(0deg)');
$slide.slideDown(300);
}
$slide.toggleClass("active");
});
}
exports.extendedFieldInit = extendedFieldInit;
/***/ },
/* 4 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function customCheckInit() {
function tuneCheckBoxes($boxes) {
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
}
exports.customCheckInit = customCheckInit;
/***/ },
/* 5 */
/* 7 */
/***/ function(module, exports) {
"use strict";
@ -267,7 +269,7 @@
exports.readMoreInit = readMoreInit;
/***/ },
/* 6 */
/* 8 */
/***/ function(module, exports) {
"use strict";
@ -298,7 +300,7 @@
exports.onlyOneCheckboxInit = onlyOneCheckboxInit;
/***/ },
/* 7 */
/* 9 */
/***/ function(module, exports) {
'use strict';
@ -351,7 +353,7 @@
exports.addMessage = addMessage;
/***/ },
/* 8 */
/* 10 */
/***/ function(module, exports) {
'use strict';
@ -371,7 +373,7 @@
exports.scrollOnRequiredInit = scrollOnRequiredInit;
/***/ },
/* 9 */
/* 11 */
/***/ function(module, exports) {
'use strict';
@ -469,7 +471,7 @@
exports.ajaxRegistrationInit = ajaxRegistrationInit;
/***/ },
/* 10 */
/* 12 */
/***/ function(module, exports) {
"use strict";

@ -46,15 +46,15 @@
'use strict';
var _image_upload = __webpack_require__(11);
var _image_upload = __webpack_require__(13);
var _scroll_on_required = __webpack_require__(8);
var _scroll_on_required = __webpack_require__(10);
var _popups = __webpack_require__(7);
var _popups = __webpack_require__(9);
var _ajax_registration = __webpack_require__(9);
var _ajax_registration = __webpack_require__(11);
var _ajax_send_form_data = __webpack_require__(12);
var _ajax_send_form_data = __webpack_require__(14);
$(function () {
(0, _image_upload.imageUploadInit)();
@ -68,7 +68,11 @@
/***/ },
/* 1 */,
/* 2 */
/* 2 */,
/* 3 */,
/* 4 */,
/* 5 */,
/* 6 */
/***/ function(module, exports) {
'use strict';
@ -112,11 +116,9 @@
exports.getCookie = getCookie;
/***/ },
/* 3 */,
/* 4 */,
/* 5 */,
/* 6 */,
/* 7 */
/* 7 */,
/* 8 */,
/* 9 */
/***/ function(module, exports) {
'use strict';
@ -169,7 +171,7 @@
exports.addMessage = addMessage;
/***/ },
/* 8 */
/* 10 */
/***/ function(module, exports) {
'use strict';
@ -189,7 +191,7 @@
exports.scrollOnRequiredInit = scrollOnRequiredInit;
/***/ },
/* 9 */
/* 11 */
/***/ function(module, exports) {
'use strict';
@ -287,8 +289,8 @@
exports.ajaxRegistrationInit = ajaxRegistrationInit;
/***/ },
/* 10 */,
/* 11 */
/* 12 */,
/* 13 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -298,7 +300,7 @@
});
exports.imageUploadInit = undefined;
var _utils = __webpack_require__(2);
var _utils = __webpack_require__(6);
// function previewImg() {
// let $fileUploadWidgets = $('.file-upload-widget');
@ -366,7 +368,7 @@
// export {imageUploadInit, previewImg}
/***/ },
/* 12 */
/* 14 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
@ -376,7 +378,7 @@
});
exports.sendFormData = undefined;
var _utils = __webpack_require__(2);
var _utils = __webpack_require__(6);
function sendFormData(e) {
e.preventDefault();

@ -40,17 +40,18 @@
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/******/ ({
/***/ 0:
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _show_hide = __webpack_require__(13);
var _show_hide = __webpack_require__(15);
var _bootstrap_tabs = __webpack_require__(14);
var _bootstrap_tabs = __webpack_require__(16);
var _sort_by = __webpack_require__(15);
var _sort_by = __webpack_require__(17);
$(function () {
(0, _bootstrap_tabs.restoreTab)();
@ -61,8 +62,8 @@
});
/***/ },
/* 1 */,
/* 2 */
/***/ 6:
/***/ function(module, exports) {
'use strict';
@ -106,17 +107,8 @@
exports.getCookie = getCookie;
/***/ },
/* 3 */,
/* 4 */,
/* 5 */,
/* 6 */,
/* 7 */,
/* 8 */,
/* 9 */,
/* 10 */,
/* 11 */,
/* 12 */,
/* 13 */
/***/ 15:
/***/ function(module, exports) {
"use strict";
@ -132,7 +124,8 @@
exports.toggler = toggler;
/***/ },
/* 14 */
/***/ 16:
/***/ function(module, exports) {
"use strict";
@ -167,7 +160,8 @@
exports.restoreTab = restoreTab;
/***/ },
/* 15 */
/***/ 17:
/***/ function(module, exports, __webpack_require__) {
"use strict";
@ -177,7 +171,7 @@
});
exports.sortRealtyBy = undefined;
var _utils = __webpack_require__(2);
var _utils = __webpack_require__(6);
function sortRealtyBy(data, container_id) {
console.log("sort_by = ", data);
@ -200,4 +194,5 @@
exports.sortRealtyBy = sortRealtyBy;
/***/ }
/******/ ]);
/******/ });

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

File diff suppressed because it is too large Load Diff

@ -46,27 +46,27 @@
'use strict';
var _SelectedContainer = __webpack_require__(17);
var _SelectedContainer = __webpack_require__(19);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(21);
var _SelectedContainerCreate = __webpack_require__(26);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(22);
var _NoTreeSelect = __webpack_require__(23);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(24);
var _TreeSelect = __webpack_require__(25);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SingleTreeSelect = __webpack_require__(25);
var _SingleTreeSelect = __webpack_require__(27);
var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect);
var _SelectOrCreate = __webpack_require__(26);
var _SelectOrCreate = __webpack_require__(28);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -183,7 +183,9 @@
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */
/* 17 */,
/* 18 */,
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -198,15 +200,15 @@
var _desc, _value, _class; // `
var _DataTree = __webpack_require__(18);
var _DataTree = __webpack_require__(20);
var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(20);
var _decorators = __webpack_require__(22);
var _decorators2 = _interopRequireDefault(_decorators);
@ -437,7 +439,7 @@
exports.default = SelectedContainer;
/***/ },
/* 18 */
/* 20 */
/***/ function(module, exports) {
"use strict";
@ -592,7 +594,7 @@
exports.default = DataTree;
/***/ },
/* 19 */
/* 21 */
/***/ function(module, exports) {
"use strict";
@ -648,7 +650,7 @@
exports.default = NoTreeData;
/***/ },
/* 20 */
/* 22 */
/***/ function(module, exports) {
"use strict";
@ -732,108 +734,7 @@
// export {onBind};
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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 _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 _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(17);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(20);
var _decorators2 = _interopRequireDefault(_decorators);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
/**
* Контэйнер - позволяющий принимать/отправлять новый объект для создания
*/
//TODO: попробовать реализовать как Mixin
var SelectedContainerCreate = (_class = function (_SelectedContainer) {
_inherits(SelectedContainerCreate, _SelectedContainer);
function SelectedContainerCreate() {
_classCallCheck(this, SelectedContainerCreate);
return _possibleConstructorReturn(this, (SelectedContainerCreate.__proto__ || Object.getPrototypeOf(SelectedContainerCreate)).apply(this, arguments));
}
_createClass(SelectedContainerCreate, [{
key: 'add',
value: function add(_id, max_len) {
console.log("_id = ", _id);
var self = this;
if (_id.text) {
this._removeById(this.elements_id[0]);
this.elements_id = [0];
this.$input_id = this.$self.find('input[type="hidden"].-id');
this.$input_id.val("");
this.$input_name = this.$self.find('input[type="hidden"].-name');
this.$input_name.val(_id.text);
this.$self.append(_SelectedContainer3.default.getTemplate("", _id.text, 0));
this.btn_remove = this.$self.find('.icon-remove');
this.btn_remove.on("click", this.remove.bind(self));
if (this.elements_id.length) this.$self.show();
return;
}
_get(SelectedContainerCreate.prototype.__proto__ || Object.getPrototypeOf(SelectedContainerCreate.prototype), 'add', this).call(this, _id, max_len);
}
}]);
return SelectedContainerCreate;
}(_SelectedContainer3.default), (_applyDecoratedDescriptor(_class.prototype, 'add', [_decorators2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'add'), _class.prototype)), _class);
exports.default = SelectedContainerCreate;
/***/ },
/* 22 */
/* 23 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -847,9 +748,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -910,7 +811,7 @@
exports.default = NoTreeSelect;
/***/ },
/* 23 */
/* 24 */
/***/ function(module, exports) {
"use strict";
@ -1461,7 +1362,7 @@
exports.AbsBaseSelect = AbsBaseSelect;
/***/ },
/* 24 */
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1475,9 +1376,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _DataTree = __webpack_require__(18);
var _DataTree = __webpack_require__(20);
var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1586,7 +1487,108 @@
exports.default = TreeSelect;
/***/ },
/* 25 */
/* 26 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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 _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 _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(19);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(22);
var _decorators2 = _interopRequireDefault(_decorators);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
/**
* Контэйнер - позволяющий принимать/отправлять новый объект для создания
*/
//TODO: попробовать реализовать как Mixin
var SelectedContainerCreate = (_class = function (_SelectedContainer) {
_inherits(SelectedContainerCreate, _SelectedContainer);
function SelectedContainerCreate() {
_classCallCheck(this, SelectedContainerCreate);
return _possibleConstructorReturn(this, (SelectedContainerCreate.__proto__ || Object.getPrototypeOf(SelectedContainerCreate)).apply(this, arguments));
}
_createClass(SelectedContainerCreate, [{
key: 'add',
value: function add(_id, max_len) {
console.log("_id = ", _id);
var self = this;
if (_id.text) {
this._removeById(this.elements_id[0]);
this.elements_id = [0];
this.$input_id = this.$self.find('input[type="hidden"].-id');
this.$input_id.val("");
this.$input_name = this.$self.find('input[type="hidden"].-name');
this.$input_name.val(_id.text);
this.$self.append(_SelectedContainer3.default.getTemplate("", _id.text, 0));
this.btn_remove = this.$self.find('.icon-remove');
this.btn_remove.on("click", this.remove.bind(self));
if (this.elements_id.length) this.$self.show();
return;
}
_get(SelectedContainerCreate.prototype.__proto__ || Object.getPrototypeOf(SelectedContainerCreate.prototype), 'add', this).call(this, _id, max_len);
}
}]);
return SelectedContainerCreate;
}(_SelectedContainer3.default), (_applyDecoratedDescriptor(_class.prototype, 'add', [_decorators2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'add'), _class.prototype)), _class);
exports.default = SelectedContainerCreate;
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1598,9 +1600,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 _AbsBaseSelect = __webpack_require__(23);
var _AbsBaseSelect = __webpack_require__(24);
var _TreeSelect2 = __webpack_require__(24);
var _TreeSelect2 = __webpack_require__(25);
var _TreeSelect3 = _interopRequireDefault(_TreeSelect2);
@ -1681,7 +1683,7 @@
exports.default = SingleTreeSelect;
/***/ },
/* 26 */
/* 28 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1695,9 +1697,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -46,27 +46,27 @@
'use strict';
var _SelectedContainer = __webpack_require__(17);
var _SelectedContainer = __webpack_require__(19);
var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer);
var _SelectedContainerCreate = __webpack_require__(21);
var _SelectedContainerCreate = __webpack_require__(26);
var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate);
var _NoTreeSelect = __webpack_require__(22);
var _NoTreeSelect = __webpack_require__(23);
var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect);
var _TreeSelect = __webpack_require__(24);
var _TreeSelect = __webpack_require__(25);
var _TreeSelect2 = _interopRequireDefault(_TreeSelect);
var _SingleTreeSelect = __webpack_require__(25);
var _SingleTreeSelect = __webpack_require__(27);
var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect);
var _SelectOrCreate = __webpack_require__(26);
var _SelectOrCreate = __webpack_require__(28);
var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate);
@ -179,7 +179,6 @@
}
});
select_realty.on("add", function (args) {
console.log("realty add");
//TODO: Костыли!!!
$('#checkbox-sb-realty').prop("checked", true);
sb_realty.show();
@ -227,7 +226,9 @@
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */
/* 17 */,
/* 18 */,
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -242,15 +243,15 @@
var _desc, _value, _class; // `
var _DataTree = __webpack_require__(18);
var _DataTree = __webpack_require__(20);
var _DataTree2 = _interopRequireDefault(_DataTree);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
var _decorators = __webpack_require__(20);
var _decorators = __webpack_require__(22);
var _decorators2 = _interopRequireDefault(_decorators);
@ -481,7 +482,7 @@
exports.default = SelectedContainer;
/***/ },
/* 18 */
/* 20 */
/***/ function(module, exports) {
"use strict";
@ -636,7 +637,7 @@
exports.default = DataTree;
/***/ },
/* 19 */
/* 21 */
/***/ function(module, exports) {
"use strict";
@ -692,7 +693,7 @@
exports.default = NoTreeData;
/***/ },
/* 20 */
/* 22 */
/***/ function(module, exports) {
"use strict";
@ -776,108 +777,7 @@
// export {onBind};
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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 _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 _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(17);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(20);
var _decorators2 = _interopRequireDefault(_decorators);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
/**
* Контэйнер - позволяющий принимать/отправлять новый объект для создания
*/
//TODO: попробовать реализовать как Mixin
var SelectedContainerCreate = (_class = function (_SelectedContainer) {
_inherits(SelectedContainerCreate, _SelectedContainer);
function SelectedContainerCreate() {
_classCallCheck(this, SelectedContainerCreate);
return _possibleConstructorReturn(this, (SelectedContainerCreate.__proto__ || Object.getPrototypeOf(SelectedContainerCreate)).apply(this, arguments));
}
_createClass(SelectedContainerCreate, [{
key: 'add',
value: function add(_id, max_len) {
console.log("_id = ", _id);
var self = this;
if (_id.text) {
this._removeById(this.elements_id[0]);
this.elements_id = [0];
this.$input_id = this.$self.find('input[type="hidden"].-id');
this.$input_id.val("");
this.$input_name = this.$self.find('input[type="hidden"].-name');
this.$input_name.val(_id.text);
this.$self.append(_SelectedContainer3.default.getTemplate("", _id.text, 0));
this.btn_remove = this.$self.find('.icon-remove');
this.btn_remove.on("click", this.remove.bind(self));
if (this.elements_id.length) this.$self.show();
return;
}
_get(SelectedContainerCreate.prototype.__proto__ || Object.getPrototypeOf(SelectedContainerCreate.prototype), 'add', this).call(this, _id, max_len);
}
}]);
return SelectedContainerCreate;
}(_SelectedContainer3.default), (_applyDecoratedDescriptor(_class.prototype, 'add', [_decorators2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'add'), _class.prototype)), _class);
exports.default = SelectedContainerCreate;
/***/ },
/* 22 */
/* 23 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -891,9 +791,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);
@ -954,7 +854,7 @@
exports.default = NoTreeSelect;
/***/ },
/* 23 */
/* 24 */
/***/ function(module, exports) {
"use strict";
@ -1505,7 +1405,7 @@
exports.AbsBaseSelect = AbsBaseSelect;
/***/ },
/* 24 */
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1519,9 +1419,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _DataTree = __webpack_require__(18);
var _DataTree = __webpack_require__(20);
var _DataTree2 = _interopRequireDefault(_DataTree);
@ -1630,7 +1530,108 @@
exports.default = TreeSelect;
/***/ },
/* 25 */
/* 26 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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 _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 _desc, _value, _class;
var _SelectedContainer2 = __webpack_require__(19);
var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2);
var _decorators = __webpack_require__(22);
var _decorators2 = _interopRequireDefault(_decorators);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
/**
* Контэйнер - позволяющий принимать/отправлять новый объект для создания
*/
//TODO: попробовать реализовать как Mixin
var SelectedContainerCreate = (_class = function (_SelectedContainer) {
_inherits(SelectedContainerCreate, _SelectedContainer);
function SelectedContainerCreate() {
_classCallCheck(this, SelectedContainerCreate);
return _possibleConstructorReturn(this, (SelectedContainerCreate.__proto__ || Object.getPrototypeOf(SelectedContainerCreate)).apply(this, arguments));
}
_createClass(SelectedContainerCreate, [{
key: 'add',
value: function add(_id, max_len) {
console.log("_id = ", _id);
var self = this;
if (_id.text) {
this._removeById(this.elements_id[0]);
this.elements_id = [0];
this.$input_id = this.$self.find('input[type="hidden"].-id');
this.$input_id.val("");
this.$input_name = this.$self.find('input[type="hidden"].-name');
this.$input_name.val(_id.text);
this.$self.append(_SelectedContainer3.default.getTemplate("", _id.text, 0));
this.btn_remove = this.$self.find('.icon-remove');
this.btn_remove.on("click", this.remove.bind(self));
if (this.elements_id.length) this.$self.show();
return;
}
_get(SelectedContainerCreate.prototype.__proto__ || Object.getPrototypeOf(SelectedContainerCreate.prototype), 'add', this).call(this, _id, max_len);
}
}]);
return SelectedContainerCreate;
}(_SelectedContainer3.default), (_applyDecoratedDescriptor(_class.prototype, 'add', [_decorators2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'add'), _class.prototype)), _class);
exports.default = SelectedContainerCreate;
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1642,9 +1643,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 _AbsBaseSelect = __webpack_require__(23);
var _AbsBaseSelect = __webpack_require__(24);
var _TreeSelect2 = __webpack_require__(24);
var _TreeSelect2 = __webpack_require__(25);
var _TreeSelect3 = _interopRequireDefault(_TreeSelect2);
@ -1725,7 +1726,7 @@
exports.default = SingleTreeSelect;
/***/ },
/* 26 */
/* 28 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -1739,9 +1740,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 _AbsBaseSelect2 = __webpack_require__(23);
var _AbsBaseSelect2 = __webpack_require__(24);
var _NoTreeData = __webpack_require__(19);
var _NoTreeData = __webpack_require__(21);
var _NoTreeData2 = _interopRequireDefault(_NoTreeData);

@ -0,0 +1,195 @@
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _custom_check = __webpack_require__(1);
var _extended_field = __webpack_require__(2);
var _ajax_set_filter = __webpack_require__(3);
function paginateTo(pageNum) {
var $form = $('#filter-form');
var postfix = "&page=" + pageNum;
var $container = $('#projectsBlock');
(0, _ajax_set_filter.sendData)($form, $container, pageNum);
(0, _ajax_set_filter.modUrl)($form, postfix);
return false;
}
$(function () {
(0, _custom_check.customCheckInit)();
(0, _extended_field.extendedFieldInit)();
window.sendFilterData = _ajax_set_filter.sendFilterData;
window.paginateTo = paginateTo;
});
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function customCheckInit() {
function tuneCheckBoxes($boxes) {
var currentState = $boxes.find("input").prop("checked") ? 'checked' : 'not-checked';
$boxes.find("div").hide();
$boxes.find("div." + currentState).show();
}
var $boxes = $('.custom-check');
tuneCheckBoxes($boxes);
$boxes.on("click", function (e) {
var inside_checkBox = $(e.target).parent().find("input");
inside_checkBox.prop("checked", !inside_checkBox.prop("checked"));
tuneCheckBoxes($boxes);
e.preventDefault();
return false;
});
}
exports.customCheckInit = customCheckInit;
/***/ },
/* 2 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function extendedFieldInit() {
var $buttonF1 = $('.resButton');
if ($('.slide').hasClass("active")) $buttonF1.css('transform', 'rotate(0deg)');
$buttonF1.on("click", function (e) {
e.preventDefault();
var $slide = $('.slide');
if ($slide.hasClass("active")) {
$buttonF1.css('transform', 'rotate(180deg)');
$slide.slideUp(300);
} else {
$buttonF1.css('transform', 'rotate(0deg)');
$slide.slideDown(300);
}
$slide.toggleClass("active");
});
}
exports.extendedFieldInit = extendedFieldInit;
/***/ },
/* 3 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
function getFormData($form, pageNum) {
var unindexed_array = $form.serializeArray();
var indexed_array = {};
$.map(unindexed_array, function (n, i) {
indexed_array[n['name']] = n['value'];
});
indexed_array["page"] = pageNum || "";
return indexed_array;
}
// TODO: Восстановление фильтров из URL
function modUrl($form, postfix) {
var curLoc = '?' + $form.serialize() + (postfix || "");
try {
history.replaceState($form.serialize(), null, curLoc);
} catch (e) {
console.log("Error!");
}
}
function sendData($form, $update_container, pageNum) {
function updateResults(html) {
$update_container.html(html);
var title = $('#titleScore').val();
$('.search-num').html(title);
}
console.log("form method = ", $form.attr("method"));
$.ajax({
url: $form.attr("action"),
type: $form.attr("method"),
dataType: 'html',
data: getFormData($form, pageNum),
beforeSend: function beforeSend(xhr) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
},
success: updateResults,
error: function error(data) {
return console.log("Error", data);
}
});
}
function sendFilterData($form, $update_container) {
sendData($form, $update_container);
modUrl($form);
return false;
}
exports.sendFilterData = sendFilterData;
exports.sendData = sendData;
exports.modUrl = modUrl;
/***/ }
/******/ ]);

@ -47,7 +47,7 @@
'use strict';
var _avatar_upload = __webpack_require__(27);
var _avatar_upload = __webpack_require__(29);
$(function () {
(0, _avatar_upload.avatarUploadInit)();
@ -55,7 +55,7 @@
/***/ },
/***/ 27:
/***/ 29:
/***/ function(module, exports) {
'use strict';

@ -0,0 +1,22 @@
import {customCheckInit} from './seeds/custom_check'
import {extendedFieldInit} from './seeds/extended_field'
import {sendFilterData, sendData, modUrl} from './seeds/ajax_set_filter'
import {filterToggleInit} from './seeds/filter_toggle'
function paginateTo(pageNum) {
const $form = $('#filter-form');
const postfix = "&page=" + pageNum;
const $container = $('#contractorsBlock');
sendData($form, $container, pageNum);
modUrl($form, postfix);
return false;
}
$(function () {
customCheckInit();
extendedFieldInit();
filterToggleInit();
window.sendFilterData = sendFilterData;
window.paginateTo = paginateTo;
});

@ -0,0 +1,64 @@
import SelectedContainer from 'components/SelectedContainer';
import NoTreeSelect from 'components/NoTreeSelect';
import TreeSelect from 'components/TreeSelect';
$(function () {
function createFilterSpecs(url) {
// SPECIALIZATIONS FILTER
let sb_main = new TreeSelect($('#select-box-1'), {url, hasEditableContainer: true, visible: true});
sb_main.setHeader("Специальности исполнителей");
let select_container = new SelectedContainer($('#selected-spec'), {obj: sb_main});
sb_main.connectSelectedContainer(select_container);
let sb_1 = new TreeSelect($('#select-box-2'), {obj: sb_main});
let sb_2 = new TreeSelect($('#select-box-3'), {obj: sb_main});
let sb_3 = new TreeSelect($('#select-box-4'), {obj: sb_main});
let sb_4 = new TreeSelect($('#select-box-5'), {obj: sb_main});
sb_main.setNearbySelectBox(sb_1);
sb_1.setNearbySelectBox(sb_2, sb_main);
sb_2.setNearbySelectBox(sb_3, sb_1);
sb_3.setNearbySelectBox(sb_4, sb_2);
sb_4.setNearbySelectBox("", sb_3);
}
function createFilterBuildingClass(url) {
// BUILDING-CLASSIFICATION FILTER
let sb_build_main = new TreeSelect($('#sb-building-classification'), {url, visible:true});
sb_build_main.setHeader("Классификация здания");
let sb_build_1 = new TreeSelect($('#sb-building-sub-classification'), {obj: sb_build_main});
let select_build_container = new SelectedContainer($('#selected-building-classification'), {obj: sb_build_main});
sb_build_main.connectSelectedContainer(select_build_container);
sb_build_main.setNearbySelectBox(sb_build_1);
sb_build_1.setNearbySelectBox("", sb_build_main);
}
function createFilterConstructionType(url) {
let sb_constr_main = new NoTreeSelect($('#sb-construction-type'), {url, visible:true});
sb_constr_main.setHeader("Вид строительства");
let select_constr_type = new SelectedContainer($('#selected-construction-type'), {obj:sb_constr_main, noTree: true});
sb_constr_main.connectSelectedContainer(select_constr_type);
}
function createFilerLocations(url) {
let sb_loc_main = new TreeSelect($('#sb-location-1'), {url, visible:true});
sb_loc_main.setHeader("Местоположение исполнителей");
let select_loc = new SelectedContainer($('#selected-location'), {obj: sb_loc_main});
sb_loc_main.connectSelectedContainer(select_loc);
let sb_loc_1 = new TreeSelect($('#sb-location-2'), {obj: sb_loc_main});
let sb_loc_2 = new TreeSelect($('#sb-location-3'), {obj: sb_loc_main});
sb_loc_main.setNearbySelectBox(sb_loc_1);
sb_loc_1.setNearbySelectBox(sb_loc_2, sb_loc_main);
sb_loc_2.setNearbySelectBox("", sb_loc_1);
}
createFilterSpecs('/api/specializations_flat');
createFilterBuildingClass('/api/building_classifications');
createFilterConstructionType('/api/construction_type');
createFilerLocations('/api/locations_flat');
});

@ -0,0 +1,20 @@
import {customCheckInit} from './seeds/custom_check'
import {extendedFieldInit} from './seeds/extended_field'
import {sendFilterData, sendData, modUrl} from './seeds/ajax_set_filter'
function paginateTo(pageNum) {
const $form = $('#filter-form');
const postfix = "&page=" + pageNum;
const $container = $('#projectsBlock');
sendData($form, $container, pageNum);
modUrl($form, postfix);
return false;
}
$(function () {
customCheckInit();
extendedFieldInit();
window.sendFilterData = sendFilterData;
window.paginateTo = paginateTo;
});

@ -0,0 +1,49 @@
function getFormData($form, pageNum) {
var unindexed_array = $form.serializeArray();
var indexed_array = {};
$.map(unindexed_array, function (n, i) {
indexed_array[n['name']] = n['value'];
});
indexed_array["page"] = pageNum || "";
return indexed_array;
}
// TODO: Восстановление фильтров из URL
function modUrl($form, postfix) {
let curLoc = '?' + $form.serialize() + (postfix || "");
try {
history.replaceState($form.serialize(), null, curLoc);
} catch (e) {
console.log("Error!");
}
}
function sendData($form, $update_container, pageNum) {
function updateResults(html) {
$update_container.html(html);
let title = $('#titleScore').val();
$('.search-num').html(title);
}
console.log("form method = ", $form.attr("method"));
$.ajax({
url: $form.attr("action"),
type: $form.attr("method"),
dataType: 'html',
data: getFormData($form, pageNum),
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
},
success: updateResults,
error: (data) => console.log("Error", data)
});
}
function sendFilterData($form, $update_container) {
sendData($form, $update_container);
modUrl($form);
return false;
}
export {sendFilterData, sendData, modUrl}

@ -0,0 +1,20 @@
function filterToggleInit() {
let $group = $('.btn-group.toggle');
let $buttons = $group.find('a.btn').add('.link-sort a.btn');
// let $input = $('input[name="party_types"]');
$buttons.on("click", function (e) {
e.preventDefault();
let $target = $(e.target);
let $parent = $target.parent();
// console.log('parent class = ', $parent.attr("class"));
$parent.children().removeClass('active');
$target.addClass('active');
// console.log('type = ', $target.data("type"));
$parent.find('input').val($target.data("type"));
// console.log('click');
sendFilterData($('#filter-form'), $('#contractorsBlock'));
})
}
export {filterToggleInit}

@ -311,7 +311,9 @@ textarea.description
border-bottom-right-radius: $radius
.link-sort button
.link-sort
button,
a
font-size: 14px
font-family: 'Arial-MT-Regular', sans-serif
color: #6b6b6b
@ -330,6 +332,8 @@ textarea.description
font-weight: normal
line-height: 1
-webkit-font-smoothing: antialiased
p
display: inline-block
.btn-up_down
width: 110px

@ -1126,27 +1126,27 @@
.sro
margin: 33px 0 28px 0
label
width: 23px
height: 23px
display: block
position: relative
float: left
margin-right: 10px
input[type="checkbox"]
+ span
position: absolute
left: 0
top: 0
width: 100%
height: 100%
background: url('../img/check.png') no-repeat center
background-position: 0 0
background-size: cover
cursor: pointer
&:checked + span
background-position: 0 -23px
//label
// width: 23px
// height: 23px
// display: block
// position: relative
// float: left
// margin-right: 10px
//
//input[type="checkbox"]
// + span
// position: absolute
// left: 0
// top: 0
// width: 100%
// height: 100%
// background: url('../img/check.png') no-repeat center
// background-position: 0 0
// background-size: cover
// cursor: pointer
// &:checked + span
// background-position: 0 -23px
/*.sro input[type="checkbox"] {
/*opacity: 0;
@ -3847,23 +3847,23 @@
&:link, &:visited
color: #009DD9
label
width: 23px
height: 23px
display: block
position: relative
input[type="checkbox"]
+ span
position: absolute
left: 0
top: 0
width: 100%
height: 100%
background: url('../img/check.png') no-repeat
cursor: pointer
&:checked + span
background-position: 0 -23px
//label
// width: 23px
// height: 23px
// display: block
// position: relative
//
//input[type="checkbox"]
// + span
// position: absolute
// left: 0
// top: 0
// width: 100%
// height: 100%
// background: url('../img/check.png') no-repeat
// cursor: pointer
// &:checked + span
// background-position: 0 -23px
.text-block
width: 100%

@ -9,7 +9,7 @@ body {
margin: 50px 30px;
}
.form-container {
.filter.form-container {
padding: 50px 45px;
}

@ -1,4 +1,4 @@
<form id="filter-form" action="/projects" method="GET" novalidate xmlns="http://www.w3.org/1999/html">
<form id="filter-form" action="/projects/" method="POST" novalidate >
<div class="filter form-container">
<div class="triangle1"></div>
@ -47,14 +47,14 @@
<input
type="text"
name="keywords"
onkeydown="event.keyCode === 13 && $(this).closest('form').submit()"
{# onkeydown="event.keyCode === 13 && $(this).closest('form').submit()"#}
value="{{ form.keywords.value }}"
class="select-box-search"
placeholder="Ключевые слова, фразы">
</div>
<div class="col-lg-3">
{# $(this).closest('form').submit(); return false#}
<a href="" class="findReal" onclick="sendFilterData('/projects/'); return false">
<a href="" class="findReal" onclick="sendFilterData($('#filter-form'), $('#projectsBlock')); return false">
найти проект
</a>
</div>

@ -34,6 +34,6 @@
{% block js_block %}
{{ block.super }}
<script src='{% static "lib/proekton-components/js/build/init.js" %}'></script>
<script src='{% static "projects-filter.js" %}'></script>
<script src='{% static "js/build/project_filter.js" %}'></script>
{% endblock %}

@ -277,17 +277,6 @@ class RestoreProjectAnswerView(NoCsrfMixin, LoginRequiredMixin, BaseMixin, View)
return redirect(redirect_to)
def build_query(id_str, _class, *args):
query = Q()
id_list = tuple(filter(None, re.split(r'\s|,|;', id_str)))
for id in id_list:
obj = _class.objects.get(id=id)
kwargs = dict(zip(args, (obj.lft, obj.rght)))
query |= Q(**kwargs)
return query
class ProjectFilterView(BaseMixin, View):
template_name = 'project_filter.html'
# form_class = ProjectFilterForm
@ -299,14 +288,14 @@ class ProjectFilterView(BaseMixin, View):
('views', 'просмотрам'),
)
def filter(self, projects, data):
def set_filter(self, projects, request):
# print("filter data = ", data)
specialization = data.get('specialization')
keywords = data.get('keywords')
building_classification = data.get('building_classification')
construction_type = data.get('construction_type')
location = data.get('location')
cro = data.get('cro')
specialization = request.get('specialization')
keywords = request.get('keywords')
building_classification = request.get('building_classification')
construction_type = request.get('construction_type')
location = request.get('location')
cro = request.get('cro')
if keywords:
# print("keywords = ", keywords)
@ -316,12 +305,12 @@ class ProjectFilterView(BaseMixin, View):
projects = projects.filter(Q(name__icontains=k.lower()) | Q(text__icontains=k.lower()))
if specialization:
query = build_query(specialization, Specialization,
query = util.build_query(specialization, Specialization,
'specialization__lft__gte', 'specialization__rght__lte')
projects = projects.filter(query)
if building_classification:
query = build_query(building_classification, BuildingClassfication,
query = util.build_query(building_classification, BuildingClassfication,
'realty__building_classification__lft__gte',
'realty__building_classification__rght__lte')
projects = projects.filter(query)
@ -330,7 +319,7 @@ class ProjectFilterView(BaseMixin, View):
projects = projects.filter(realty__construction_type__in=
tuple(filter(None, re.split(r'\s|,|;', construction_type))))
if location:
query = build_query(location, Location,
query = util.build_query(location, Location,
'realty__location__lft__gte',
'realty__location__rght__lte')
projects = projects.filter(query)
@ -378,7 +367,7 @@ class ProjectFilterView(BaseMixin, View):
context = request.dict()
projects = Project.objects.filter(state='active', order__status='created')
projects = self.filter(projects, request)
projects = self.set_filter(projects, request)
num_results = projects.count()
projects = self.sort_by(projects)
projects = self.pagination(projects, request.get("page"))
@ -404,7 +393,6 @@ class ProjectFilterView(BaseMixin, View):
class SortRealtyBy(View):
def get_context(self):
print("request.POST = ", self.request.POST)
user_id = self.request.POST.get('user_id')
@ -448,7 +436,8 @@ class CustomerProjectCreateView(BaseMixin, View):
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below
form = self.form_class(request.POST,
request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below
# print('POST = ', request.POST)
form.is_valid()
realty = form.cleaned_data.get('realty')
@ -700,7 +689,8 @@ class CustomerRealtyTrashView(AbcCustomerRealityChangeState):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
num_project_in_process = Project.objects.filter(realty__id=kwargs.get('pk')).filter(order__status="process").count()
num_project_in_process = Project.objects.filter(realty__id=kwargs.get('pk')).filter(
order__status="process").count()
if num_project_in_process:
raise PermissionDenied('Один или более Заказ, данного Объекта, уже находятся в работе. '

@ -1,3 +1,12 @@
{# TODO: Сделать более явное определение функции paginateTo() #}
{#function paginateTo(pageNum) {#}
{# const $form = $('#filter-form');#}
{# const postfix = "&page=" + pageNum;#}
{# const $container = $('#contractorsBlock');#}
{##}
{# sendData($form, $container, pageNum);#}
{# modUrl($form, postfix);#}
{# return false;#}
{% if is_paginated %}
<nav>
<ul class="pagination">
@ -52,14 +61,4 @@
</li>
</ul>
</nav>
<script>
function paginateTo(pageNum) {
const $form = $('#filter-form');
const postfix = "&page=" + pageNum;
sendData('/projects/', $form, pageNum);
modUrl($form, postfix);
return false;
}
</script>
{% endif %}

@ -1,521 +1,34 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% load specializtions_tags %}
{% load thumbnail %}
{% load i18n %}
{% extends 'partials/_base.html' %}
{% load sass_tags %}
{% load static %}
{% block personal_css %}
<link rel='stylesheet' href='{% sass_src "sass/old_main.sass" %}'>
<link rel='stylesheet' href='{% sass_src "sass/components/custom-components.sass" %}'>
<link rel='stylesheet' href='{% sass_src "lib/proekton-components/sass/components.sass" %}'>
<link rel='stylesheet' href='{% static "css/project_filter.css" %}'>
{% endblock %}
{% block content %}
{% include 'partials/modals/project_selection.html' %}
{% include 'partials/header.html' %}
<div class="old-main">
<div class="container mainScore ">
<div class="row">
<div class="row" style="padding: 0 15px">
<div class="col-lg-12 ">
<p class="titleScore">{% if display_msg %}{{ display_msg }}{% else %}Поиск исполнителей{% endif %}</p>
<p class="titleScore">Поиск Исполнителей</p>
</div>
{% include 'partials/inc-contractors-filter.html' %}
<form action="{% url 'users:contractor-filter' %}" method="GET" novalidate>
<div class="col-lg-12 ">
<div class="filter clearfix -spec-work-type-combo-container">
<div class="triangle1"></div>
<div class="titleF1 disTab">
<div class="col-lg-3">{% trans 'project_stage0' %}</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
{{ form.work_type }}
</div>
</div>
<div class="titleF1 disTab">
</div>
<div class="polsF1 disTab">
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage1' %} <span style="color: red">{{ form.specialization.errors.as_text }}</span></div>
<input type="hidden" class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold"><span class="-dynamic-label">{% trans 'project_stage2' %}</span></div>
<input type="hidden" class="-spec-select -spec-select-level-2" style="width: 100%">
<div id="contractorsBlock">
{% include 'partials/inc-contractors-results.html' %}
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage3' %}</div>
<input type="hidden" class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage4' %}</div>
<input type="hidden" class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" name="{{ form.specialization.html_name }}" value="{{ form.specialization.value }}" class="-chosen-spec-id">
</div>
<div class="searchF1 polsF1 polsFF polsF3 resSearchF1">
<div class="col-lg-3">
<a href="#" class="findReal" onclick="$(this).closest('form').submit(); return false">
найти исполнителя
</a>
</div>
<div class="col-lg-3">
<a href="{% url 'users:contractor-filter' %}" class="clearSearch">
Очистить фильтр
</a>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div>
<div class="col-lg-9">
<div class="borderS1"></div>
</div>
</div>
<div class="slideRes disTab activeSlide">
<div class="titleF1 disTab">
<div class="col-lg-12">Местоположение</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-country" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-region" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-city" style="width: 100%">
</div>
<input type="hidden" id="chosenLocationId" name="{{ form.location.html_name }}" value="{{ form.location.value }}">
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Классификация здания</div>
<div class="col-lg-3">Вид строительства</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
{{ form.building_classification }}
</div>
<div class="col-lg-3">
{{ form.construction_type }}
</div>
<div class="col-lg-3">
<label>{{ form.cro }}<span></span></label>
<p>Требуется допуск (СРО)</p>
</div>
</div>
</div>
</div>
</div>
<div class="buttonGP disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
{% for val, text in form.party_types.field.choices %}
<button
type="submit"
name="{{ form.party_types.html_name }}"
value="{{ val }}"
class="{% if val == last_party_types or not last_party_types and val == 'all' %}active{% endif %} btn btn-default">
{{ text }}
</button>
{% endfor %}
</div>
<input type="hidden" name="{{ form.last_party_types.html_name }}" value="{{ last_party_types }}">
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select name="{{ form.order_by.html_name }}" onchange="$(this).closest('form').submit()" class="selectpicker">
{% for val, text in form.order_by.field.choices %}
<option value="{{ val }}">{{ text }}</option>
{% endfor %}
</select>
</div>
<input type="hidden" name="{{ form.last_order_by.html_name }}" value="{{ last_order_by }}">
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none">
</div>
</div>
</form>
{% for obj in coll %}
{% if obj|class_name == 'Team' %}
{% with team=obj %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:team-profile' pk=team.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if team.owner.avatar %}
{% thumbnail team.owner.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if team.owner.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:team-profile' pk=team.pk %}">{{ team.name }}</a>
</p>
<p class="navv2">На сайте c {{ team.created|date:"d M Y"}}</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:team-profile' pk=team.pk %}">
смотреть профиль
</a>
</li>
<li>
{% if request.user.is_customer %}
<a
href="#"
onclick="return false"
data-contractor-id="{{ team.owner.pk }}"
data-team-id="{{ team.pk }}"
data-is-team-offer="true"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
{% endif %}
</li>
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ team.owner.pk }}#user{{ team.owner.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_team_widget team_id=team.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_team_widget team.pk 'restList2' %}
<!-- TODO -->
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12" style="margin-bottom: 20px">
<pre><!--
--><b>######## Team owner #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ team.owner.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ team.owner.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--><br><!--
--><br><!--
--><br><!--
--><b>######## Team users #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--
--><br><!--
--><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--
--><br><!--
--><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
<div class="gallMini disTab">
{% for portf in team.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% elif obj|class_name == 'User' %}
{% with contractor=obj %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if contractor.avatar %}
{% thumbnail contractor.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if contractor.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">{{ contractor.get_full_name }} [{{ contractor.username }}]</a>
</p>
<p class="navv2">На сайте c {{ contractor.created|date:"d M Y"}}</p>
{% if contractor.contractor_status == 'free' %}
<div class="statusUser">Свободен</div>
{% else %}
<div class="statusUser busy">Занят</div>
{% endif %}
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">
смотреть профиль
</a>
</li>
{% if request.user.is_customer %}
<li>
<a
href="#"
onclick="return false"
data-contractor-id="{{ contractor.pk }}"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
</li>
{% endif %}
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ contractor.pk }}#user{{ contractor.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_widget user_id=contractor.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_widget contractor.pk 'restList2' %}
{% if contractor.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12">
<pre><!--
--><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ contractor.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ contractor.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
<div class="gallMini disTab">
{% for portf in contractor.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% endif %}
{% endfor %}
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{% block js_block %}
<script>
{% if request.user.is_customer %}
var customerId = {{ request.user.pk }}
var $projectSelectionModal = $('#projectSelectionModal')
var projectUrl_ = '/projects/%id%/'
var projectOrderChatUrl_ = '/chat/#order%orderId%'
$projectSelectionModal.on('shown.bs.modal', function($evt) {
var $that = $(this)
var $modalOpenButton = $($evt.relatedTarget)
var $projectSelect = $that.find('.-project-select').first()
$that.data('modalOpenButton', $modalOpenButton)
initProjectSelect($projectSelect, customerId)
})
$projectSelectionModal.find('.-action-button').first().on('click', function($evt) {
var $projectSelect = $projectSelectionModal.find('.-project-select').first()
var $modalOpenButton = $projectSelectionModal.data('modalOpenButton')
var isTeamOffer = $modalOpenButton.data('isTeamOffer')
var project = $projectSelect.select2('data').origItem
var projectUrl = _.replace('%id%', project.id, projectUrl_)
var projectOrderChatUrl = _.replace('%orderId%', project.order.id, projectOrderChatUrl_)
$projectSelectionModal.modal('hide')
if (isTeamOffer) {
var contractorId = $modalOpenButton.data('contractorId')
var teamId = $modalOpenButton.data('teamId')
if (project.order.team && project.order.team.id === teamId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вашей команде предлагается проект <a class="message_connect" href="http://{{ request.get_host }}' + projectUrl + '">Перейти к проекту</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
} else {
var contractorId = $modalOpenButton.data('contractorId')
if (project.order.contractor && project.order.contractor.id === contractorId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вам предлагается проект <a class="message_connect" href="http://{{ request.get_host }}' + projectUrl + '">Перейти к проекту</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
}
})
$projectSelectionModal.on('hidden.bs.modal', function($evt) {
$(this).find('.-project-select').first().select2('destroy')
})
{% endif %}
</script>
{% block personal_js %}
<script src='{% static "js/build/init_contractor_filter.js" %}'></script>
<script src='{% static "js/build/contractor_filter.js" %}'></script>
{% endblock %}

@ -0,0 +1,154 @@
<form id="filter-form" action="{% url 'users:contractor-filter' %}" method="POST" novalidate
xmlns="http://www.w3.org/1999/html">
<div class="filter form-container">
<div class="triangle1"></div>
<div class="row">
<div class="col-lg-12">
<div id="select-box-1"></div>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<div class="vertical-child" id="select-box-2"></div>
</div>
<div class="col-lg-3">
<div class="vertical-child" id="select-box-3"></div>
</div>
<div class="col-lg-3">
<div class="vertical-child" id="select-box-4"></div>
</div>
<div class="col-lg-3">
<div class="vertical-child" id="select-box-5"></div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="selected-container horizontal" id="selected-spec">
<input type="hidden" name="specialization"
value="{{ specialization }}">
</div>
</div>
</div>
<div class="row separator">
<div class="col-lg-12">
<div class="border"></div>
</div>
</div>
<div class="row">
<div class="col-lg-3">
{# $(this).closest('form').submit(); return false#}
<a href="" class="findReal"
onclick="sendFilterData($('#filter-form'), $('#contractorsBlock')); return false">
найти исполнителя
</a>
</div>
<div class="col-lg-3">
<a href="{% url 'users:contractor-filter' %}" class="clearSearch">
{# TODO: Сделать очистку, без перезагрузки#}
Очистить фильтр
</a>
</div>
</div>
<div class="row separator">
<div class="col-lg-12">
<div class="flex">
<span class="header">Расширенные поля</span>
<button class="resButton">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
<div class="border"></div>
</div>
</div>
</div>
<div class="slide {% if has_additional_fields %} active{% endif %}">
<div class="row mod-row-eq-height">
<div class="col-lg-6" style="border-left: 1px solid #CFCFCF; border-right: 1px solid #CFCFCF;">
<div class="row">
<div class="col-lg-12" style="font-size: 10.5pt">
Опыт работы исполнителей по классификации зданий и виду строительства
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="vertical-child" id="sb-building-classification"></div>
<div class="vertical-child" id="sb-building-sub-classification"></div>
<div class="selected-container" id="selected-building-classification">
<input type="hidden" name="building_classification"
value="{{ building_classification }}">
</div>
</div>
<div class="col-lg-6">
<div class="vertical-child" id="sb-construction-type"></div>
<div class="selected-container" id="selected-construction-type">
<input type="hidden" name="construction_type"
value="{{ construction_type }}">
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row">
<div class="col-lg-12" style="font-size: 10.5pt">
&nbsp;
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="select-box-header vertical-child">
<span style="width: 210px" class="header">С наличием СРО(Юр.лицо)</span>
<i class="fa fa-question-circle-o" aria-hidden="true"
title="bla-bla-bla..."></i>
</div>
<div class="custom-check">
<div class="checked"></div>
<div style="display: none" class="not-checked"></div>
<input name="cro" type="checkbox" hidden {% if cro %} checked{% endif %}>
</div>
</div>
<div class="col-lg-6">
<div class="vertical-child" id="sb-location-1"></div>
<div class="vertical-child" id="sb-location-2"></div>
<div class="vertical-child" id="sb-location-3"></div>
<div class="selected-container" id="selected-location">
<input type="hidden" name="location"
value="{{ location }}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12" style="margin-left: 20px; padding-top: 20px">
<div class="btn-group btn-round toggle" role="group" aria-label="...">
<a class="btn btn-default active" role="button" data-type="all">Все</a>
<a class="btn btn-default" role="button" data-type="teams">Группы</a>
<input type="hidden" name="party_types" value="all">
<a class="btn btn-default" role="button" data-type="contractors">Исполнители</a>
</div>
</div>
</div>
<p class="titleScore search-num">
{{ display_msg }}
</p>
<div class="link-sort">
<p>Сортировать по:</p>
{% for val, text in choices %}
<a class="btn btn-default"
data-type="{{ val }}"
onclick="">
{{ text }}
</a>
{% endfor %}
<input type="hidden" name="order_by" value="">
</div>
</form>

@ -0,0 +1,196 @@
{% load common_tags %}
{% load specializtions_tags %}
{% load thumbnail %}
{% load i18n %}
<input id="titleScore" type="hidden" value="{{ display_msg }}">
{% for object in objects %}
{% if object|class_name == 'Team' %}
{% with team=object %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:team-profile' pk=team.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if team.owner.avatar %}
{% thumbnail team.owner.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if team.owner.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:team-profile' pk=team.pk %}">{{ team.name }}</a>
</p>
<p class="navv2">На сайте c {{ team.created|date:"d M Y" }}</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:team-profile' pk=team.pk %}">
смотреть профиль
</a>
</li>
<li>
{% if request.user.is_customer %}
<a
href="#"
onclick="return false"
data-contractor-id="{{ team.owner.pk }}"
data-team-id="{{ team.pk }}"
data-is-team-offer="true"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
{% endif %}
</li>
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ team.owner.pk }}#user{{ team.owner.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_team_widget team_id=team.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_team_widget team.pk 'restList2' %}
<!-- TODO -->
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
<div class="gallMini disTab">
{% for portf in team.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal"
style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% elif object|class_name == 'User' %}
{% with contractor=object %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if contractor.avatar %}
{% thumbnail contractor.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if contractor.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">{{ contractor.get_full_name }}
[{{ contractor.username }}]</a>
</p>
<p class="navv2">На сайте c {{ contractor.created|date:"d M Y" }}</p>
{% if contractor.contractor_status == 'free' %}
<div class="statusUser">Свободен</div>
{% else %}
<div class="statusUser busy">Занят</div>
{% endif %}
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">
смотреть профиль
</a>
</li>
{% if request.user.is_customer %}
<li>
<a
href="#"
onclick="return false"
data-contractor-id="{{ contractor.pk }}"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
</li>
{% endif %}
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ contractor.pk }}#user{{ contractor.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_widget user_id=contractor.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_widget contractor.pk 'restList2' %}
{% if contractor.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
<div class="gallMini disTab">
{% for portf in contractor.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal"
style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% endif %}
{% endfor %}
<div class="row">
<div class="col-lg-12 pagin">
{% include 'partials/ajax_pagination.html' %}
</div>
</div>

@ -0,0 +1,521 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% load specializtions_tags %}
{% load thumbnail %}
{% load i18n %}
{% block content %}
{% include 'partials/modals/project_selection.html' %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">{% if display_msg %}{{ display_msg }}{% else %}Поиск исполнителей{% endif %}</p>
</div>
<form action="{% url 'users:contractor-filter' %}" method="GET" novalidate>
<div class="col-lg-12">
<div class="filter clearfix -spec-work-type-combo-container">
<div class="triangle1"></div>
<div class="titleF1 disTab">
<div class="col-lg-3">{% trans 'project_stage0' %}</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
{{ form.work_type }}
</div>
</div>
<div class="titleF1 disTab">
</div>
<div class="polsF1 disTab">
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage1' %} <span style="color: red">{{ form.specialization.errors.as_text }}</span></div>
<input type="hidden" class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold"><span class="-dynamic-label">{% trans 'project_stage2' %}</span></div>
<input type="hidden" class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage3' %}</div>
<input type="hidden" class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3 -single-spec-select">
<div class="-bold">{% trans 'project_stage4' %}</div>
<input type="hidden" class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" name="{{ form.specialization.html_name }}" value="{{ form.specialization.value }}" class="-chosen-spec-id">
</div>
<div class="searchF1 polsF1 polsFF polsF3 resSearchF1">
<div class="col-lg-3">
<a href="#" class="findReal" onclick="$(this).closest('form').submit(); return false">
найти исполнителя
</a>
</div>
<div class="col-lg-3">
<a href="{% url 'users:contractor-filter' %}" class="clearSearch">
Очистить фильтр
</a>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div>
<div class="col-lg-9">
<div class="borderS1"></div>
</div>
</div>
<div class="slideRes disTab activeSlide">
<div class="titleF1 disTab">
<div class="col-lg-12">Местоположение</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-country" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-region" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-city" style="width: 100%">
</div>
<input type="hidden" id="chosenLocationId" name="{{ form.location.html_name }}" value="{{ form.location.value }}">
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Классификация здания</div>
<div class="col-lg-3">Вид строительства</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
{{ form.building_classification }}
</div>
<div class="col-lg-3">
{{ form.construction_type }}
</div>
<div class="col-lg-3">
<label>{{ form.cro }}<span></span></label>
<p>Требуется допуск (СРО)</p>
</div>
</div>
</div>
</div>
</div>
<div class="buttonGP disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
{% for val, text in form.party_types.field.choices %}
<button
type="submit"
name="{{ form.party_types.html_name }}"
value="{{ val }}"
class="{% if val == last_party_types or not last_party_types and val == 'all' %}active{% endif %} btn btn-default">
{{ text }}
</button>
{% endfor %}
</div>
<input type="hidden" name="{{ form.last_party_types.html_name }}" value="{{ last_party_types }}">
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select name="{{ form.order_by.html_name }}" onchange="$(this).closest('form').submit()" class="selectpicker">
{% for val, text in form.order_by.field.choices %}
<option value="{{ val }}">{{ text }}</option>
{% endfor %}
</select>
</div>
<input type="hidden" name="{{ form.last_order_by.html_name }}" value="{{ last_order_by }}">
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none">
</div>
</div>
</form>
{% for obj in coll %}
{% if obj|class_name == 'Team' %}
{% with team=obj %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:team-profile' pk=team.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if team.owner.avatar %}
{% thumbnail team.owner.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if team.owner.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:team-profile' pk=team.pk %}">{{ team.name }}</a>
</p>
<p class="navv2">На сайте c {{ team.created|date:"d M Y"}}</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:team-profile' pk=team.pk %}">
смотреть профиль
</a>
</li>
<li>
{% if request.user.is_customer %}
<a
href="#"
onclick="return false"
data-contractor-id="{{ team.owner.pk }}"
data-team-id="{{ team.pk }}"
data-is-team-offer="true"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
{% endif %}
</li>
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ team.owner.pk }}#user{{ team.owner.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_team_widget team_id=team.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_team_widget team.pk 'restList2' %}
<!-- TODO -->
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12" style="margin-bottom: 20px">
<pre><!--
--><b>######## Team owner #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ team.owner.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ team.owner.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--><br><!--
--><br><!--
--><br><!--
--><b>######## Team users #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--
--><br><!--
--><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--
--><br><!--
--><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
<div class="gallMini disTab">
{% for portf in team.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% elif obj|class_name == 'User' %}
{% with contractor=obj %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if contractor.avatar %}
{% thumbnail contractor.avatar "126x125" crop="center" as avatar %}
<img src="{{ avatar.url }}" alt="profile-image">
{% endthumbnail %}
{% else %}
{% if contractor.gender == "female" %}
<img src="{% static 'img/avatars/avatar-female.jpg' %}" alt="profile-image">
{% else %}
<img src="{% static 'img/avatars/avatar-male.jpg' %}" alt="profile-image">
{% endif %}
{% endif %}
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">{{ contractor.get_full_name }} [{{ contractor.username }}]</a>
</p>
<p class="navv2">На сайте c {{ contractor.created|date:"d M Y"}}</p>
{% if contractor.contractor_status == 'free' %}
<div class="statusUser">Свободен</div>
{% else %}
<div class="statusUser busy">Занят</div>
{% endif %}
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="{% url 'users:contractor-profile' pk=contractor.pk %}">
смотреть профиль
</a>
</li>
{% if request.user.is_customer %}
<li>
<a
href="#"
onclick="return false"
data-contractor-id="{{ contractor.pk }}"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
</li>
{% endif %}
<li>
<a href="{% url 'chat:chat-user' %}?user_id={{ contractor.pk }}#user{{ contractor.pk }}">
написать сообщение
</a>
</li>
</ul>
</div>
<div class="col-lg-3">
{% specialization_widget user_id=contractor.pk %}
</div>
<div class="col-lg-3 retts">
{% ratings_widget contractor.pk 'restList2' %}
{% if contractor.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12">
<pre><!--
--><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ contractor.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ contractor.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
<div class="gallMini disTab">
{% for portf in contractor.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}
{% endif %}
{% endfor %}
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{% block js_block %}
<script>
{% if request.user.is_customer %}
var customerId = {{ request.user.pk }}
var $projectSelectionModal = $('#projectSelectionModal')
var projectUrl_ = '/projects/%id%/'
var projectOrderChatUrl_ = '/chat/#order%orderId%'
$projectSelectionModal.on('shown.bs.modal', function($evt) {
var $that = $(this)
var $modalOpenButton = $($evt.relatedTarget)
var $projectSelect = $that.find('.-project-select').first()
$that.data('modalOpenButton', $modalOpenButton)
initProjectSelect($projectSelect, customerId)
})
$projectSelectionModal.find('.-action-button').first().on('click', function($evt) {
var $projectSelect = $projectSelectionModal.find('.-project-select').first()
var $modalOpenButton = $projectSelectionModal.data('modalOpenButton')
var isTeamOffer = $modalOpenButton.data('isTeamOffer')
var project = $projectSelect.select2('data').origItem
var projectUrl = _.replace('%id%', project.id, projectUrl_)
var projectOrderChatUrl = _.replace('%orderId%', project.order.id, projectOrderChatUrl_)
$projectSelectionModal.modal('hide')
if (isTeamOffer) {
var contractorId = $modalOpenButton.data('contractorId')
var teamId = $modalOpenButton.data('teamId')
if (project.order.team && project.order.team.id === teamId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вашей команде предлагается проект <a class="message_connect" href="http://{{ request.get_host }}' + projectUrl + '">Перейти к проекту</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
} else {
var contractorId = $modalOpenButton.data('contractorId')
if (project.order.contractor && project.order.contractor.id === contractorId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вам предлагается проект <a class="message_connect" href="http://{{ request.get_host }}' + projectUrl + '">Перейти к проекту</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
}
})
$projectSelectionModal.on('hidden.bs.modal', function($evt) {
$(this).find('.-project-select').first().select2('destroy')
})
{% endif %}
</script>
{% endblock %}

@ -24,11 +24,13 @@ from .models import User, Team, ContractorResume, ContractorResumeFiles, TeamInv
from archilance import util
from archilance.mixins import BaseMixin
from common.mixins import ContractorRequiredMixin, NoCsrfMixin
from common.models import Location
from projects.forms import PortfolioForm
from projects.models import Order, Realty, Project
from projects.models import Order, Realty, Project, BuildingClassfication, ConstructionType
from reviews.models import Review
from work_sell.forms import WorkSellForm
from work_sell.models import Picture
from specializations.models import Specialization
from .helpers import get_projects_grouped
@ -249,188 +251,359 @@ class UserFinancialInfoEditView(BaseMixin, View):
return render(request, self.template_name, context)
# class ContractorFilterViewOld(BaseMixin, View):
# template_name = 'contractor_filter.html'
# form_class = ContractorFilterForm
#
# def get(self, request, *args, **kwargs):
# form = self.form_class(request.GET, request=request)
# context = self.get_context_data(**_.merge({}, request.GET, kwargs))
# coll = []
#
# if form.is_valid():
# contractors = teams = None
# contr_count = team_count = None
# get_contractors = get_teams = None
# ord = None
#
# cro = form.cleaned_data.get('cro')
# specialization = form.cleaned_data.get('specialization')
# location = form.cleaned_data.get('location')
# work_type = form.cleaned_data.get('work_type')
# build_classif = form.cleaned_data.get('building_classification')
# constr_type = form.cleaned_data.get('construction_type')
#
# party_types = form.cleaned_data.get('party_types')
# last_party_types = form.cleaned_data.get('last_party_types')
#
# if party_types == 'all':
# get_contractors = get_teams = True
# elif party_types == 'contractors':
# get_contractors = True
# elif party_types == 'teams':
# get_teams = True
# elif not party_types:
# if last_party_types == 'contractors':
# get_contractors = True
# elif last_party_types == 'teams':
# get_teams = True
# else:
# get_contractors = get_teams = True
#
# if party_types:
# last_party_types = party_types
#
# context.update({'last_party_types': last_party_types})
#
# if get_contractors:
# contractors = User.contractor_objects.all()
#
# if cro:
# contractors = contractors.filter(cro=cro)
#
# if specialization:
# contractors = contractors.filter(
# contractor_specializations__lft__gte=specialization.lft,
# contractor_specializations__rght__lte=specialization.rght,
# )
#
# if location:
# contractors = contractors.filter(
# location__lft__gte=location.lft,
# location__rght__lte=location.rght,
# )
#
# if work_type:
# contractors = contractors.filter(orders__project__work_type=work_type)
#
# if build_classif:
# contractors = contractors.filter(Q(orders__project__realty__building_classification=build_classif) |
# Q(contractor_building_classifications=build_classif))
#
# if constr_type:
# contractors = contractors.filter(Q(orders__project__realty__construction_type=constr_type) |
# Q(contractor_construction_types=constr_type))
#
# if get_teams:
# teams = Team.objects.all()
#
# if cro:
# teams = teams.filter(Q(contractors__cro=cro) | Q(owner__cro=cro))
#
# if specialization:
# teams = teams.filter(
# (
# Q(contractors__contractor_specializations__lft__gte=specialization.lft)
# & Q(contractors__contractor_specializations__rght__lte=specialization.rght)
# ) | (
# Q(owner__contractor_specializations__lft__gte=specialization.lft)
# & Q(owner__contractor_specializations__rght__lte=specialization.rght)
# ),
# )
#
# if location:
# teams = teams.filter(
# (
# Q(contractors__location__lft__gte=location.lft)
# & Q(contractors__location__rght__lte=location.rght)
# ) | (
# Q(owner__location__lft__gte=location.lft)
# & Q(owner__location__rght__lte=location.rght)
# ),
# )
#
# if work_type:
# teams = teams.filter(
# Q(contractors__orders__project__work_type=work_type)
# | Q(owner__orders__project__work_type=work_type),
# )
#
# if build_classif:
# teams = teams.filter(
# Q(contractors__orders__project__realty__building_classification=build_classif)
# | Q(owner__orders__project__realty__building_classification=build_classif),
# )
#
# if constr_type:
# teams = teams.filter(
# Q(contractors__orders__project__realty__construction_type=constr_type)
# | Q(owner__orders__project__realty__construction_type=constr_type),
# )
#
# if get_contractors and get_teams:
# coll = tuple(itertools.chain(contractors.distinct(), teams.distinct()))
# count = len(coll)
# display_msg = 'Найдено %s элементов' % count if count > 0 else 'Ничего не найдено'
# elif get_contractors:
# coll = contractors.distinct()
# count = coll.count()
# display_msg = 'Найдено %s исполнителей' % count if count > 0 else 'Ничего не найдено'
# elif get_teams:
# coll = teams.distinct()
# count = coll.count()
# display_msg = 'Найдено %s групп' % count if count > 0 else 'Ничего не найдено'
#
# order_by = form.cleaned_data.get('order_by')
# last_order_by = form.cleaned_data.get('last_order_by')
# reverse_order = form.cleaned_data.get('reverse_order')
#
# if order_by:
# reverse_order = not reverse_order if order_by == last_order_by else False
# ord = order_by
# last_order_by = ord
# elif last_order_by:
# ord = last_order_by
#
# if ord:
# if ord == 'name':
# coll = natsort.natsorted(coll, key=lambda obj: getattr(obj, 'username', None) or obj.name,
# reverse=reverse_order)
# elif ord == 'created':
# coll = natsort.natsorted(coll, key=lambda obj: obj.created, reverse=reverse_order)
#
# context.update({
# 'last_order_by': last_order_by,
# 'reverse_order': reverse_order,
# })
# else:
# display_msg = 'Пожалуйста, введите корректные данные'
#
# if form.errors:
# messages.info(request, (
# '<p>Произошла ошибка (form)</p>'
# '<pre>{form}</pre>'
# ).format(form=pformat(form.errors)))
#
# paginator = Paginator(coll, settings.PAGE_SIZE)
# page = request.GET.get('page')
#
# try:
# coll = paginator.page(page)
# except PageNotAnInteger:
# coll = paginator.page(1)
# except EmptyPage:
# coll = paginator.page(paginator.num_pages)
#
# context.update({
# 'form': form,
# 'coll': coll,
# 'is_paginated': True,
# 'page_obj': coll,
# 'display_msg': display_msg,
# })
#
# return render(request, self.template_name, context)
# TODO: не работает сортировка по reviews(не получилось создать отзывы) и views(не нашел счетчик просмотров)
class ContractorFilterView(BaseMixin, View):
template_name = 'contractor_filter.html'
include_template = 'partials/inc-contractors-results.html'
form_class = ContractorFilterForm
PROJECT_ORDER_CHOICES = ( # "Упорядочить по"...
('name', 'названию'),
('created', 'дате размещения'),
('views', 'просмотрам'),
('reviews', 'Отзывам'),
('rating', 'Рейтингу'),
)
def get(self, request, *args, **kwargs):
form = self.form_class(request.GET, request=request)
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
coll = []
if form.is_valid():
contractors = teams = None
contr_count = team_count = None
get_contractors = get_teams = None
ord = None
cro = form.cleaned_data.get('cro')
specialization = form.cleaned_data.get('specialization')
location = form.cleaned_data.get('location')
work_type = form.cleaned_data.get('work_type')
build_classif = form.cleaned_data.get('building_classification')
constr_type = form.cleaned_data.get('construction_type')
party_types = form.cleaned_data.get('party_types')
last_party_types = form.cleaned_data.get('last_party_types')
if party_types == 'all':
get_contractors = get_teams = True
elif party_types == 'contractors':
get_contractors = True
elif party_types == 'teams':
get_teams = True
elif not party_types:
if last_party_types == 'contractors':
get_contractors = True
elif last_party_types == 'teams':
get_teams = True
else:
get_contractors = get_teams = True
if party_types:
last_party_types = party_types
context.update({'last_party_types': last_party_types})
if get_contractors:
contractors = User.contractor_objects.all()
if cro:
contractors = contractors.filter(cro=cro)
def set_teams_filter(self, objects, request_data):
specialization = request_data.get('specialization')
building_classification = request_data.get('building_classification')
construction_type = request_data.get('construction_type')
location = request_data.get('location')
cro = request_data.get('cro')
if specialization:
contractors = contractors.filter(
contractor_specializations__lft__gte=specialization.lft,
contractor_specializations__rght__lte=specialization.rght,
)
query_contractors = util.build_query(specialization, Specialization,
'contractors__contractor_specializations__lft__gte',
'contractors__contractor_specializations__rght__lte')
query_owner = util.build_query(specialization, Specialization,
'owner__contractor_specializations__lft__gte',
'owner__contractor_specializations__rght__lte')
objects = objects.filter(query_contractors | query_owner)
if building_classification:
query_contractors = util.build_query(building_classification, BuildingClassfication,
'contractors__contractor_building_classifications')
query_owner = util.build_query(building_classification, BuildingClassfication,
'owner__contractor_building_classifications')
objects = objects.filter(query_contractors | query_owner)
if construction_type:
query_contractors = util.build_query(construction_type, ConstructionType,
'contractors__contractor_construction_types')
query_owner = util.build_query(construction_type, ConstructionType,
'owner__contractor_construction_types')
objects = objects.filter(query_contractors | query_owner)
if location:
contractors = contractors.filter(
location__lft__gte=location.lft,
location__rght__lte=location.rght,
)
if work_type:
contractors = contractors.filter(orders__project__work_type=work_type)
if build_classif:
contractors = contractors.filter(Q(orders__project__realty__building_classification=build_classif) |
Q(contractor_building_classifications=build_classif))
if constr_type:
contractors = contractors.filter(Q(orders__project__realty__construction_type=constr_type) |
Q(contractor_construction_types=constr_type))
if get_teams:
teams = Team.objects.all()
query_contractors = util.build_query(location, Location,
'contractors__location__lft__gte',
'contractors__location__rght__lte')
query_owner = util.build_query(construction_type, Location,
'owner__location__lft__gte',
'owner__location__rght__lte',)
objects = objects.filter(query_contractors | query_owner)
if cro:
teams = teams.filter(Q(contractors__cro=cro) | Q(owner__cro=cro))
objects = objects.filter(Q(contractors__cro=cro) | Q(owner__cro=cro))
if specialization:
teams = teams.filter(
(
Q(contractors__contractor_specializations__lft__gte=specialization.lft)
& Q(contractors__contractor_specializations__rght__lte=specialization.rght)
) | (
Q(owner__contractor_specializations__lft__gte=specialization.lft)
& Q(owner__contractor_specializations__rght__lte=specialization.rght)
),
)
return objects
def set_contractors_filter(self, objects, request_data):
specialization = request_data.get('specialization')
building_classification = request_data.get('building_classification')
construction_type = request_data.get('construction_type')
location = request_data.get('location')
cro = request_data.get('cro')
if specialization:
query = util.build_query(specialization, Specialization,
'contractor_specializations__lft__gte', 'contractor_specializations__rght__lte')
objects = objects.filter(query)
if building_classification:
query = util.build_query(building_classification, BuildingClassfication,
'contractor_building_classifications__lft__gte',
'contractor_building_classifications__rght__lte')
objects = objects.filter(query)
if construction_type:
objects = objects.filter(contractor_construction_types__in=
tuple(filter(None, re.split(r'\s|,|;', construction_type))))
if location:
teams = teams.filter(
(
Q(contractors__location__lft__gte=location.lft)
& Q(contractors__location__rght__lte=location.rght)
) | (
Q(owner__location__lft__gte=location.lft)
& Q(owner__location__rght__lte=location.rght)
),
)
if work_type:
teams = teams.filter(
Q(contractors__orders__project__work_type=work_type)
| Q(owner__orders__project__work_type=work_type),
)
query = util.build_query(location, Location,
'location__lft__gte',
'location__rght__lte')
objects = objects.filter(query)
if build_classif:
teams = teams.filter(
Q(contractors__orders__project__realty__building_classification=build_classif)
| Q(owner__orders__project__realty__building_classification=build_classif),
)
if cro:
objects = objects.filter(cro=True)
return objects
def contractors_sort_by(self, contractors, order_by):
if order_by == 'name':
contractors = contractors.order_by('username')
if order_by == 'created':
contractors = contractors.order_by('created')
if order_by == 'views':
pass
if order_by == 'reviews':
pass
if order_by == 'rating':
contractors = contractors.order_by('rating')
return contractors
def teams_sort_by(self, teams, order_by):
if order_by == 'name':
teams = teams.order_by('name')
if order_by == 'created':
teams = teams.order_by('created')
if order_by == 'views':
pass
if order_by == 'reviews':
pass
if order_by == 'rating':
teams = teams.order_by('rating')
return teams
if constr_type:
teams = teams.filter(
Q(contractors__orders__project__realty__construction_type=constr_type)
| Q(owner__orders__project__realty__construction_type=constr_type),
)
def pagination(self, objects, page):
paginator = Paginator(objects, settings.PAGE_SIZE)
# print("pag page = ", page)
try:
objects = paginator.page(page)
except PageNotAnInteger:
objects = paginator.page(1)
except EmptyPage:
objects = paginator.page(paginator.num_pages)
return objects
if get_contractors and get_teams:
coll = tuple(itertools.chain(contractors.distinct(), teams.distinct()))
count = len(coll)
display_msg = 'Найдено %s элементов' % count if count > 0 else 'Ничего не найдено'
elif get_contractors:
coll = contractors.distinct()
count = coll.count()
display_msg = 'Найдено %s исполнителей' % count if count > 0 else 'Ничего не найдено'
elif get_teams:
coll = teams.distinct()
count = coll.count()
def get_context(self, request_data):
context = request_data.dict()
contractors = User.contractor_objects.all()
teams = Team.objects.all()
print(request_data)
party_types = request_data.get("party_types")
order_by = request_data.get("order_by")
print("order_by = ", order_by)
if party_types == 'teams':
objects = self.set_teams_filter(teams, request_data).distinct()
objects = self.teams_sort_by(objects, order_by)
count = objects.count()
display_msg = 'Найдено %s групп' % count if count > 0 else 'Ничего не найдено'
order_by = form.cleaned_data.get('order_by')
last_order_by = form.cleaned_data.get('last_order_by')
reverse_order = form.cleaned_data.get('reverse_order')
if order_by:
reverse_order = not reverse_order if order_by == last_order_by else False
ord = order_by
last_order_by = ord
elif last_order_by:
ord = last_order_by
if ord:
if ord == 'name':
coll = natsort.natsorted(coll, key=lambda obj: getattr(obj, 'username', None) or obj.name,
reverse=reverse_order)
elif ord == 'created':
coll = natsort.natsorted(coll, key=lambda obj: obj.created, reverse=reverse_order)
context.update({
'last_order_by': last_order_by,
'reverse_order': reverse_order,
})
elif party_types == 'contractors':
objects = self.set_contractors_filter(contractors, request_data).distinct()
objects = self.contractors_sort_by(objects, order_by)
count = objects.count()
display_msg = 'Найдено %s исполнителей' % count if count > 0 else 'Ничего не найдено'
else:
display_msg = 'Пожалуйста, введите корректные данные'
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
paginator = Paginator(coll, settings.PAGE_SIZE)
page = request.GET.get('page')
teams = self.set_teams_filter(teams, request_data)
teams = self.teams_sort_by(teams, order_by)
contractors = self.set_contractors_filter(contractors, request_data)
contractors = self.contractors_sort_by(contractors, order_by)
objects = tuple(itertools.chain(contractors.distinct(), teams.distinct()))
count = len(objects)
display_msg = 'Найдено %s элементов' % count if count > 0 else 'Ничего не найдено'
try:
coll = paginator.page(page)
except PageNotAnInteger:
coll = paginator.page(1)
except EmptyPage:
coll = paginator.page(paginator.num_pages)
# objects = self.sort_by(objects, order_by)
objects = self.pagination(objects, request_data.get("page"))
context.update({
'form': form,
'coll': coll,
'choices': self.PROJECT_ORDER_CHOICES,
'objects': objects,
'is_paginated': True,
'page_obj': coll,
'display_msg': display_msg,
'page_obj': objects,
# 'num_results': num_results,
# 'has_additional_fields': has_additional_fields
})
return context
return render(request, self.template_name, context)
def get(self, request):
return render(request, self.template_name, self.get_context(request.GET))
def post(self, request):
return render(request, self.include_template, self.get_context(request.POST))
class ContractorProfileView(BaseMixin, DetailView):

@ -18,7 +18,12 @@ module.exports = {
home_page: "./assets/js/src/home_page.js",
//profile
customer_profile: "./assets/js/src/customer_profile.js",
user_profile_edit: "./assets/js/src/user_profile_edit.js"
user_profile_edit: "./assets/js/src/user_profile_edit.js",
//filters/search
init_contractor_filter: "./assets/js/src/init_contractor_filter.js",
contractor_filter: "./assets/js/src/contractor_filter.js",
project_filter: "./assets/js/src/project_filter.js",
},

Loading…
Cancel
Save