//Ez a metodus keresi a bejegyzeseket Outlookban.
        private void SearchAppointments(Outlook.Folder _calFolder)
        {
            DateTime start = DateTime.Now.AddDays(-rangeDateBack);
            DateTime end   = DateTime.Now.AddDays(rangeDateNext);

            Outlook.Items rangeAppts = GetAppointmentsInRange(_calFolder, start, end, DateTime.MinValue);


            if (rangeAppts != null)
            {
                int    taskProirity     = 0;
                int    sensitivity      = 0;
                int    activityTimeType = 0;
                bool   findItem         = false;
                string actnum;

                foreach (Outlook.AppointmentItem appt in rangeAppts)
                {
                    //B08559_CRM_OutlookSyncBug MGY 2014.03.25 Begin
                    if (appt.Sensitivity == Microsoft.Office.Interop.Outlook.OlSensitivity.olPrivate)
                    {
                        continue;
                    }
                    //B08559_CRM_OutlookSyncBug MGY 2014.03.25 End

                    findItem = false;
                    actnum   = "";
                    var values = smmActivitiList.Where(pair => pair.Key.Contains(appt.EntryID)).Select(pair => pair.Value);
                    foreach (var item in values)
                    {
                        findItem = true;
                    }

                    if (!findItem)
                    {
                        OutlookMgt.TASKPRIORITYConvertOutlookOlImportanceToInt(ref taskProirity, appt);
                        OutlookMgt.SENSITIVITYConvertOutlookOlSensitivityToInt(ref sensitivity, appt);
                        OutlookMgt.ACTIVITYTIMETYPEConvertOutlookOlBusyStatusToInt(ref activityTimeType, appt);

                        if (service.IsDeletedActivity(appt.EntryID, comapny))
                        {
                            appt.Delete();
                            deletedOutlookItemCounter++;
                            continue;
                        }

                        actnum = service.InsertsmmActivities(appt.Start.ToUniversalTime(),
                                                             appt.End.ToUniversalTime(),
                                                             empId,
                                                             appt.AllDayEvent,
                                                             appt.BillingInformation,
                                                             appt.Body,
                                                             appt.Subject,
                                                             appt.Categories,
                                                             taskProirity,
                                                             appt.Location,
                                                             appt.Mileage,
                                                             appt.ReminderSet,
                                                             appt.ReminderMinutesBeforeStart,
                                                             appt.Resources,
                                                             appt.ResponseRequested,
                                                             sensitivity,
                                                             activityTimeType,
                                                             networkAlias,
                                                             comapny,
                                                             appt.EntryID
                                                             );

                        //System.Windows.Forms.MessageBox.Show("The " + actnum + " activities inserted!");
                        if (log)
                        {
                            service.WriteInfo("++++++WebService: " + "The " + actnum + " activities inserted!");
                        }
                        savedCRMItemCounter++;
                    }
                }

                //System.Windows.Forms.MessageBox.Show("The " + insertedItemCounter + " activities inserted in Ax!");
            }
        }
        public static Boolean IsdifferentRecord(Outlook.AppointmentItem oAppointment, Model.ActivityData item)
        {
            Boolean differenetRec = false;

            if (oAppointment.Start != item.STARTDATETIME.ToLocalTime())
            {
                differenetRec = true;
            }
            if (oAppointment.End != item.ENDDATETIME.ToLocalTime())
            {
                differenetRec = true;
            }


            if (string.IsNullOrEmpty(oAppointment.BillingInformation))
            {
                if (string.IsNullOrEmpty(item.BILLINGINFORMATION))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.BillingInformation != item.BILLINGINFORMATION)
                {
                    differenetRec = true;
                }
            }
            if (string.IsNullOrEmpty(oAppointment.Body))
            {
                if (string.IsNullOrEmpty(item.USERMEMO))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Body.ToString() != item.USERMEMO)
                {
                    differenetRec = true;
                }
            }

            if (string.IsNullOrEmpty(oAppointment.Subject))
            {
                if (string.IsNullOrEmpty(item.PURPOSE))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Subject.ToString() != item.PURPOSE.ToString())
                {
                    differenetRec = true;
                }
            }
            if (string.IsNullOrEmpty(oAppointment.Categories))
            {
                if (string.IsNullOrEmpty(item.OUTLOOKCATEGORIES))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Categories.ToString() != item.OUTLOOKCATEGORIES)
                {
                    differenetRec = true;
                }
            }
            if (string.IsNullOrEmpty(oAppointment.Location))
            {
                if (string.IsNullOrEmpty(item.LOCATION))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Location.ToString() != item.LOCATION.ToString())
                {
                    differenetRec = true;
                }
            }
            if (string.IsNullOrEmpty(oAppointment.Mileage))
            {
                if (string.IsNullOrEmpty(item.MILEAGE))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Mileage.ToString() != item.MILEAGE.ToString())
                {
                    differenetRec = true;
                }
            }

            if (oAppointment.ReminderMinutesBeforeStart != item.REMINDERMINUTES)
            {
                differenetRec = true;
            }
            if (string.IsNullOrEmpty(oAppointment.Resources))
            {
                if (string.IsNullOrEmpty(item.OUTLOOKRESOURCES))
                {
                }
                else
                {
                    differenetRec = true;
                }
            }
            else
            {
                if (oAppointment.Resources.ToString() != item.OUTLOOKRESOURCES)
                {
                    differenetRec = true;
                }
            }
            if (oAppointment.AllDayEvent != Convert.ToBoolean(item.ALLDAY))
            {
                differenetRec = true;
            }

            if (oAppointment.ReminderSet != Convert.ToBoolean(item.REMINDERACTIVE))
            {
                differenetRec = true;
            }

            if (oAppointment.ResponseRequested != Convert.ToBoolean(item.RESPONSEREQUESTED))
            {
                differenetRec = true;
            }
            if (oAppointment.Importance != OutlookMgt.TASKPRIORITYConvertIntToOutlookOlImportance(item.TASKPRIORITY))
            {
                differenetRec = true;
            }
            if (oAppointment.Sensitivity != OutlookMgt.SENSITIVITYIntToConvertOutlookOlSensitivity(item.SENSITIVITY))
            {
                differenetRec = true;
            }
            if (oAppointment.BusyStatus != OutlookMgt.ACTIVITYTIMETYPEConvertIntToOutlookOlBusyStatus(item.ACTIVITYTIMETYPE))
            {
                differenetRec = true;
            }
            return(differenetRec);
        }
        private String syncFromOutlookToCrm()
        {
            printLogMsg(string.Format("Synchronizing appointments from Outlook to CRM."));

            if (log)
            {
                serviceProxy.WriteInfo("++++++WebService: syncFromCrmToOutlook");
            }

            try
            {
                Stopwatch swGetFolder = new Stopwatch();
                swGetFolder.Start();
                Outlook.Folder calFolder = GetFolder(outlookCalendarID, outlookCalendarStoreID);
                swGetFolder.Stop();

                DateTime start = DateTime.Now.AddDays(-rangeDateBack);
                DateTime end   = DateTime.Now.AddDays(rangeDateNext);

                Stopwatch swGetApps = new Stopwatch();
                swGetApps.Start();
                Outlook.Items rangeAppts = OutlookMgt.GetAppointmentsInRange(calFolder, start, end, this.lastSyncTime);
                swGetApps.Stop();

                Stopwatch swCntApps = new Stopwatch();
                swCntApps.Start();
                int apptCount = 0;

                //Ez a rész túl sokáig fut, holott csak számlálást végez. Megoldást kell keresni rá.
                if (rangeAppts != null)
                {
                    foreach (Outlook.AppointmentItem appt in rangeAppts)
                    {
                        ////B12773_CRMOutlookPluginIssues MGY 2016.07.04 Begin
                        //if (appt.LastModificationTime < this.lastSyncTime) continue;
                        ////B12773_CRMOutlookPluginIssues MGY 2016.07.04 End

                        if (appt.Sensitivity == Microsoft.Office.Interop.Outlook.OlSensitivity.olPrivate)
                        {
                            continue;
                        }
                        //B19443_ChangesToPluginFunctionality MGY 2018.05.24 Begin
                        if (isPublicHoliday(appt))
                        {
                            continue;
                        }
                        //B19443_ChangesToPluginFunctionality MGY 2018.05.24 End

                        apptCount++;
                    }
                }
                //apptCount = 10;

                if (apptCount == 0)
                {
                    progressToCrm.Minimum = 0;
                    progressToCrm.Maximum = 1;
                    progressToCrm.Value   = 0;
                    progressToCrm.Step    = 1;
                    progressToCrm.PerformStep();
                }
                swCntApps.Stop();

                if (apptCount > 0)
                {
                    int    taskProirity     = 0;
                    int    sensitivity      = 0;
                    int    activityTimeType = 0;
                    bool   findItem         = false;
                    string actnum;

                    progressToCrm.Minimum = 0;
                    progressToCrm.Maximum = apptCount;
                    progressToCrm.Value   = 0;
                    progressToCrm.Step    = 1;

                    foreach (Outlook.AppointmentItem appt in rangeAppts)
                    {
                        printLogMsg(string.Format("Checking Appointment: {0}.", appt.Subject));

                        //B12773_CRMOutlookPluginIssues MGY 2016.07.04 Begin
                        //Nem jó megoldás, mert amikor törlik az Activity párját AX-ból, akkor nem fog törlődni az appointment.
                        //if (appt.LastModificationTime < this.lastSyncTime) continue;
                        //B12773_CRMOutlookPluginIssues MGY 2016.07.04 End

                        //B08559_CRM_OutlookSyncBug MGY 2014.03.25 Begin
                        if (appt.Sensitivity == Microsoft.Office.Interop.Outlook.OlSensitivity.olPrivate)
                        {
                            continue;
                        }
                        //B08559_CRM_OutlookSyncBug MGY 2014.03.25 End
                        //B19443_ChangesToPluginFunctionality MGY 2018.05.24 Begin
                        if (isPublicHoliday(appt))
                        {
                            continue;
                        }
                        //B19443_ChangesToPluginFunctionality MGY 2018.05.24 End

                        string partyID              = string.Empty;
                        Outlook.UserProperties ups  = appt.UserProperties;
                        Outlook.UserProperty   prop = ups["PartyID"];
                        if (prop != null)
                        {
                            partyID = prop.Value;
                        }

                        findItem = false;
                        actnum   = "";
                        var values = smmActivityList.Where(pair => pair.Key.Contains(appt.EntryID)).Select(pair => pair.Value);
                        foreach (var item in values)
                        {
                            findItem = true;
                        }

                        if (!findItem)
                        {
                            OutlookMgt.TASKPRIORITYConvertOutlookOlImportanceToInt(ref taskProirity, appt);
                            OutlookMgt.SENSITIVITYConvertOutlookOlSensitivityToInt(ref sensitivity, appt);
                            OutlookMgt.ACTIVITYTIMETYPEConvertOutlookOlBusyStatusToInt(ref activityTimeType, appt);

                            if (serviceProxy.IsDeletedActivity(appt.EntryID, company))
                            {
                                printLogMsg("Appointment removed as not found in CRM: " + appt.Subject);
                                appt.Delete();
                                deletedOutlookItemCounter++;
                                progressToCrm.PerformStep();
                                continue;
                            }

                            try
                            {
                                //Mi van akkor ha az activity korábban módosult mint az utolsó sync time, viszont az appointment utólag módosult?
                                //Ekkor duplán létrejön az Activity??
                                //Megoldás: Appointmentben letároljuk az activityNum-ot.
                                bool actUpdated             = false;
                                Outlook.UserProperty uprops = appt.UserProperties.Find("ActivityNum");
                                if (uprops != null)
                                {
                                    actnum = Convert.ToString(uprops.Value);
                                    if (!String.IsNullOrEmpty(actnum))
                                    {
                                        serviceProxy.UpdateActivity(appt.Start.ToUniversalTime(),
                                                                    appt.End.ToUniversalTime(),
                                                                    empId,
                                                                    appt.AllDayEvent,
                                                                    appt.BillingInformation,
                                                                    appt.Body,
                                                                    appt.Subject,
                                                                    appt.Categories,
                                                                    taskProirity,
                                                                    appt.Location,
                                                                    appt.Mileage,
                                                                    appt.ReminderSet,
                                                                    appt.ReminderMinutesBeforeStart,
                                                                    appt.Resources,
                                                                    appt.ResponseRequested,
                                                                    sensitivity,
                                                                    activityTimeType,
                                                                    networkAlias,
                                                                    company,
                                                                    appt.EntryID,
                                                                    actnum);
                                        actUpdated = true;
                                    }
                                }

                                if (!actUpdated)
                                {
                                    actnum = serviceProxy.InsertActivity(appt.Start.ToUniversalTime(),
                                                                         appt.End.ToUniversalTime(),
                                                                         empId == null ? "" : empId,
                                                                         appt.AllDayEvent,
                                                                         appt.BillingInformation == null ? "" : appt.BillingInformation,
                                                                         appt.Body == null ? "" : appt.Body,
                                                                         appt.Subject == null ? "" : appt.Subject,
                                                                         appt.Categories == null ? "" : appt.Categories,
                                                                         taskProirity,
                                                                         appt.Location == null ? "" : appt.Location,
                                                                         appt.Mileage == null ? "" : appt.Mileage,
                                                                         appt.ReminderSet,
                                                                         appt.ReminderMinutesBeforeStart,
                                                                         appt.Resources == null ? "" : appt.Resources,
                                                                         appt.ResponseRequested,
                                                                         sensitivity,
                                                                         activityTimeType,
                                                                         networkAlias,
                                                                         company,
                                                                         appt.EntryID
                                                                         );

                                    Outlook.UserProperty propAppt = appt.UserProperties.Add("ActivityNum", Outlook.OlUserPropertyType.olText, false, Outlook.OlFormatText.olFormatTextText);
                                    propAppt.Value = actnum;
                                }

                                if (log)
                                {
                                    serviceProxy.WriteInfo("++++++WebService: " + "The " + actnum + " activity " + (actUpdated ? "updated!" : "inserted!"));
                                    printLogMsg(String.Format("Appointment '{0}' saved in CRM with identifier: {1}", appt.Subject, actnum));
                                }
                                savedCRMItemCounter++;
                            }
                            catch (Exception e)
                            {
                                System.Windows.Forms.MessageBox.Show("Could not insert activity: " + e.Message);
                            }
                        }
                        progressToCrm.PerformStep();
                    }
                }

                /*printLogMsg(String.Format("GetFolder: {0, 4}; GetApps: {1,4}; CountApps: {2,4}",
                 *  swGetFolder.ElapsedMilliseconds,
                 *  swGetApps.ElapsedMilliseconds,
                 *  swCntApps.ElapsedMilliseconds));*/
            }
            catch (Exception ex)
            {
                printLogMsg(string.Format("Error transferring appointments to CRM! Error message: {0}", ex.Message));
            }

            String message = String.Empty;

            //if (savedCRMItemCounter != 0)
            {
                message = message + "Number of activities transferred to CRM: " + savedCRMItemCounter + "\n";
            }

            //if (deletedOutlookItemCounter != 0)
            {
                message = message + "Number of activities deleted from Outlook: " + deletedOutlookItemCounter;
            }

            return(message);
        }
        public void SetAppointment(string _company, string _responsibleEployee)
        {
            bool isUpdateOutlookEntryID = false;
            int  taskProirity           = 0;
            int  sensitivity            = 0;
            int  activityTimeType       = 0;
            bool noSync    = false;
            bool noAddList = false;

            deletedCRMItemCounter = 0;
            updatedCRMItemCounter = 0;
            savedCRMItemCounter   = 0;

            insertedOutlookItemCounter = 0;
            deletedOutlookItemCounter  = 0;

            WebOutlookCrm.smmActivities.SMMACTIVITIESDataTable smmAct = service.GetsmmActivities(_company, _responsibleEployee);

            Outlook.AppointmentItem oAppointment = null;
            Outlook.Folder          calFolder    = null;

            //Outlook.NameSpace ns = outlookApp.GetNamespace("MAPI");
            //Outlook.MAPIFolder calFolder = ns.GetFolderFromID(outlookCalendarID, outlookCalendarStoreID);


            calFolder = GetFolder(outlookCalendarID, outlookCalendarStoreID);

            //Outlook.MAPIFolder folder = calFolder;

            foreach (WebOutlookCrm.smmActivities.SMMACTIVITIESRow item in smmAct)
            {
                if (log)
                {
                    service.WriteInfo("++++++WebService: foreach SetAppointment");
                    service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                }
                noSync       = false;
                noAddList    = false;
                oAppointment = null;
                bool insert = false;
                oAppointment = GetAppointment(item.OUTLOOKENTRYID, outlookCalendarStoreID);

                if (oAppointment == null)
                {
                    if (log)
                    {
                        service.WriteInfo("++++++WebService: oAppointment == null");
                        service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                    }

                    if (string.IsNullOrEmpty(item.OUTLOOKENTRYID))
                    {
                        isUpdateOutlookEntryID = true;
                        insert       = true;
                        oAppointment = (Outlook.AppointmentItem)calFolder.Items.Add(Outlook.OlItemType.olAppointmentItem);

                        if (log)
                        {
                            service.WriteInfo("++++++WebService: string.IsNullOrEmpty(item.OUTLOOKENTRYID)");
                            service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                            service.WriteInfo("++++++WebService: noSync: " + noSync);
                        }

                        //oAppointment = (Outlook.AppointmentItem)outlookApp.CreateItem(Outlook.OlItemType.olAppointmentItem);
                    }
                    else
                    {
                        // ez az ág mikor nem találja az outlookban viszont van OutlikEntryID-ja tehát az outlookból lett törölve
                        if (log)
                        {
                            service.WriteInfo("++++++WebService: string.IsNullOrEmpty(item.OUTLOOKENTRYID) != ");
                            service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                        }

                        noSync    = true;
                        insert    = false;
                        noAddList = service.DeleteActivity(item.OUTLOOKENTRYID, comapny);
                        //System.Windows.Forms.MessageBox.Show("The " + item.ACTIVITYNUMBER + " activities deleted!");
                        if (log)
                        {
                            service.WriteInfo("++++++WebService: " + "The " + item.ACTIVITYNUMBER + " activities deleted!");
                        }
                        deletedCRMItemCounter++;
                    }
                }
                else
                {
                    insert = false;

                    if (log)
                    {
                        service.WriteInfo("++++++WebService: oAppointment != null");
                        service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                    }

                    isUpdateOutlookEntryID = false;

                    if (oAppointment.LastModificationTime > item.MODIFIEDDATETIME.ToLocalTime())
                    {
                        if (IsdifferentRecord(oAppointment, item))
                        {
                            if (log)
                            {
                                service.WriteInfo("++++++WebService: oAppointment.LastModificationTime > item.MODIFIEDDATETIME.ToLocalTime()");
                                service.WriteInfo("++++++WebService: " + oAppointment.LastModificationTime + " " + item.MODIFIEDDATETIME.ToLocalTime());
                                service.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                            }

                            taskProirity     = 0;
                            sensitivity      = 0;
                            activityTimeType = 0;

                            OutlookMgt.TASKPRIORITYConvertOutlookOlImportanceToInt(ref taskProirity, oAppointment);
                            OutlookMgt.SENSITIVITYConvertOutlookOlSensitivityToInt(ref sensitivity, oAppointment);
                            OutlookMgt.ACTIVITYTIMETYPEConvertOutlookOlBusyStatusToInt(ref activityTimeType, oAppointment);

                            noSync = service.UpdateActivity(oAppointment.Start.ToUniversalTime(),
                                                            oAppointment.End.ToUniversalTime(),
                                                            empId,
                                                            oAppointment.AllDayEvent,
                                                            oAppointment.BillingInformation,
                                                            oAppointment.Body,
                                                            oAppointment.Subject,
                                                            oAppointment.Categories,
                                                            taskProirity,
                                                            oAppointment.Location,
                                                            oAppointment.Mileage,
                                                            oAppointment.ReminderSet,
                                                            oAppointment.ReminderMinutesBeforeStart,
                                                            oAppointment.Resources,
                                                            oAppointment.ResponseRequested,
                                                            sensitivity,
                                                            activityTimeType,
                                                            networkAlias,
                                                            comapny,
                                                            oAppointment.EntryID,
                                                            item.ACTIVITYNUMBER);
                            if (log)
                            {
                                service.WriteInfo("++++++WebService: " + "The " + item.ACTIVITYNUMBER + " activities updated!");
                            }
                            updatedCRMItemCounter++;
                        }
                    }
                }

                if (!noSync)
                {
                    try
                    {
                        if (IsdifferentRecord(oAppointment, item))
                        {
                            if (log)
                            {
                                service.WriteInfo("++++++WebService: Create new appointment from activity: " + item.ACTIVITYNUMBER);
                            }

                            oAppointment.Subject            = item.PURPOSE.ToString();
                            oAppointment.Start              = Convert.ToDateTime(item.STARTDATETIME.ToLocalTime());
                            oAppointment.AllDayEvent        = Convert.ToBoolean(item.ALLDAY);
                            oAppointment.BillingInformation = item.BILLINGINFORMATION;
                            oAppointment.Body       = item.USERMEMO.ToString();
                            oAppointment.Categories = item.OUTLOOKCATEGORIES;
                            oAppointment.End        = Convert.ToDateTime(item.ENDDATETIME.ToLocalTime());
                            OutlookMgt.TASKPRIORITYConvertIntToOutlookOlImportance(item.TASKPRIORITY, ref oAppointment);
                            oAppointment.Location    = item.LOCATION;
                            oAppointment.Mileage     = item.MILEAGE;
                            oAppointment.ReminderSet = Convert.ToBoolean(item.REMINDERACTIVE);
                            oAppointment.ReminderMinutesBeforeStart = item.REMINDERMINUTES;
                            oAppointment.Resources         = item.OUTLOOKRESOURCES;
                            oAppointment.ResponseRequested = Convert.ToBoolean(item.RESPONSEREQUESTED);

                            OutlookMgt.SENSITIVITYIntToConvertOutlookOlSensitivity(item.SENSITIVITY, ref oAppointment);
                            OutlookMgt.ACTIVITYTIMETYPEConvertIntToOutlookOlBusyStatus(item.ACTIVITYTIMETYPE, ref oAppointment);

                            oAppointment.Save();

                            if (log)
                            {
                                service.WriteInfo("++++++WebService: Appointment saved.");
                                service.WriteInfo("++++++WebService: oAppointment Entry ID: " + oAppointment.EntryID);
                                service.WriteInfo("++++++WebService: CalFolder Store ID:" + calFolder.StoreID);
                            }
                            if (isUpdateOutlookEntryID)
                            {
                                service.UpdateActivityOutlookEntryId(item.ACTIVITYNUMBER, comapny, oAppointment.EntryID);
                            }

                            if (insert)
                            {
                                insertedOutlookItemCounter++;
                            }
                            else
                            {
                                savedOutlookItemCounter++;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        System.Windows.Forms.MessageBox.Show(e.Message);
                    }
                }

                if (!noAddList)
                {
                    if (oAppointment.EntryID != null)
                    {
                        smmActivitiList.Add(oAppointment.EntryID, item.ACTIVITYNUMBER);
                    }
                }
            }

            this.SearchAppointments(calFolder);
        }
        private String syncFromCrmToOutlook(string _company, string _responsibleEployee)
        {
            printLogMsg("Synchronizing activities from CRM to Outlook...");

            if (log)
            {
                serviceProxy.WriteInfo("++++++ syncFromCrmToOutlook: CRM ---> Outlook");
            }

            smmActivityList = new Dictionary <string, string>();
            bool isUpdateOutlookEntryID = false;
            int  taskProirity           = 0;
            int  sensitivity            = 0;
            int  activityTimeType       = 0;
            bool noSync    = false;
            bool noAddList = false;

            try
            {
                //XElement booksFromFile = XElement.Load(@"c:\\act.xml");
                //String xmlStr = booksFromFile.ToString();
                String      soapMsg  = File.ReadAllText(@"c:\\act.xml");
                XmlDocument document = new XmlDocument();
                document.LoadXml(soapMsg);  //loading soap message as string
                XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);

                manager.AddNamespace("d", "http://someURL");

                XmlNodeList xnList = document.SelectNodes("//bookHotelResponse", manager);
                int         nodes  = xnList.Count;

                //foreach (XmlNode xn in xnList)
                //{
                //    Status = xn["d:bookingStatus"].InnerText;
                //}

                XmlRootAttribute xRoot = new XmlRootAttribute();
                xRoot.ElementName = "DocumentElement";
                xRoot.IsNullable  = true;
                WebOutlookCrm.smmActivities.SMMACTIVITIESDataTable acts;
                XmlSerializer ser    = new XmlSerializer(typeof(WebOutlookCrm.smmActivities.SMMACTIVITIESDataTable), xRoot);
                StreamReader  reader = new StreamReader("c:\\act.xml");
                acts = (WebOutlookCrm.smmActivities.SMMACTIVITIESDataTable)ser.Deserialize(reader);
                reader.Close();

                Stopwatch swGetActs = new Stopwatch();
                swGetActs.Start();

                string Responsible = _responsibleEployee;

                /*if (Responsible.ToLower() == "krost")
                 * {
                 *  Responsible += "_test";
                 * }*/
                List <Model.ActivityData> smmAct = serviceProxy.GetsmmActivities(_company, Responsible);
                swGetActs.Stop();
                //printLogMsg(String.Format("service.GetsmmActivities: {0}", swGetActs.ElapsedMilliseconds));

                Outlook.AppointmentItem oAppointment = null;
                Outlook.Folder          calFolder    = GetFolder(outlookCalendarID, outlookCalendarStoreID);

                progressFromCrm.Minimum = 0;
                progressFromCrm.Maximum = 1;
                progressFromCrm.Value   = 0;
                progressFromCrm.Step    = 1;

                if (smmAct.Count == 0)
                {
                    progressFromCrm.PerformStep();
                }
                else
                {
                    progressFromCrm.Maximum = smmAct.Count;
                }

                foreach (Model.ActivityData item in smmAct)
                {
                    Stopwatch swAct = new Stopwatch();
                    swAct.Start();

                    if (item.STARTDATETIME > item.ENDDATETIME)
                    {
                        printLogMsg(string.Format("Wrong activity setting: end date is earlier than start date! act#: {0}, start: {1}, end: {2}",
                                                  item.ACTIVITYNUMBER, item.STARTDATETIME.ToLocalTime(), item.ENDDATETIME.ToLocalTime()));
                        printLogMsg("Activity skipped.");
                        continue;
                    }

                    if (log)
                    {
                        //printLogMsg(String.Format("Checking activity: {0} (actnum={1})", item.PURPOSE, item.ACTIVITYNUMBER));
                        serviceProxy.WriteInfo("++++++ Activity found in CRM : ActivityNumber: " + item.ACTIVITYNUMBER);
                    }

                    noSync       = false;
                    noAddList    = false;
                    oAppointment = null;
                    bool insert = false;

                    Stopwatch swGetApp = new Stopwatch();
                    swGetApp.Start();
                    oAppointment = GetAppointment(item.OUTLOOKENTRYID, outlookCalendarStoreID);
                    swGetApp.Stop();

                    Stopwatch swCheckApp = new Stopwatch();
                    swCheckApp.Start();

                    if (oAppointment == null)
                    {
                        if (log)
                        {
                            serviceProxy.WriteInfo("++++++ Appointment not found in Outlook for Activity: " + item.ACTIVITYNUMBER);
                        }

                        if (string.IsNullOrEmpty(item.OUTLOOKENTRYID))
                        {
                            isUpdateOutlookEntryID = true;
                            insert       = true;
                            oAppointment = (Outlook.AppointmentItem)calFolder.Items.Add(Outlook.OlItemType.olAppointmentItem);

                            if (log)
                            {
                                serviceProxy.WriteInfo("++++++WebService: string.IsNullOrEmpty(item.OUTLOOKENTRYID)");
                                serviceProxy.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                                serviceProxy.WriteInfo("++++++WebService: noSync: " + noSync);
                            }
                        }
                        else
                        {
                            // ez az ág mikor nem találja az outlookban viszont van OutlookEntryID-ja tehát az outlookból lett törölve
                            if (log)
                            {
                                serviceProxy.WriteInfo("++++++WebService: string.IsNullOrEmpty(item.OUTLOOKENTRYID) != ");
                                serviceProxy.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                            }

                            noSync    = true;
                            insert    = false;
                            noAddList = serviceProxy.DeleteActivity(item.OUTLOOKENTRYID, company);

                            if (log)
                            {
                                printLogMsg("Activity removed from CRM: " + item.ACTIVITYNUMBER);
                                serviceProxy.WriteInfo("++++++WebService: " + "The " + item.ACTIVITYNUMBER + " activities deleted!");
                            }

                            deletedCRMItemCounter++;
                        }
                    }
                    //B19443_CrmChangesToPlugin MGY 2018.05.31 Begin
                    else if (oAppointment.Sensitivity != Microsoft.Office.Interop.Outlook.OlSensitivity.olPrivate)
                    //B19443_CrmChangesToPlugin MGY 2018.05.31 End
                    {
                        insert = false;

                        if (log)
                        {
                            serviceProxy.WriteInfo("++++++WebService: oAppointment != null");
                            serviceProxy.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                        }

                        isUpdateOutlookEntryID = false;

                        if (oAppointment.LastModificationTime > item.MODIFIEDDATETIME.ToLocalTime())
                        {
                            if (OutlookMgt.IsdifferentRecord(oAppointment, item))
                            {
                                if (log)
                                {
                                    serviceProxy.WriteInfo("++++++WebService: oAppointment.LastModificationTime > item.MODIFIEDDATETIME.ToLocalTime()");
                                    serviceProxy.WriteInfo("++++++WebService: " + oAppointment.LastModificationTime + " " + item.MODIFIEDDATETIME.ToLocalTime());
                                    serviceProxy.WriteInfo("++++++WebService: ActNumber: " + item.ACTIVITYNUMBER);
                                }

                                taskProirity     = 0;
                                sensitivity      = 0;
                                activityTimeType = 0;

                                OutlookMgt.TASKPRIORITYConvertOutlookOlImportanceToInt(ref taskProirity, oAppointment);
                                OutlookMgt.SENSITIVITYConvertOutlookOlSensitivityToInt(ref sensitivity, oAppointment);
                                OutlookMgt.ACTIVITYTIMETYPEConvertOutlookOlBusyStatusToInt(ref activityTimeType, oAppointment);

                                noSync = serviceProxy.UpdateActivity(oAppointment.Start.ToUniversalTime(),
                                                                     oAppointment.End.ToUniversalTime(),
                                                                     empId,
                                                                     oAppointment.AllDayEvent,
                                                                     oAppointment.BillingInformation,
                                                                     oAppointment.Body,
                                                                     oAppointment.Subject,
                                                                     oAppointment.Categories,
                                                                     taskProirity,
                                                                     oAppointment.Location,
                                                                     oAppointment.Mileage,
                                                                     oAppointment.ReminderSet,
                                                                     oAppointment.ReminderMinutesBeforeStart,
                                                                     oAppointment.Resources,
                                                                     oAppointment.ResponseRequested,
                                                                     sensitivity,
                                                                     activityTimeType,
                                                                     networkAlias,
                                                                     company,
                                                                     oAppointment.EntryID,
                                                                     item.ACTIVITYNUMBER);
                                if (log)
                                {
                                    serviceProxy.WriteInfo("++++++WebService: " + "The " + item.ACTIVITYNUMBER + " activities updated!");
                                    printLogMsg("Activity modified in CRM: " + item.ACTIVITYNUMBER);
                                }
                                updatedCRMItemCounter++;
                            }
                        }
                    }
                    //B19443_CrmChangesToPlugin MGY 2018.05.31 Begin
                    else
                    {
                        noSync    = true;
                        noAddList = serviceProxy.DeleteActivity(item.OUTLOOKENTRYID, company);

                        if (log)
                        {
                            printLogMsg("Appoointment has became Private, therefore Activity removed from CRM: " + item.ACTIVITYNUMBER);
                            serviceProxy.WriteInfo("++++++WebService: " + "The " + item.ACTIVITYNUMBER + " activities deleted!");
                        }

                        deletedCRMItemCounter++;
                    }
                    //B19443_CrmChangesToPlugin MGY 2018.05.31 End

                    swCheckApp.Stop();

                    Stopwatch swCheckApp2 = new Stopwatch();
                    swCheckApp2.Start();

                    Stopwatch swIsDiff  = new Stopwatch();
                    Stopwatch swAppFill = new Stopwatch();

                    if (!noSync)
                    {
                        try
                        {
                            swIsDiff.Start();
                            bool isDiff = OutlookMgt.IsdifferentRecord(oAppointment, item);
                            swIsDiff.Stop();

                            if (isDiff)
                            {
                                if (log)
                                {
                                    serviceProxy.WriteInfo("++++++WebService: Update appointment from activity: " + item.ACTIVITYNUMBER);
                                }

                                if (!oAppointment.IsRecurring)
                                {
                                    swAppFill.Start();

                                    oAppointment.Subject            = item.PURPOSE.ToString();
                                    oAppointment.Start              = Convert.ToDateTime(item.STARTDATETIME.ToLocalTime());
                                    oAppointment.AllDayEvent        = Convert.ToBoolean(item.ALLDAY);
                                    oAppointment.BillingInformation = item.BILLINGINFORMATION;
                                    oAppointment.Body       = item.USERMEMO.ToString();
                                    oAppointment.Categories = item.OUTLOOKCATEGORIES;
                                    oAppointment.End        = Convert.ToDateTime(item.ENDDATETIME.ToLocalTime());
                                    OutlookMgt.TASKPRIORITYConvertIntToOutlookOlImportance(item.TASKPRIORITY, ref oAppointment);
                                    oAppointment.Location    = item.LOCATION;
                                    oAppointment.Mileage     = item.MILEAGE;
                                    oAppointment.ReminderSet = Convert.ToBoolean(item.REMINDERACTIVE);
                                    oAppointment.ReminderMinutesBeforeStart = item.REMINDERMINUTES;
                                    oAppointment.Resources         = item.OUTLOOKRESOURCES;
                                    oAppointment.ResponseRequested = Convert.ToBoolean(item.RESPONSEREQUESTED);

                                    OutlookMgt.SENSITIVITYIntToConvertOutlookOlSensitivity(item.SENSITIVITY, ref oAppointment);
                                    OutlookMgt.ACTIVITYTIMETYPEConvertIntToOutlookOlBusyStatus(item.ACTIVITYTIMETYPE, ref oAppointment);

                                    //B11796_OL2013CrmPluginScopeOfBusRels MGY 2015.11.13 Begin
                                    if (oAppointment.Body == null)
                                    {
                                        oAppointment.Body = " ";
                                    }
                                    oAppointment.Body = custDataInfo(oAppointment.Body, item);
                                    //B11796_OL2013CrmPluginScopeOfBusRels MGY 2015.11.13 End

                                    Outlook.UserProperty prop = oAppointment.UserProperties.Add("ActivityNum", Outlook.OlUserPropertyType.olText, false, Outlook.OlFormatText.olFormatTextText);
                                    prop.Value = item.ACTIVITYNUMBER;

                                    oAppointment.Save();
                                    swAppFill.Stop();
                                }

                                if (log)
                                {
                                    serviceProxy.WriteInfo("++++++WebService: Appointment saved.");
                                    serviceProxy.WriteInfo("++++++WebService: oAppointment Entry ID: " + oAppointment.EntryID);
                                    serviceProxy.WriteInfo("++++++WebService: CalFolder Store ID:" + calFolder.StoreID);
                                    printLogMsg("Activity saved in Outlook: " + item.ACTIVITYNUMBER);
                                }

                                if (isUpdateOutlookEntryID)
                                {
                                    serviceProxy.UpdateActivityOutlookEntryId(item.ACTIVITYNUMBER, company, oAppointment.EntryID);
                                }

                                if (insert)
                                {
                                    insertedOutlookItemCounter++;
                                }
                                else
                                {
                                    savedOutlookItemCounter++;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            System.Windows.Forms.MessageBox.Show(e.Message);
                        }
                    }
                    swCheckApp2.Stop();

                    if (!noAddList)
                    {
                        if (oAppointment.EntryID != null)
                        {
                            if (!smmActivityList.ContainsKey(oAppointment.EntryID))
                            {
                                smmActivityList.Add(oAppointment.EntryID, item.ACTIVITYNUMBER);
                            }
                        }
                    }

                    progressFromCrm.PerformStep();

                    swAct.Stop();

                    /*printLogMsg(String.Format("GetAppointment: {0, 4}; CheckApp: {1,4}; isDiff: {2,4}; AppFill: {3,4}; Activity process time: {4}",
                     *  swGetApp.ElapsedMilliseconds,
                     *  swCheckApp.ElapsedMilliseconds,
                     *  swIsDiff.ElapsedMilliseconds,
                     *  swAppFill.ElapsedMilliseconds,
                     *  swAct.ElapsedMilliseconds));*/
                } //end foreach
            }
            catch (InvalidOperationException ex)
            {
                printLogMsg(string.Format("Error transferring activities to Outlook! Error message: {0}", ex.Message));
            }
            catch (Exception ex)
            {
                printLogMsg(string.Format("Error transferring activities to Outlook! Error message: {0}", ex.Message));
            }

            String message = String.Empty;

            //if (updatedCRMItemCounter != 0)
            {
                message = message + "Number of activities updated in CRM: " + updatedCRMItemCounter + "\n";
            }
            //if (deletedCRMItemCounter != 0)
            {
                message = message + "Number of activities deleted from CRM: " + deletedCRMItemCounter + "\n";
            }

            //if (insertedOutlookItemCounter != 0)
            {
                message = message + "Number of activities transferred to Outlook: " + insertedOutlookItemCounter + "\n";
            }
            //if (savedOutlookItemCounter != 0)
            {
                message = message + "Number of activities updated in Outlook: " + savedOutlookItemCounter;
            }

            return(message);
        }