示例#1
0
        public ScheduleDate ScheduleDatesByScheduleDateId(int scheduleDateId)
        {
            ScheduleDate sd = (from s in repository.ScheduleDates
                               where s.Id == scheduleDateId
                               select s).Single();

            return(sd);
        }
示例#2
0
        public ScheduleDate CurrentScheduleDate()
        {
            ScheduleDate sd = (from s in repository.ScheduleDates
                               where s.StartDate <DateTime.Now && s.EndDate> DateTime.Now
                               select s).SingleOrDefault();

            return(sd);
        }
示例#3
0
        public List <MeetingAssignment> MeetingAssignmentsForSchedule(ScheduleDate scheduleDates, int congregationId)
        {
            Congregation             congo              = CongregationByCongregationId(congregationId);
            List <Assignment>        congoAssignments   = AssignmentsByCongregationId(congo.Id);
            List <Meeting>           meetings           = new List <Meeting>();
            List <MeetingAssignment> meetingAssignments = new List <MeetingAssignment>();
            Meeting meeting;
            string  dayOfWeekMeeting = congo.WeekMeetingDay;
            string  publicMeeting    = congo.PublicMeetingDay;

            foreach (DateTime day in EachDayLoop(scheduleDates.StartDate, scheduleDates.EndDate))
            {
                if (Convert.ToString(day.DayOfWeek) == dayOfWeekMeeting || Convert.ToString(day.DayOfWeek) == publicMeeting)
                {
                    if (Convert.ToString(day.DayOfWeek) == publicMeeting)
                    {
                        meeting = CreateMeeting(2, day.Date, congo.Id);
                    }
                    else
                    {
                        meeting = CreateMeeting(1, day.Date, congo.Id);
                    }
                    meetings.Add(meeting);
                }
            }

            List <UnavailableDate> cancelled = UnavailableDateByCongregationId(congregationId);

            foreach (Meeting m in meetings)
            {
                if (cancelled.Any(p => p.DateUnavailable == m.MeetingDate))
                {
                    continue;
                }
                congoAssignments = congoAssignments.OrderBy(o => o.PositionOnSchedule).ToList();
                foreach (Assignment a in congoAssignments)
                {
                    if (a.AmountPerMeeting == 0)
                    {
                        continue;
                    }
                    List <Member> membersAvailable = MembersAvailable(a.Id, m.MeetingDate);
                    int           counter          = 1;
                    while (counter <= a.AmountPerMeeting)
                    {
                        Member            nextMember = NextMemberToAssign(membersAvailable, m, a);
                        MeetingAssignment ma         = CreateMeetingAssignment(m.Id, nextMember.Id, a.Id, nextMember.CongregationId, scheduleDates.Id);
                        meetingAssignments.Add(ma);
                        counter++;
                    }
                }
            }
            return(meetingAssignments);
        }
示例#4
0
        public ScheduleDate UpdateScheduleDates(int scheduleDateId, DateTime startDate, DateTime endDate, int congregationId, int creatorId)
        {
            ScheduleDate sd = ScheduleDatesByScheduleDateId(scheduleDateId);

            sd.StartDate      = startDate;
            sd.EndDate        = endDate;
            sd.CongregationId = congregationId;
            sd.CreatorId      = creatorId;
            sd.UpdateDate     = DateTime.Now;

            repository.SaveChanges();
            return(sd);
        }
示例#5
0
        public ScheduleDate CreateScheduleDates(DateTime startDate, DateTime endDate, int congregationId, int creatorId)
        {
            ScheduleDate sd = new ScheduleDate();

            sd.StartDate      = startDate;
            sd.EndDate        = endDate;
            sd.CongregationId = congregationId;
            sd.CreatorId      = creatorId;
            sd.CreateDate     = DateTime.Now;

            repository.ScheduleDates.Add(sd);
            repository.SaveChanges();
            return(sd);
        }
示例#6
0
        public void DeleteScheduleMeetingAssignments(ScheduleDate sd)
        {
            ScheduleDate sdate = (from d in repository.ScheduleDates
                                  where d.Id == sd.Id
                                  select d).Single();

            List <MeetingAssignment> ma = (from m in repository.MeetingAssignments
                                           where m.ScheduleDateId == sd.Id
                                           select m).ToList();
            List <Meeting> meetings = (from meet in repository.Meetings
                                       where meet.MeetingDate >= sd.StartDate && meet.MeetingDate <= sd.EndDate
                                       select meet).ToList();
            List <UnavailableDate> undate = (from ud in repository.UnavailableDates
                                             where ud.DateUnavailable >= sdate.StartDate && ud.DateUnavailable <= sdate.EndDate && sd.CongregationId == ud.CongregationId
                                             select ud).ToList();

            repository.ScheduleDates.Remove(sdate);

            foreach (UnavailableDate date in undate)
            {
                repository.UnavailableDates.Remove(date);
            }
            foreach (MeetingAssignment l in ma)
            {
                repository.MeetingAssignments.Remove(l);
            }
            foreach (Meeting moo in meetings)
            {
                repository.Meetings.Remove(moo);
            }
            repository.SaveChanges();

            List <Member> deletedMembers = (from e in repository.Members
                                            where e.IsDeleted == true && e.MeetingAssignments.Count == 0
                                            select e).ToList();

            foreach (Member del in deletedMembers)
            {
                DeleteMemberHard(del.Id);
            }
        }
 private void ScheduleGridBox_CellContentClick(object sender, DataGridViewCellEventArgs e)
 {
     selected = manager.ScheduleDatesByScheduleDateId(Convert.ToInt32(ScheduleGridBox.Rows[e.RowIndex].Cells[0].Value));
     SelectedScheduleLabel.Text = "Schedule selected: " + selected.StartDate.ToShortDateString() + "-" + selected.EndDate.ToShortDateString();
 }
示例#8
0
        public List<MeetingAssignment> MeetingAssignmentsForSchedule(ScheduleDate scheduleDates, int congregationId)
        {
            Congregation congo = CongregationByCongregationId(congregationId);
            List<Assignment> congoAssignments = AssignmentsByCongregationId(congo.Id);
            List<Meeting> meetings = new List<Meeting>();
            List<MeetingAssignment> meetingAssignments = new List<MeetingAssignment>();
            Meeting meeting;
            string dayOfWeekMeeting = congo.WeekMeetingDay;
            string publicMeeting = congo.PublicMeetingDay;
            foreach (DateTime day in EachDayLoop(scheduleDates.StartDate, scheduleDates.EndDate))
            {
                if (Convert.ToString(day.DayOfWeek) == dayOfWeekMeeting || Convert.ToString(day.DayOfWeek) == publicMeeting)
                {
                    if (Convert.ToString(day.DayOfWeek) == publicMeeting)
                    {
                        meeting = CreateMeeting(2, day.Date, congo.Id);
                    }
                    else
                    {
                        meeting = CreateMeeting(1, day.Date, congo.Id);
                    }
                    meetings.Add(meeting);

                }
            }

            List<UnavailableDate> cancelled = UnavailableDateByCongregationId(congregationId);

            foreach (Meeting m in meetings)
            {
                if (cancelled.Any(p => p.DateUnavailable == m.MeetingDate))
                {
                    continue;
                }
                congoAssignments = congoAssignments.OrderBy(o => o.PositionOnSchedule).ToList();
                foreach (Assignment a in congoAssignments)
                {
                    if (a.AmountPerMeeting == 0)
                    {
                        continue;
                    }
                    List<Member> membersAvailable = MembersAvailable(a.Id, m.MeetingDate);
                    int counter = 1;
                    while (counter <= a.AmountPerMeeting)
                    {
                        Member nextMember = NextMemberToAssign(membersAvailable, m, a);
                        MeetingAssignment ma = CreateMeetingAssignment(m.Id, nextMember.Id, a.Id, nextMember.CongregationId, scheduleDates.Id);
                        meetingAssignments.Add(ma);
                        counter++;
                    }

                }

            }
            return meetingAssignments;
        }
示例#9
0
        public void DeleteScheduleMeetingAssignments(ScheduleDate sd)
        {
            ScheduleDate sdate = (from d in repository.ScheduleDates
                                  where d.Id == sd.Id
                                  select d).Single();

            List<MeetingAssignment> ma = (from m in repository.MeetingAssignments
                                          where m.ScheduleDateId == sd.Id
                                          select m).ToList();
            List<Meeting> meetings = (from meet in repository.Meetings
                                      where meet.MeetingDate >= sd.StartDate && meet.MeetingDate <= sd.EndDate
                                      select meet).ToList();
            List<UnavailableDate> undate = (from ud in repository.UnavailableDates
                                            where ud.DateUnavailable >= sdate.StartDate && ud.DateUnavailable <= sdate.EndDate && sd.CongregationId == ud.CongregationId
                                            select ud).ToList();

            repository.ScheduleDates.Remove(sdate);

            foreach(UnavailableDate date in undate)
            {
                repository.UnavailableDates.Remove(date);
            }
            foreach (MeetingAssignment l in ma)
            {
                repository.MeetingAssignments.Remove(l);
            }
            foreach (Meeting moo in meetings)
            {
                repository.Meetings.Remove(moo);
            }
            repository.SaveChanges();

            List<Member> deletedMembers = (from e in repository.Members
                                           where e.IsDeleted == true && e.MeetingAssignments.Count == 0
                                           select e).ToList();
            foreach (Member del in deletedMembers)
            {
                DeleteMemberHard(del.Id);
            }
        }
示例#10
0
        public ScheduleDate CreateScheduleDates(DateTime startDate, DateTime endDate, int congregationId, int creatorId)
        {
            ScheduleDate sd = new ScheduleDate();
            sd.StartDate = startDate;
            sd.EndDate = endDate;
            sd.CongregationId = congregationId;
            sd.CreatorId = creatorId;
            sd.CreateDate = DateTime.Now;

            repository.ScheduleDates.Add(sd);
            repository.SaveChanges();
            return sd;
        }
示例#11
0
        public DataGridView Schedule(DataGridView data, ScheduleDate sd)
        {
            data.Rows.Clear();
            data.Refresh();

            List<MeetingAssignment> ma = new List<MeetingAssignment>();
            if (sd == null)
            {
                return null;
            }
            else if(manager.MeetingAssignmentsForExistingSchedule(sd.Id).Count!=0)
            {
                ma = manager.MeetingAssignmentsForExistingSchedule(sd.Id);
            }
            else
            {
                ma = manager.MeetingAssignmentsForSchedule(sd, sd.CongregationId);
            }

            ma = ma.OrderBy(o => o.Meeting.MeetingDate).ThenBy(y => y.Assignment.PositionOnSchedule).ToList();

            data.ColumnCount = ma[0].Meeting.MeetingAssignments.Count + 2;
            data.RowHeadersVisible = false;
            data.Columns[0].Name = "MeetingId";
            data.Columns[0].Visible = false;
            data.Columns[1].Name = "MeetingDate";
            data.Columns[1].HeaderText = "Meeting Date";
            data.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;

            List<MeetingAssignment> test = ma[0].Meeting.MeetingAssignments.ToList();
            test = test.OrderBy(o => o.Assignment.PositionOnSchedule).ToList();
            int columnCounter = test.Count + 1;
            int assignmentcounter = test.Count - 1;
            while (assignmentcounter >= 0)
            {
                data.Columns[columnCounter].Name = test[assignmentcounter].Assignment.Label;
                data.Columns[columnCounter].HeaderText = data.Columns[columnCounter].Name;
                data.Columns[columnCounter].SortMode = DataGridViewColumnSortMode.NotSortable;
                if(columnCounter == test.Count + 1)
                {
                    data.Columns[columnCounter].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                }
                columnCounter--;
                assignmentcounter--;
            }

            List<Meeting> meetings = (from meet in ma
                                      select meet.Meeting).ToList();

            meetings = meetings.Select(z => z).Distinct().ToList();

            List<UnavailableDate> cancelled = manager.UnavailableDateByCongregationId(sd.CongregationId);
            cancelled = cancelled.Where(z => z.DateUnavailable > sd.StartDate && z.DateUnavailable < sd.EndDate).ToList();
            if(cancelled.Count!=0)
            {
                foreach(UnavailableDate u in cancelled)
                {
                    Meeting nm = new Meeting();
                    nm.MeetingDate = u.DateUnavailable;
                    meetings.Add(nm);
                }
            }

            meetings = meetings.OrderBy(o => o.MeetingDate).ToList();

            int rowCounter = 0;
            foreach (Meeting meet in meetings)
            {
                data.Rows.Add();
                data.Rows[rowCounter].Cells[0].Value = meet.Id;
                data.Rows[rowCounter].Cells[1].Value = meet.MeetingDate.DayOfWeek + " " + meet.MeetingDate.ToString("MMM") + " " + meet.MeetingDate.Day;

                List<MeetingAssignment> cahi = manager.MeetingAssignmentsByMeetingId(meet.Id);
                if(cahi.Count==0)
                {
                    rowCounter++;
                    continue;
                }

                cahi.OrderBy(o => o.Assignment.PositionOnSchedule).ToList();

                int CellCounter = 2;
                foreach (MeetingAssignment am in cahi)
                {
                    data.Rows[rowCounter].Cells[CellCounter].Value = ((am.Member.PreferredName) ?? am.Member.FirstName + " " + am.Member.LastName);
                    CellCounter++;
                }
                rowCounter++;
            }

            return data;
        }