Пример #1
0
        public IActionResult Search(SearchRouteVM searchRouteVM = null)
        {
            if (searchRouteVM.StartTime != null && searchRouteVM.BusStopListStartId != 0 && searchRouteVM.BusStopListEndId != 0)
            {
                int  DayOfWeek = (int)searchRouteVM.StartTime.DayOfWeek;
                bool IsHoliday = false;
                IEnumerable <Holidays> holidays = _unitOfWork.Holidays.GetAll();

                foreach (var item in holidays)
                {
                    if (item.Day == searchRouteVM.StartTime.Day && item.Month == searchRouteVM.StartTime.Month)
                    {
                        IsHoliday = true;
                        break;
                    }
                }

                int Year = searchRouteVM.StartTime.Year;

                int poniedzialek_wielkanocny_dzien, poniedzialek_wielkanocny_miesiac, boze_cialo_dzien, boze_cialo_miesiac,
                    luty       = (((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) ? 29 : 28,
                    dzien_roku = 31 + luty,
                    G          = Year % 19,
                    C          = Year / 100,
                    H          = (C - (C / 4) - ((8 * C + 13) / 25) + 19 * G + 15) % 30,
                    I          = H - (H / 28) * (1 - (29 / (H + 1)) * ((21 - G) / 11)),
                    J          = (Year + (Year / 4) + I + 2 - C + (C / 4)) % 7,
                    L          = I - J,
                    month      = 3 + ((L + 40) / 44),
                    day        = L + 28 - 31 * (month / 4);

                if (day == 31 && month == 3)
                {
                    poniedzialek_wielkanocny_dzien   = 1;
                    poniedzialek_wielkanocny_miesiac = 3;
                }
                else
                {
                    poniedzialek_wielkanocny_dzien   = day + 1;
                    poniedzialek_wielkanocny_miesiac = month - 1;
                }

                if (month == 3)
                {
                    dzien_roku += day;
                }
                else
                {
                    dzien_roku = dzien_roku + 31 + day;
                }

                dzien_roku += 60;

                if (luty == 28 && dzien_roku <= 151)
                {
                    boze_cialo_dzien   = dzien_roku - 120;
                    boze_cialo_miesiac = 4;
                }
                else if (luty == 29 && dzien_roku <= 152)
                {
                    boze_cialo_dzien   = dzien_roku - 121;
                    boze_cialo_miesiac = 4;
                }
                else if (luty == 29)
                {
                    boze_cialo_dzien   = dzien_roku - 152;
                    boze_cialo_miesiac = 5;
                }
                else
                {
                    boze_cialo_dzien   = dzien_roku - 151;
                    boze_cialo_miesiac = 5;
                }

                if (DayOfWeek == 0 ||
                    IsHoliday == true ||
                    (searchRouteVM.StartTime.Day == poniedzialek_wielkanocny_dzien && searchRouteVM.StartTime.Month == poniedzialek_wielkanocny_miesiac + 1) ||
                    (searchRouteVM.StartTime.Day == boze_cialo_dzien && searchRouteVM.StartTime.Month == boze_cialo_miesiac + 1))
                {
                    DayOfWeek = 7;
                }

                searchRouteVM.searchRouteShowRouteVMs = new List <SearchRouteShowRouteVM>();

                IList <ArrivalsDepartures> arrivalsDeparturesStart = (IList <ArrivalsDepartures>)_unitOfWork.ArrivalsDepartures.GetAll(ad => ad.BusStopId == searchRouteVM.BusStopListStartId);
                IList <ArrivalsDepartures> arrivalsDeparturesEnd   = (IList <ArrivalsDepartures>)_unitOfWork.ArrivalsDepartures.GetAll(ad => ad.BusStopId == searchRouteVM.BusStopListEndId);

                foreach (var start in arrivalsDeparturesStart)
                {
                    foreach (var end in arrivalsDeparturesEnd)
                    {
                        Timetable     timetableStart      = _unitOfWork.Timetable.GetFirstOrDefault(t => t.Id == start.TimetableId);
                        Timetable     timetableEnd        = _unitOfWork.Timetable.GetFirstOrDefault(t => t.Id == end.TimetableId);
                        OperatingDays operatingDaysStart  = _unitOfWork.OperatingDays.GetFirstOrDefault(od => od.Id == timetableStart.OperatingDaysId);
                        OperatingDays operatingDaysEnd    = _unitOfWork.OperatingDays.GetFirstOrDefault(od => od.Id == timetableEnd.OperatingDaysId);
                        bool          IsValidOperatingDay = false;

                        if (DayOfWeek == 1 && operatingDaysStart.Monday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 2 && operatingDaysStart.Tuesday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 3 && operatingDaysStart.Wednesday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 4 && operatingDaysStart.Thursday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 5 && operatingDaysStart.Friday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 6 && operatingDaysStart.Saturday == true)
                        {
                            IsValidOperatingDay = true;
                        }
                        if (DayOfWeek == 7 && operatingDaysStart.SundayAndHolidays == true)
                        {
                            IsValidOperatingDay = true;
                        }

                        if (start.TimetableId == end.TimetableId &&
                            start.DepartureTime < end.ArrivalTime &&
                            IsValidOperatingDay == true &&
                            timetableStart.IsActive == true &&
                            timetableEnd.IsActive == true)
                        {
                            DateTime startDateTime       = new DateTime(2000, 1, 1, start.DepartureTime.Value.Hour, start.DepartureTime.Value.Minute, 0);
                            DateTime searchRouteDateTime = new DateTime(2000, 1, 1, searchRouteVM.StartTime.Hour, searchRouteVM.StartTime.Minute, 0);

                            if (startDateTime.CompareTo(searchRouteDateTime) >= 0)
                            {
                                SearchRouteShowRouteVM searchRouteShowRouteVM = new SearchRouteShowRouteVM();
                                searchRouteShowRouteVM.TimetableId = start.TimetableId;
                                Timetable timetable = _unitOfWork.Timetable.GetFirstOrDefault(t => t.Id == start.TimetableId);
                                LineName  lineName  = _unitOfWork.LineName.GetFirstOrDefault(ln => ln.Id == timetable.LineNameId);
                                searchRouteShowRouteVM.LineName         = lineName.Name;
                                searchRouteShowRouteVM.StartBusStopName = _unitOfWork.BusStop.GetFirstOrDefault(bs => bs.Id == searchRouteVM.BusStopListStartId).Name;
                                string departure = start.DepartureTime.Value.Hour + ":";
                                if (start.DepartureTime.Value.Minute < 10)
                                {
                                    departure += "0" + start.DepartureTime.Value.Minute;
                                }
                                else
                                {
                                    departure += start.DepartureTime.Value.Minute;
                                }
                                searchRouteShowRouteVM.DepartureTime  = departure;
                                searchRouteShowRouteVM.EndBusStopName = _unitOfWork.BusStop.GetFirstOrDefault(bs => bs.Id == searchRouteVM.BusStopListEndId).Name;
                                string arrival = end.ArrivalTime.Value.Hour + ":";
                                if (end.ArrivalTime.Value.Minute < 10)
                                {
                                    arrival += "0" + end.ArrivalTime.Value.Minute;
                                }
                                else
                                {
                                    arrival += end.ArrivalTime.Value.Minute;
                                }
                                searchRouteShowRouteVM.ArrivalTime = arrival;

                                searchRouteVM.searchRouteShowRouteVMs.Add(searchRouteShowRouteVM);
                            }
                        }
                    }
                }
            }

            DateTime DateTimeNow = DateTime.Now;

            searchRouteVM = new SearchRouteVM()
            {
                BusStopListStart        = _unitOfWork.BusStop.GetBusStopListDropDown(),
                BusStopListEnd          = _unitOfWork.BusStop.GetBusStopListDropDown(),
                StartTime               = new DateTime(DateTimeNow.Year, DateTimeNow.Month, DateTimeNow.Day, DateTimeNow.Hour, DateTimeNow.Minute, 0),
                searchRouteShowRouteVMs = searchRouteVM.searchRouteShowRouteVMs
            };

            return(View(searchRouteVM));
        }
Пример #2
0
        public IActionResult GetAll()
        {
            IList <ArrivalsDepartures> ArrivalsDepartures = (IList <ArrivalsDepartures>)_unitOfWork.ArrivalsDepartures.GetAll();
            IList <Timetable>          TimetableList      = (IList <Timetable>)_unitOfWork.Timetable.GetAll();
            IList <Timetable>          Timetables         = new List <Timetable>();

            foreach (var item in TimetableList)
            {
                if (ArrivalsDepartures.Any(a => a.TimetableId == item.Id))
                {
                    Timetables.Add(item);
                }
            }

            IList <TimetableIndexDto> TimetableIndexDtos = new List <TimetableIndexDto>();

            foreach (var item in Timetables)
            {
                string             operDays  = "";
                OperatingDays      operDay   = _unitOfWork.OperatingDays.GetFirstOrDefault(od => od.Id == item.OperatingDaysId);
                ArrivalsDepartures Departure = _unitOfWork.ArrivalsDepartures.GetFirstOrDefault(ad => ad.TimetableId == item.Id);

                if (operDay.Monday)
                {
                    operDays += "poniedziałek, ";
                }
                if (operDay.Thursday)
                {
                    operDays += "wtorek, ";
                }
                if (operDay.Wednesday)
                {
                    operDays += "środa, ";
                }
                if (operDay.Thursday)
                {
                    operDays += "czwartek, ";
                }
                if (operDay.Friday)
                {
                    operDays += "piątek, ";
                }
                if (operDay.Saturday)
                {
                    operDays += "sobota, ";
                }
                if (operDay.SundayAndHolidays)
                {
                    operDays += "niedziele/święta, ";
                }

                operDays = operDays.Remove(operDays.Length - 2);

                string departureTime = Departure.DepartureTime.Value.Hour.ToString() + " : ";
                if (Departure.DepartureTime.Value.Minute < 10)
                {
                    departureTime += "0" + Departure.DepartureTime.Value.Minute.ToString();
                }
                else
                {
                    departureTime += Departure.DepartureTime.Value.Minute.ToString();
                }

                TimetableIndexDto timetableIndexDto = new TimetableIndexDto()
                {
                    Id                  = item.Id,
                    LineName            = _unitOfWork.LineName.Get(item.LineNameId).Name,
                    Wehicle             = _unitOfWork.Wehicle.Get(item.WehicleId).Brand + " " + _unitOfWork.Wehicle.Get(item.Wehicle.Id).Model,
                    OperatingDays       = operDays,
                    DepartureTime       = departureTime,
                    PricePerEntireRoute = _unitOfWork.TicketPrice.Get(item.TicketPriceId).PricePerEntireRoute,
                    PricePerSegment     = _unitOfWork.TicketPrice.Get(item.TicketPriceId).PricePerSegment,
                    IsActive            = item.IsActive
                };
                TimetableIndexDtos.Add(timetableIndexDto);
            }

            return(Json(new { data = TimetableIndexDtos }));
        }