예제 #1
0
        //private static string PartialDayPattern(Appointment appt, RecurrencePattern pattern)
        //{
        //	TimeZoneInfo local = TimeZoneInfo.Local;
        //	string olson = OlsonConverter.TimeZoneInfoToOlsonTimeZone(local);

        //	return DTSTART_TZID_PREFIX + olson + ":" + appt.StartDate.ToString(DateTimeLocalFormat) + "\r\n"
        //		+ DTEND_TZID_PREFIX + olson + ":" + appt.EndDate.ToString(DateTimeLocalFormat) + "\r\n"
        //		+ RRULE + ":" + pattern.ToString() + "\r\n"
        //		+ "BEGIN:VTIMEZONE" + "\r\n"
        //		+ TZID + ":" + olson + "\r\n"
        //		+ "X-LIC-LOCATION:" + olson + "\r\n"
        //		+ "BEGIN:DAYLIGHT\r\n"
        //		+ TZOFFSETFROM + ":" + JoinTimeSpan(local.BaseUtcOffset) + "\r\n"
        //		+ TZOFFSETTO + ":" + JoinTimeSpan(local.BaseUtcOffset.Add(TimeSpan.FromHours(1))) + "\r\n"
        //		+ TZNAME + ":" + local.DaylightName.Acronym() + "\r\n"
        //		+ DTSTART + ":19700308T020000\r\n"
        //		+ RRULE + ":FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\n"
        //		+ "END:DAYLIGHT\r\n"
        //		+ "BEGIN:STANDARD\r\n"
        //		+ TZOFFSETFROM + ":" + JoinTimeSpan(local.BaseUtcOffset.Add(TimeSpan.FromHours(1))) + "\r\n"
        //		+ TZOFFSETTO + ":" + JoinTimeSpan(local.BaseUtcOffset) + "\r\n"
        //		+ TZNAME + ":" + local.StandardName.Acronym() + "\r\n"
        //		+ DTSTART + ":19701101T020000\r\n"
        //		+ RRULE + ":FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\n"
        //		+ "END:STANDARD\r\n"
        //		+ "END:VTIMEZONE";
        //}

        private static string[] PartialDayPattern(Appointment appt, RecurrencePattern pattern)
        {
            TimeZoneInfo local = TimeZoneInfo.Local;
            string       olson = OlsonConverter.TimeZoneInfoToOlsonTimeZone(local);

            return(new string[]
            {
                DTSTART_TZID_PREFIX + olson + ":" + appt.StartDate.ToString(DateTimeLocalFormat),
                DTEND_TZID_PREFIX + olson + ":" + appt.EndDate.ToString(DateTimeLocalFormat),
                RRULE + ":" + pattern.ToString(),
                "BEGIN:VTIMEZONE", TZID + ":" + olson,
                "X-LIC-LOCATION:" + olson,
                "BEGIN:DAYLIGHT",
                TZOFFSETFROM + ":" + JoinTimeSpan(local.BaseUtcOffset),
                TZOFFSETTO + ":" + JoinTimeSpan(local.BaseUtcOffset.Add(TimeSpan.FromHours(1))),
                TZNAME + ":" + local.DaylightName.Acronym(),
                DTSTART + ":19700308T020000",
                RRULE + ":FREQ=YEARLY;BYMONTH=3;BYDAY=2SU",
                "END:DAYLIGHT",
                "BEGIN:STANDARD",
                TZOFFSETFROM + ":" + JoinTimeSpan(local.BaseUtcOffset.Add(TimeSpan.FromHours(1))),
                TZOFFSETTO + ":" + JoinTimeSpan(local.BaseUtcOffset),
                TZNAME + ":" + local.StandardName.Acronym(),
                DTSTART + ":19701101T020000",
                RRULE + ":FREQ=YEARLY;BYMONTH=11;BYDAY=1SU",
                "END:STANDARD",
                "END:VTIMEZONE"
            });
        }
예제 #2
0
        internal Calendar(Template template, TimeManager timeManager)
        {
            _timeManager = timeManager;
            _endTime     = _timeManager.ToUtc(template.End);

            var sb = new StringBuilder();

            sb.AppendLine(template.Description);
            sb.AppendLine();
            sb.Append($"Цена: {template.Price}");
            if (!string.IsNullOrWhiteSpace(template.Hosts))
            {
                sb.AppendLine();
                sb.Append($"Кто ведёт: {template.Hosts}");
            }
            string icsDescription = sb.ToString();

            sb.AppendLine();
            sb.AppendLine();
            sb.Append($"Принять участе: {template.Uri}");
            string googleDetails = sb.ToString();

            var           rule     = new RecurrencePattern(FrequencyType.Weekly);
            CalendarEvent icsEvent = AsIcsEvent(template, icsDescription, rule);

            IcsContent = GetIcsContent(icsEvent);

            GoogleCalendarLink = AsGoogleLink(template, googleDetails, rule.ToString());
        }
예제 #3
0
        //private static string AllDayPattern(Appointment appt, RecurrencePattern pattern)
        //{
        //	return DTSTART_VALUE_DATE + ":" + appt.StartDate.Date.ToString(DateFormat) + "\r\n"
        //		+ DTEND_VALUE_DATE + ":" + appt.EndDate.Date.ToString(DateFormat) + "\r\n"
        //		+ RRULE + ":" + pattern.ToString();
        //}

        private static string[] AllDayPattern(Appointment appt, RecurrencePattern pattern)
        {
            return(new string[]
            {
                DTSTART_VALUE_DATE + ":" + appt.StartDate.Date.ToString(DateFormat),
                DTEND_VALUE_DATE + ":" + appt.EndDate.Date.ToString(DateFormat),
                RRULE + ":" + pattern.ToString()
            });
        }
            public RRuleTextBuilderTestHelper(string rRuleString, string readableString, string culture)
            {
                RRuleString    = rRuleString;
                ReadableString = readableString;
                string rRuleStringC = RRuleTextBuilder.GetRRuleStringCorrection(rRuleString);

                recurrencePattern    = new RecurrencePattern(rRuleStringC);
                RecreatedRRuleString = recurrencePattern.ToString();
                ReadableResult       = recurrencePattern.ToText(new CultureInfo(culture));
            }
예제 #5
0
 public ActionResult Create(GroupInstance groupinstance)
 {
     if (ModelState.IsValid)
     {
         //default recurrence once a week forever
         RecurrencePattern rp = new RecurrencePattern(FrequencyType.Weekly);
         groupinstance.RecurrenceRule = "RRULE:" + rp.ToString();
         db.GroupInstances.Add(groupinstance);
         db.SaveChanges();
         return Content(Boolean.TrueString);
     }
     //TODO: review error handling. This will fail since it is not filtering dropdowns for overlapping events!!!
     ViewBag.GroupId = new SelectList(db.Groups, "GroupId", "Name", groupinstance.GroupId);
     ViewBag.ClassroomId = new SelectList(db.Classrooms, "ClassroomID", "Name", groupinstance.ClassroomId);
     return Content("Please review your form");
 }
예제 #6
0
        public IActionResult CreateRRule([FromBody] RRuleWrapper RRuleWrapper)
        {
            if (RRuleWrapper == null)
            {
                var rRuleResultE = new RRuleResult()
                {
                    ErrorText = "invalid data"
                };
                return(new JsonResult(rRuleResultE));
            }
            ;

            var recurrencePattern = new RecurrencePattern(RRuleWrapper.GetFrequencyType(), RRuleWrapper.Interval);

            switch (recurrencePattern.Frequency)
            {
            case FrequencyType.None:
            case FrequencyType.Secondly:
            case FrequencyType.Minutely:
            case FrequencyType.Hourly:
            case FrequencyType.Daily:
                break;

            case FrequencyType.Weekly:
                recurrencePattern.ByDay = RRuleWrapper.GetByDayList();
                break;

            case FrequencyType.Monthly:
                recurrencePattern.ByDay         = RRuleWrapper.GetByDayList();
                recurrencePattern.ByMonthDay    = RRuleWrapper.ByMonthDay;
                recurrencePattern.BySetPosition = RRuleWrapper.BySetPosition;
                break;

            case FrequencyType.Yearly:
                recurrencePattern.ByDay         = RRuleWrapper.GetByDayList();
                recurrencePattern.ByMonth       = RRuleWrapper.ByMonth;
                recurrencePattern.ByMonthDay    = RRuleWrapper.ByMonthDay;
                recurrencePattern.BySetPosition = RRuleWrapper.BySetPosition;
                break;

            default:
                break;
            }
            if (RRuleWrapper.Count > 0)
            {
                recurrencePattern.Count = RRuleWrapper.Count;
            }
            if (RRuleWrapper.Until.HasValue)
            {
                recurrencePattern.Until = RRuleWrapper.Until.Value;
            }

            //var rRuleResult = new RRuleResult() { RecurrencePatternString = recurrencePattern.ToString(), RecurrencePatternText = recurrencePattern.ToText() };
            var browserLang = Request.Headers["Accept-Language"].ToString().Split(";").FirstOrDefault()?.Split(",").FirstOrDefault();
            var rRuleResult = new RRuleResult()
            {
                RecurrencePatternString = recurrencePattern.ToString(), RecurrencePatternText = recurrencePattern.ToText(new CultureInfo(browserLang))
            };
            var startTime = RRuleWrapper.StartDate != null ? RRuleWrapper.StartDate : DateTime.Now;

            rRuleResult.RecurrencePatternList = RecurringRuleProcessor.GetAppointments(startTime, startTime.AddYears(maxYears), recurrencePattern.ToString()).Take(maxOccurences + 1).ToList();
            if (rRuleResult.RecurrencePatternList.Count > maxOccurences)
            {
                rRuleResult.RecurrencePatternList.RemoveAt(maxOccurences);
                rRuleResult.HintText = $"there are more occurences, only first {maxOccurences} occurences in the next {maxYears} years at most are listed";
            }

            return(new JsonResult(rRuleResult));
        }