Skip to Content
Technical Articles

Special Dates on Planning Calendar in SAP UI5

Hi All,

In this blog post, I am going to explain the situation where the requirement is to highlight the days that are occupied with appointments by default and should display the occupied appointments once after clicking on highlighted days.

So we have the availability of special dates control in sap.m.planningcalendar, with that we can give a solution to it.

Please refer to my last blog for developing sample planning calendar Application.

https://blogs.sap.com/2020/11/30/planning-calendar-in-sap-ui5-using-business-application-studiobas/

After that follow the below steps:

Step1:

Open the View1.view.xml and copy the below code:

<PlanningCalendar
			id="PC1"
			startDate="{path: '/startDate'}"
			rows="{path: '/people'}"
			appointmentsVisualization="Filled"
			appointmentSelect="handleAppointmentSelect"
			showEmptyIntervalHeaders="false"
			showWeekNumbers="true"
            specialDates="{path: 'splDatesModel>/AppointmentArray', templateShareable: true}">         
			<rows>
				<PlanningCalendarRow				
					title="{name}"				
					appointments="{path : 'appointments', templateShareable: true}">				
					<appointments>
						<unified:CalendarAppointment
							startDate="{start}"
							endDate="{end}"							
							title="{title}"
							text="{info}"
							type="{type}"
							tentative="{tentative}">
						</unified:CalendarAppointment>
					</appointments>					
				</PlanningCalendarRow>
			</rows>
            	<specialDates>
					<unified:DateTypeRange
							startDate="{splDatesModel>start}"
							endDate="{splDatesModel>end}"
							type="{splDatesModel>type}">
					</unified:DateTypeRange>
				</specialDates>
		</PlanningCalendar>

Step2:

Open the View1.controller.js and paste the below code:

         onInit: function () {
                // create model
                var obj = {
                    startDate: new Date("2020", "11", "01", "8", "0"),
                    people: [{
                        name: "Sunil",
                        appointments: [
                            {
                                start: new Date("2020", "11", "1", "08", "30"),
                                end: new Date("2020", "11", "8", "09", "30"),
                                title: "Telangana",
                                info: "Manikonda,Hyderabad",
                                type: "Type02",
                                tentative: false
                            },
                            {
                                start: new Date("2020", "11", "11", "10", "0"),
                                end: new Date("2020", "11", "11", "12", "0"),
                                title: "Andhra Pradesh",
                                info: "Balaji Colony,Tirupathi",
                                type: "Type01",
                                tentative: false
                            },
                            {
                                start: new Date("2020", "11", "15", "10", "0"),
                                end: new Date("2020", "11", "15", "12", "0"),
                                title: "Andhra Pradesh",
                                info: "MVP Colony,Visakapatnam",
                                type: "Type01",
                                tentative: false
                            }


                        ]

                    },
                    {
                        name: "Anil",
                        appointments: [
                            {
                                start: new Date("2020", "11", "1", "18", "00"),
                                end: new Date("2020", "11", "2", "19", "10"),
                                title: "Telangana",
                                info: "Madhapur,Hyderabad",
                                type: "Type04",
                                tentative: false
                            },
                            {
                                start: new Date("2020", "11", "5", "18", "00"),
                                end: new Date("2020", "11", "8", "19", "10"),
                                title: "Telangana",
                                info: "Banjara Hills,Hyderabad",
                                type: "Type04",
                                tentative: false
                            },
                            {
                                start: new Date("2020", "11", "11", "18", "00"),
                                end: new Date("2020", "11", "15", "19", "10"),
                                title: "Andhra Pradesh",
                                info: "Rushikonda,Visakapatnam",
                                type: "Type04",
                                tentative: false
                            }
                        ]

                    },
                    {
                        name: "Chaithanya",
                        appointments: [
                            {
                                start: new Date("2020", "11", "15", "08", "30"),
                                end: new Date("2020", "11", "15", "09", "30"),
                                title: "Telangana",
                                info: "Jiblee Hills,Hyderabad",
                                type: "Type02",
                                tentative: false
                            },

                            {
                                start: new Date("2020", "11", "20", "11", "0"),
                                end: new Date("2020", "11", "26", "23", "59"),
                                title: "Telangana",
                                info: "Mothi Nagar,Hyderabad",
                                type: "Type10",
                                tentative: false
                            }
                        ]

                    }
                    ]             
                };
                var oModel = new JSONModel();
                oModel.setData(obj);
                this.getView().setModel(oModel);

                var AppointmentArray = [];
                
                for (var i = 0; i < obj.people.length; i++) {
                    if (obj.people[i].appointments) {
                        obj.people[i].appointments.forEach(element => {
                        AppointmentArray.push(element);                              
                        });
                    }
                }
                console.log(AppointmentArray);
                var splDatesobj = {
                    "AppointmentArray" :AppointmentArray
                }
              
                var oModel = new JSONModel();
                oModel.setData(splDatesobj);
                this.getView().setModel(oModel, "splDatesModel");


            },

            handleAppointmentSelect: function (oEvent) {
                var oAppointment = oEvent.getParameter("appointment"),
                    sSelected;
                if (oAppointment) {
                    sSelected = oAppointment.getSelected() ? "selected" : "deselected";
                    MessageBox.show("'" + oAppointment.getTitle() + "' " + sSelected + "\n" + oAppointment.getText());
                } else {
                    var aAppointments = oEvent.getParameter("appointments");
                    var sValue = aAppointments.length + " Appointments selected";
                    MessageBox.show(sValue);
                }
            }

Step3:

Re-run the application. The output screen would be like below with highlighted dates.

Conclusion:

By the following, we have successfully highlighted the days that are occupied with appointments.

 

I hope it helps,

Thank You.

Be the first to leave a comment
You must be Logged on to comment or reply to a post.