function ($scope, $routeParams, $location, $filter, rest, $uibModal){
$scope.models = [];
$scope.constants = [];
$scope.filteredTasks = [];
$scope.filteredGroupTasks = [];
$scope.filters = [];
$scope.filterHas = {fontWeight:'bold'};
$scope.filter = function(field){
return $scope.fields.view.list.findIndex(x => x.ID == field.ID && x.Show) >= 0;
}
$scope.config = {
viewFields: [
//
],
groupField: null,
sortField: null,
im: {
filters: [],
list: [
{ID: 1, Title: 'Я исполнитель', filter: function(model){
return model.Employee.ID == cje.userID;
}},
{ID: 2, Title: 'Я постановщик', filter: function(model){
return model.Author.ID == cje.userID;
}},
{ID: 3, Title: 'Входящие задачи', filter: function(model){
return (model.Author.ID != cje.userID && model.Employee.ID == cje.userID);
}},
],
_value: null,
get value(){
return this._value;
},
set value(value){
this._value = value;
try {
var filter = $scope.config.im.list.find(x => x.ID == value).filter;
$scope.config.im.filters = [filter];
} catch {
$scope.config.im.filters = [];
}
$scope.filteredTasks = $scope.models;
$scope.config.im.filters.map(f => {
$scope.filteredTasks = $scope.filteredTasks.filter(model => f(model));
});
$scope.filterUpdate();
},
},
};
$scope.$watch('models', function(value, oldValue){
$scope.filteredTasks = $scope.models;
$scope.config.im.value = 1;
});
$scope.$watch('fields.group.count', function(value, oldValue){
$scope.filteredGroupTasks = $scope.fields.group.tasks();
});
$scope.constantaTitle = function(type, name){
return $scope.constants[type].find(x => x.ID == name).Title;
}
$scope.fields = {
group: {
list: [
{
ID: 'Project',
Title: 'Проект',
Group: false,
Value: (model) => model.Project.Title,
GroupBy: (model) => model.Project.ID,
},
{
ID: 'Status',
Title: 'Статус',
Group: false,
Value: (model) => $scope.constantaTitle('STATUS', model.Status),
GroupBy: (model) => model.Status,
},
{
ID: 'Employee',
Title: 'Ответственный',
Group: false,
Value: (model) => model.Employee.Name,
GroupBy: (model) => model.Employee.ID,
},
{
ID: 'Author',
Title: 'Инициатор',
Group: false,
Value: (model) => model.Author.Name,
GroupBy: (model) => model.Author.ID,
},
{
ID: 'Type',
Title: 'Тип задачи',
Group: false,
Value: (model) => $scope.constantaTitle('TYPE', model.Type),
GroupBy: (model) => model.Type,
},
{
ID: 'Priority',
Title: 'Приоритет',
Group: false,
Value: (model) => $scope.constantaTitle('PRIORITY', model.Priority),
GroupBy: (model) => model.Priority,
},
{
ID: 'Departament',
Title: 'Департамент',
Group: false,
Value: (model) => model.Task.Departament.Title,
GroupBy: (model) => model.Task.Departament.ID,
},
{
ID: 'Case',
Title: 'Кейс',
Group: false,
Value: (model) => model.Case.DefaultCase.Title,
GroupBy: (model) => model.Case.ID,
},
],
tasks: function(){
var items = [];
collect($scope.filteredTasks).groupBy(function(model){
var result = [];
var model = model;
$scope.fields.group.list.filter(x => x.Group == true).map(f => {
result.push(f.GroupBy(model));
});
return result.join("|");
}).toArray().map(x => {
items.push(x.items);
});
return items;
},
tasksFirst: function(group){
return collect(group).first();
},
namesGroup: function(group){
var result = [];
var e = collect(group).first();
$scope.fields.group.list.filter(x => x.Group == true).map(g => {
var ee = {
Title: g.Title,
Value: g.Value(e),
};
result.push(ee);
});
return result;
},
get use(){
return this.count > 0;
},
get count(){
return $scope.fields.group.list.filter(x => x.Group == true).length;
},
},
view: {
list: [
{
ID: 'Task',
Title: 'Задача',
Show: true,
Value: (model) => model.Task.Title
},
{
ID: 'Description',
Title: 'Описание задачи',
Show: !true,
Value: model => model.Task.Description,
Hint: true,
},
{
ID: 'Project',
Title: 'Проект',
Show: !true,
Value: (model) => model.Project.Title
},
{
ID: 'DateStaging',
Title: 'Дата постановки',
Show: !true,
Value: (model) => model.DateStaging
},
{
ID: 'DeadlineBegin',
Title: 'Дата начала',
Show: !true,
Value: (model) => model.DeadlineBegin
},
{
ID: 'Deadline',
Title: 'Дедлайн',
Show: !true,
Value: (model) => model.Deadline
},
{
ID: '_Comment',
Title: 'Последний комментарий',
Show: !true,
Value: (model) => model._
},
{
ID: 'Status',
Title: 'Статус',
Show: !true,
Value: (model) => $scope.constantaTitle('STATUS', model.Status)
},
{
ID: 'ElapsedTime',
Title: 'Затраченное время',
Show: !true,
Value: (model) => $filter('minutesToHours')(model.ElapsedTime)
},
{
ID: 'Employee',
Title: 'Ответственный',
Show: !true,
Value: (model) => model.Employee.Name
},
{
ID: 'Author',
Title: 'Инициатор',
Show: !true,
Value: (model) => model.Author.Name
},
{
ID: 'Type',
Title: 'Тип задачи',
Show: !true,
Value: (model) => $scope.constantaTitle('TYPE', model.Type)
},
{
ID: 'Priority',
Title: 'Приоритет',
Show: !true,
Value: (model) => $scope.constantaTitle('PRIORITY', model.Priority)
},
{
ID: 'Departament',
Title: 'Департамент',
Show: !true,
Value: (model) => model.Task.Departament.Title
},
{
ID: '_Attach',
Title: 'Аттач',
Show: !true,
Value: (model) => model._
},
{
ID: 'Case',
Title: 'Кейс',
Show: true,
Value: (model) => model.Case.DefaultCase.Title
},
{
ID: 'DateExecution',
Title: 'Время выполнения',
Show: !true,
Value: (model) => model.DateExecution
},
],
get count(){
return $scope.fields.view.list.filter(x => x.Show != false).length;
},
},
sort: {
list: [
{ID: 'Task', Title: 'Задача', Filter: false, Value: (model) => model.Task.Title},
{ID: 'Project', Title: 'Проект', Filter: false, Value: (model) => model.Project.Title},
{ID: 'DateStaging', Title: 'Дата постановки', Filter: false, Value: (model) => model.DateStaging},
{ID: 'DeadlineBegin', Title: 'Дата начала', Filter: false, Value: (model) => model.DeadlineBegin},
{ID: 'Deadline', Title: 'Дедлайн', Filter: false, Value: (model) => model.Deadline},
{ID: '_Comment', Title: 'Последний комментарий', Filter: false, Value: (model) => model._},
{ID: 'Status', Title: 'Статус', Filter: false, Value: (model) => $scope.constantaTitle('STATUS', model.Status)},
{ID: 'ElapsedTime', Title: 'Затраченное время', Filter: false, Value: (model) => $filter('minutesToHours')(model.ElapsedTime)},
{ID: 'Employee', Title: 'Ответственный', Filter: false, Value: (model) => model.Employee.Name},
{ID: 'Author', Title: 'Инициатор', Filter: false, Value: (model) => model.Author.Name},
{ID: 'Type', Title: 'Тип задачи', Filter: false, Value: (model) => $scope.constantaTitle('TYPE', model.Type)},
{ID: 'Priority', Title: 'Приоритет', Filter: false, Value: (model) => $scope.constantaTitle('PRIORITY', model.Priority)},
{ID: 'Departament', Title: 'Департамент', Filter: false, Value: (model) => model.Task.Departament.Title},
{ID: 'Case', Title: 'Кейс', Filter: false, Value: (model) => model.Case.DefaultCase.Title || ""},
],
get use(){
return $scope.fields.sort.list.filter(x => x.Filter != false).length > 0;
},
ckecked: function(e){
var elm = angular.element(event.target)[0];
if (elm.readOnly){
elm.checked = elm.readOnly = false;
} else if (!elm.checked) {
elm.readOnly = elm.indeterminate = true;
}
if (elm.indeterminate){
e.Filter = null;
} else if (elm.checked){
e.Filter = true;
} else {
e.Filter = false;
}
$scope.filterUpdate();
}
},
};
$scope.filterUpdate = function(){
$scope.filteredTasks.sort(function(a, b){
return a.ID > b.ID ? 1 : -1;
});
var filterList = $scope.fields.sort.list.filter(ff => ff.Filter != false);
$scope.filteredTasks.sort(function(a, b){
var res = null;
filterList.forEach(ff => {
if (res == null){
if (ff.Filter === true){
res = (ff.Value(b) < ff.Value(a)) - (ff.Value(a) < ff.Value(b));
} else {
res = (ff.Value(b) > ff.Value(a)) - (ff.Value(a) > ff.Value(b));
}
} else {
if (ff.Filter === true){
res = res || (ff.Value(b) < ff.Value(a)) - (ff.Value(a) < ff.Value(b));
} else {
res = res || (ff.Value(b) > ff.Value(a)) - (ff.Value(a) > ff.Value(b));
}
}
});
return res;
});
$scope.filteredGroupTasks = $scope.fields.group.tasks();
};
// load data
(function(){
rest.bor.v2.taskFilter.tasks(function(data){
if (data.error.code != 0){
alert(data.error.message);
return false;
}
window.models = $scope.models = data.answer;
console.log('$scope.models', data.answer);
});
rest.bor.v2.taskFilter.constants(function(data){
if (data.error.code != 0){
alert(data.error.message);
return false;
}
$scope.constants = data.answer;
console.log('$scope.constants', data.answer);
});
})();
$scope.modalConfig = function(filename, p_scope){
var modalConfig = {
templateUrl: window.cje.partial + 'bor/v2/task/' + filename,
scope: p_scope,
}
var modalInstance = $uibModal.open(modalConfig);
modalInstance.result.then(function(res){
//
}, function(){
//
});
modalInstance.opened.then(function(res){
//
});
p_scope.modalClose = function(){
modalInstance.close();
}
}
$scope.viewFields = function(){
var scope = $scope.$new();
$scope.modalConfig('filter_viewFields.html', $scope);
}
$scope.sortFields = function(){
var scope = $scope.$new();
$scope.modalConfig('filter_sortFields.html', $scope);
}
$scope.groupFields = function(){
var scope = $scope.$new();
$scope.modalConfig('filter_groupFields.html', $scope);
}
$scope.$on('setIndeterminate', function(e, elm){
if (e.targetScope.field.Filter == null){
elm[0].indeterminate = elm[0].readOnly = true;
}
});
}