public async Task <JsonResult> Add([FromBody] Carriage carriage) { await CheckPermission(); if (string.IsNullOrEmpty(carriage.Serial) || (carriage.TrainId == null)) { throw new Exception("Some input parameters NULL"); } var sqlr = new CarriageRepository(_logger); try { if (carriage.Id != 0) { await sqlr.Update(carriage); return(Json(new { message = "Update OK" })); } else { var res = await sqlr.Add(carriage); return(Json(res)); } } catch (Exception e) { throw new Exception($"Can't add or update {GetType()} ex = {e}"); } }
/// <summary> /// Депо – вкладка с информацией о плановом назначении поезда на места постановки /// </summary> private static async Task <ReportResponse> GetDepoEventsTable(ReportRequest input, int planedRouteTrainId, ILogger logger) { var sqlRTrains = new TrainRepository(logger); var sqlRTask = new TaskRepository(logger); var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger); var sqlRRoute = new RoutesRepository(logger); var sqlRInspections = new InspectionRepository(logger); var sqlRTaskAttributes = new TrainTaskAttributesRepository(logger); var sqlREquipmentModel = new EquipmentModelsRepository(logger); var sqlREquipment = new EquipmentRepository(logger); var sqlRCarriage = new CarriageRepository(logger); var sqlR = new PrimitiveRepository(logger, "Parkings"); var sqlRDepoEvent = new DepoEventsRepository(logger); var result = new ReportResponse { Rows = new List <Row>() }; result.Columns = new List <Column> { new Column("col0", "Место постановки", "string"), new Column("col1", "Время захода на место постановки", "date"), new Column("col2", "Время выхода с места постановки", "date"), }; var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId); var events = await sqlRDepoEvent.ByTrainId(planedRouteTrain.TrainId); foreach (var item in events) { var parking = await sqlR.ById <Parking>(item.ParkingId); string testStopTime = null; if (item.TestStopTime != null) { testStopTime = ((DateTime)item.TestStopTime).ToStringDateTime(); } var row = new Row { Id = new RowId(item.Id, 1), HasItems = false.ToString(), ParentId = null, //Место постановки Col0 = parking.Name, //Время захода на место постановки Col1 = item.InTime.ToStringDateTime(), //Время выхода с места постановки Col2 = testStopTime }; result.Rows.Add(row); } return(result); }
//прицепить вагон обратно public async Task <JsonResult> RestoreLink([FromQuery] int carriageId) { await CheckPermission(); var cer = new CarriageRepository(_logger); await cer.RestoreLink(carriageId); return(Json(new { message = "RestoreLink OK" })); }
public async Task <JsonResult> Delete([FromBody] Carriage carriage) { await CheckPermission(); var cer = new CarriageRepository(_logger); await cer.Delete(carriage.Id); return(Json(new { message = "Delete OK" })); }
public async Task <JsonResult> GetMigrationHistoryTable([FromBody] CarriageRepository.CarriageMigrationHistoryRequest input) { await CheckPermission(); var cer = new CarriageRepository(_logger); var result = await cer.GetMigrationHistoryTable(input); return(Json(result)); }
public async Task <JsonResult> GetByIdWithEquipment(int id) { await CheckPermission(); var cr = new CarriageRepository(_logger); var ceq = await cr.GetByIdWithEquipment(id); ceq.Equipment = ceq.Equipment.OrderBy(e => e.Location).ThenBy(q => q.Equipment).ToArray(); return(Json(ceq)); }
public async Task <JsonResult> GetEquipmentsByCarriage(int carriage_id, bool isMark = false, bool sortToTaskList = false) { await CheckPermission(); var cr = new CarriageRepository(_logger); var mr = new ModelRepository(_logger); var carriage = await cr.GetById(carriage_id); if (carriage == null) { throw new Exception("carriage not found"); } var eq = await mr.GetEquipmentByModel(carriage.Model); var result = eq.Select(row => new ModelRepository.EquipmentTmp { EquipmentId = row.Equipment.Id, EquipmentModelId = row.Id, EquipmentName = row.Equipment.Name, IsMark = row.IsMark, ParentId = row.ParentId, Id = row.Id }).ToArray(); if (isMark) { result = result.Where(e => e.IsMark).ToArray(); } if (sortToTaskList) { var main = result.Where(e => e.ParentId == 0).ToArray(); var sortResult = new List <ModelRepository.EquipmentTmp>(); foreach (var item in main) { sortResult.Add(item); sortResult.AddRange(result.Where(e => e.ParentId == item.Id).OrderBy(q => q.EquipmentName)); } foreach (var item in sortResult) { if (item.ParentId != 0) { item.EquipmentName = $" {item.EquipmentName}"; } } result = sortResult.ToArray(); } return(Json(result)); }
public async Task <JsonResult> GetByTrainId(int train_id) { await CheckPermission(); var tr = new TrainRepository(_logger); var cr = new CarriageRepository(_logger); var train = await tr.ByIdWithStations(train_id); if (train == null) { throw new Exception("train not found"); } var result = await cr.GetByTrain(train); tr.Dispose(); return(Json(result)); }
/// <summary> /// Инциденты – вкладка с перечнем открытых инцидентов на составе, с возможностью перехода в форму инцидента при клике по нему. Информация будет выводится в табличном виде, со следующим набором полей: /// </summary> private static async Task <ReportResponse> GetNotClosedTrainTaskTable(ReportRequest input, int planedRouteTrainId, ILogger logger) { var sqlRTrains = new TrainRepository(logger); var sqlRTask = new TaskRepository(logger); var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger); var sqlRRoute = new RoutesRepository(logger); var sqlRInspections = new InspectionRepository(logger); var sqlRTaskAttributes = new TrainTaskAttributesRepository(logger); var sqlREquipmentModel = new EquipmentModelsRepository(logger); var sqlREquipment = new EquipmentRepository(logger); var sqlRCarriage = new CarriageRepository(logger); var sqlRTaskStatus = new TaskStatusRepository(logger); var result = new ReportResponse { Rows = new List <Row>() }; result.Columns = new List <Column> { new Column("col0", "Номер", "number"), new Column("col1", "Статус", "string"), new Column("col2", "Тип", "string"), new Column("col3", "Вагон", "string"), new Column("col4", "Оборудование", "string"), new Column("col5", "Дата", "date"), }; var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId); //var route = await sqlRRoute.ById(planedRouteTrain.RouteId); var trainTasks = await sqlRTask.ByTrainId(planedRouteTrain.TrainId); var notClosedTasks = new List <TrainTask>(); foreach (var trainTask in trainTasks) { var status = await sqlRTaskStatus.ByTaskId(trainTask.Id); if (status.Length == 0) { continue; } if (status.Last().Status != TaskStatus.Closed) { notClosedTasks.Add(trainTask); } } foreach (var notClosedTask in notClosedTasks) { var taskAtributes = await sqlRTaskAttributes.ByTaskId(notClosedTask.Id); var lastStatus = await sqlRTaskStatus.ByTaskId(notClosedTask.Id); var carriage = await sqlRCarriage.GetById(notClosedTask.CarriageId); var equipmentModel = await sqlREquipmentModel.ById(notClosedTask.EquipmentModelId); var equpment = await sqlREquipment.ById(equipmentModel.EquipmentId); foreach (var taskAtribute in taskAtributes) { var row = new Row { Id = new RowId(notClosedTask.Id, 1), HasItems = false.ToString(), ParentId = null, //Номер Col0 = $"И{notClosedTask.Id}", //Статус Col1 = GetStringTaskStatus(lastStatus.Last().Status), //Тип Col2 = GetStringTaskType(notClosedTask.TaskType), //Вагон Col3 = $"{carriage.Number} - {carriage.Serial}", //Оборудование Col4 = equpment.Name, //Дата Col5 = notClosedTask.CreateDate.ToStringDateTime(), }; result.Rows.Add(row); } } return(result); }
public async Task <IActionResult> GetActPdf([FromBody] int trainId) { await CheckPermission(); if (trainId == 0) { throw new ValidationException($"Необходимо выбрать Номер состава."); } var sqlRAct = new ActCategoriesRepository(); var html = @"<html><head> <style type='text/css'> .task { border-collapse: collapse; border: 1px solid black; } .task td { padding: 5px; border: 1px solid black; } .task th { padding: 5px; border: 1px solid black; font-size: 80%; } .rotate { text-align: center; white-space: nowrap; vertical-align: middle; width: 1.5em; } .rotate div { -webkit-transform: rotate(-90.0deg); margin-left: -10em; margin-right: -10em; } .break { page-break-after: always; } </style></head><body>"; var sqlRTrain = new TrainRepository(_logger); var train = await sqlRTrain.ByIdWithStations(trainId); var sqlRCarriage = new CarriageRepository(_logger); var carriages = await sqlRCarriage.GetByTrain(train); string carriagesString = null; carriages = carriages.OrderBy(e => e.Number).ToArray(); foreach (var carriage in carriages) { if (carriage.Number == 9) { continue; } carriagesString += $"{CreateCarriageNameWithOutTrain(carriage.Number)} "; } carriagesString += $"{CreateCarriageNameWithOutTrain(9)} "; //html += "<p align=\"center\"><font size=\"5\"><b>Акт сдачи - приемки транспорта</b></p>"; html += "<p align=\"center\"><font size=\"4\"><b>Акт сдачи - приемки Транспорта</b></font></p>"; html += "<p align=\"center\"><font size=\"4\"><b> в депо </b> Нахабино</font></p>"; html += "<p><b> N </b>1</p>" + $"<p> Дата {DateTime.Now.ToShortDateString()} Время {DateTime.Now.ToShortTimeString()} Номер эл/ п {train.Name}; Составность {carriages.Length} Причина проведения осмотра ТО-_____ </p>" + $"<p> Нумерация вагонов в подвижном составе {carriagesString} </ p >"; //шапка html += "<table class='task break'><tr><th colspan=\"3\" rowspan=\"2\"></th><th colspan=\"3\">Раздел I</th><th colspan=\"3\">Раздел II</th><th colspan=\"3\">Раздел III</th></tr>"; html += "<tr><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th></tr>"; //1. Санитарное состояние //надо получить число записей и вставить в <th rowspan = 4> var sqlrTask = new TaskRepository(_logger); CultureInfo us = new CultureInfo("en-US"); var currentDateForFuckingSql = DateTime.Now.ToString(@"yyyy-MM-dd", us); //var filter = //$"[{{\"filter\":\"DateFrom\",\"value\":\"{currentDateForFuckingSql}\"}},{{\"filter\":\"DateTo\",\"value\":\"{currentDateForFuckingSql}\"}}]"; var tasks = await sqlrTask.GetAllForPdf(0, Int32.MaxValue, trainId); var contentWithValues = new List <ActCategoriesRepository.EquipmentActsPdf>(); var summaryContentWithValues = new List <ActCategoriesRepository.EquipmentActsPdf>(); //var sqlRAct = new ActCategoriesRepository(); var badR1 = 0; var goodR2 = 0; var badR3 = 0; var paragraphs = new List <string> { "Санитарное состояние", "Электрооборудование", "Кузовное оборудование", "Прочее" }; var count = 1; List <ActCategoriesRepository.EquipmentActsPdf> content; foreach (var paragraph in paragraphs) { content = await sqlRAct.GetAllForPdf(paragraph, count); var rowspanPlus = 2; if (count == 3) { rowspanPlus = 3; } html += $@"<tr><th class='rotate' rowspan='{content.Count + rowspanPlus}'>" + "<div>" + $"{count}. {paragraph}" + $"" + "</div>" + "</th></tr>"; var countInternal = 1; foreach (var item in content) { item.CarriageNumR1 = new List <int>(); item.CarriageNumR2 = new List <int>(); item.CarriageNumR3 = new List <int>(); if (countInternal == 12 && count == 3) { html += "</table><table class='task'>"; html += "<tr><th colspan=\"3\" rowspan=\"2\"></th><th colspan=\"3\">Раздел I</th><th colspan=\"3\">Раздел II</th><th colspan=\"3\">Раздел III</th></tr>"; html += "<tr><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th></tr>"; html += $@"<tr><th class='rotate' rowspan='{content.Count - countInternal + rowspanPlus}'>" + "<div>" + $"{count}. {paragraph}" + $"" + "</div>" + "</th></tr>"; } await TaskFucker(sqlRAct, tasks, item); contentWithValues.Add(item); html += $"<tr><th>{item.Number}</th>" + $"<th>{item.ActName}</th>" + $"<th>{item.GoodR1}</th>" + $"<th>{item.BadR1}</th>" + $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR1)}</th>" + $"<th>{item.GoodR2}</th>" + $"<th>{item.BadR2}</th>" + $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR2)}</th>" + $"<th>{item.GoodR3}</th>" + $"<th>{item.BadR3}</th>" + $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR3)}</th>" + $"</tr>"; countInternal++; } //както надо посчитать колво замечаний в каждом столбце блядь badR1 = 0; goodR2 = 0; badR3 = 0; foreach (var item in contentWithValues) { if (item.BadR1 != null) { badR1 = badR1 + item.BadR1.Value; } if (item.GoodR2 != null) { goodR2 = goodR2 + item.GoodR2.Value; } if (item.BadR3 != null) { badR3 = badR3 + item.BadR3.Value; } } string s1 = null; string s2 = null; string s3 = null; if (badR1 != 0) { s1 = badR1.ToString(); } if (goodR2 != 0) { s2 = goodR2.ToString(); } if (badR3 != 0) { s3 = badR3.ToString(); } html += $"<tr><th colspan=\"2\"><b>Всего замечаний</b></th><th></th><th>{s1}</th><th></th><th>{s2}</th><th></th><th></th><th></th><th>{s3}</th><th></th></tr>"; summaryContentWithValues.AddRange(contentWithValues); contentWithValues.Clear(); count++; if (count == 4) { html += "<tr><th></th><th>4.</th><th><b>Составность не соответствует заявке</b></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr>"; count++; } } //ИТОГО badR1 = 0; goodR2 = 0; badR3 = 0; foreach (var item in summaryContentWithValues) { if (item.BadR1 != null) { badR1 = badR1 + item.BadR1.Value; } if (item.GoodR2 != null) { goodR2 = goodR2 + item.GoodR2.Value; } if (item.BadR3 != null) { badR3 = badR3 + item.BadR3.Value; } } string ss1 = null; string ss2 = null; string ss3 = null; if (badR1 != 0) { ss1 = badR1.ToString(); } if (goodR2 != 0) { ss2 = goodR2.ToString(); } if (badR3 != 0) { ss3 = badR3.ToString(); } html += $"<tr><th></th><th colspan=\"2\"><b>ИТОГО по санитарно - техническому состоянию</b></th><th></th><th>{ss1}</th><th></th><th>{ss2}</th><th></th><th>" + $"</th><th></th><th>{ss3}</th><th></th></tr>"; html += "</table><br /><br />"; //надписи под таблицей var checkBoxHtml = "<input maxlength = \"1\" size = \"1\" type = \"text\">"; var probel = " "; var probel2 = " "; var probel3 = " "; html += $"<p><font size=\"2\">{probel}Эл.поезд эксплуатационным нормам безопасности движения {checkBoxHtml}соответствует {checkBoxHtml}не соответсвует</font></p>"; html += $"<p><font size=\"2\">На основании дейтв. нормативных документов эксплуатации поезда {checkBoxHtml}разрешена{probel3}{checkBoxHtml}запрещена</font></p>"; html += $"<p><font size=\"2\">Поезд к первоочередн. устранению {checkBoxHtml} Повторная проверка проведена: _______________ Время Выхода из депо________</font></p>"; html += $"<p><font size=\"2\">по результатам повторной проверки эксплуатация поезда {checkBoxHtml}разрешена {checkBoxHtml}запрещена <b>Выдан на линию воопреки запрета в</b>________</font></p>"; html += $"<p align=\"right\"><font size=\"2\"><b>Приёмку подвижного состава до постановки на ТО(ТР) произвели</b></font>{probel2}{probel2}</p>"; html += $"<p align=\"center\"><font size=\"2\"><b>Представитель ПАО \"ЦППК\" - приёмщик ООО \"Профлайн\"_________________{probel2}{probel2}/_______________/</b></font></p>"; html += $"<p align=\"center\"><font size=\"2\"><b>Представитель депо <u>{probel2}{probel2}Нахабино{probel2}{probel2}бригадир{probel2}{probel2}{probel2}</u>{probel2}{probel2}/_______________/</b></font></p>"; html += $"<p align=\"right\"><font size=\"2\"><b>Приёмку подвижного состава после проведения ТО(ТР) произвели</b></font>{probel2}{probel2}</p>"; html += $"<p align=\"center\"><font size=\"2\"><b>Представитель ПАО \"ЦППК\" - приёмщик ООО \"Профлайн\"_________________{probel2}{probel2}/_______________/</b></font></p>"; html += $"<p align=\"center\"><font size=\"2\"><b>Представитель депо <u>{probel2}{probel2}Нахабино{probel2}{probel2}бригадир{probel2}{probel2}{probel2}</u>{probel2}{probel2}/_______________/</b></font></p>"; html += "<br /><br /><body></html>"; // var output = _pdfConverter.Convert(new HtmlToPdfDocument { GlobalSettings = { ColorMode = ColorMode.Color, Orientation = Orientation.Portrait, PaperSize = PaperKind.A4, }, Objects = { new ObjectSettings { HtmlContent = html, WebSettings ={ DefaultEncoding = "utf-8" } } } }); // return(File(output, "application/pdf", "1111" + "_" + "2222" + "_" + "3333" + ".pdf")); }
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); }