/// <summary> /// Converts a <see cref="T:HospitalAllocation.Providers.Allocation.Database.Model.TeamAllocation"/> /// to a <see cref="T:HospitalAllocation.Data.Allocation.StaffGroups.Pod"/>. /// </summary> /// <param name="allocation">The allocation to convert.</param> /// <returns>The converted allocation.</returns> public static Pod PodFromModel(TeamAllocation allocation) { var consultant = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.Consultant); var teamLeader = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.TeamLeader); var registrar = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.Registrar); var resident = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.Resident); var podCa = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.PodCa); var caCleaner = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.CaCleaner); var beds = new Dictionary <int, DataPositions.Position>(); foreach (BedPosition bed in allocation.Positions.OfType <BedPosition>()) { beds.Add(bed.Position, PositionFromModel(bed)); } return(new Pod( TeamTypeFromModel(allocation.Type), beds, PositionFromModel(consultant), PositionFromModel(teamLeader), PositionFromModel(registrar), PositionFromModel(resident), PositionFromModel(podCa), PositionFromModel(caCleaner))); }
/// <summary> /// Inserts an allocation into the database by updating the existing allocation if an /// allocation already exists at that time, and creating a new allocation otherwise. /// </summary> /// <param name="context">The context to insert into.</param> /// <param name="time">The time of the allocation in UNIX time seconds.</param> /// <param name="oldAllocations">The allocations at time.</param> /// <param name="allocation">The allocation to insert.</param> private static void InsertAllocation(AllocationContext context, long time, IQueryable <TeamAllocation> oldAllocations, TeamAllocation allocation) { var oldAllocation = oldAllocations.SingleOrDefault(a => a.Type == allocation.Type); if (oldAllocation != null) { oldAllocation.Positions = allocation.Positions; context.Update(oldAllocation); } else { allocation.Time = time; context.TeamAllocations.Add(allocation); } }
public static void Main(string[] args) { try { using (var teamCtx = new TeamContext()) { Person me = new Person() { Firstname = args.Length > 0 ? args[0] : "Chris", Lastname = args.Length > 1 ? args[1] : "White", Age = args.Length > 2 && !String.IsNullOrEmpty(args[2]) ? Convert.ToInt32(args[2]) : 32 }; var personInDb = teamCtx.Person.FirstOrDefault(T => T.Firstname == me.Firstname && T.Lastname == me.Lastname && T.Age == me.Age); var teamName = args.Length > 3 ? args[3] : "Team Ace"; Team ace = new Team() { TeamName = teamName }; var teamInDb = teamCtx.Team.FirstOrDefault(T => T.TeamName == teamName); me = personInDb ?? me; ace = teamInDb ?? ace; TeamAllocation teamAlloc = new TeamAllocation(); teamAlloc.Team = ace; teamAlloc.Person = me; var teamAllocInDb = teamCtx.TeamAllocation.FirstOrDefault(T => T.Team == ace && T.Person == me); // Determin if we need to update or insert if (personInDb != null) { teamCtx.Attach(me); } else { teamCtx.Add(me); } // Determin if we need to update or insert if (teamInDb != null) { teamCtx.Team.Attach(ace); } else { teamCtx.Team.Add(ace); } // Determin if we need to update or insert if (teamAllocInDb != null) { teamCtx.TeamAllocation.Attach(teamAllocInDb); } else { teamCtx.TeamAllocation.Add(teamAlloc); } teamCtx.SaveChanges(); var teams = teamCtx.Team.Include(T => T.TeamAllocation).ThenInclude(T => T.Person).ToList(); foreach (var team in teams) { Console.WriteLine($"In team {team.TeamName}"); foreach (var person in team.TeamAllocation) { Console.WriteLine($"\t\t Id: {person.Person.PersonId}, {person.Person.Firstname} {person.Person.Lastname}, Aged {person.Person.Age}"); } } Console.WriteLine(""); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
/// <summary> /// Converts a <see cref="T:HospitalAllocation.Providers.Allocation.Database.Model.TeamAllocation"/> /// to a <see cref="T:HospitalAllocation.Data.Allocation.StaffGroups.SeniorTeam"/>. /// </summary> /// <param name="allocation">The allocation to convert.</param> /// <returns>The converted allocation.</returns> public static SeniorTeam SeniorTeamFromModel(TeamAllocation allocation) { var accessCoordinator = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.AccessCoordinator); var tech = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.Tech); var mern = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.Mern); var caSupport = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.CaSupport); var wardOnCallConsultant = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.WardOnCallConsultant); var transportRegistrar = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.TransportRegistrar); var donationCoordinator = allocation.Positions .FirstOrDefault(p => p.Type == PositionType.DonationCoordinator); var cnm = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.Cnm)) { cnm.Add(PositionFromModel(pos)); } var cnc = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.Cnc)) { cnc.Add(PositionFromModel(pos)); } var resource = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.Resource)) { resource.Add(PositionFromModel(pos)); } var internalRegistrar = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.InternalRegistrar)) { internalRegistrar.Add(PositionFromModel(pos)); } var externalRegistrar = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.ExternalRegistrar)) { externalRegistrar.Add(PositionFromModel(pos)); } var educator = new List <DataPositions.Position>(); foreach (var pos in allocation.Positions.Where(p => p.Type == PositionType.Educator)) { educator.Add(PositionFromModel(pos)); } return(new SeniorTeam( PositionFromModel(accessCoordinator), PositionFromModel(tech), PositionFromModel(mern), PositionFromModel(caSupport), PositionFromModel(wardOnCallConsultant), PositionFromModel(transportRegistrar), PositionFromModel(donationCoordinator), cnm, cnc, resource, internalRegistrar, externalRegistrar, educator)); }