コード例 #1
0
 public ReceptionComposite(DbDataRecord rec)
 {
     Reception = new Reception(rec);
     Shedule   = new Shedule(rec);
     Doctor    = new Doctor(rec);
     Patient   = new Patient(rec);
 }
コード例 #2
0
ファイル: SchoolContext.cs プロジェクト: Dezreng/WebAppSchool
        public static Shedule[] CreateShedules(int count)
        {
            string[] dayOfWeek = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" };
            Random   random    = new Random();

            Shedule[] shedules = new Shedule[count];

            for (int i = 0; i < count; i++)
            {
                TimeSpan timeStart = new TimeSpan(random.Next(8, 20), random.Next(0, 60), 0);
                TimeSpan timeEnd   = timeStart.Add(new TimeSpan(0, 45, 0));

                shedules[i] = new Shedule
                {
                    Id           = i + 1,
                    Date         = GenerateDateTime(),
                    DayOfWeek    = dayOfWeek[random.Next(0, dayOfWeek.Length)],
                    TimeStart    = timeStart,
                    TimeEnd      = timeEnd,
                    TeacherId    = random.Next(1, count),
                    SubjectId    = random.Next(1, count),
                    GroupClassId = random.Next(1, count)
                };
            }

            return(shedules);
        }
コード例 #3
0
        public int AddShedule(Shedule data)
        {
            var res = _context.Shedule.Add(data);

            _context.SaveChanges();
            return(res.Entity.Id);
        }
コード例 #4
0
        public async Task <IActionResult> Create([Bind("Id,Name,ClassPrId,DepartmentId")] Groups groups)
        {
            var names = from g in _context.Groups
                        select g.Name;

            if (names.Contains(groups.Name))
            {
                ModelState.AddModelError("Name", "This name is already exist");
                return(View(groups));
            }
            if (ModelState.IsValid && groups.Name.Length == 3 && !names.Contains(groups.Name))
            {
                _context.Add(groups);
                await _context.SaveChangesAsync();

                for (int i = 1; i < 8; i++)
                {
                    Shedule shedule = new Shedule();
                    shedule.DayId   = i;
                    shedule.GroupId = groups.Id;
                    _context.Shedule.Add(shedule);
                    await _context.SaveChangesAsync();
                }

                return(RedirectToAction("Index"));
                // return RedirectToAction(nameof(Index));
            }

            return(RedirectToAction("Index", new { error = "Не створено" }));
        }
コード例 #5
0
        public void CanConversion()
        {
            var periods = new ComparsionList <Period>
            {
                new Period {
                    Day = 1
                },
                new Period {
                    Day = 2
                },
                new Period {
                    Day = 3
                }
            };

            var shedule = new Shedule {
                Periods = periods
            };

            using (var ctx = new AppContextTest(true))
            {
                ctx.Shedules.Add(shedule);
                ctx.SaveChanges();
            }

            Assert.NotEqual(default, shedule.Id);
コード例 #6
0
 public ReceptionComposite()
 {
     Reception = new Reception();
     Shedule   = new Shedule();
     Doctor    = new Doctor();
     Patient   = new Patient();
 }
コード例 #7
0
ファイル: Buisness.cs プロジェクト: ReLMayar/UWPProject
        /// <summary>
        ///
        /// </summary>
        /// <param name="error">Ошибка.</param>
        /// <param name="days">Список дней с расписанием.</param>
        /// <returns></returns>
        public HttpStatusCode GetUserShedule(out string error, out List <Day> days, out Shedule _shedule)
        {
            error = "";
            Shedule shedule = new Shedule();

            _shedule = null;
            HttpResponseMessage response = null;

            days = null;

            Protector.GetData(ref shedule);
            if (shedule.SheduleId == 0)
            {
                try
                {
                    response = _database.GetShedule(out shedule, shedule != null ? shedule.SheduleId : 0);
                }
                catch
                {
                    error = _errorDisconnect;
                    return(HttpStatusCode.BadGateway);
                }
            }

            try { days = shedule.SheduleGroups.First(q => q.Name == _user.GroupName).Days.Where(w => w.Pairs.Count != 0).ToList(); }
            catch { return(HttpStatusCode.BadGateway); }

            _shedule = shedule;
            Protector.SaveData(shedule);
            return(HttpStatusCode.OK);
        }
コード例 #8
0
        public async Task <IActionResult> Edit(long id, [Bind("Id,DayId,GroupId")] Shedule shedule)
        {
            if (id != shedule.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(shedule);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SheduleExists(shedule.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["DayId"]   = new SelectList(_context.Days, "Id", "Name", shedule.DayId);
            ViewData["GroupId"] = new SelectList(_context.Groups, "Id", "Name", shedule.GroupId);
            return(View(shedule));
        }
コード例 #9
0
        public Shedule[] GetEvent()
        {
            try
            {
                connection.Open();

                command = new SqlCommand(selectcommand, connection);

                SqlDataReader datareader = command.ExecuteReader();

                if (datareader.HasRows)
                {
                    while (datareader.Read())
                    {
                        Shedule shedule = new Shedule
                        {
                            ID         = int.Parse(datareader["ID"].ToString()),
                            Date       = DateTime.Parse(datareader["Date"].ToString()),
                            Decription = (string)datareader["Eventdescription"]
                        };
                        shedulelist.Add(shedule);
                    }
                }
                datareader.Close();
            }

            catch (Exception e) { Console.WriteLine(e.Message.ToString()); }

            finally
            {
                connection.Close();
            }
            return(shedulelist.toList());
        }
コード例 #10
0
        public void UpdateSheduleTest()
        {
            Service1 service = new Service1();
            Shedule  shedule = new Shedule
            {
                Room_ID   = 1,
                Order_ID  = 1,
                Couple_ID = 1,
                DayOfWeek = 1,
                NumDem    = true
            };

            Shedule shedulePrev = new Shedule();

            shedulePrev = service.AddShedule(shedule);

            Shedule shedulePlug = new Shedule();

            shedulePlug        = shedulePrev;
            shedulePlug.NumDem = false;
            service.UpdateShedule(shedulePlug);


            Shedule shedulePost = new Shedule();

            shedulePost = service.FindByIDShedule(shedulePrev.ID_Shedule);

            service.DeleteShedule(shedulePost.ID_Shedule);

            Assert.AreNotEqual(shedulePrev, shedulePost);
        }
コード例 #11
0
 private void AddSheduleButton_Click(object sender, RoutedEventArgs e)
 {
     string[] inputs;
     if ((bool)IsOnline.IsChecked)
     {
         inputs = new string[3]
         {
             NameOfClassTb.Text,
             UrlOnlineClassTb.Text,
             TimeOfClass.Text,
         };
     }
     else
     {
         inputs = new string[2]
         {
             NameOfClassTb.Text,
             TimeOfClass.Text,
         };
     }
     if (SheduleManager.CheckStringsNonEmpty(inputs) &&
         TeachersChooseBox.SelectedItem != null &&
         DateOfClass.SelectedDate.HasValue &&
         DateOfClass.SelectedDate.Value > DateTime.Now &&
         ListViewOfGroups.SelectedItems.Count != 0)
     {
         DateTime?sheduleDatetime = SheduleManager.GetDateTimeByDateAndStringTime(DateOfClass.SelectedDate.Value, TimeOfClass.Text);
         if (sheduleDatetime != null)
         {
             Shedule sh = new Shedule()
             {
                 TimeOfClass = (DateTime)sheduleDatetime,
                 OnlineUrl   = UrlOnlineClassTb.Text,
                 NameOfClass = NameOfClassTb.Text,
                 Groups      = new ObservableCollection <Group>(),
                 Teacher     = (Teacher)TeachersChooseBox.SelectedItem,
                 ClassType   = SheduleManager.LastAddedClassType
             };
             foreach (Group item in ListViewOfGroups.SelectedItems)
             {
                 sh.Groups.Add(item);
             }
             var checkIsAdd = SheduleManager.Shedules.Count;
             SheduleManager.AddShedule(sh);
             for (int i = 0; i < inputs.Length; i++)
             {
                 inputs[i] = string.Empty;
             }
             if (checkIsAdd < SheduleManager.Shedules.Count)
             {
                 MessageBox.Show("Занятие успешно добавлено");
             }
         }
         else
         {
             MessageBox.Show("Время введено неправильно");
         }
     }
 }
コード例 #12
0
 private void resetFormToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ClassId.Clear();
     Std.Clear();
     Div.Clear();
     Shedule.Clear();
     ClassId.Focus();
 }
コード例 #13
0
 public bool Insert(Shedule shedule)
 {
     if (sheduleGatway.CheckShedule(shedule))
     {
         return(false);
     }
     return(sheduleGatway.Insert(shedule) > 0);
 }
コード例 #14
0
 public bool Save(Shedule aShedule)
 {
     if (sheduleGateway.CheckShedule(aShedule))
     {
         return(false);
     }
     return(sheduleGateway.Save(aShedule) > 0);
 }
コード例 #15
0
        static void Main(string[] args)
        {
            Shedule first = new Shedule();

            for (int i = 1; i < 8; i++)
            {
                Console.WriteLine($"{i}. {first[i]}");
            }
            Console.WriteLine(first[8]);
        }
コード例 #16
0
        public ScheduleModel(Shedule db)
        {
            Receptions = new List <ReceptionModel>();

            Id        = db.Id;
            Date      = db.Date;
            StartTime = db.StartTime;
            EndTime   = db.EndTime;
            Doctor    = db.Doctor;
        }
コード例 #17
0
        public IActionResult Create(Shedule shedule)
        {
            if (ModelState.IsValid)
            {
                db.Shedules.Add(shedule);
                db.SaveChanges();
            }

            return(RedirectToAction(nameof(Index)));
        }
コード例 #18
0
        public void TimerDeactivateSchedule(Shedule shedule)
        {
            Intent alarmIntent = new Intent(Forms.Context, typeof(ScheduleReceiver));

            alarmIntent.PutExtra("Id", shedule.Id);
            alarmIntent.PutExtra("Name", shedule.Name);
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(Forms.Context, 0, alarmIntent, PendingIntentFlags.CancelCurrent);
            AlarmManager  alarmManager  = (AlarmManager)Forms.Context.GetSystemService(Context.AlarmService);

            alarmManager.Cancel(pendingIntent);
        }
コード例 #19
0
        public void TimerAddSchedule(Shedule shedule)
        {
            Intent alarmIntent = new Intent(Forms.Context, typeof(ScheduleReceiver));

            alarmIntent.PutExtra("Id", shedule.Id);
            alarmIntent.PutExtra("Name", shedule.Name);

            PendingIntent pendingIntent = PendingIntent.GetBroadcast(Forms.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
            AlarmManager  alarmManager  = (AlarmManager)Forms.Context.GetSystemService(Context.AlarmService);

            alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5 * 1000, pendingIntent);
        }
コード例 #20
0
        public IHttpActionResult AddShedule(SheduleViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Teacher teacher = Data.Teachers.Find(model.TeacherId);

            if (teacher == null)
            {
                return(NotFound());
            }

            var room = Data.Rooms.Find(model.RoomName);

            if (room == null)
            {
                room = new Room(model.RoomName);
                Data.Rooms.Add(room);
                Data.Rooms.SaveChanges();
            }

            var shedule = new Shedule()
            {
                EndDate   = model.EndDate,
                Id        = model.Id,
                StartDate = model.StartDate,
                TeacherId = model.TeacherId,
                Message   = model.Message
            };

            shedule.Room = room;

            if (shedule.StartDate >= shedule.EndDate)
            {
                return(BadRequest("Start date must be before end date"));
            }

            Data.Shedules.Add(shedule);
            Data.Shedules.SaveChanges();
            //   teacher.Shedules.Add(shedule);
            Data.Teachers.SaveChanges();

            var emailsToSend = teacher.SubscribedUsers.Select(u => u.Email).ToList();

            EmailSender.Send(emailsToSend,
                             String.Format("{0}'s schedule has been changed go to <b>{1}</b> to see the new schedule", teacher.FirstName + teacher.LastName, Constants.Url + "/#/teachers/" + teacher.Id),
                             String.Format("{0}'s schedule has been updated", teacher.FirstName + teacher.LastName));

            return(Ok(shedule));
        }
コード例 #21
0
        public bool UpdateShedule(int id, Shedule data)
        {
            var res = _context.Shedule.FirstOrDefault(x => x.Id == id);

            if (res == null)
            {
                return(false);
            }
            res.StaffingTableId = data.StaffingTableId;
            res.title           = data.title;
            _context.SaveChanges();
            return(true);
        }
コード例 #22
0
 public static SheduleModel ToModel(this Shedule shedule)
 {
     return(new SheduleModel
     {
         Id = shedule.SheduleId,
         Day = shedule.Day,
         StartAM = shedule.StartAM,
         EndAM = shedule.EndAM,
         StartPM = shedule.StartPM,
         EndPM = shedule.EndPM,
         InformationId = shedule.InformationId
     });
 }
コード例 #23
0
        //Сформировать объект с полей для ввода и отправить его в БД

        private void AddValueToSheduleTable(object parameter)
        {
            if (!Validation.GetHasError(textBoxCountPerson))
            {
                var existItemInTable = SheduleSource.Where(sh => sh.position.PositionName == SelectedPositionItem &&
                                                           sh.departament.DepartamentName == SelectedDepartItem &&
                                                           sh.actionStartDate == SelectedDateItem.dateParam).FirstOrDefault();

                if (existItemInTable == null)
                {
                    //Получаем список отделов
                    var getDeparts = contract.GetListDepartments()
                                     .Where(n => n.DepartamentName == SelectedDepartItem).FirstOrDefault();

                    //Получаем список должностей
                    var getPositions = contract.GetListPositions()
                                       .Where(n => n.PositionName == SelectedPositionItem).FirstOrDefault();


                    var propertiesToInsert = new Shedule
                    {
                        SheduleId       = 1,
                        departament     = getDeparts,
                        position        = getPositions,
                        actionStartDate = SelectedDateItem.dateParam,
                        countPerson     = PeopleCount
                    };

                    //Добавляем в коллекцию со стороны viewmodel -> view

                    SheduleSource.Add(propertiesToInsert);

                    //Отправляем данные в БД
                    contract.SetInsertValue(propertiesToInsert);


                    //Сбрасываем настройки по умолчанию

                    SelectedPositionItem = PositionSource[0];
                    SelectedDepartItem   = DepartamentSource[0];

                    MessageBox.Show("Данные успешно внесены.",
                                    "Информация", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                else
                {
                    MessageBox.Show("Ошибка! Текуущая запись уже существует.",
                                    "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
        }
コード例 #24
0
        public async Task <IActionResult> Create(long?groupId, [Bind("Id,DayId")] Shedule shedule)
        {
            shedule.GroupId = groupId;
            if (ModelState.IsValid)
            {
                _context.Add(shedule);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index", new { id = groupId, name = _context.Groups.Where(g => g.Id == groupId).FirstOrDefault().Name }));
                //  return RedirectToAction(nameof(Index));
            }
            ViewData["DayId"] = new SelectList(_context.Days, "Id", "Name", shedule.DayId);
            return(RedirectToAction("Index", new { id = groupId, name = _context.Groups.Where(g => g.Id == groupId).FirstOrDefault().Name }));
        }
コード例 #25
0
        public ActionResult Delete(int?id)
        {
            try
            {
                SchoolContext db = new SchoolContext("DefaultConnection");

                if (id == null)
                {
                    return(HttpNotFound());
                }
                ModelAddObject model = GetMainLinq(id);

                if (model == null)
                {
                    return(HttpNotFound());
                }

                Shedule shedule = db.Shedules.FirstOrDefault(s => s.SheduleId == model.SheduleId);

                db.Shedules.Remove(shedule);

                db.SaveChanges();

                Student student = db.Students.FirstOrDefault(s => s.Id == model.Id);

                db.Students.Remove(student);

                db.SaveChanges();

                //Teacher teacher = db.Teachers.FirstOrDefault(t => t.Id == model.TeacherId);

                //db.Teachers.Remove(teacher);

                //db.SaveChanges();

                Class class1 = db.Classes.FirstOrDefault(t => t.ClassId == model.ClassId);

                db.Classes.Remove(class1);

                db.SaveChanges();

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(HttpNotFound());
            }
        }
コード例 #26
0
        public ActionResult Reserve(int table, DateTime date, string clientName)
        {
            Shedule shedule = new Shedule();

            shedule.ClientName = clientName;
            shedule.TableId = table;
            shedule.Date = date.Date;
            shedule.Accepted = false;

            db.Shedules.Add(shedule);
            db.SaveChanges();

            ViewBag.Date = date.ToUniversalTime();

            return View(db.Tables);
        }
コード例 #27
0
        public bool CheckShedule(Shedule shedule)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            string        query      = "select * from shedule where date='" + shedule.Date + "' and shift= '" + shedule.Shift + "' ";
            SqlCommand    command    = new SqlCommand(query, connection);

            connection.Open();
            SqlDataReader reader = command.ExecuteReader();

            if (reader.HasRows)
            {
                connection.Close();
                return(true);
            }
            connection.Close();
            return(false);
        }
コード例 #28
0
        private static Collection <Shedule> Read1(SqlDataReader reader)
        {
            Collection <Shedule> times = new Collection <Shedule>();

            while (reader.Read())
            {
                int     i    = -1;
                Shedule time = new Shedule();
                time.bus        = reader.GetInt32(++i);
                time.busto      = reader.GetString(++i);
                time.time       = reader.GetDateTime(++i);
                time.delay      = reader.GetInt32(++i);
                time.last_known = reader.GetString(++i);
                times.Add(time);
            }
            return(times);
        }
コード例 #29
0
        public int Insert(Shedule shedule)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            string        query      = "insert into shedule (date,shift,bookedBy,address,vid) values (@date,@shift,@bookedBy,@address,@vid)";
            SqlCommand    command    = new SqlCommand(query, connection);

            command.Parameters.Add("@date", shedule.Date);
            command.Parameters.Add("@shift", shedule.Shift);
            command.Parameters.Add("@bookedBy", shedule.BookedBy);
            command.Parameters.Add("@address", shedule.Address);
            command.Parameters.Add("@vid", shedule.Vid);

            connection.Open();
            int rowAffected = command.ExecuteNonQuery();

            connection.Close();
            return(rowAffected);
        }
コード例 #30
0
        public ActionResult addsc(Shedule s)
        {
            ScheduleDal dal = new ScheduleDal();

            s.shid = Session["shid"].ToString(); //Session["shid"].ToString();

            if (ModelState.IsValid)
            {
                dal.schedules.Add(s);
                dal.SaveChanges();

                return(View("Homepage"));
            }
            else
            {
                return(View("addschule", s));
            }
        }
コード例 #31
0
        public DateTime ThirdWorkingDay(Shedule shed,
                                                DateTime beg,
                                                WorkingCalendar cal)
        {
            int i;
            switch (shed.SpecificDayType)
            {
                case RecurrenceSpecificDayType.anyDay:
                    if (shed.SpecificDayNumber < RecurrenceSpecificDayNumber.nextToLast)
                        beg = beg.AddDays((double)shed.SpecificDayNumber);
                    else
                    {
                        beg = new DateTime(beg.Year,
                                           beg.Month,
                                           1).AddMonths(1)
                                             .AddDays(-1);
                        if (shed.SpecificDayNumber == RecurrenceSpecificDayNumber.nextToLast)
                            beg = beg.AddDays(-1);
                    }
                    break;

                case RecurrenceSpecificDayType.weekDay:
                    if (shed.SpecificDayNumber < RecurrenceSpecificDayNumber.nextToLast)
                    {
                        var shift = (int)shed.SpecificDayNumber;
                        for (i = 0; i <= shift; i++)
                            if (!cal.IsWorkingDay(beg.AddDays(i)))
                                shift++;
                        beg = beg.AddDays(shift);
                    }
                    else
                    {
                        beg = new DateTime(beg.Year,
                                           beg.Month,
                                           1).AddMonths(1);
                        int shift = shed.SpecificDayNumber == RecurrenceSpecificDayNumber.last
                                            ? -1
                                            : -2;
                        for (i = -1; i >= shift; i--)
                            if (!cal.IsWorkingDay(beg.AddDays(i)))
                                shift--;
                        beg = beg.AddDays(shift);
                    }
                    break;

                case RecurrenceSpecificDayType.weekendDay:
                    if (shed.SpecificDayNumber < RecurrenceSpecificDayNumber.nextToLast)
                    {
                        var shift = (int)shed.SpecificDayNumber;
                        for (i = 0; i <= shift; i++)
                        {
                            if (cal.IsWorkingDay(beg.AddDays(i)))
                                shift++;
                        }
                        beg = beg.AddDays(shift);
                    }
                    else
                    {
                        beg = new DateTime(beg.Year,
                                           beg.Month,
                                           1).AddMonths(1);
                        int shift = shed.SpecificDayNumber == RecurrenceSpecificDayNumber.last
                                            ? -1
                                            : -2;
                        for (i = -1; i >= shift; i--)
                            if (cal.IsWorkingDay(beg.AddDays(i)))
                                shift--;
                        beg = beg.AddDays(shift);
                    }
                    break;

                default:

                    if (shed.SpecificDayNumber < RecurrenceSpecificDayNumber.nextToLast)
                    {
                        beg = beg.AddDays(shed.SpecificDayType - RecurrenceSpecificDayType.monday - ((int)beg.DayOfWeek + 6) % 7);
                        beg = beg.AddDays(7 * (double)shed.SpecificDayNumber);
                    }
                    else
                    {
                        beg = new DateTime(beg.Year,
                                           beg.Month,
                                           1).AddMonths(1);
                        beg = beg.AddDays(shed.SpecificDayType - RecurrenceSpecificDayType.monday - ((int)beg.DayOfWeek + 6) % 7 - 7);
                        if (shed.SpecificDayNumber == RecurrenceSpecificDayNumber.nextToLast)
                            beg = beg.AddDays(-7);
                    }
                    break;
            }
            return beg;
        }
コード例 #32
0
        public DateTime? RecountShedule(Shedule shed)
        {
            //нечего пересчитывать - еще то что должно не случилось
            if (shed.NextEventTime != null && shed.NextEventTime.Value > DateTime.Now)
                return shed.NextEventTime;

            int i;
            DateTime beg;
            switch (shed.Type)
            {
                #region Single

                case SheduleTypeDictionary.Single:
                    return shed.EventTime < DateTime.Now
                                   ? (shed.NextEventTime = null)
                                   : (shed.NextEventTime = shed.EventTime);

                #endregion Single

                #region Daily

                case SheduleTypeDictionary.Daily:
                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && shed.NextEventTime != null && shed.NextEventTime > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft <= 0))
                        return null;

                    //первый раз
                    if (shed.NextEventTime == null)
                    {
                        beg = shed.BeginDateTime;
                        i = 0;
                    }
                    //не первый
                    else
                    {
                        beg = shed.NextEventTime.Value;
                        i = 1;
                    }

                    if (shed.Each == 0)
                    {
                        WorkingCalendar cal = GetCommonCalendar();
                        for (; !cal.IsWorkingDay(beg.AddDays(i)); i++)
                            ;
                    }
                    else
                        i = shed.Each;

                    shed.NextEventTime = beg.AddDays(i)
                                            .Date;
                    shed.NextEventTime = shed.NextEventTime.Value.AddTicks(shed.EventTime.TimeOfDay.Ticks);
                    shed.CountLeft--;

                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && shed.NextEventTime.Value > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft < 0))
                        return null;
                    break;

                #endregion Daily

                #region Weekly

                case SheduleTypeDictionary.Weekly:
                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && DateTime.Now > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft <= 0) || shed.Days == 0)
                        return null;

                    //первый раз
                    if (shed.NextEventTime == null)
                    {
                        i = 0;
                        beg = shed.BeginDateTime;
                    }
                    //не первый
                    else
                    {
                        i = 1;
                        beg = shed.NextEventTime.Value;
                    }

                    //осталось дней до конца недели
                    int daysToSunday = 7 - ((int)beg.DayOfWeek + 6) % 7;
                    for (;
                            (i < daysToSunday &&
                             ((shed.Days &
                               (FlaggedWeekDays)(1 << ((int)beg.AddDays(i)
                                                                 .DayOfWeek + 6) % 7)) == 0));
                            i++)
                        ;
                    //на этой неделе нет подходящего дня
                    if (i == daysToSunday)
                    {
                        beg = beg.AddDays(7 * (shed.Each - 1) + daysToSunday);
                        i = 0;
                        //осталось дней до конца недели
                        daysToSunday = 7 - ((int)beg.DayOfWeek + 6) % 7;
                        for (;
                                (i < daysToSunday &&
                                 ((shed.Days &
                                   (FlaggedWeekDays)(1 << ((int)beg.AddDays(i)
                                                                     .DayOfWeek + 6) % 7)) == 0));
                                i++)
                            ;

                        //и на этой неделе нет подходящего дня, а это уже косяк
                        if (i == daysToSunday)
                            throw new Exception("не нашел подходящего дня для выполнения расписания");
                    }
                    shed.NextEventTime = beg.AddDays(i)
                                            .Date;
                    shed.NextEventTime = shed.NextEventTime.Value.AddTicks(shed.EventTime.TimeOfDay.Ticks);
                    shed.CountLeft--;

                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && shed.NextEventTime.Value > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft < 0))
                        return null;

                    break;

                #endregion Weekly

                #region Monthly

                case SheduleTypeDictionary.Monthly:
                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && DateTime.Now > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft <= 0))
                        return null;

                    //число месяца
                    if (shed.DayNumber > 0)
                    {
                        //первый раз
                        if (shed.NextEventTime == null)
                        {
                            //перекидывать на последний день если выходим за границы
                            try
                            {
                                beg = new DateTime(shed.BeginDateTime.Year,
                                                   shed.BeginDateTime.Month,
                                                   shed.DayNumber);
                            }
                            catch (ArgumentOutOfRangeException)
                            {
                                beg = new DateTime(shed.BeginDateTime.Year,
                                                   shed.BeginDateTime.Month,
                                                   1).AddMonths(1)
                                                     .AddDays(-1);
                            }
                            if (beg < shed.BeginDateTime)
                                try
                                {
                                    beg = new DateTime(shed.BeginDateTime.Year,
                                                       shed.BeginDateTime.Month,
                                                       shed.DayNumber).AddMonths(shed.Each);
                                }
                                catch (ArgumentOutOfRangeException)
                                {
                                    beg = new DateTime(shed.BeginDateTime.Year,
                                                       shed.BeginDateTime.Month,
                                                       1).AddMonths(shed.Each + 1)
                                                         .AddDays(-1);
                                }
                        }
                        //не первый
                        else
                        {
                            beg = new DateTime(shed.NextEventTime.Value.Year,
                                               shed.NextEventTime.Value.Month,
                                               shed.DayNumber);
                            if (beg < shed.NextEventTime.Value)
                                beg = new DateTime(shed.NextEventTime.Value.Year,
                                                   shed.NextEventTime.Value.Month,
                                                   shed.DayNumber).AddMonths(shed.Each);
                        }
                    }
                    //специзврат с "третьим рабочим днем"
                    else
                    {
                        WorkingCalendar cal = GetCommonCalendar();
                        //первый раз
                        if (shed.NextEventTime == null)
                        {
                            beg = ThirdWorkingDay(shed,
                                                  new DateTime(shed.BeginDateTime.Year,
                                                               shed.BeginDateTime.Month,
                                                               1),
                                                  cal);
                            if (beg < shed.BeginDateTime)
                                beg = ThirdWorkingDay(shed,
                                                      new DateTime(shed.BeginDateTime.Year,
                                                                   shed.BeginDateTime.Month,
                                                                   1).AddMonths(shed.Each),
                                                      cal);
                        }
                        //не первый
                        else
                        {
                            beg = ThirdWorkingDay(shed,
                                                  new DateTime(shed.NextEventTime.Value.Year,
                                                               shed.NextEventTime.Value.Month,
                                                               1),
                                                  cal);
                            if (beg < shed.NextEventTime.Value)
                                beg = ThirdWorkingDay(shed,
                                                      new DateTime(shed.NextEventTime.Value.Year,
                                                                   shed.NextEventTime.Value.Month,
                                                                   1).AddMonths(shed.Each),
                                                      cal);
                        }
                    }
                    shed.NextEventTime = beg;
                    shed.NextEventTime = shed.NextEventTime.Value.AddTicks(shed.EventTime.TimeOfDay.Ticks);
                    shed.CountLeft--;

                    //вышли за границы выполнения
                    if ((shed.EndDateTime != null && shed.NextEventTime.Value > shed.EndDateTime) ||
                        (shed.CountNumber > 0 && shed.CountLeft < 0))
                        return null;

                    break;

                #endregion Monthly
            }

            return shed.NextEventTime;
        }
コード例 #33
0
 public Guid SaveShedule(Shedule shedule)
 {
     return Uow.Save<Shedule, IRepository<Shedule>>(shedule);
 }