We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

Filtering appointments

Thread ID:

Created:

Updated:

Platform:

Replies:

120491 Sep 21,2015 07:57 AM UTC Sep 22,2015 02:52 PM UTC ASP.NET MVC 1
loading
Tags: Schedule
Fanisa
Asked On September 21, 2015 07:57 AM UTC

Hi, I have a scheduler that returns unfiltered appointments. I'd like to filter them using a json method that I fetch with an ajax call after the click of a button.
I cannot figure it out.

<div id="schedule" class="waiting" >
    @(Html.EJ().Schedule("Schedule1")
      .Width("100%")
      .Height("650px")
      .AllowKeyboardNavigation(true)
      .Locale("en-US")
      .TimeMode(Syncfusion.JavaScript.TimeMode.Hour12)
      .EnableAppointmentNavigation(true)
      .IsResponsive(true)
       .TimeZone("UTC +02:00")
       .ContextMenuSettings(menu => menu.Enable(true).MenuItems(item => item.Cells(ViewBag.cell).Appointment(ViewBag.app)))
      .ContextMenuSettings(menu => menu.Enable(true))
    .CurrentView(CurrentView.Month).AllowDragDrop(true)
    .EnableLoadOnDemand(true)
    .ScheduleClientSideEvents(eve => eve.CellDoubleClick("onOpen"))
            .ScheduleClientSideEvents(eve => eve.AppointmentHover("recordDetails"))
                             .ScheduleClientSideEvents(eve => eve.CellHover("recordDetails"))
                .ScheduleClientSideEvents(eve => eve.CellClick("cell"))
                            .ScheduleClientSideEvents(eve => eve.AppointmentClick("onAppointmentClick"))
        .ScheduleClientSideEvents(eve => eve.MenuItemClick("onMenuItemClicked"))
                        .ScheduleClientSideEvents(eve => eve.BeforeContextMenuOpen("popCustomContextMenu"))//.AppointmentSettings(fields => fields.Datasource(ds => ds.URL("/Home/GetData").Adaptor(AdaptorType.UrlAdaptor))  
    .Id("Id")
    .Subject("Subject")
    .StartTime("StartTime")
    .EndTime("EndTime")
    .AllDay("AllDay")
    .Recurrence("Recurrence")
    .RecurrenceRule("RecurrenceRule"))
      .StartHour(0)
      .EndHour(12)
          .AppointmentTemplateId("#MyTemplate"))


 <script type="text/javascript">
        var showAll = ko.observable(1);
        var showApproved = ko.observable(0);
        var showPendingApproval = ko.observable(0);
        var showActive = ko.observable(0);
        var showArchived = ko.observable(0);
        

        var filtersuccess = function (e) {
            var dManager = ej.DataManager(e).executeLocal(ej.Query());
            var schObj = $("#Schedule1").data("ejSchedule");
            //schObj._dataManager = dManager;
            schObj.model.appointmentSettings.dataSource = dManager;
            var c= $("#Schedule1").ejSchedule();
            //$("#Schedule1").data(e);
            //var schedule = $("#Schedule1");
            //schedule.sendRefreshRequest();
            //Moday do it with viewbag
            debugger;
        }
        var errorHandler = function (e) {
            debugger;
        }
        var all_click = function (e) {
            showAll(1);
            showApproved(0);
            showPendingApproval(0);
            showActive(0);
            showArchived(0);
            var dataToSend = { all: showAll(), approved: showApproved(), active: showActive(), pendingApproval: showPendingApproval(), archived: showArchived() }
            Home.common.ajaxPost(dataToSend, "home/filter", filtersuccess, errorHandler);
        }
        var approved_click = function (e) {
            showAll(0);
            showApproved(1);
            showPendingApproval(0);
            var dataToSend = { all: showAll(), approved: showApproved(), active: showActive, pendingApproval: showPendingApproval(), archived: showArchived() }
            Home.common.ajaxPost(dataToSend, "home/filter", filtersuccess, errorHandler);

        }
        var pendingApproval_click = function (e) {
            showAll(0);
            showApproved(0);
            showPendingApproval(1);
            var dataToSend = { all: showAll(), approved: showApproved(), active: showActive, pendingApproval: showPendingApproval(), archived: showArchived() }
            Home.common.ajaxPost(dataToSend, "home/filter", filtersuccess, errorHandler);
        }
        var active_click = function (e) {
            showAll(0);
            showActive(1);
            showArchived(0);
            var dataToSend = { all: showAll(), approved: showApproved(), active: showActive, pendingApproval: showPendingApproval(), archived: showArchived() }
            Home.common.ajaxPost(dataToSend, "home/filter", filtersuccess, errorHandler);
        }
        var archived_click = function (e) {
            showAll(0);
            showActive(0);
            showArchived(1);
            var dataToSend = { all: showAll(), approved: showApproved(), active: showActive, pendingApproval: showPendingApproval(), archived: showArchived() }
            Home.common.ajaxPost(dataToSend, "home/filter", filtersuccess, errorHandler);
        }


    </script>


The method is as follows in my controller:

 public JsonResult Filter( int? all, int? approved,int? archived, int? pendingApproval,int active=0)
        {
           
            List<DataSource> data = new List<DataSource>();
            var campaignDomainService = new CampaignDomainService();
            var campaigns = campaignDomainService.GetCampaigns();
            if (all > 0)
            {
                approved = 0;
                archived = 0;
                active = 0;
                pendingApproval = 0;

            }
            if (approved > 0)
            {
                campaigns=campaigns.Where(e => e.ApprovedDate.HasValue);
            }
            if (archived > 0)
            {
                campaigns = campaigns.Where(e => e.Archived == true);
                active = 0;
            }
            if (active > 0)
            {
                campaigns = campaigns.Where(e => e.Archived == false || e.Archived == null);
            }
            if (pendingApproval > 0)
            {
                campaigns = campaigns.Where(e => e.ApprovedDate!=null);
            }

            foreach (var campaign in campaigns)
            {
                data.Add(new DataSource(campaign.CampaignId, campaign.CampaignName, campaign.CampaignName,
                    campaign.StartDate, campaign.EndDate, false, false));
            }

            ViewBag.dataSource = data;

            return Json(data, JsonRequestBehavior.AllowGet);
        }




The problem is, How do i then take "data" and set it as the new datasource? 



Attachment: Capture_c994c3b2.zip

Karthigeyan Krishnamurthi [Syncfusion]
Replied On September 22, 2015 02:52 PM UTC

Hi Fanisa,

Thanks for contacting Syncfusion support.

We have prepared the sample to meet your requirement “Filtering appointments” , which can be downloaded from the following location. 

http://www.syncfusion.com/downloads/support/forum/120491/ze/Schedule_26cd5b3f-1211274046

In the above sample we had initially load the schedule control with some appointments. When the button “Load” is pressed  some appointments will be filtered via ajax post. Then the filtered appointments will be render in the schedule control.

Please let us know if you need any further assistance.


Regards,
Karthigeyan.


CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

;