예제 #1
0
        /// <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)));
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        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());
            }
        }
예제 #4
0
        /// <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));
        }