/// <summary> /// Adds the line. /// </summary> /// <param name="line">The line.</param> /// <returns></returns> public BaseOperationResponse AddLine(EditLineDto request) { var response = new BaseOperationResponse(); try { var unitOfWork = SWKM.Setup.IoC.Resolve<UnitOfWork>(); var existingLine = unitOfWork.Lines.FindBy(u => u.NAME == request.NAME).SingleOrDefault(); if (existingLine != null) { response.Successful = false; response.ErrorMessage = "Linia o takiej nazwie już istnieje."; return response; } var newline = new LINE() { NAME = request.NAME }; unitOfWork.Lines.Add(newline); unitOfWork.Save(); newline = unitOfWork.Lines.FindBy(u => u.NAME == newline.NAME && u.DELETEDDATE == null).SingleOrDefault(); foreach (var station in request.SelectedStationsList) { var newRoute = new ROUTE() { Order = station.Order, DIRECTIONHEADLINE = station.DIRECTIONHEADLINE, LINEID = newline.ID, STATIONID = station.ID, SCHEDULEPERIODID = station.SchedulePeriodId }; unitOfWork.Routes.Add(newRoute); } foreach (var exception in request.SelectedExceptionList) { var newException = new LINEEXCEPTION() { LINEID = newline.ID, EXCEPTIONID = exception.ID }; unitOfWork.LineExceptions.Add(newException); } unitOfWork.Save(); response.Successful = true; } catch (Exception e) { SWKM.Setup.Logger.Instance.Log.Error("Error occurred!", e); response.Successful = false; response.ErrorMessage = "Wystapił nie oczekiwany błąd przy dodawaniu lini."; } return response; }
/// <summary> /// Edits the line. /// </summary> /// <param name="request">The request.</param> /// <returns></returns> public BaseOperationResponse EditLine(EditLineDto request) { var response = new BaseOperationResponse(); try { var unitOfWork = SWKM.Setup.IoC.Resolve<UnitOfWork>(); var existingLine = unitOfWork.Lines.FindBy(u => u.NAME == request.NAME && u.ID != request.ID).SingleOrDefault(); if (existingLine != null) { response.Successful = false; response.ErrorMessage = "Linia o takiej nazwie już istnieje."; return response; } // Sprawdzenie czy dana linia istnieje existingLine = unitOfWork.Lines.FindBy(u => u.ID == request.ID).SingleOrDefault(); if (existingLine == null) { response.Successful = false; response.ErrorMessage = "Nie ma lini o takim identyfikatorze."; return response; } // Aktualizacja podstawowych kolumn existingLine.NAME = request.NAME; // Aktualizacja TRAS // Wybranie wszystkich tras które są powiązane z daną linią var toDelete = unitOfWork.Routes.FindBy(dt => dt.LINEID == request.ID && dt.DELETEDDATE == null).ToList(); // Wybranie tras do usunięcia. // Każda trasę powiązana z linia sprawdza się czy zawiera sie w wybranych trasach // Jeżeli nie do jest dodawana do listy do usunięcia toDelete = toDelete.Where(l => !request.SelectedStationsList.Any(d => d.ID == l.STATIONID)).ToList(); // SOftDelete każdej trasy nie wybranej foreach (var delete in toDelete) { delete.DELETEDDATE = DateTime.Now; } // Wybranie tras które są przypisane do lini var routes = unitOfWork.Routes.FindBy(l => l.LINEID == request.ID).ToList(); // Aktualizacja każdej trasy foreach (var station in request.SelectedStationsList) { var findedRoute = routes.Where(r => r.STATIONID == station.ID && r.LINEID == request.ID && r.DELETEDDATE == null && r.SCHEDULEPERIODID == station.SchedulePeriodId).SingleOrDefault(); if (findedRoute == null) { var newRoute = new ROUTE() { STATIONID = station.ID, LINEID = request.ID, Order = station.Order, DIRECTIONHEADLINE = station.DIRECTIONHEADLINE, SCHEDULEPERIODID = station.SchedulePeriodId }; unitOfWork.Routes.Add(newRoute); } else { findedRoute.Order = station.Order; findedRoute.DIRECTIONHEADLINE = station.DIRECTIONHEADLINE; } } // Aktualizacja WYJĄKÓW // Wybranie wszystkich wyjątków które są powiązane z daną linią var exceptionToDelete = unitOfWork.LineExceptions.FindBy(e => e.LINEID == request.ID).ToList(); // Wybranie wyjątków do usunięcia. exceptionToDelete = exceptionToDelete.Where(e => !request.SelectedExceptionList.Any(s => s.ID == e.EXCEPTIONID)).ToList(); // usunięcie każdego wyjątku nie wybranego foreach (var delete in exceptionToDelete) { unitOfWork.LineExceptions.Delete(delete); } // Wybranie wyjątków które są przypisane do lini var exceptions = unitOfWork.LineExceptions.FindBy(l => l.LINEID == request.ID).ToList(); // Aktualizacja każdego wyjątku foreach (var exception in request.SelectedExceptionList) { var findedException = exceptions.Where(r => r.EXCEPTIONID == exception.ID).SingleOrDefault(); if (findedException == null) { var newException = new LINEEXCEPTION() { EXCEPTIONID = exception.ID, LINEID = request.ID }; unitOfWork.LineExceptions.Add(newException); } } unitOfWork.Save(); response.Successful = true; } catch (Exception e) { SWKM.Setup.Logger.Instance.Log.Error("Error occurred!", e); response.Successful = false; response.ErrorMessage = "Wystapił nie oczekiwany błąd przy edytowaniu lini."; } return response; }