Ejemplo n.º 1
0
        public async Task <JsonResult> GetAvaibleExecutors()
        {
            await CheckPermission();

            var permissions = (await GetCurrentUser()).Role.Permissions;
            var sqlR        = new ExecutorRepository(_logger);
            var result      = sqlR.GetAvaibleExecutors(permissions);

            return(Json(result));
        }
Ejemplo n.º 2
0
        private async Task ChangeStatusAndExecutors(UpdateTaskData data, User user, bool newtask, int permissions)
        {
            var needPermissionBits = -1;
            var res = permissions & needPermissionBits;

            //если админ то итак нихуя неизменится. нахера флаг с новой таской. хм
            //if (res != needPermissionBits && !newtask)
            if (res != needPermissionBits)
            {
                //Меняем статус
                if (data.StatusId != null)
                {
                    //меняем исполнителя, если статус подходящий

                    int brigadeType = 999;
                    //тут начинается ебоклюйство с правами.
                    // бригады локомативщиков 6
                    needPermissionBits = 64;
                    res = permissions & needPermissionBits;
                    if (res == needPermissionBits)
                    {
                        if (data.StatusId == (int)TaskStatus.Remake)
                        {
                            brigadeType = (int)BrigadeType.Depo;
                        }
                    }
                    // приемщиков 8
                    needPermissionBits = 256;
                    res = permissions & needPermissionBits;
                    if (res == needPermissionBits)
                    {
                        if (data.StatusId == (int)TaskStatus.Confirmation)
                        {
                            brigadeType = (int)BrigadeType.Locomotiv;
                        }
                        if (data.StatusId == (int)TaskStatus.Remake)
                        {
                            brigadeType = (int)BrigadeType.Depo;
                        }
                    }

                    if (brigadeType != 999)
                    {
                        var trainTaskExecutor = new TrainTaskExecutor
                        {
                            TrainTaskId = data.TraintaskId,
                            BrigadeType = (BrigadeType)brigadeType,
                            UserId      = user.Id
                        };
                        var sqlRExecutor = new ExecutorRepository(_logger);
                        await sqlRExecutor.AddNewExecutorToTask(trainTaskExecutor, user, false);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public async Task UpdateTask(UpdateTaskData data, User user, bool newtask = false, bool timeShift = true)
        {
            var sqlRExecutor   = new ExecutorRepository(_logger);
            var sqlRTaskStatus = new TaskStatusRepository(_logger);
            var sqlRComment    = new CommentRepository(_logger);
            var sqlRDocuments  = new DocumentRepository(_logger);
            var sqlRTask       = new TaskRepository(_logger);

            int permissions = user.Role.Permissions;

            await sqlRTask.UpdateEditDate(data.TraintaskId);

            //Надо добавить к таске нового исполнителя
            data.TrainTaskExecutorsId = (await sqlRExecutor.AddNewExecutorToTask(data, user, timeShift)).Id;

            //Надо поставить статус указанный изначально, а потом запустить автосмену, в случае это не не админ с новой задачей
            await ChangeStatusAndExecutors(data, user, newtask, permissions);

            if (data.StatusId != null)
            {
                await sqlRTaskStatus.ChangeStatusByTrainTaskId(data.TraintaskId, data.StatusId.Value, user, newtask, timeShift);
            }


            //Добавляем комент
            var commentId = 0;

            data.CommentText = data.CommentText ?? "";
            commentId        = await sqlRComment.AddCommentByTrainTaskId(data.TraintaskId, data.CommentText, user);


            //Добавляем файлы, если есть комент
            if (data.FilesId != null && data.FilesId.Length > 0 && commentId != 0)
            {
                await sqlRDocuments.AddToCommentId(data.FilesId, commentId);
            }
        }
Ejemplo n.º 4
0
        private static async Task <List <Row> > GetTaskData(List <TrainTask> tasks, ILogger logger)
        {
            var sqlRUsers               = new UserRepository(logger);
            var sqlRTaskStatus          = new TaskStatusRepository(logger);
            var sqlRTaskExecutors       = new ExecutorRepository(logger);
            var sqlRTaskComment         = new CommentRepository(logger);
            var sqlRCarriages           = new CarriageRepository(logger);
            var sqlREquipmentModel      = new EquipmentModelsRepository(logger);
            var sqlREquipment           = new EquipmentRepository(logger);
            var sqlRTrains              = new TrainRepository(logger);
            var sqlRTrainTaskAttributes = new TrainTaskAttributesRepository(logger);
            var sqlRFault               = new FaultsRepository(logger);

            var rows = new List <Row>();

            foreach (var task in tasks)
            {
                var currentTaskStatus = (await sqlRTaskStatus.ByTaskId(task.Id)).Last();
                var carriage          = await sqlRCarriages.ById(task.CarriageId);

                var user = GetUserById(sqlRUsers, task.UserId);

                var taskExecutor   = (await sqlRTaskExecutors.GetByTaskId(task.Id)).Last();
                var equipmentModel = await sqlREquipmentModel.ById(task.EquipmentModelId);

                var equipment = await sqlREquipment.ById(equipmentModel.EquipmentId);

                var taskAttributes = await sqlRTrainTaskAttributes.ByTaskId(task.Id);

                var lastComment = (await sqlRTaskComment.GetByTaskId(task.Id)).LastOrDefault();
                var fault       = new Fault();
                if (taskAttributes.Count == 1 && taskAttributes.First().FaultId.HasValue)
                {
                    fault = await sqlRFault.ById(taskAttributes.First().FaultId.Value);
                }


                var updateData = GetTaskLastUpdate(lastComment, taskExecutor, currentTaskStatus);

                var toadd = new Row
                {
                    Id       = new RowId(task.Id, 2),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Ид
                    Col0 = "И" + task.Id,
                    //Статус
                    Col1 = GetStringTaskStatus(currentTaskStatus.Status),
                    //Тип
                    Col2 = GetStringTaskType(task.TaskType),
                    //Состав
                    Col3 = GetTrainById(sqlRTrains, carriage.TrainId).Name,
                    //Инициатор
                    Col4 = user.Name,
                    //Исполнитель
                    Col5 = GetStringBrigadeType(taskExecutor.BrigadeType),
                    //Дата
                    Col6 = task.CreateDate.ToStringDateTime(),
                    ////Вагон
                    Col7 = carriage.Number.ToString(),
                    //Оборудование
                    Col8 = equipment.Name,
                    ////Типовая Неисправность
                    Col9 = fault?.Name,
                    //Обновлено
                    Col10 = updateData?.Date.ToStringDateTime(),
                    //Обновил
                    Col11 = updateData?.User.Name
                };
                if (taskAttributes.Count > 1)
                {
                    toadd.HasItems = true.ToString();
                }

                rows.Add(toadd);
            }

            return(rows);
        }
Ejemplo n.º 5
0
        //30 - Приёмка поезда ПР
        //31 - Выпуск поезда ПР
        //32 - Приёмка поезда ЛБ
        //33 - Сдача поезда ЛБ

        public async Task <JournalPaging> GetJournalInspectionAndTasks(int skip, int limit, string filter)
        {
            var sqlr = new InspectionRepository(_logger);

            var inspdatarep  = new InspectionDataRepository(_logger);
            var sqlTrainR    = new TrainRepository(_logger);
            var sqlUserR     = new UserRepository(_logger);
            var iR           = new InspectionRepository(_logger);
            var mR           = new MeterageRepository(_logger);
            var sqlStatusR   = new TaskStatusRepository(_logger);
            var sqlExecutorR = new ExecutorRepository(_logger);
            var sqlRTask     = new TaskRepository(_logger);
            var sqlRBrigade  = new BrigadeRepository(_logger);
            var sqlRJournal  = new JournalRepository(_logger);

            var listFull = new List <JournalDateItem>();

            var fromSqlsInspections = await sqlr.GetAll();

            foreach (var fromSqlsInspection in fromSqlsInspections)
            {
                var train = (await sqlTrainR.ByIdWithStations(fromSqlsInspection.TrainId));
                var user  = await sqlUserR.ById(fromSqlsInspection.UserId);

                var journalInspection = new JournalInspection
                {
                    Id           = fromSqlsInspection.Id,
                    Type         = "inspection",
                    InspectionId = fromSqlsInspection.Id,
                    StatusId     = (int)fromSqlsInspection.Status,
                    TypeId       = (int)fromSqlsInspection.CheckListType,
                    Date         = fromSqlsInspection.DateStart,
                    TrainName    = train.Name,
                    TrainId      = train.Id,
                    Tabs         = new JournalInspectionTabs(),
                    UserName     = user.Name,
                };

                if (user.BrigadeId != null)
                {
                    journalInspection.OwnerBrigadeType = (await sqlRBrigade.ById((int)user.BrigadeId)).BrigadeType;
                }


                //дескрипшен
                var counters = await iR.GetCounters(fromSqlsInspection.Id);

                journalInspection.Tabs.Description = new JournalInspectionDescription
                {
                    TasksCount = counters.Tasks,
                    DataEnd    = fromSqlsInspection.DateEnd,
                    //Выдает количество уникальных меток
                    AllLabelCount = counters.Labels,
                    TempCount     = counters.Measurements
                };


                //лейблы
                await getInspectionLabels(mR, fromSqlsInspection, journalInspection);

                //измерения
                await getInspectionMeterage(mR, fromSqlsInspection, journalInspection);

                //счетчики
                await GetInspectionCouters(inspdatarep, fromSqlsInspection, journalInspection);

                //говнохак под ебанутые фильтры и вывод. TypeId == 2 - Приемка, 3 - сдача
                changeInspetionTypeForUi(journalInspection);


                //Фильтруем
                var isFiltered = await InspectionFilter(filter, sqlRTask, fromSqlsInspection, journalInspection);

                if (!isFiltered)
                {
                    listFull.Add(new JournalDateItem
                    {
                        Date       = journalInspection.Date,
                        Inspection = journalInspection
                    }
                                 );
                }
            }


            //Таски

            var fromSqlsT = await sqlRJournal.GetAllTaskForJournal();

            foreach (var fromSql in fromSqlsT)
            {
                var journalTask = new JournalTask
                {
                    Type                  = "Task",
                    TaskId                = fromSql.TaskId,
                    TaskType              = fromSql.TaskType,
                    TrainName             = fromSql.TrainName,
                    TrainId               = fromSql.TrainId,
                    UserName              = fromSql.UserName,
                    Date                  = fromSql.CreateDate,
                    CarriageName          = CreateCarriageName(fromSql.TrainName, fromSql.CarriageNumber),
                    CarriageNum           = fromSql.CarriageNumber,
                    CarriageId            = fromSql.CarriageId,
                    EquipmentName         = fromSql.EquipmentName,
                    FaultName             = fromSql.FaultName,
                    InspectionInfo        = _GetInspectionInfo(fromSql.InspectionId, fromSql.InspectionType),
                    CarriagesSerialNumber = fromSql.CarriagesSerialNumber,
                    TaskAttributeId       = fromSql.TaskAttributeId
                };

                var executor = (await sqlExecutorR.GetByTaskId(fromSql.TaskId)).LastOrDefault();
                if (executor != null)
                {
                    journalTask.ExecutorBrigadeType = (int)executor.BrigadeType;
                }


                var taskStatus = sqlStatusR.GetByTrainTaskId(fromSql.TaskId);
                if (taskStatus != null)
                {
                    journalTask.StatusId = (int)sqlStatusR.GetByTrainTaskId(fromSql.TaskId).Status;
                }
                //journalTask.StatusId = fromSql.TaskId;

                var isFiltered = TaskFilter(filter, fromSql, journalTask);
                if (!isFiltered)
                {
                    //response.Add(journalTask.ToJson());
                    listFull.Add(new JournalDateItem
                    {
                        Date = journalTask.Date,
                        Task = journalTask
                    }
                                 );
                }
            }



            //sort by date
            listFull.Sort((x, y) => y.Date.CompareTo(x.Date));

            //пагинация
            List <JournalDateItem> listSkiplimit = paging(skip, ref limit, listFull);

            //Делаем жсон стрингу для вывода
            var pagingList = new List <string>();

            converToJsonString(listSkiplimit, pagingList);

            var result = new JournalPaging
            {
                Data  = pagingList.ToArray(),
                Total = listFull.Count
            };

            return(result);
        }
Ejemplo n.º 6
0
        public async Task <List <HistoryTaskDto> > AddHistoryData(int id)
        {
            var list = new List <HistoryTaskDto>();

            var cr = new CommentRepository(_logger);
            var dr = new DocumentRepository(_logger);
            var er = new ExecutorRepository(_logger);
            var sr = new TaskStatusRepository(_logger);

            var comments = await cr.GetByTaskId(id);

            var docs = await dr.GetByTaskId(id);

            var executors = await er.GetByTaskId(id);

            var statuses = await sr.ByTaskId(id);

            foreach (var comment in comments)
            {
                var docsComment = docs.Where(item => item.TrainTaskCommentId == comment.Id).ToList();
                var filesDto    = new List <FileTaskDto>();
                foreach (var item in docsComment)
                {
                    var toAdd = new FileTaskDto
                    {
                        DocumentType = (int)item.DocumentType,
                        Id           = item.Id,
                        Name         = item.Name
                    };
                    filesDto.Add(toAdd);
                }

                if (filesDto.Count != 0 || !string.IsNullOrWhiteSpace(comment.Text))
                {
                    list.Add(new HistoryTaskDto
                    {
                        Date            = comment.Date,
                        Files           = filesDto,
                        Type            = TaskHistoryType.Comment.ToString(),
                        User            = comment.User.Name,
                        UserBrigadeType = (int?)comment.User.Brigade?.BrigadeType,
                        Text            = comment.Text
                    });
                }
            }

            TrainTaskExecutor prevExec = null;

            foreach (var exec in executors)
            {
                list.Add(new HistoryTaskDto
                {
                    Date = exec.Date,
                    NewExecutorBrigadeType = (int)exec.BrigadeType,
                    OldExecutorBrigadeType = prevExec == null ? null : (int?)prevExec.BrigadeType,
                    Type            = TaskHistoryType.Executor.ToString(),
                    User            = exec.User.Name,
                    UserBrigadeType = (int?)exec.User.Brigade?.BrigadeType,
                });
                prevExec = exec;
            }

            TrainTaskStatus prevSt = null;

            foreach (var st in statuses)
            {
                list.Add(new HistoryTaskDto
                {
                    Date            = st.Date,
                    NewStatus       = (int)st.Status,
                    OldStatus       = prevSt == null ? null : (int?)prevSt.Status,
                    Type            = TaskHistoryType.Status.ToString(),
                    User            = st.User.Name,
                    UserBrigadeType = (int?)st.User.Brigade?.BrigadeType,
                });
                prevSt = st;
            }

            var ret = list.OrderBy(o => o.Date).ToList();

            return(ret);
        }
Ejemplo n.º 7
0
        public async Task <TaskByIdDto> GetTaskById(int id, int permissions = -1)
        {
            using (var conn = new SqlConnection(AppSettings.ConnectionString))
            {
                var sqlRExecutor   = new ExecutorRepository(_logger);
                var sqlRTaskStatus = new TaskStatusRepository(_logger);
                var sqlRTask       = new TaskSqls();


                var fromSql = (await conn.QueryAsync <TaskDetailFromSql>(sqlRTask.GetTrainTaskByIdAndAttributeId(id))).ToList();

                var task = fromSql.First();

                var result = new TaskByIdDto
                {
                    Id             = task.Id,
                    Data           = task.CreateDate,
                    InitiatorName  = task.InitiatorName,
                    TrainName      = task.TrainName,
                    EquipmentName  = task.EquipmentName,
                    CarriageSerial = task.CarriageSerial, //CreateCarriageName(task.TrainName, task.CarriageNumber),
                    TaskType       = task.TaskType
                };

                //Текущий статус
                var taskStatuses = await sqlRTaskStatus.ByTaskId(id);

                var currentTaskStatus = taskStatuses.Last().Status;
                result.StatusId = (int)currentTaskStatus;

                //Текущий исполнитель
                var taskExecutors = await sqlRExecutor.GetByTaskId(id);

                BrigadeType currentTaskExecutor = 0;
                if (taskExecutors.Count > 0)
                {
                    currentTaskExecutor = taskExecutors.Last().BrigadeType;
                    result.BrigadeType  = (int)currentTaskExecutor;
                }

                //Уровень задачи
                var taskLevel = fromSql.OrderBy(x => x.TaskLevel).Select(x => x.TaskLevel).First();
                result.TaskLevel = taskLevel.HasValue ? (int)taskLevel : 0;

                //Доступные статусы
                var possibleTaskStatuses = sqlRTaskStatus.GetAvailableStatusesNewTask(currentTaskStatus, currentTaskExecutor, permissions);
                result.PossibleTaskStatuses = possibleTaskStatuses.Select(x => (int)x).ToList();

                //Неисправности из атрибутов
                result.Faults      = new List <FaultTaskDto>();
                result.Inspections = new List <InspectionTaskDto>();
                foreach (var item in fromSql)
                {
                    if (item.AttributeFaultId != null)
                    {
                        await AddFaultData(result, item);
                    }

                    if (item.AttributeInspectionId != 0)
                    {
                        await AddInspectionData(result, item);
                    }
                }
                //Добавить в фаулты данные по чеклистам из инпекции
                var withCheckListEquipmentId = fromSql.Where(x => x.AttributeCheckListEquipmentId != null)
                                               .DistinctBy(y => y.AttributeCheckListEquipmentId).ToList();
                foreach (var item in withCheckListEquipmentId)
                {
                    await AddFaultDataFromCheckListEquipmentId(result, item);
                }

                result.History = await AddHistoryData(id);

                return(result);
            }
        }