public LineModel PostSaveDurations(SaveDurationsModel data)
        {
            LineModel res = null;

            using (var logic = new LineLogic())
            {
                var ln = logic.ReCalcTimeTable(data);
                if (ln != null)
                {
                    res = new LineModel(ln)
                    {
                        Stations = ln.StationsToLines.Select(z => new StationToLineModel(z)).ToList()
                    };
                }
            }
            return(res);
        }
        public List <StationToLineModel> PostSaveGeometry(SaveGeometryModel model)
        {
            var res = new List <StationToLineModel>();

            using (var logic = new LineLogic())
            {
                var line = logic.GetLine(model.Id);
                if (line != null)
                {
                    line.PathGeometry = model.Data;
                    logic.SaveChanges();

                    string         fs = "0:0";
                    StationsToLine st = null;
                    st = line.Direction == 0 ? line.StationsToLines.OrderBy(s => s.Position).Last() : line.StationsToLines.OrderBy(s => s.Position).First();
                    if (line.StationsToLines.Select(l => l.ArrivalDate).Max() > st.ArrivalDate && line.Direction == 0)
                    {
                        st.ArrivalDate = line.StationsToLines.Select(l => l.ArrivalDate).Max();
                    }
                    fs = st.ArrivalDate.Hours + ":" + st.ArrivalDate.Minutes;
                    var data = new SaveDurationsModel
                    {
                        LineId       = model.Id,
                        Durations    = model.Durations,
                        FirstStation = fs
                    };
                    var ln = logic.ReCalcTimeTable(data);
                    if (ln != null)
                    {
                        res = ln.StationsToLines
                              .OrderBy(z => z.Position)
                              .Select(z => new StationToLineModel(z))
                              .ToList();
                    }
                }
            }
            return(res);
        }
Example #3
0
        public Line ReCalcTimeTable(SaveDurationsModel data)
        {
            Line res = null;

            try
            {
                var line = DB.Lines.FirstOrDefault(z => z.Id == data.LineId);
                if (line == null)
                {
                    return(null);
                }
                var stations = DB.StationsToLines.Where(z => z.LineId == data.LineId)
                               .OrderBy(z => z.Position).ToList();
                if (stations.Count == 0)
                {
                    return(null);
                }
                var      loadTime = BusHelper.TimeForLoad;
                TimeSpan fst;
                if (data.FirstStation.Trim() == ":") //autoupdate
                {
                    if (line.Direction == 0)
                    {
                        fst = stations.Last().ArrivalDate;
                    }
                    else
                    {
                        fst = stations.First().ArrivalDate;
                    }
                }
                else
                {
                    var prts = data.FirstStation.Split(':');
                    if (prts.Length != 2)
                    {
                        return(null);
                    }
                    fst = new TimeSpan(int.Parse(prts[0]), int.Parse(prts[1]), 0); // time for first / last station
                }


                var total = 0;
                if (line.Direction == 0) //to Station
                {
                    //Important! Last station will not included to data.Durations because sent duration from prev station
                    stations.Last().ArrivalDate = fst;
                    var pt = fst;
                    for (int i = data.Durations.GetLength(0) - 1; i >= 0; i--)
                    {
                        total += data.Durations[i].Duration + loadTime;
                        var d = new TimeSpan(0, 0, data.Durations[i].Duration + loadTime);
                        pt = pt.Subtract(d);
                        stations.Find(z => z.StationId == data.Durations[i].StationId).ArrivalDate = pt;
                    }
                }
                else //from Station
                {
                    var frst = data.Durations.First();
                    stations.First(z => z.StationId == frst.StationId).ArrivalDate = fst;
                    var pt = fst;
                    for (var i = 0; i < data.Durations.Length; i++)
                    {
                        total += data.Durations[i].Duration + loadTime;
                        var d = new TimeSpan(0, 0, data.Durations[i].Duration + loadTime);
                        pt = pt.Add(d);
                        stations[i + 1].ArrivalDate = pt;
                    }
                }
                line.Duration = new TimeSpan(0, 0, total);
                DB.SaveChanges();
                res = DB.Lines.FirstOrDefault(z => z.Id == data.LineId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(res);
        }