コード例 #1
0
ファイル: LineLogic.cs プロジェクト: kkrzaczkowski/SWKM
        /// <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;
        }
コード例 #2
0
ファイル: LineLogic.cs プロジェクト: kkrzaczkowski/SWKM
        /// <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;
        }