Exemplo n.º 1
0
        protected void FindTimes_Click(object sender, EventArgs args)
        {
            var startTimeInMinutesFromMidnight = int.Parse(StartTime.SelectedValue);

            var startDate = StartDate.SelectedDate.AddMinutes(startTimeInMinutesFromMidnight);

            var endTimeInMinutesFromMidnight = int.Parse(EndTime.SelectedValue);

            var endDate = EndDate.SelectedDate.AddMinutes(endTimeInMinutesFromMidnight);

            if (!SelectedDatesAndTimesAreValid(startDate, endDate, startTimeInMinutesFromMidnight, endTimeInMinutesFromMidnight))
            {
                return;
            }

            // Add the timezone selected to the CRM Contact for next time.
            var contact = XrmContext.CreateQuery("contact").FirstOrDefault(c => c.GetAttributeValue <Guid>("contactid") == Contact.Id);

            if (contact == null)
            {
                throw new ApplicationException(string.Format("Could not find user contact where contactid equals '{0}'", Contact.Id));
            }

            contact.SetAttributeValue("adx_timezone", int.Parse(TimeZoneSelection.SelectedValue));

            XrmContext.UpdateObject(contact);

            XrmContext.SaveChanges();

            var usersMinutesFromGmt = GetUsersMinutesFromGmt(contact.GetAttributeValue <int?>("adx_timezone"), XrmContext);

            var appointmentRequest = new AppointmentRequest
            {
                AnchorOffset           = Service.GetAttributeValue <int?>("anchoroffset").GetValueOrDefault(),
                Direction              = SearchDirection.Forward,
                Duration               = Service.GetAttributeValue <int?>("duration").GetValueOrDefault(60),
                NumberOfResults        = 10,
                RecurrenceDuration     = endTimeInMinutesFromMidnight - startTimeInMinutesFromMidnight,
                RecurrenceTimeZoneCode = contact.GetAttributeValue <int?>("adx_timezone").GetValueOrDefault(),
                SearchRecurrenceRule   = "FREQ=DAILY;INTERVAL=1",
                SearchRecurrenceStart  = new DateTime(startDate.AddMinutes(usersMinutesFromGmt * -1).Ticks, DateTimeKind.Utc),
                SearchWindowEnd        = new DateTime(endDate.AddMinutes(usersMinutesFromGmt * -1).Ticks, DateTimeKind.Utc),
                ServiceId              = Service.GetAttributeValue <Guid>("serviceid")
            };

            var service = XrmContext;

            var searchRequest = new OrganizationRequest("Search");

            searchRequest.Parameters["AppointmentRequest"] = appointmentRequest;

            var searchResults = (SearchResults)service.Execute(searchRequest).Results["SearchResults"];

            var schedules = searchResults.Proposals.Select(proposal => new
            {
                ScheduledStart = proposal.Start.GetValueOrDefault().ToUniversalTime().AddMinutes(usersMinutesFromGmt),
                ScheduledStartUniversalTime = proposal.Start.GetValueOrDefault().ToUniversalTime(),
                ScheduledEnd = proposal.End.GetValueOrDefault().ToUniversalTime().AddMinutes(usersMinutesFromGmt),
                ScheduledEndUniversalTime = proposal.End.GetValueOrDefault().ToUniversalTime(),
                AvailableResource         = proposal.ProposalParties.First().ResourceId
            }).Where(proposal => proposal.ScheduledStartUniversalTime >= DateTime.UtcNow);

            if (!schedules.Any())
            {
                SearchPanel.Visible    = true;
                NoTimesMessage.Visible = true;
                ResultsDisplay.Visible = false;

                return;
            }

            AvailableTimes.DataSource = schedules;
            AvailableTimes.DataBind();

            SearchPanel.Visible           = false;
            ResultsDisplay.Visible        = true;
            ScheduleServiceButton.Enabled = false;
        }
Exemplo n.º 2
0
        protected void FindTimes_Click(object sender, EventArgs args)
        {
            var startTimeInMinutesFromMidnight = int.Parse(StartTime.SelectedValue);

            var startDate = StartDate.SelectedDate.AddMinutes(startTimeInMinutesFromMidnight);

            var endTimeInMinutesFromMidnight = int.Parse(EndTime.SelectedValue);

            var endDate = EndDate.SelectedDate.AddMinutes(endTimeInMinutesFromMidnight);

            if (!SelectedDatesAndTimesAreValid(startDate, endDate, startTimeInMinutesFromMidnight, endTimeInMinutesFromMidnight))
            {
                return;
            }

            // Add the timezone selected to the CRM Contact for next time.
            var contact = XrmContext.ContactSet.FirstOrDefault(c => c.ContactId == Contact.Id);

            contact.Adx_TimeZone = int.Parse(TimeZoneSelection.SelectedValue);

            XrmContext.UpdateObject(contact);

            XrmContext.SaveChanges();

            var usersMinutesFromGmt = GetUsersMinutesFromGmt(contact.Adx_TimeZone, XrmContext);

            var appointmentRequest = new AppointmentRequest
            {
                AnchorOffset           = Service.AnchorOffset.GetValueOrDefault(),
                Direction              = SearchDirection.Forward,
                Duration               = Service.Duration.GetValueOrDefault(60),
                NumberOfResults        = 10,
                RecurrenceDuration     = endTimeInMinutesFromMidnight - startTimeInMinutesFromMidnight,
                RecurrenceTimeZoneCode = contact.Adx_TimeZone.GetValueOrDefault(),
                SearchRecurrenceRule   = "FREQ=DAILY;INTERVAL=1",
                SearchRecurrenceStart  = new DateTime(startDate.AddMinutes(usersMinutesFromGmt * -1).Ticks, DateTimeKind.Utc),
                SearchWindowEnd        = new DateTime(endDate.AddMinutes(usersMinutesFromGmt * -1).Ticks, DateTimeKind.Utc),
                ServiceId              = Service.ServiceId.GetValueOrDefault()
            };

            var service = XrmContext;

            var searchRequest = new OrganizationRequest("Search");

            searchRequest.Parameters["AppointmentRequest"] = appointmentRequest;

            var searchResults = (SearchResults)service.Execute(searchRequest).Results["SearchResults"];

            var schedules = searchResults.Proposals.Select(proposal => new
            {
                ScheduledStart = proposal.Start.GetValueOrDefault().ToUniversalTime().AddMinutes(usersMinutesFromGmt),
                ScheduledStartUniversalTime = proposal.Start.GetValueOrDefault().ToUniversalTime(),
                ScheduledEnd = proposal.End.GetValueOrDefault().ToUniversalTime().AddMinutes(usersMinutesFromGmt),
                ScheduledEndUniversalTime = proposal.End.GetValueOrDefault().ToUniversalTime(),
                AvailableResource         = proposal.ProposalParties.First().ResourceId
            });

            AvailableTimes.DataSource = schedules;
            AvailableTimes.DataBind();

            SearchPanel.Visible           = false;
            ResultsDisplay.Visible        = true;
            ScheduleServiceButton.Enabled = false;
        }