示例#1
0
        public Assignment CreateAssignment(string label, string description, int congregationId, int? amountPerMeeting, int? schedulePosition, int creatorId)
        {
            Assignment assignment = new Assignment();
            assignment.Label = label;
            assignment.Description = description;
            assignment.CongregationId = congregationId;
            assignment.AmountPerMeeting = amountPerMeeting;
            assignment.PositionOnSchedule = schedulePosition;
            assignment.CreatorId = creatorId;
            assignment.CreateDate = DateTime.Now;

            repository.Assignments.Add(assignment);
            repository.SaveChanges();

            return assignment;
        }
示例#2
0
        public Assignment UpdateAssignment(Assignment updatedAssignment)
        {
            Assignment ua = AssignmentByAssignmentId(updatedAssignment.Id);
            ua.Label = updatedAssignment.Label;
            ua.Description = updatedAssignment.Description;
            ua.AmountPerMeeting = updatedAssignment.AmountPerMeeting;
            ua.PositionOnSchedule = updatedAssignment.PositionOnSchedule;
            ua.UpdateDate = DateTime.Now;

            repository.SaveChanges();
            return ua;
        }
示例#3
0
        public Member NextMemberToAssign(List<Member> membersAvailable, Meeting currentMeeting, Assignment currentAssignment)
        {
            List<Member> newMembers = (from mem in membersAvailable
                                       where mem.MeetingAssignments.Count == 0
                                       select mem).ToList();

            if (newMembers.Count != 0)
            {
                newMembers = newMembers.OrderBy(z => z.FirstName).ToList();
                return newMembers[0];
            }

            int meetingCountToBeat = new int();
            int meetingCounter = 0;
            Member currentlySelected = new Member();
            MeetingAssignment mLastMeetingAssignment = new MeetingAssignment();
            List<Member> alreadyAssigned = (from l in currentMeeting.MeetingAssignments
                                            select l.Member).ToList();
            List<Meeting> allMeeting = (from v in repository.Meetings
                                        where v.CongregationId == currentMeeting.CongregationId
                                        select v).ToList();
            allMeeting = allMeeting.OrderByDescending(o => o.MeetingDate).ToList();
            int index = allMeeting.IndexOf(currentMeeting);
            List<Member> go = (from goat in allMeeting[index + 1].MeetingAssignments
                               select goat.Member).ToList();

            foreach (Member m in membersAvailable)
            {
                List<MeetingAssignment> selectedMAssignments = (from d in repository.MeetingAssignments
                                                                where d.MemberId == m.Id
                                                                select d).ToList();
                selectedMAssignments = selectedMAssignments.OrderByDescending(o => o.Meeting.MeetingDate).ToList();
                if (alreadyAssigned.Any(p => p.Id == m.Id))//skips if they are already assigned or previous assignment was same assignment.
                {
                    continue;
                }
                if (selectedMAssignments[0].AssignmentId == currentAssignment.Id && m.MemberAssignments.Count > 2)
                {
                    continue;
                }

                foreach (DateTime d in EachDayLoop(selectedMAssignments[0].Meeting.MeetingDate.AddDays(1), currentMeeting.MeetingDate.AddDays(-1)))
                {
                    if (Convert.ToString(d.DayOfWeek) == m.Congregation.PublicMeetingDay || Convert.ToString(d.DayOfWeek) == m.Congregation.WeekMeetingDay)
                    {
                        meetingCounter++;
                    }
                }
                if (currentlySelected.Id == 0)
                {
                    meetingCountToBeat = meetingCounter;
                    currentlySelected = m;
                    mLastMeetingAssignment = selectedMAssignments[0];
                    meetingCounter = 0;
                    continue;
                }
                if (meetingCounter > meetingCountToBeat)
                {
                    meetingCountToBeat = meetingCounter;
                    currentlySelected = m;
                    mLastMeetingAssignment = selectedMAssignments[0];
                    meetingCounter = 0;
                }

                if (meetingCounter == meetingCountToBeat)
                {
                    if (selectedMAssignments[0].Assignment.Label != currentAssignment.Label && mLastMeetingAssignment.Assignment.Label == currentAssignment.Label)
                    {
                        currentlySelected = m;
                        mLastMeetingAssignment = selectedMAssignments[0];
                    }

                }
                meetingCounter = 0;
                continue;

            }
            return currentlySelected;
        }