From 59d0f2268e11a0e21012ecf9024f56cac361f5b9 Mon Sep 17 00:00:00 2001 From: Paul Poulain Date: Tue, 28 Apr 2009 22:27:17 +0200 Subject: [PATCH] Forgotten js & pl webservice --- acqui/check_budget_total.pl | 49 ++ koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 968 ++++++++++++++++++++++ 2 files changed, 1017 insertions(+) create mode 100755 acqui/check_budget_total.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/js/acq.js diff --git a/acqui/check_budget_total.pl b/acqui/check_budget_total.pl new file mode 100755 index 0000000000..723e5aeda0 --- /dev/null +++ b/acqui/check_budget_total.pl @@ -0,0 +1,49 @@ +#!/usr/bin/perl + +# Copyright 2008-2009 BibLibre SARL +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use CGI; +use C4::Context; +use C4::Output; +use C4::Auth; +use C4::Budgets; + +=head1 + +fetches the budget amount fron the DB + +=cut + +my $input = new CGI; +my $budget_id = $input->param('budget_id'); +my $total = $input->param('total'); + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => "acqui/ajax.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + debug => 1, } ); + +my $budget = GetBudget($budget_id); + +$template->param( return => $budget->{'budget_amount'} ); + +output_html_with_http_headers $input, $cookie, $template->output; +1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js new file mode 100644 index 0000000000..88061fc06a --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js @@ -0,0 +1,968 @@ +//======================================================================= +//input validation: +// acqui/uncertainprice.tmpl uses this +function uncheckbox(form, field) { + var price = new Number(form.elements['price' + field].value); + var tmpprice = ""; + var errmsg = "ERROR: Price is not a valid number, please check the price and try again!" + if (isNaN(price)) { + alert(errmsg); + for(var i=0; i 0) { + return false; + } + return true; +} + + + + + + + +//Function returns false if v is not a number (if maybenull is 0, it also returns an error if the number is 0) +function isNum(v,maybenull) { + var n = new Number(v.value); + if (isNaN(n)) { + return false; + } + if (maybenull==0 && v.value=='') { + + + return false; + } + return true; +} + +// this function checks if date is like DD/MM/YYYY +function CheckDate(field) { + var d = field.value; + if (d!="") { + var amin = 1900; + var amax = 2100; + var date = d.split("/"); + var ok=1; + var msg; + if ( (date.length < 2) && (ok==1) ) { + msg = _("Separator must be /"); + alert(msg); ok=0; field.focus(); + return false; + } + var dd = date[0]; + var mm = date[1]; + var yyyy = date[2]; + // checking days + if ( ((isNaN(dd))||(dd<1)||(dd>31)) && (ok==1) ) { + msg = _("day not correct."); + alert(msg); ok=0; field.focus(); + return false; + } + // checking months + if ( ((isNaN(mm))||(mm<1)||(mm>12)) && (ok==1) ) { + msg = _("month not correct."); + alert(msg); ok=0; field.focus(); + return false; + } + // checking years + if ( ((isNaN(yyyy))||(yyyyamax)) && (ok==1) ) { + msg = _("years not correct."); + alert(msg); ok=0; field.focus(); + return false; + } + // check day/month combination + if ((mm==4 || mm==6 || mm==9 || mm==11) && dd==31) { + msg = _("Invalid Day/Month combination. Please ensure that you have a valid day/month combination."); + alert(msg); ok=0; field.focus(); + return false; + } + // check for february 29th + if (mm == 2) { + var isleap = (yyyy % 4 == 0 && (yyyy % 100 != 0 || yyyy % 400 == 0)); + if (dd>29 || (dd==29 && !isleap)) { + msg = _("Invalid Day. This year is not a leap year. Please enter a value less than 29 for the day."); + alert(msg); ok=0; field.focus(); + return false + } + } + } + return true; +} + +// Checks wether start date is greater than end date +function CompareDate(startdate, enddate) { + startdate=startdate.split("/"); + syear = startdate[2]; + smonth = startdate[1]; + sday = startdate[0]; + enddate=enddate.split("/"); + eyear = enddate[2]; + emonth = enddate[1]; + eday = enddate[0]; + + var sdate = new Date(syear,smonth-1,sday); + var edate = new Date(eyear,emonth-1,eday); + if (sdate > edate) { + msg = _("Start date after end date, please check the dates!"); + alert(msg); ok=0; field.focus(); + return false; + } + return true; +} + +// checks wether end date is before today, returns false if it is +function CheckEndDate(enddate) { + enddate=enddate.split("/"); + eyear = enddate[2]; + emonth = enddate[1]; + eday = enddate[0]; + var edate = new Date(eyear,emonth-1,eday); + var today = new Date( ); + if (today > edate) { + msg = _("End date before today, Invalid end date!"); + alert(msg); ok=0; field.focus(); + return false; + } + return true; +} + + + +//======================================================================= + +//======================================================================= +// Functions for drag-and-drop functionality + + +(function() { + +var Dom = YAHOO.util.Dom; +var Event = YAHOO.util.Event; +var DDM = YAHOO.util.DragDropMgr; + +DDApp = { + init: function() { + var uls = document.getElementsByTagName('ul'); + var i,j; + var ddtarget; + for (i=0; i this.lastY) { + this.goingUp = false; + } + this.lastY = y; + }, + + onDragOver: function(e, id) { + + var srcEl = this.getEl(); + var destEl = Dom.get(id); + + // We are only concerned with list items, we ignore the dragover + // notifications for the list. + if (destEl.nodeName.toLowerCase() == "li") { + var orig_p = srcEl.parentNode; + var p = destEl.parentNode; + + if (this.goingUp) { + p.insertBefore(srcEl, destEl); // insert above + } else { + p.insertBefore(srcEl, destEl.nextSibling); // insert below + } + + DDM.refreshCache(); + } + } +}); +})(); + + + + +//creates new group, parameter is the group's name +function newGroup(event, name) { + if (name == ''){ + return 0; + } + if (!enterpressed(event) && event != "button"){ + return false; + } + var pardiv = document.getElementById('groups'); + var newdiv = document.createElement('div'); + var newh3 = document.createElement('h3'); + var newul = document.createElement('ul'); + var newclose = document.createElement('a'); + var newrename = document.createElement('a'); + var newbasketgroupname = document.createElement('input'); + var nbgclosed = document.createElement('input'); + var newp = document.createElement('p'); + var reg=new RegExp("[-]+", "g"); + var i = 0; + var maxid = 0; + while( i < pardiv.getElementsByTagName('input').length ){ + if (! isNaN(parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1])) && parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]) > maxid){ + maxid = parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]); + } + ++i; + } +// var bgid = parseInt(pardiv.getElementsByTagName('input')[pardiv.getElementsByTagName('input').length-2].name.split(reg)[1]) + 1; + var bgid = maxid + 1; + var newchanged = document.createElement('input'); + + newul.id="bg-"+bgid; + newul.className='draglist'; + + newh3.innerHTML=name; +// newh3.style.display="inline"; + + newclose.innerHTML="close"; + newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');"; + + newrename.href="javascript:" + "renameinit("+bgid+");"; + newrename.innerHTML="rename"; + +// newp.style.display="inline"; + newp.innerHTML=" [ "; + newp.appendChild(newrename); + newp.innerHTML+=" / "; + newp.appendChild(newclose); + newp.innerHTML+=" ]"; + + newbasketgroupname.type="hidden"; + newbasketgroupname.name="basketgroup-" + bgid + "-name"; + newbasketgroupname.id = "basketgroup-" + bgid + "-name"; + newbasketgroupname.value=name; + + nbgclosed.type="hidden"; + nbgclosed.name="basketgroup-" + bgid + "-closed"; + nbgclosed.value="0"; + nbgclosed.id=nbgclosed.name; + + newchanged.type="hidden"; + newchanged.id="basketgroup-"+bgid+"-changed"; + newchanged.name=newchanged.id; + newchanged.value="1"; + + newdiv.style.backgroundColor='red'; + newdiv.appendChild(newh3); + newdiv.appendChild(newp); + newdiv.appendChild(newul); + newdiv.appendChild(newbasketgroupname); + newdiv.appendChild(nbgclosed); + newdiv.appendChild(newchanged); + newdiv.className='workarea'; + pardiv.appendChild(newdiv); + + YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true); +} + +//this traps enters in input fields +function enterpressed(event){ + var keycode; + if (window.event) keycode = window.event.keyCode; + else if (event) keycode = event.which; + else return false; + + if (keycode == 13) + { + return true; + } + else return false; +} + + + + + +//Closes a basketgroup +function closebasketgroup(bgid) { + var answer=confirm(_("Are you sure you want to close this basketgroup?")); + if(! answer){ + return; + } + ulid = 'bg-'+bgid; + var i = 0; + tagname='basketgroup-'+bgid+'-closed'; + var ddtarget; + var closeinput = document.getElementById(tagname); + closeinput.value = 1; + var changed = document.getElementById("basketgroup-"+bgid+"-changed"); + changed.value=1; + + var div = document.getElementById(tagname).parentNode; + var stufftoremove = div.getElementsByTagName('p')[0]; + var ul = document.getElementById(ulid); + var lis = ul.getElementsByTagName('li'); + if (lis.length == 0 ) { + alert(_("Why close an empty basket?")); + return; + } + var cantprint = document.createElement('p'); + + div.className = "closed"; + ul.className="closed"; + + for(i=0; iDebug Log" + + ""); + doc.close(); + log.window_ = win; + } + var logLine = log.window_.document.createElement("div"); + logLine.appendChild(log.window_.document.createTextNode(message)); + log.window_.document.body.appendChild(logLine); +} +//======================================================================= + + + + function ownerPopup(f) { + window.open("/cgi-bin/koha/admin/aqbudget_owner_search.pl?op=budget",'PatronPopup','width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes'); + } + // +//======================================================================= +function getElementsByClass( searchClass, domNode, tagName) { + if (domNode == null) domNode = document; + if (tagName == null) tagName = '*'; + var el = new Array(); + var tags = domNode.getElementsByTagName(tagName); + var tcl = " "+searchClass+" "; + for(i=0,j=0; i 0 ) { + remainingTotal.style.color = 'green'; + } else { // if its negative, make it red.. + remainingTotal.style.color = 'red'; + } + + remainingTotal.textContent = remainingNew.toFixed(2) ; +} + +function autoFillRow(bud_id) { + + var remainingTotal = document.getElementById("budget_est_"+bud_id) ; + var remainingNew = new Number; + var budgetTotal = document.getElementById("budget_tot_"+bud_id ).textContent; + var arr = getElementsByClass(bud_id); + + budgetTotal = budgetTotal.replace(/\,/, ""); + var qty = new Number; +// get the totals + for ( var i=0, len=arr.length; i


"); + win.document.write(etc); + win.document.write("

"); + win.document.write("
"); +} + + +//======================================================================= + +// NEXT BLOCK IS USED BY NEWORDERBEMPTY + +function calcNeworderTotal(f){ + //collect values + var quantity = new Number(f.quantity.value); + var discount = new Number(f.discount.value); + var listinc = new Number (f.listinc.value); + var currency = f.currency.value; + var applygst = new Number (f.applygst.value); + var list_price = new Number(f.list_price.value); + var invoiceingst = new Number (f.invoiceincgst.value); + var exchangerate = new Number(f.elements[currency].value); //get exchange rate + var gst_on=(!listinc && invoiceingst); + + //do real stuff + var rrp = new Number(list_price*exchangerate); + var ecost = new Number(rrp * (100 - discount ) / 100); + var GST = new Number(0); + if (gst_on) { + rrp=rrp * (1+f.gstrate.value / 100); + GST=ecost * f.gstrate.value / 100; + } + + var total = new Number( (ecost + GST) * quantity); + + f.rrp.value = rrp.toFixed(2); + +// f.rrp.value = rrp +// f.rrp.value = 'moo' + + f.ecost.value = ecost.toFixed(2); + f.total.value = total.toFixed(2); + f.list_price.value = list_price.toFixed(2); + +// gst-stuff needs verifing, mason. + if (f.GST) { + f.GST.value=GST; + } + return true; +} + +// ---------------------------------------- +//USED BY NEWORDEREMPTY.PL +/* +function fetchSortDropbox(f) { + var budgetId=f.budget_id.value; + var handleSuccess = function(o){ + if(o.responseText !== undefined){ + sort_dropbox.innerHTML = o.responseText; + } + } + + var callback = { success:handleSuccess }; + var sUrl = '../acqui/fetch_sort_dropbox.pl?sort=1&budget_id='+budgetId + var sort_dropbox = document.getElementById('sort1'); + var request1 = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); + var rr = '00'; + +// FIXME: --------- twice , coz the 2 requests get mixed up otherwise + + var handleSuccess2 = function(o){ + if(o.responseText !== undefined){ + sort2_dropbox.innerHTML = o.responseText; + } + } + + var callback2 = { success:handleSuccess }; + var sUrl2 = '../acqui/fetch_sort_dropbox.pl?sort=2&budget_id='+budgetId; + var sort2_dropbox = document.getElementById('sort2'); + var request2 = YAHOO.util.Connect.asyncRequest('GET', sUrl2, callback2); + +} +*/ + + + +//USED BY NEWORDEREMPTY.PL +function fetchSortDropbox(f) { + var budgetId=f.budget_id.value; + + for (i=1;i<=2;i++) { + + var sort_dropbox = document.getElementById('sort'+i); + var url = '../acqui/fetch_sort_dropbox.pl?sort='+i+'&budget_id='+budgetId; + + var xmlhttp = null; + xmlhttp = new XMLHttpRequest(); + if ( typeof xmlhttp.overrideMimeType != 'undefined') { + xmlhttp.overrideMimeType('text/xml'); + } + + xmlhttp.open('GET', url, false); + xmlhttp.send(null); + + xmlhttp.onreadystatechange = function() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + // stupid JS... + } else { + // wait for the call to complete + } + }; + // rc = eval ( xmlhttp.responseText ); + sort_dropbox.innerHTML = xmlhttp.responseText; + } +} + + + + + + + +//USED BY NEWORDEREMPTY.PL +function totalExceedsBudget(budgetId, total) { + + var xmlhttp = null; + xmlhttp = new XMLHttpRequest(); + if ( typeof xmlhttp.overrideMimeType != 'undefined') { + xmlhttp.overrideMimeType('text/xml'); + } + + var url = '../acqui/check_budget_total.pl?budget_id=' + budgetId + "&total=" + total; + xmlhttp.open('GET', url, false); + xmlhttp.send(null); + + xmlhttp.onreadystatechange = function() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + + actTotal = eval ( xmlhttp.responseText ); + + if ( Math.abs(actTotal) < Math.abs(total) ) { + // if budget is to low :( + return true ; + } else { + return false; + } + } + } +} + + +//USED BY AQBUDGETS.TMPL +function budgetExceedsParent(budgetTotal, budgetId, newBudgetParent, periodID) { + + + var xmlhttp = null; + xmlhttp = new XMLHttpRequest(); + if ( typeof xmlhttp.overrideMimeType != 'undefined') { + xmlhttp.overrideMimeType('text/xml'); + } + +// make the call... yawn +// var url = '../admin/check_parent_total.pl?budget_id=' + budgetId + '&parent_id=' + newBudgetParent + "&total=" + budgetTotal + "&period_id="+ periodID ; + + + var url = '../admin/check_parent_total.pl?total=' + budgetTotal + "&period_id="+ periodID ; + +if (budgetId ) { url += '&budget_id=' + budgetId }; +if ( newBudgetParent ) { url += '&parent_id=' + newBudgetParent}; + + + xmlhttp.open('GET', url, false); + xmlhttp.send(null); + + xmlhttp.onreadystatechange = function() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + // stupid JS... + } else { + // wait for the call to complete + } + }; + + var result = eval ( xmlhttp.responseText ); + + if (result == '1') { + return _("- Budget total exceeds parent allocation\n"); + } else if (result == '2') { + return _("- Budget total exceeds period allocation\n"); + } else { + return false; + } +} + + + + +//USED BY AQBUDGETS.TMPL +function checkBudgetParent(budgetId, newBudgetParent) { + var xmlhttp = null; + xmlhttp = new XMLHttpRequest(); + if ( typeof xmlhttp.overrideMimeType != 'undefined') { + xmlhttp.overrideMimeType('text/xml'); + } + + var url = '../admin/check_budget_parent.pl?budget_id=' + budgetId + '&new_parent=' + newBudgetParent; + xmlhttp.open('GET', url, false); + xmlhttp.send(null); + + xmlhttp.onreadystatechange = function() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + // do something with the results + } else { + // wait for the call to complete + } + }; + + var result = eval ( xmlhttp.responseText ); + + if (result == '1') { + return _("- New budget-parent is beneath budget\n"); +// } else if (result == '2') { +// return "- New budget-parent has insufficent funds\n"; +// } else { +// return false; + } +} + -- 2.20.1