Exemplo n.º 1
0
        static XElement CreateHTML(int jaar, Omrin.AansluitingValidatie aansluiting, Omrin.KalenderObject kalender, string icalFilename)
        {
            var x = (XNamespace)"http://www.w3.org/1999/xhtml";

            return(new XElement(x + "html",
                                new XElement(x + "head",
                                             new XElement(x + "title", $"Afvalkalender {jaar}"),
                                             new XElement(x + "meta", new XAttribute("name", "viewport"), new XAttribute("content", "width=device-width, initial-scale=1")),
                                             new XElement(x + "style",
                                                          ".flex { display:flex; flex-wrap:wrap; }",
                                                          ".flex>div { max-width: 20em; margin-right:5px; }"
                                                          )),
                                new XElement(x + "body",
                                             new XElement(x + "h1", $"Afvalkalender {jaar}"),
                                             new XElement(x + "p", $"{aansluiting.Straat} {aansluiting.Huistnummer}{aansluiting.Toevoeging}, {aansluiting.Postcode} {aansluiting.Woonplaats}"),
                                             new XElement(x + "p",
                                                          "Link naar iCal bestand om toe te voegen in Google/Outlook/iCloud/Android: ",
                                                          new XElement(x + "a", new XAttribute("href", icalFilename), icalFilename)),
                                             new XElement(x + "div", new XAttribute("class", "flex"),
                                                          kalender.Groepen.Select(CreateHTMLCalendar)))));
        }
Exemplo n.º 2
0
        static IEnumerable <string> CreateICS(int jaar, Omrin.AansluitingValidatie aansluiting, Omrin.KalenderObject kalender)
        {
            /* BEGIN:VEVENT
             * DTSTART:20150207T210500Z
             * DTEND:20150207T211000Z
             * DTSTAMP:20150204T133100Z
             * UID:[email protected]
             * CREATED:20150129T204608Z
             * DESCRIPTION:Test event 2 description
             * LOCATION:Zaailand 16\, Leeuwarden
             * SEQUENCE:1
             * SUMMARY:Test event 2
             * END:VEVENT
             */

            var sequence = 0;
            var adres    = $"{aansluiting.Straat} {aansluiting.Huistnummer}{aansluiting.Toevoeging}, {aansluiting.Woonplaats}".iCalendarEscape();
            var utcnow   = $"{DateTime.UtcNow.ToISOString()}Z";

            yield return($"BEGIN:VCALENDAR");

            yield return($"VERSION:2.0");

            yield return($"X-WR-CALNAME:Afvalkalender {jaar}");

            yield return($"X-WR-CALDESC:{adres}");

            yield return($"CALSCALE:GREGORIAN");

            foreach (var groep in kalender.Groepen)
            {
                var datums = groep.Datums ?? Enumerable.Empty <Omrin.KalenderGroepDatum>();

                // XXX: i used to sort events by date, does it really matter?
                foreach (var datum in datums)
                {
                    // XXX: these codes lead to churn ... better to detect times in description field?
                    var time = groep.Afbeelding == "SOR" ? datum.Datum.SetTime(7, 30, 0, 0)
                             : groep.Afbeelding == "BIO" ? datum.Datum.SetTime(7, 30, 0, 0)
                             : groep.Afbeelding == "EGF" ? datum.Datum.SetTime(7, 30, 0, 0)
                             : groep.Afbeelding == "PAP" ? datum.Datum.SetTime(17, 30, 0, 0)
                             : datum.Datum;

                    yield return($"BEGIN:VEVENT");

                    yield return($"SEQUENCE:{++sequence}");

                    yield return($"UID:{aansluiting.AansluitingID}-{jaar}-{sequence}@stomrin.nl");

                    yield return($"DTSTART;TZID=Europe/Amsterdam:{time.ToISOString()}");

                    yield return($"DTEND;TZID=Europe/Amsterdam:{time.AddHours(1).ToISOString()}");

                    yield return($"DTSTAMP:{utcnow}");

                    yield return($"SUMMARY:{groep.Omschrijvging.iCalendarEscape()}");

                    yield return($"DESCRIPTION:{groep.Info.Replace("\r", "").Replace("\n", "").iCalendarEscape()}");

                    yield return($"END:VEVENT");
                }
            }
            yield return($"END:VCALENDAR");
        }