When double booking in calender, the user get prompted to an dialog where Current day and +1 och -1 on day and then display the free dates, doing all this code wihout +1 om fromTime, and -1 on toTime, so for ex when the user adds 2014-12-10 12:00 to 2014-12-10 to 13:00 my query gets all items from 2014-12-09 from 08:00 to 2014-12-11 to 17:00 then is takes fromTime input 12 toTime input 13 and takes fromtime-toTime, to get the time out, in this case 1 hour.
var fromTime;
var toTime;
var listItemCustom;
var listItemtoDate;
var fromTimeConverted;
var toTimeConverted;
function checkFreebookingdateTime() {
getListCalender = document.getElementById('CalenderListDrop').value;
spHostUrl = decodeURIComponent(getQueryStringParameter('SPHostUrl'));
context = new SP.ClientContext.get_current();
parentContext = new SP.AppContextSite(context, spHostUrl);
web = parentContext.get_web();
list = web.get_lists().getByTitle(getListCalender);
context.load(list);
var fromDate08 = "T08:00:00Z";
var toDate17 = "T17:00:00Z";
listItemCustom = document.getElementById('datepicker').value;
var listItemFromTime = document.getElementById('timepicker').value;
listItemtoDate = document.getElementById('datepickerto').value;
var listItemToTime = document.getElementById('timepickerTo').value;
var result = listItemCustom + "T" + listItemFromTime + ":00" + "Z";
var result2 = listItemtoDate + "T" + listItemToTime + ":00" + "Z";
fromTime = new Date(result);
var numberToAddbefore = -1;
fromTime.setDate(fromTime.getDate() + numberToAddbefore);
fromTimeConverted = fromTime.toJSON().split('T')[0] + fromDate08;
toTime = new Date(result2);
var numberToAddafter = 1;
toTime.setDate(toTime.getDate() + numberToAddafter);
toTimeConverted = toTime.toJSON().split('T')[0] + toDate17;
var camlQuery = new SP.CamlQuery('<View><Query><Where><And><Geq><FieldRef Name=\'EventDate\' /><Value IncludeTimeValue=\'TRUE\' Type=\'DateTime\'>' + fromTimeConverted + '</Value></Geq><Leq><FieldRef Name=\'EndDate\' /><Value IncludeTimeValue=\'TRUE\' Type=\'DateTime\'>' + toTimeConverted + '</Value></Leq></And></Where></Query></View>');
camlQuery.set_viewXml();
collListItem = list.getItems(camlQuery);
context.load(collListItem);
context.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}
function onQuerySucceeded() {
var dtstartCon = new Date(fromTimeConverted);
var dtEndCon = new Date(toTimeConverted);
var convertUtctoFromtime = new Date(dtstartCon.getTime() + dtstartCon.getTimezoneOffset() * 60 * 1000);
var start = new Date(convertUtctoFromtime);
var convertUtcToTime = new Date(dtEndCon.getTime() + dtEndCon.getTimezoneOffset() * 60 * 1000);
var end = new Date(convertUtcToTime);
var listItemEnumerator = collListItem.getEnumerator();
var bookedTimes = [];
var bookedFreeTimes = [];
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var eventDate = new Date(oListItem.get_item('EventDate'));
var endDate = new Date(oListItem.get_item('EndDate'));
bookedTimes.push([eventDate, endDate]);
}
while (start.getTime() < end.getTime()) {
var mili = toTime - fromTime;
var timeFree = true;
var firstnewDate = (start.setTime(start.getTime()));
var firstNewDt = new Date(firstnewDate);
var newDate = start.setTime(start.getTime()+mili);
start = new Date(newDate);
for (var i = 0; i < bookedTimes.length; i++) {
var date = bookedTimes[i][0];
var date2 = bookedTimes[i][1];
if (firstNewDt.getTime() != date.getTime() && start.getTime() != date2.getTime()) {
} else {
bookedTimes.splice(i, 1);
timeFree = false;
break;
}
}
if (timeFree) {
var from = new Date(firstNewDt);
var to = new Date(start);
var day = from.getDate();
if (from.getHours() <= 16 && from.getMinutes() <= 30 && from.getHours() >= 8 && !(from.getDay() == 0 || from.getDay() == 6)) {
if (day <= 9) {
day = "0" + day;
}
var month = from.getMonth() + 1;
if (month <= 9) {
month = "0" + month;
}
var year = from.getFullYear();
var hours = from.getHours();
if (hours < 10) {
hours = "0" + hours;
}
var minutes = from.getMinutes();
if (minutes < 30) {
minutes = "0" + minutes;
}
var dayto = to.getDate();
if (dayto <= 9) {
dayto = "0" + dayto;
}
var monthto = to.getMonth() + 1;
if (monthto <= 9) {
monthto = "0" + monthto;
}
var yearto = to.getFullYear();
var hoursto = to.getHours();
if (hoursto < 10) {
hoursto = "0" + hoursto;
}
var minutesto = to.getMinutes();
if (minutesto < 30) {
minutesto = "0" + minutesto;
}
bookedFreeTimes.push(year + "-" + month + "-" + day + " " + hours + ":" + minutes + " , " + yearto + "-" + monthto + "-" + dayto + " " + hoursto + ":" + minutesto);
}
}
}
$(function () {
$("#dialog").dialog({
autoOpen: false,
modal: true,
width: 400,
height: 400,
});
var bokupptagentext = document.createTextNode("Din bokning är upptagen här nedan listas");
var createpupptagentext = document.createElement("p");
var node = document.createTextNode("Lediga tider");
var para = document.createElement("p");
para.style.fontSize = "14px";
var selectList = document.createElement("select");
var t = document.createTextNode("Boka möte");
var createButton = document.createElement("button");
var buttonElementcreate = document.getElementById("buttonResultpopup");
while (buttonElementcreate.hasChildNodes()) {
buttonElementcreate.removeChild(buttonElementcreate.firstChild);
}
var element = document.getElementById("textresultfree");
while (element.hasChildNodes()) {
element.removeChild(element.firstChild);
}
var myDiv = document.getElementById("myDivResult");
while (myDiv.hasChildNodes()) {
myDiv.removeChild(myDiv.firstChild);
}
var myDiv2 = document.getElementById("bokningupptagentext");
while (myDiv2.hasChildNodes()) {
myDiv2.removeChild(myDiv2.firstChild);
}
createButton.appendChild(t);
createButton.onclick = createbookingpopup;
buttonElementcreate.appendChild(createButton);
para.appendChild(node);
element.appendChild(para);
myDiv.appendChild(selectList);
createpupptagentext.appendChild(bokupptagentext);
myDiv2.appendChild(createpupptagentext);
$("#dialog").dialog("open");
var free = "";
for (var j = 0; j < bookedFreeTimes.length; j++) {
free = bookedFreeTimes[j];
var array = new Array(free);
for (var k = 0; k < array.length; k++) {
var option = document.createElement("option");
option.text = array[k];
option.value = array[k];
selectList.appendChild(option);
}
}
}
);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Right not it adds time 2014-12-09 08:00 2014 12-11 09:00 And 2014-12-11 09 2014-12-13 10:00
to my select option tag.
Wihout only getting the current day, works fine but when trying to use also get 1 day before and one day after, it dont get the right values

0 commentaires:
Enregistrer un commentaire