mercredi 10 décembre 2014

Get date before and after and query out free dates on range



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