/* * This file is part of NOALYSS. * * NOALYSS 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. * * NOALYSS 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 NOALYSS; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* $Revision$ */ // Copyright Author Dany De Bontridder danydb@aevalys.eu /*! \file * \brief javascript for searching a card */ var card_layer=1; /** *@brief search a card an display the result into a inner box */ function boxsearch_card(p_dossier) { try { waiting_box(); removeDiv('boxsearch_card_div'); var queryString="gDossier="+p_dossier+"&op=cardsearch"+"&card="+$(card_search).value; var action = new Ajax.Request( "ajax_misc.php" , { method:'get', parameters:queryString, onFailure:ajax_misc_failure, onSuccess:function(req){ remove_waiting_box(); var y=posY+15; var div_style="left:10%;width:80%;"+";top:"+y+"px"; add_div({id:'boxsearch_card_div',cssclass:'inner_box',html:loading(),style:div_style,drag:true}); $('boxsearch_card_div').innerHTML=req.responseText; sorttable.makeSortable($('tb_fiche')); } } ); }catch( e) { alert_box(e.getMessage); } } /** *@brief show the ipopup with the form to search a card * the properties * - jrn for the ledger * - fs for the action * - price for the price of the card (field to update) * - tvaid for the tvaid of the card (field to update) * - inp input text to update with the quickcode * - label field to update with the name * - ctl the id to fill with the HTML answer (ending with _content) */ function search_card(obj) { try { var gDossier=$('gDossier').value; var inp=obj.inp; var string_to_search=$(inp).value; var label=obj.label; var typecard=obj.typecard; var price=obj.price; var tvaid=obj.tvaid; var jrn=obj.jrn; if ( jrn==undefined) { if ( g('p_jrn')) { jrn=$('p_jrn').value; } else { jrn=-1; } } var query=encodeJSON({'gDossier':gDossier, 'inp':inp,'label':label,'price':price,'tvaid':tvaid, 'ctl':'search_card','op':'fs','jrn':jrn, 'typecard':typecard,'query':string_to_search }); if ( $('search_card') ) { removeDiv('search_card'); } waiting_box(); var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:query, onFailure:errorFid, onSuccess:result_card_search } ); } catch(e) { alert_box('search_card failed'+e.message); } } /** *@brief Display form for select card to add to action : other_concerned *action_add_concerned_card */ function action_add_concerned_card(obj) { try { var dossier = 0; var inp=""; var ag_id=0; if (obj.dossier) { dossier = obj.dossier; /* From the button */ } if (obj.ag_id) { ag_id=obj.ag_id; } /* from the form */ if (obj.elements) { if (obj.elements['gDossier']) { dossier = obj.elements['gDossier'].value; } if (obj.elements['query']) { inp = obj.elements['query'].value; } if (obj.elements['ag_id']) { ag_id = obj.elements['ag_id'].value; } } if (dossier == 0) { throw "obj.dossier not found"; } if (ag_id == 0) { throw "obj.ag_id not found"; } var query = encodeJSON({ 'gDossier': dossier, 'op': 'action_add_concerned_card', 'query' : inp, 'ctl' : 'unused', 'ag_id' : ag_id }); waiting_box(); var action = new Ajax.Request('ajax_card.php', { method: 'get', parameters: query, onFailure: errorFid, onSuccess: function (req, txt) { try { remove_waiting_box(); var answer = req.responseXML; var a = answer.getElementsByTagName('ctl'); if (a.length == 0) { var rec = req.responseText; alert_box('erreur :' + rec); } var html = answer.getElementsByTagName('code'); var namectl = a[0].firstChild.nodeValue; var nodeXml = html[0]; var code_html = getNodeText(nodeXml); code_html = unescape_xml(code_html); var sx = 0; if (window.scrollY) { sx = window.scrollY + 40; } else { sx = document.body.scrollTop + 60; } var div_style = "top:" + sx + "px;height:80%"; if ( ! $('search_card')) { add_div({id: 'search_card', cssclass: 'inner_box', html: "", style: div_style, drag: true}); } $('search_card').innerHTML = code_html; $('query').focus(); }catch (e) { alert_box(e.message); } } } ); } catch (e) { alert_box('search_card failed' + e.message); return false; } return false; } /** *@brief when you submit the form for searching a card *@param obj form *@note the same as search_card, except it answer to a FORM and not * to a click event */ function search_get_card(obj) { var dossier=$('gDossier').value; var queryString="gDossier="+dossier; queryString+="&op=fs"; if ( obj.elements['inp'] ) { queryString+="&inp="+$F('inp'); } if ( obj.elements['typecard'] ) { queryString+="&typecard="+$F('typecard'); } if ( obj.elements['jrn'] ) { queryString+="&jrn="+$F('jrn'); } if ( obj.elements['label']) { queryString+="&label="+$F('label'); } if ( obj.elements['price']) { queryString+="&price="+$F('price'); } if ( obj.elements['tvaid']) { queryString+="&tvaid="+$F('tvaid'); } if( obj.elements['query']) { queryString+="&query="+$F('query'); } if (obj.ctl ) { queryString+="&ctl="+obj.ctl; } $('asearch').innerHTML=loading(); var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:result_card_search } ); } /** *@brief show the answer of ajax request *@param answer in XML */ function result_card_search(req) { try { remove_waiting_box(); var answer=req.responseXML; var a=answer.getElementsByTagName('ctl'); if ( a.length == 0 ) { var rec=req.responseText; alert_box ('erreur :'+rec); } var html=answer.getElementsByTagName('code'); var name_ctl=a[0].firstChild.nodeValue; var nodeXml=html[0]; var code_html=getNodeText(nodeXml); code_html=unescape_xml(code_html); var sx=0; if ( window.scrollY) { sx=window.scrollY+40; } else { sx=document.body.scrollTop+60; } var div_style="top:"+sx+"px;height:80%"; add_div({id:'search_card',cssclass:'inner_box',html:"",style:div_style,drag:true,effect:'blinddown'}); $('search_card').innerHTML=code_html; if ($('query')) { $('query').focus();} } catch (e) { alert_box(e.message); } try { code_html.evalScripts(); } catch(e) { alert_box("Impossible executer script de la reponse\n"+e.message); } } /*!\brief Set the value of 2 input fields * * Set the quick code in the first ctrl and the label of the quickcode in the second one. This function is a variant of SetData for * some specific need. This function is called if the caller is searchcardCtrl * *\param p_ctrl the input with the name of the quick code *\param p_quickcode the found quick_code *\param p_ctrlname the name of the input field with the label *\param p_label the label of the quickcode */ function setCtrl(p_ctrl,p_quickcode,p_ctrlname,p_label) { var ctrl=g(p_ctrl); if ( ctrl ) { ctrl.value=p_quickcode; } var ctrl_name=g(p_ctrlname); if ( ctrl_name ) { ctrl_name.value=p_label; } } /*!\brief clean the row (the label, price and vat) * \param p_ctl the calling ctrl */ function clean_Fid(p_ctl) { nSell=p_ctl+"_price"; nBuy=p_ctl+"_price"; nTva_id=p_ctl+"_tva_id"; if ( $(nSell) ) { $(nSell).value=""; } if ( $(nBuy) ) { $(nBuy).value=""; } if ( $(nTva_id) ) { $(nTva_id).value="-1"; } } function errorFid(request,json) { alert_box('erreur : ajax fiche'); } function update_value(text,li) { ajaxFid(text); } /** *@brief is called when something change in ICard *@param the input field *@see ICard */ function fill_data_onchange(ctl) { ajaxFid(ctl); } /** *@brief is called when something change in ICard *@param the input field *@see ICard */ function fill_data(text,li) { ajaxFid(text); } /** *@brief is called when something change in ICard *@param the input field *@see ICard */ function fill_fin_data_onchange(ctl) { ajaxFid(ctl); ajax_saldo(ctl.id); } /** *@brief is called when something change in ICard *@param the input field *@see ICard */ function fill_fin_data(text,li) { ajaxFid(text); ajax_saldo($(text.id)); } /** *@brief show the ipopup window and display the details of a card, * to work some attribute must be set *@parameter obj.qcode is the qcode, obj.nohistory if you don't want to display * the history button, obj.ro is the popin is readonly *@note you must the gDossier as hidden in the calling page * *@see ajax_card.php */ function fill_ipopcard(obj) { card_layer++; var content='card_'+card_layer; var nTop=170+card_layer; if ( nTop > 300 ) { nTop=170; } str_top=fixed_position(250,nTop) var str_style=str_top+";width:45em;height:auto;position:absolute"; var popup={'id': content,'cssclass':'inner_box','style':str_style,'html':loading(),'drag':true}; add_div(popup); var dossier=$('gDossier').value; var qcode=''; if ( $(obj).qcode != undefined ) { qcode=obj.qcode; } else { qcode=$(obj).value; } // ctl=$(obj).id; var queryString='gDossier='+dossier; queryString+='&qcode='+qcode; queryString+='&ctl='+content; queryString+='&op=dc'; // dc for detail card if ( obj.readonly != undefined) { queryString+='&ro'; } if ( obj.nohistory != undefined) { queryString+='&nohistory'; } var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:fill_box } ); } /** *@brief * \param request : object request * \param json : json answer \code \endcode */ function successFill_ipopcard(req,json) { try { var answer=req.responseXML; var a=answer.getElementsByTagName('ctl'); var html=answer.getElementsByTagName('code'); if ( a.length == 0 ) { var rec=req.responseText; alert_box ('erreur :'+rec); } var name_ctl=a[0].firstChild.nodeValue; var code_html=getNodeText(html[0]); code_html=unescape_xml(code_html); $(name_ctl).innerHTML=code_html; } catch (e) { alert_box(e.message); } try { code_html.evalScripts(); } catch(e) { alert_box("Impossible executer script de la reponse\n"+e.message); } } /** *@brief show the ipopup for selecting a card type, it is a needed step before adding * a card *@param input field (obj) it must have the attribute ipopup * possible attribute : * - filter is the filter but with a fd_id list, -1 means there is no filter * - ref if we want to refresh the window after adding a card * - type type of card (supplier, customer...) *@see ajax_card.php */ function select_card_type(obj) { var dossier=$('gDossier').value; // give a filter, -1 if not var filter=$(obj).filter; if ( filter==undefined) { filter=-1; } var content="select_card_div"; if ( $(content)){removeDiv(content);} var sx=0; if ( window.scrollY) { sx=window.scrollY+160; } else { sx=document.body.scrollTop+160; } var str_style="top:"+sx+"px;height:auto"; waiting_box(); var popup={'id': content,'cssclass':'inner_box','style':str_style,'html':"",'drag':true}; add_div(popup); var queryString='gDossier='+dossier; queryString+='&ctl='+content; queryString+='&op=st'; // st for selecting type if ( $(obj).win_refresh!=undefined) { queryString+='&ref'; } queryString+='&fil='+filter; // filter on the ledger, -1 if not var oledger=$(obj).jrn; if (oledger==undefined) { ledger=-1; } else { ledger=$(obj).jrn; } queryString+='&ledger='+ledger; if ( obj.type_cat) { queryString+='&cat='+obj.type_cat; } var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:function(req) { fill_box(req); $('lk_cat_card_table').focus(); } } ); } /** *@brief Show a blank card *@param Form object (obj) * possible attribute : * - filter is the filter but with a fd_id list, -1 means there is no filter * - ref : reload the window after adding card * - content : name of the div *@example dis_blank_card({gDossier:15,fd_id:12,ref:1}); *@see ajax_card.php */ function dis_blank_card(obj) { // first we have to take the form elt we need if ( obj.fd_id.value != undefined ) { var fd_id=$F('fd_id'); } else {fd_id=obj.fd_id;} var ref=""; if ( obj.elements && obj.elements['ref'] ) { ref='&ref'; } var content='div_new_card'; var nTop=calcy(150); var nLeft=posX; var str_style="top:"+nTop+"px;right:"+nLeft+"px;height:auto"; var popup={'id': content,'cssclass':'inner_box','style':str_style,'html':loading(),'drag':true}; if ( $(content)) {removeDiv(content);} add_div(popup); if ( obj.gDossier.value != undefined ) { var dossier=$('gDossier').value;} else { var dossier=obj.gDossier; } var queryString='gDossier='+dossier; queryString+='&ctl='+content; queryString+='&fd_id='+fd_id; queryString+=ref; queryString+='&op=bc'; // bc for blank card var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:successFill_ipopcard } ); } function form_blank_card(obj) { // first we have to take the form elt we need var fd_id=obj.fd_id; var content='div_new_card'; var nTop=posY-40; var nLeft=posX-20; var str_style="top:"+nTop+"px;left:"+nLeft+"px;width:60em;height:auto"; var popup={'id': content,'cssclass':'inner_box','style':str_style,'html':loading(),'drag':true}; if ( $(content)) {removeDiv(content);} add_div(popup); var dossier=$('gDossier').value; var queryString='gDossier='+dossier; queryString+='&ctl='+content; queryString+='&fd_id='+fd_id; queryString+='&op=bc'; // bc for blank card var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:successFill_ipopcard } ); } /** *@brief save the data contained into the form 'save_card' *@param input field (obj) it must have the attribute ipopup * possible attribute : *@see ajax_card.php */ function save_card(obj) { var content=$(obj).ipopup; // Data must be taken here data=$('save_card').serialize(false); $(content).innerHTML=loading(); var dossier=$('gDossier').value; var queryString='gDossier='+dossier; queryString+='&ctl='+content; queryString+=data; queryString+='&op=sc'; // sc for save card var action=new Ajax.Request ( 'ajax_card.php', { method:'post', parameters:queryString, onFailure:errorFid, onSuccess:fill_box } ); } /** *@brief add a category of card, *@param obj with the attribute * - ipopup the ipopup to show * - type_cat the category of card we want to add */ function add_category(obj) { var sx=0; if ( window.scrollY) { sx=window.scrollY+120; } else { sx=document.body.scrollTop+120; } var div_style="top:"+sx+"px;width:60%;height:80%"; // show ipopup var div={id:obj.ipopup, cssclass:"inner_box",drag:1,style:div_style}; if ( $(div) ) { removeDiv(div); } add_div(div); waiting_box(); var dossier=$('gDossier').value; var queryString='gDossier='+dossier; queryString+='&op=ac'; queryString+='&ctl='+obj.ipopup; if ( obj.type_cat) { queryString+='&cat='+obj.type_cat; } var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:fill_box } ); } /** * @brief save the form and add a new category of card * @param obj if the form object */ function save_card_category(obj) { if ( ! $(obj).ipopup) { alert_box('Erreur pas d\' attribut ipopup '+obj.id); return; }; try { // Data must be taken here data=$('newcat').serialize(false); var dossier=$('gDossier').value; queryString='ctl='+obj.ipopup+'&'; queryString+=data; queryString+='&op=scc'; // sc for save card var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:errorFid, onSuccess:fill_box } ); } catch(e) { alert_box(e.message); return false; } return false; } /** *@brief Remove a definition of an attribut *@param attr_def.ad_id *@param gDossier *@param table_id to rm the row *@param special this pointer of the row */ function removeCardAttribut(ad_id,gDossier,table_id,row) { var queryString='gDossier='+gDossier; queryString+='&op=rmfa'; queryString+='&ctl=debug'; // debug id queryString+='&ad_id='+ad_id; var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:queryString, onFailure:null, onSuccess:null } ); deleteRowRec(table_id,row); } /** * update a card in ajax */ function update_card(obj) { try { var name=obj.id; var qs=Form.serialize(name)+'&op=upc'; var action=new Ajax.Request ( 'ajax_card.php', { method:'get', parameters:qs, onFailure:errorFid, onSuccess:successFill_ipopcard } ); } catch (e) { alert_box(e.message); return false; } } /*** * In Follow-up, update, it is possible to add several card as concerned person or company * this function save it into the database, display the result and remove the search_card div * @param {type} p_dossier dossier * @param {type} p_fiche_id fiche.f_id * @param {type} p_action_id action_gestion.ag_id * @returns {undefined} nothing */ function action_save_concerned(p_dossier, p_fiche_id, p_action_id) { var query = encodeJSON({'gDossier': p_dossier, 'f_id': p_fiche_id, 'ag_id': p_action_id,'op':'action_save_concerned','ctl':'unused'}); var a=new Ajax.Request('ajax_card.php', { method: 'get', parameters: query, onFailure: errorFid, onSuccess: function (req, txt) { try { remove_waiting_box(); var answer = req.responseXML; var a = answer.getElementsByTagName('ctl'); if (a.length == 0) { var rec = req.responseText; alert_box('erreur :' + rec); } var html = answer.getElementsByTagName('code'); var namectl = a[0].firstChild.nodeValue; var nodeXml=html[0]; var code_html = getNodeText(nodeXml); code_html = unescape_xml(code_html); removeDiv('search_card'); $('concerned_card_td').innerHTML = code_html; } catch (e) { } } } ); } function action_remove_concerned(p_dossier,p_fiche_id,p_action_id) { var query = encodeJSON({'gDossier': p_dossier, 'f_id': p_fiche_id, 'ag_id': p_action_id,'op':'action_remove_concerned','ctl':'unused'}); var a=new Ajax.Request('ajax_card.php', { method: 'get', parameters: query, onFailure: errorFid, onSuccess: function (req, txt) { try { remove_waiting_box(); var answer = req.responseXML; var a = answer.getElementsByTagName('ctl'); if (a.length == 0) { var rec = req.responseText; alert_box('erreur :' + rec); } var html = answer.getElementsByTagName('code'); var namectl = a[0].firstChild.nodeValue; var nodeXml=html[0]; var code_html = getNodeText(nodeXml); code_html = unescape_xml(code_html); removeDiv('search_card'); $('concerned_card_td').innerHTML = code_html; } catch (e) { if ( console) { console.log('Erreur ') + e.message;} } } } ); }