Files
Facilitor/APPL/BEZ/bez_multi.asp

236 lines
8.8 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: bez_multi.asp
Description: Maak een dialoog om gegevens van een afspraak
repeterend te maken
Parameters:
afspr_key bron-afspraak
Context:
Note:
*/
%>
<!--#include file="../Shared/common.inc"-->
<!--#include file="../Shared/iface.inc"-->
<!--#include file="../Shared/selector.inc"-->
<!--#include file="../Shared/calendar.inc"-->
<!--#include file="./bez.inc"-->
<%
FCLTHeader.Requires({plugins: ["jQuery"],
js: ["date.js"]})
var urole = getQParamSafe("urole");
var afspr_key = getQParamInt("afspr_key");
var this_bez = bez.func_enabled_afspraak(afspr_key);
user.auth_required_or_abort(this_bez.canChange);
%>
<html>
<head>
<% FCLTHeader.Generate()
var submitting = getQParamInt("submit",0)==1;
if (submitting)
{
var form_dates = Request.Form("newDates");
for (var i=1; i<= form_dates.Count; i++)
{
var datum = new Date(parseInt(form_dates(i),10));
var sql = "BEGIN bez.copy_afspraak("+afspr_key+","+datum.toSQL()+", "+user_key+", NULL); END;";
Oracle.Execute(sql);
}
var msg = L("lcl_bez_multi_created").format(form_dates.Count);
if (this_bez.nrPAF > 0)
msg += "\n" + L("lcl_bez_paf_not_copied").format(this_bez.nrPAF);
%><script>$(document).ready(function () {
FcltMgr.closeDetail(window, { refresh: true, warning:
"<%=safe.jsstring(msg)%>" } );
});
</script><%
Response.End;
}
// =========================================
// Eerst wat info ophalen
var sql = "SELECT ba.bez_afspraak_datum"
+ ", ba.bez_afspraak_eind"
+ " FROM bez_afspraak ba"
+ " WHERE ba.bez_afspraak_key = "+afspr_key;
oRs = Oracle.Execute(sql);
var bez = { afspraak_datum : new Date(oRs("bez_afspraak_datum").value),
afspraak_eind : new Date(oRs("bez_afspraak_eind").value)
}
oRs.Close();
var limiet = (urole=="fe"&&S("vis_fe_afspraak_limiet")>0)?S("vis_fe_afspraak_limiet"):S("vis_afspraak_limiet");
if (limiet < 0)
limiet = 9999; // 30 jaar, rekent gemakkelijker.
var maxday = new Date()
maxday.setDate(maxday.getDate() + limiet);
%>
<script type="text/javascript">
function fillDates()
{
$("#newDates").empty();
var np = $("#n_periods").val();
if (isNaN(np) || np < 1)
{
FcltMgr.alert(L("lcl_bez_period_error"))
return;
}
var nextDate = new Date(parseInt($('#date_from0').val()));
nextDate.setHours(0,0,0,0);
var interval = parseInt($("#sel_cycle").val());
var i;
var bez_new_dates=[];
for (i=0; i< np; i++)
{
nextDate.setDate(nextDate.getDate() + interval);
if (nextDate.getTime() > <%=maxday.getTime()%>)
{
FcltMgr.alert(L("lcl_bez_multi_limit_reached") + toDateString(nextDate));
break;
}
if($("#withWeekends:checked").val()=="on" &&
($.inArray(nextDate.getTime(), mld_vrije_dagen) > -1
||nextDate.getDay()==0
||nextDate.getDay()==6)
)
{
np++;
continue;
}
bez_new_dates.push(nextDate.getTime());
$("#newDates").append("<option value="+nextDate.getTime()+">"+toDateString(nextDate)+"</option>")
};
window.dates = bez_new_dates; // of merge?
$("#show_date_from").datepicker('refresh'); // undocumented maar werkt bij 1.7.3
}
function onChangePeriod(el)
{
if (el.value==0) // niet periodiek
{
$("#n_periods").attr('disabled',true).val(1);
}
else
$("#n_periods").attr('disabled',false);
}
function multi_submit ()
{
if (!dates.length)
{
FcltMgr.alert(L("lcl_bez_multi_none"));
return false;
}
$("#newDates").empty();
var i;
for (i=0; i<dates.length; i++)
{
var nextDate = dates[i];
$("#newDates").append("<option value="+nextDate+">"+toDateString(new Date(nextDate))+"</option>")
}
$('#newDates>option').prop('selected','true');
document.forms.u2.submit();
return true; // disable button
}
// Maintain array of dates
// Vrij naar http://stackoverflow.com/questions/1452066
var dates = new Array();
function addDate(date) {if ($.inArray(date, dates) < 0) dates.push(date);}
function removeDate(index) {dates.splice(index, 1);}
// Adds a date if we don't have it yet, else remove it
function addOrRemoveDate(date)
{ var index = $.inArray(date, dates);
if (index >= 0)
removeDate(index);
else
addDate(date);
}
jQuery(document).ready(
function(){
$("#show_date_from").datepicker(
{ altField: "#date_from",
minDate : '0d',
maxDate : '+<%=limiet%>d',
numberOfMonths: 2,
onSelect: function(dateText, inst) // noot: het alt-veld is al bijgewerkt
{
var dt = parseInt($("#date_from").val());
addOrRemoveDate(dt);
},
beforeShowDay: function (date)
{
var dt = date.getTime();
var gotDate = $.inArray(dt, dates);
if (gotDate >= 0) {
// Enable date so it can be deselected. Set style to be highlighted
return [true,"calselected"];
}
// Dates not in the array are left enabled, but with no extra style
return [true, ""];
}
});
});
</script>
</head>
<body class="modal" id="mod_resmulti">
<form name=u2 action=bez_multi.asp?submit=1&urole=<%=urole%>&afspr_key=<%=afspr_key%> method="post">
<% BLOCK_START("", L("lcl_bez_repeat1") + afspr_key + " ("+toDateTimeString(bez.afspraak_datum)+")" + L("lcl_bez_repeat3"));
//======= FIELD 'Periode' =======
sql = "SELECT c.res_cyclus_periode, "+lcl.xsqla('c.res_cyclus_naam','res_cyclus_key')
+ " FROM res_cyclus c"
+ " WHERE res_cyclus_periode > 0"
+ " AND res_cyclus_periode <> 31" // Maandelijks kunnen we bij BEZ nog niet aan
+ " ORDER BY res_cyclus_periode";
FCLTselector( 'sel_cycle', sql,
{ label: L("lcl_period"),
onChange: "onChangePeriod(this)"
}
);
var today = new Date();
FCLTcalendar( "date_from0",
{ label : L("lcl_bez_repeat2"),
datum: bez.afspraak_datum.getTime()>today.getTime()?bez.afspraak_datum:today, // of today als de ruimte ouder is
maxPast : 0,
maxFuture: limiet,
timeField: false
});
RWFIELDTR("n_periods", "fldshort", L("lcl_n_of_periods"), "");
%>
<tr>
<td class="label"><label for="withWeekends"><%=L("lcl_res_skipnonworkdays")%>:</label></td>
<td><input id='withWeekends' type='checkbox' checked></td>
</tr>
<tr><td colspan="2">
<%
var buttons = [ {title: L("lcl_bez_makedates"), action:"fillDates()" }];
CreateButtons(buttons);
%>
</td></tr>
<tr><td colspan=2>
<input type="hidden" id="date_from" />
<div id="show_date_from"></div>
</td>
</tr>
<% BLOCK_END(); %>
<select style="display:none" id="newDates" name="newDates" multiple size="10"></select>
<% IFACE.FORM_END(); %>
<%
CreateButtons([ { title: L("lcl_res_duplicate"), action: "multi_submit()", singlepress: true, id: "btn_multi_submit" },
{ title: L("lcl_cancel"), action: "FcltMgr.closeDetail(window, { cancel: true } )"} ]);
%>
</form>
</body>