예제 #1
0
        private static XmlDocument GenerateBatchUpdateXML(EventEVM ev)
        {
            var s = DateTime.Now.FromUnixTimestamp(ev.StartDateTimeStamp);
            var e = DateTime.Now.FromUnixTimestamp(ev.EndDateTimeStamp);

            var doc = new XDocument(
                new XElement("Batch",
                             new XAttribute("OnError", "Continue"),
                             new XAttribute("ListVersion", "1"),
                             new XAttribute("ViewName", "Vacations ITA"),
                             new XElement("Method",
                                          new XAttribute("ID", "1"),
                                          new XAttribute("Cmd", "Update"),
                                          new XElement("Field", new XAttribute("Name", "ID"), ev.SharePointId),
                                          new XElement("Field", new XAttribute("Name", "Title"), ev.Description),
                                          new XElement("Field", new XAttribute("Name", "EventDate"), String.Format("{0:yyyy'-'MM'-'dd HH':'mm':'ss}", s)),
                                          new XElement("Field", new XAttribute("Name", "EndDate"), String.Format("{0:yyyy'-'MM'-'dd HH':'mm':'ss}", e)),
                                          new XElement("Field", new XAttribute("Name", "fAllDayEvent"), ev.IsAllDay ? 0 : 1),
                                          new XElement("Field", new XAttribute("Name", "EventType"), ev.Type - 1))));

            XmlDocument d = new XmlDocument();

            d.LoadXml(doc.ToString());
            return(d);
        }
예제 #2
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            ImageSource result = null;
            EventEVM    ev     = (EventEVM)value;

            switch (ev.EType)
            {
            case EEventType.Vacations:
            case EEventType.OldVacations:

                if (ev.EStatus == EEventStatus.Pending)
                {
                    result = new BitmapImage(new Uri(@"pack://*****:*****@"pack://application:,,,/Great2;component/Images/16/sign-check.png"));
                }
                if (ev.EStatus == EEventStatus.Rejected)
                {
                    result = new BitmapImage(new Uri(@"pack://application:,,,/Great2;component/Images/16/sign-ban.png"));
                }

                break;

            default:

                break;
            }

            return(result);
        }
예제 #3
0
        protected void NotifyEventDeleted(EventEVM e)
        {
            List <DayEVM> DaysToClear = new List <DayEVM>();
            List <DayEVM> DaysInEvent = new List <DayEVM>();

            e.AddOrUpdateEventRelations(out DaysToClear, out DaysInEvent);
            Messenger.Default.Send(new DeletedItemMessage <EventEVM>(this, e));
            DaysToClear.ForEach(x => { Messenger.Default.Send(new ItemChangedMessage <DayEVM>(this, x)); });
        }
예제 #4
0
        private static XmlDocument GenerateBatchDeletetXML(EventEVM ev)
        {
            var doc = new XDocument(
                new XElement("Batch",
                             new XAttribute("OnError", "Continue"),
                             new XElement("Method",
                                          new XAttribute("ID", "1"),
                                          new XAttribute("Cmd", "Delete"),
                                          new XElement("Field", new XAttribute("Name", "ID"), ev.SharePointId))));

            XmlDocument d = new XmlDocument();

            d.LoadXml(doc.ToString());
            return(d);
        }
예제 #5
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string   result = string.Empty;
            EventEVM ev     = (EventEVM)value;

            switch (ev?.EType)
            {
            case EEventType.Vacations:
            case EEventType.OldVacations:

                if (ev.EStatus == EEventStatus.Pending)
                {
                    result = "Vacations Pending";
                }
                if (ev.EStatus == EEventStatus.Accepted)
                {
                    result = "Vacations Accepted";
                }
                if (ev.EStatus == EEventStatus.Rejected)
                {
                    result = "Vacations Rejected";
                }

                break;

            default:
                if (ev?.EType == EEventType.BusinessTrip)
                {
                    result = "Business Trip";
                }
                if (ev?.EType == EEventType.CustomerVisit)
                {
                    result = "Customer Visit";
                }
                if (ev?.EType == EEventType.Education)
                {
                    result = "Education";
                }
                if (ev?.EType == EEventType.Other)
                {
                    result = "Other";
                }
                break;
            }

            return(result);
        }
예제 #6
0
 public EventChangedEventArgs(EventEVM ev)
 {
     Ev = ev;
 }
예제 #7
0
 protected void NotifyEventImported(EventEVM e)
 {
     Messenger.Default.Send(new NewItemMessage <EventEVM>(this, e));
 }
예제 #8
0
 protected void NotifyEventChanged(EventEVM e)
 {
     Messenger.Default.Send(new ItemChangedMessage <EventEVM>(this, e));
 }
예제 #9
0
        private void UpdaterThread()
        {
            bool           exit    = false;
            XmlDocument    xdoc    = new XmlDocument();
            HttpWebRequest request = null;

            while (!exit)
            {
                try
                {
                    using (DBArchive db = new DBArchive())
                    {
                        // try to get user Id
                        if (sharepointUserId == 0)
                        {
                            request             = (HttpWebRequest)WebRequest.Create("https://intranet.elettric80.it/_api/web/currentuser");
                            request.Credentials = new NetworkCredential(UserSettings.Email.Username, UserSettings.Email.EmailPassword);
                            request.Method      = "GET";

                            var webResponse = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
                            xdoc.LoadXml(webResponse);
                            sharepointUserId = Convert.ToInt32(xdoc.GetElementsByTagName("content")[0].FirstChild.FirstChild.LastChild.Value.ToString());
                        }

                        //take in account only if current user id is retrieved
                        if (sharepointUserId > 0)
                        {
                            // try to get all submitted events
                            string req = string.Format("https://intranet.elettric80.it/_api/web/Lists/GetByTitle('Vacations ITA')/Items?$filter=Author/Id eq {0}", sharepointUserId);

                            request             = (HttpWebRequest)WebRequest.Create(req);
                            request.Credentials = new NetworkCredential(UserSettings.Email.Username, UserSettings.Email.EmailPassword);
                            request.Method      = "GET";

                            var webResponse = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
                            xdoc.LoadXml(webResponse);

                            foreach (XmlElement el in xdoc.GetElementsByTagName("entry"))
                            {
                                Int64 shpid  = Convert.ToInt64(el.GetElementsByTagName("content")[0]?.FirstChild["d:Id"].InnerText);
                                int   status = Convert.ToInt32(el.GetElementsByTagName("content")[0]?.FirstChild["d:OData__ModerationStatus"].InnerText);

                                var existing = db.Events.SingleOrDefault(x => x.SharepointId == shpid);

                                if (shpid == 0)
                                {
                                    continue;
                                }
                                if (existing == null)
                                {
                                    //manually added to calendar. Import it!
                                    EventEVM tmp = new EventEVM();
                                    tmp.IsSent       = true; // the event is on calendar. Not necessary to send it
                                    tmp.SharePointId = shpid;
                                    tmp.Title        = el.GetElementsByTagName("content")[0]?.FirstChild["d:Title"].InnerText.Trim('*');
                                    tmp.Location     = el.GetElementsByTagName("content")[0]?.FirstChild["d:Location"].InnerText;
                                    tmp.StartDate    = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EventDate"].InnerText);
                                    tmp.EndDate      = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EndDate"].InnerText);
                                    tmp.Description  = el.GetElementsByTagName("content")[0]?.FirstChild["d:Description"].InnerText;
                                    tmp.Status       = status;
                                    tmp.IsAllDay     = Convert.ToBoolean(el.GetElementsByTagName("content")[0]?.FirstChild["d:fAllDayEvent"].InnerText);
                                    tmp.SendDateTime = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:Created"].InnerText);

                                    //FIx 2:00 am on sharepoint calendar that broke timestamp relation!
                                    if (tmp.IsAllDay)
                                    {
                                        tmp.StartDate = new DateTime(tmp.StartDate.Year, tmp.StartDate.Month, tmp.StartDate.Day, 0, 0, 0);
                                        tmp.EndDate   = new DateTime(tmp.EndDate.Year, tmp.EndDate.Month, tmp.EndDate.Day, 0, 0, 0);
                                    }

                                    if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Vacations")
                                    {
                                        tmp.EType = EEventType.Vacations;
                                    }
                                    else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Customer Visit")
                                    {
                                        tmp.EType = EEventType.CustomerVisit;
                                    }
                                    else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Business Trip")
                                    {
                                        tmp.EType = EEventType.BusinessTrip;
                                    }
                                    else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Education")
                                    {
                                        tmp.EType = EEventType.Education;
                                    }
                                    else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Other")
                                    {
                                        tmp.EType = EEventType.Other;
                                    }
                                    else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Old Vacations")
                                    {
                                        tmp.EType = EEventType.OldVacations;
                                    }

                                    if (tmp.EStatus == EEventStatus.Accepted)
                                    {
                                        tmp.ApprovationDate = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:Modified"].InnerText);
                                        tmp.Approver        = el.GetElementsByTagName("content")[0]?.FirstChild["d:Approver"].InnerText;
                                    }

                                    tmp.Save(db);

                                    if (tmp.EStatus != EEventStatus.Rejected)
                                    {
                                        NotifyEventImported(tmp);
                                    }
                                }
                                else
                                {
                                    EventEVM tmp = new EventEVM(existing);

                                    //if event does not have relations create it this is to patch error on previous releases
                                    if (!db.DayEvents.Any(x => x.EventId == tmp.Id))
                                    {
                                        if (tmp.EStatus != EEventStatus.Pending || tmp.EType != EEventType.Vacations)
                                        {
                                            continue;
                                        }
                                    }

                                    if ((EEventStatus)status < tmp.EStatus)
                                    {
                                        tmp.EStatus         = (EEventStatus)status;
                                        tmp.ApprovationDate = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:Modified"].InnerText);

                                        tmp.Save(db);
                                        NotifyEventChanged(tmp);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }

                Thread.Sleep(ApplicationSettings.General.WaitForNextEventChek);
            }
        }
예제 #10
0
        private void UpdaterThread()
        {
            bool           exit    = false;
            XmlDocument    xdoc    = new XmlDocument();
            HttpWebRequest request = null;

            while (!exit)
            {
                try
                {
                    using (DBArchive db = new DBArchive())
                    {
                        // try to get user Id
                        if (sharepointUserId == 0)
                        {
                            request = (HttpWebRequest)WebRequest.Create($"{ApplicationSettings.General.IntranetAddress}/_api/web/currentuser");

                            if (UserSettings.Email.UseDefaultCredentials)
                            {
                                request.UseDefaultCredentials = true;
                            }
                            else
                            {
                                request.Credentials = new NetworkCredential(UserSettings.Email.Username, UserSettings.Email.EmailPassword);
                            }

                            request.Method = "GET";

                            var webResponse = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
                            xdoc.LoadXml(webResponse);
                            sharepointUserId = Convert.ToInt32(xdoc.GetElementsByTagName("content")[0].FirstChild.FirstChild.LastChild.Value.ToString());
                        }

                        //take in account only if current user id is retrieved
                        if (sharepointUserId > 0)
                        {
                            // try to get all submitted events
                            string req = $"{ApplicationSettings.General.IntranetAddress}/_api/web/Lists/GetByTitle('Vacations ITA')/Items?$filter=Author/Id eq {sharepointUserId}";

                            request = (HttpWebRequest)WebRequest.Create(req);

                            if (UserSettings.Email.UseDefaultCredentials)
                            {
                                request.UseDefaultCredentials = true;
                            }
                            else
                            {
                                request.Credentials = new NetworkCredential(UserSettings.Email.Username, UserSettings.Email.EmailPassword);
                            }

                            request.Method = "GET";

                            var webResponse = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
                            xdoc.LoadXml(webResponse);

                            foreach (XmlElement el in xdoc.GetElementsByTagName("entry"))
                            {
                                Int64 shpid  = Convert.ToInt64(el.GetElementsByTagName("content")[0]?.FirstChild["d:Id"].InnerText);
                                int   status = Convert.ToInt32(el.GetElementsByTagName("content")[0]?.FirstChild["d:OData__ModerationStatus"].InnerText);

                                if (shpid == 0)
                                {
                                    continue;
                                }

                                EventEVM tmp = new EventEVM();
                                tmp.IsSent       = true; // the event is on calendar. Not necessary to send it
                                tmp.SharePointId = shpid;
                                tmp.Title        = el.GetElementsByTagName("content")[0]?.FirstChild["d:Title"].InnerText.Trim('*');
                                tmp.Location     = el.GetElementsByTagName("content")[0]?.FirstChild["d:Location"].InnerText;
                                tmp.Description  = el.GetElementsByTagName("content")[0]?.FirstChild["d:Description"].InnerText;
                                tmp.Status       = status;
                                tmp.IsAllDay     = Convert.ToBoolean(el.GetElementsByTagName("content")[0]?.FirstChild["d:fAllDayEvent"].InnerText);
                                tmp.SendDateTime = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:Created"].InnerText);

                                if (tmp.IsAllDay)
                                {
                                    tmp.StartDate = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EventDate"].InnerText.TrimEnd('Z'));
                                    tmp.EndDate   = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EndDate"].InnerText.TrimEnd('Z'));
                                }
                                else
                                {
                                    tmp.StartDate = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EventDate"].InnerText);
                                    tmp.EndDate   = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:EndDate"].InnerText);
                                }

                                if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Vacations")
                                {
                                    tmp.EType = EEventType.Vacations;
                                }
                                else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Customer Visit")
                                {
                                    tmp.EType = EEventType.CustomerVisit;
                                }
                                else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Business Trip")
                                {
                                    tmp.EType = EEventType.BusinessTrip;
                                }
                                else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Education")
                                {
                                    tmp.EType = EEventType.Education;
                                }
                                else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Other")
                                {
                                    tmp.EType = EEventType.Other;
                                }
                                else if (el.GetElementsByTagName("content")[0]?.FirstChild["d:Category"].InnerText == "Old Vacations")
                                {
                                    tmp.EType = EEventType.OldVacations;
                                }

                                if (tmp.EStatus == EEventStatus.Accepted)
                                {
                                    tmp.ApprovationDate = Convert.ToDateTime(el.GetElementsByTagName("content")[0]?.FirstChild["d:Modified"].InnerText);
                                    tmp.Approver        = el.GetElementsByTagName("content")[0]?.FirstChild["d:Approver"].InnerText;
                                }



                                if (db.Events.SingleOrDefault(x => x.SharepointId == shpid) == null)
                                {
                                    tmp.Save(db);
                                    NotifyEventImported(tmp);
                                }

                                else
                                {
                                    var existing = new EventEVM(db.Events.SingleOrDefault(x => x.SharepointId == shpid));
                                    if (existing != null)
                                    {
                                        tmp.Id = existing.Id;
                                        if (!tmp.Equals(existing) && !existing.IsCancelRequested)
                                        {
                                            tmp.Id    = existing.Id;
                                            tmp.Notes = existing.Notes;
                                            //Global.Mapper.Map(tmp, existing);
                                            tmp.Save(db);
                                            NotifyEventChanged(tmp);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                }

                Thread.Sleep(ApplicationSettings.General.WaitForNextEventCheck);
            }
        }