| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 | 
							- namespace Comal.Classes
 
- {
 
- }
 
- //public class Step
 
- //{
 
- //	public Guid SectionID { get; set; }
 
- //	public TimeSpan Duration { get; set; }
 
- //	public DateTime EstimatedStartDate { get; set; }
 
- //	public SequenceType Sequence { get; set; }
 
- //	public Step(Guid sectionid, double minutes, SequenceType sequence)
 
- //	{
 
- //		SectionID = sectionid;
 
- //		long ticks = Convert.ToInt64(minutes * 60F * 1000F * 1000F * 1000F / 100F);
 
- //		Duration = new TimeSpan(ticks);
 
- //		Sequence = sequence;
 
- //	}
 
- //	protected Step()
 
- //	{
 
- //	}
 
- //}
 
- //public class Widget
 
- //{
 
- //	public String Name { get; set; }
 
- //	public DateTime DueDate { get; set; }
 
- //	public Step[] Steps { get; private set; }
 
- //	public string JobName { get; set; }
 
- //	public string SetoutName { get; set; }
 
- //	public Guid PacketID { get; set; }
 
- //	public Widget(Guid packetid, String name, String jobname, String setoutname, DateTime duedate, Step[] steps) : base()
 
- //	{
 
- //		PacketID = packetid;
 
- //		Name = name;
 
- //		DueDate = duedate;
 
- //		JobName = jobname;
 
- //		SetoutName = setoutname;
 
- //		Steps = steps;
 
- //	}
 
- //}
 
- //public class Booking
 
- //{
 
- //	public Widget Widget { get; set; }
 
- //	public String Name { get; set; }
 
- //	public DateTime Start { get; set; }
 
- //	public TimeSpan Duration { get; set; }
 
- //	public Boolean Shared { get; set; }
 
- //	public DateTime End
 
- //	{
 
- //		get
 
- //		{
 
- //			return Start.Add(Duration);
 
- //		}
 
- //		set
 
- //		{
 
- //			Duration = value.Subtract(Start);
 
- //		}
 
- //	}
 
- //	public Booking(Widget widget, String name, DateTime start, TimeSpan duration, Boolean shared) : base()
 
- //	{
 
- //		Widget = widget;
 
- //		Start = start;
 
- //		Name = name;
 
- //		Duration = duration;
 
- //		Shared = shared;
 
- //	}
 
- //}
 
- //public class Station
 
- //{
 
- //	public Guid ID { get; set; }
 
- //	public int Sequence { get; set; }
 
- //	public List<Booking> Bookings { get; private set; }
 
- //	public Station(Guid id, int sequence) : base()
 
- //	{
 
- //		ID = id;
 
- //		Sequence = sequence;
 
- //		Bookings = new List<Booking>();
 
- //	}
 
- //	public bool SplitBooking(List<Booking> Bookings, DateTime StartOfBreak, TimeSpan LengthOfBreak)
 
- //	{
 
- //		Booking booking = Bookings.Last();
 
- //		if (booking.Start == StartOfBreak)
 
- //		{
 
- //			booking.Start = booking.Start.Add(LengthOfBreak);
 
- //			return false;
 
- //		}
 
- //		else if ((booking.Start <= StartOfBreak) && (booking.End > StartOfBreak))
 
- //		{
 
- //			TimeSpan balance = booking.Duration.Subtract(StartOfBreak.Subtract(booking.Start));
 
- //			Booking newbooking = new Booking(booking.Widget, booking.Name, StartOfBreak.Add(LengthOfBreak), balance, booking.Shared);
 
- //			Bookings.Add(newbooking);
 
- //			booking.End = StartOfBreak;
 
- //			return true;
 
- //		}
 
- //		return false;
 
- //	}
 
- //	public void SplitBookings(List<Booking> Bookings, TimeSpan StartOfDay, TimeSpan StartOfLunch, int LunchMinutes, TimeSpan EndOfDay)
 
- //	{
 
- //		bool bSplit = true;
 
- //		while (bSplit)
 
- //		{
 
- //			Booking booking = Bookings.Last();
 
- //			bSplit = SplitBooking(Bookings, booking.Start.Date.Add(StartOfLunch), new TimeSpan(0, LunchMinutes, 0));
 
- //			if (!bSplit)
 
- //			{
 
- //				TimeSpan overnight = new TimeSpan(24, 0, 0).Subtract(EndOfDay).Add(StartOfDay);
 
- //				bSplit = SplitBooking(Bookings, booking.Start.Date.Add(EndOfDay), overnight);
 
- //			}
 
- //		}
 
- //	}
 
- //	private List<Booking> CreateBookings(Widget widget, String name, DateTime start, TimeSpan duration, Boolean shared)
 
- //	{
 
- //		List<Booking> Bookings = new List<Booking>()
 
- //		{
 
- //			new Booking(widget, name, start, duration, shared)
 
- //		};
 
- //		SplitBookings(Bookings, new TimeSpan(7, 0, 0), new TimeSpan(12, 0, 0), 30, new TimeSpan(16, 0, 0));
 
- //		return Bookings;
 
- //	}
 
- //	public List<Booking> FindSlot(Widget widget, String name, DateTime notbefore, TimeSpan duration, Boolean shared)
 
- //	{
 
- //		List<Booking> SortedBookings = Bookings.OrderBy(x => x.Start).ToList();
 
- //		DateTime curtime = notbefore;
 
- //		foreach (Booking booking in SortedBookings)
 
- //		{
 
- //			List<Booking> bookings = CreateBookings(widget, name, curtime, duration, shared);
 
- //			if (booking.Start >= bookings.Last().End)
 
- //				return bookings;
 
- //			curtime = booking.Start.Add(booking.Duration);
 
- //			if (curtime < notbefore)
 
- //				curtime = notbefore;
 
- //		}
 
- //		return CreateBookings(widget, name, curtime > notbefore ? curtime : notbefore, duration, shared);
 
- //	}
 
- //}
 
- //public class Section
 
- //{
 
- //	public String Name { get; set; }
 
- //	public Guid ID { get; private set; }
 
- //	public List<Station> Stations { get; private set; }
 
- //	public Section(String name, Guid id, int stations) : base()
 
- //	{
 
- //		Name = name;
 
- //		ID = id;
 
- //		Stations = new List<Station>();
 
- //		for (int i = 0; i < stations; i++)
 
- //		{
 
- //			Stations.Add(new Station(id, i + 1));
 
- //		}
 
- //	}
 
- //	public DateTime AddWidget(Widget Widget, Step step, String name, DateTime notbefore, StringBuilder debug, Boolean findonly, Boolean shared)
 
- //	{
 
- //		//Step step = Widget.Steps.Where(x => x.SectionID.Equals(ID)).FirstOrDefault();
 
- //		//if (step == null)
 
- //		//	return DateTime.MaxValue;
 
- //		Station station = null;
 
- //		DateTime start = DateTime.MaxValue;
 
- //		List<Booking> bookings = null;
 
- //		foreach (Station curstation in Stations)
 
- //		{
 
- //			List<Booking> curbookings = curstation.FindSlot(Widget, name, notbefore, step.Duration, shared);
 
- //			if (curbookings.First().Start < start)
 
- //			{
 
- //				bookings = curbookings;
 
- //				station = curstation;
 
- //				start = curbookings.First().Start;
 
- //			}
 
- //		}
 
- //		if (!findonly)
 
- //		{
 
- //			debug.AppendLine(String.Format("- Allocating to {0} #{1} at from {2} to {3} ({4} blocks)", Name, station.ID, bookings.First().Start, bookings.Last().End, bookings.Count));
 
- //			station.Bookings.AddRange(bookings);
 
- //		}
 
- //		return bookings.Last().End;
 
- //	}
 
- //}
 
- ////public class SectionConfig
 
- ////{
 
- ////	public String Name { get; set; }
 
- ////	public StepType StepType { get; set; }
 
- ////	public int Stations { get; set; }
 
- ////}
 
- //public class CalendarFactory
 
- //{
 
- //	public List<Section> Sections { get; private set; }
 
- //	public List<Widget> Widgets { get; private set; }
 
- //	public CalendarFactory() : base()
 
- //	{
 
- //		Sections = new List<Section>();
 
- //		Widgets = new List<Widget>();
 
- //	}
 
- //	public void ProcessWidgets(DateTime StartDate, StringBuilder debug)
 
- //	{
 
- //		FactorySetup settings = new GlobalConfiguration<FactorySetup>().Load();
 
- //		List<Widget> SortedList = Widgets.OrderBy(o => o.DueDate).ToList();
 
- //		foreach (Widget Widget in SortedList)
 
- //		{
 
- //			debug.AppendLine(String.Format("Processing Widget: {0}", Widget.Name));
 
- //			DateTime maximumstart = StartDate;
 
- //			DateTime currentstart = StartDate;
 
- //			foreach (Step step in Widget.Steps)
 
- //			{
 
- //				// Find the setion that matches the step type
 
- //				// or all sections if its a shared step
 
- //				List<Section> sections = null;
 
- //				FactorySection cfg = settings.Sections.Where(x => x.ID.Equals(step.SectionID)).FirstOrDefault();
 
- //				if (cfg.Shared)
 
- //					sections = Sections.Where(x => x.ID != cfg.ID).ToList();
 
- //				else
 
- //					sections = Sections.Where(x => x.ID.Equals(step.SectionID)).ToList();
 
- //				DateTime bestfinish = DateTime.MaxValue;
 
- //				Section bestsection = null;
 
- //				DateTime curfinish = DateTime.MaxValue;
 
- //				foreach (Section section in sections)
 
- //				{
 
- //					switch (step.Sequence)
 
- //					{
 
- //						case SequenceType.Consolidate:
 
- //							currentstart = maximumstart;
 
- //							break;
 
- //						case SequenceType.None:
 
- //							currentstart = StartDate;
 
- //							break;
 
- //					}
 
- //					curfinish = section.AddWidget(Widget, step, cfg.Name, currentstart, debug, true, cfg.Shared);
 
- //					if (curfinish < bestfinish)
 
- //					{
 
- //						bestfinish = curfinish;
 
- //						bestsection = section;
 
- //					}
 
- //				}
 
- //				if (bestsection != null)
 
- //				{
 
- //					currentstart = bestsection.AddWidget(Widget, step, cfg.Name, currentstart, debug, false, cfg.Shared);
 
- //					if (currentstart > maximumstart)
 
- //						maximumstart = currentstart;
 
- //				}
 
- //			}
 
- //		}
 
- //	}
 
- //}
 
 
  |