overriding Save button : after ajax validation save editView form

Hello everybody!!

You may have noticed that this thread is a duplicate one of Sugar 7 bwc overriding Save button to add ajax but i don't know why but the forum did a mess with it and repeated everything several times (Hey @Sugar Staff, i didn't find somewhere to talk about it).

So, here is again my problem, with better construction and further precision.

What i want :

I want sugar to check if the assigned user already have meetings planned WHEN the current user clicks on Save button.

What i did :
I've overrided the Save button by doing this custom code under custom/modules/Meetings/editviewdefs.php :

array (            'customCode' => '<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" id ="SAVE_HEADER" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="button primary" onclick="SUGAR.meetings.fill_invitees();return validationPlanification();document.EditView.action.value=\'Save\'; document.EditView.return_action.value=\'DetailView\'; {if isset($smarty.request.isDuplicate) && $smarty.request.isDuplicate eq "true"}document.EditView.return_id.value=\'\'; {/if} formSubmitCheck();" type="button" name="button" value="{$APP.LBL_SAVE_BUTTON_LABEL}">',
          ),

you can see it is calling a js function, which is below and is defined under customjs.js (this last is included in editviewdefs too)

function validationPlanification(){ if($("#status").val()=="Planned"){
  var user_id = $("#assigned_user_id").val();
  var user_name = $("#assigned_user_name").val();
 
  var duration_h = $("#duration_hours").val();
  var duration_m = $("#duration_minutes").val();
  var date_start = $("#date_start_date").val()+" "+$("#date_start_hours").val()+":"+$("#date_start_minutes").val();
 
  var href = $(".moduleTitle").find('h2 a').attr('href');//trouver le lien du record
  if (href != undefined){
   var idx = href.indexOf('record');//trouver où se situe le mot "record"
   var bean_id = href.substr(idx+7);//chopper l'id
  }else{
   var bean_id = '';
  }

  var ajax = $.ajax({
   url: "http://&lt;Sugarbase&gt;/index.php?entryPoint=validateAvailability",
   type: "POST",
   data: { userid : user_id, beanid : bean_id, date : date_start, h : duration_h, m : duration_m},
   success: function(data){
    //console.log(data);
    if (data === "false"){
     console.log("nok");
     alert("L'utilisateur "+user_name+" a déjà d'autres rendez-vous de prévus sur cette plage horaire!");
     //on ne peut pas sauvegarder
     return false;
    }
    if (data === "true"){
     console.log('ok');
     //return true;
     return check_form('EditView');
    }
   },
   error: function(){
    //console.log(data);
    console.log("SQL Failure");
   }
  });
}
}

you can see this function is doing an ajax call to a custom entrypoint. this works (tested it by setting some log at the beginning of the entry point) this entrypoint is querying the base to know if the assigned user already have a meeting set. It returns $is_available = true if the user does not have a meeting. else, it returns$is_available = false.
This works, i've set some console.log(data) when the ajax call is a success.

Then, you can see i'm testing the data retrieved. if data is true, so Sugar must save the current editview form. and if it is false, i think i'll throw an alert.

What is not working :
Everything works fine until i try to save the editview form : my return check_form('EditView') does not work, neither a simple "return true".

Do you have any idea on that?

Thanks a lot for the long reading, and your time.
Gaëlle


Parents
  • The way I do this sort of thing is have a custom js file

    In it I have a function check_form which overwrites the standard sugar one so you don't need to play with editviewdefs apart from including the custom js file

    something like

    function check_form(formname) {
    /*
      * replace main check_form standard sugar validation plus your changes
      */

    //standard validation
    if (ValidateForm(formname) == false) return false;

    //your validation
    if (yourfunction() == false) return false;

    return true;
    }

    If you are doing an ajax call for validation I would do a synchronous call 

    Hope this helps
  • Yes, i saw this strange one, but thought it was the code i had to replace with my custom validation... 

    here is what i wrote after you, and it is not working, even if i load the script (i launched a console.log promptly after the $.getScript )

    function check_form(formname) {
       /* custom function to check the form then save */

       /* launching standrad fields validation*/
       $.getScript("../../../../include/javascript/sugar_3.js", function(){      if(typeof(siw)!='undefined'&&siw&&typeof(siw.selectingSomething)!='undefined'&&siw.selectingSomething)return false;
            if ( validate_form(formname) == false ) return false;
       });

       /*launching assigned_user availability validation*/
       if (validationPlanification() > 0){
            return false;
       }else{ 
            return true;
       }
    }

    Any idea? i've checked the sugar_3.js (i'm on it since 15h), but well, my brain must be yoghurt, i don't understand a lot of this file...

    Thanks
Reply
  • Yes, i saw this strange one, but thought it was the code i had to replace with my custom validation... 

    here is what i wrote after you, and it is not working, even if i load the script (i launched a console.log promptly after the $.getScript )

    function check_form(formname) {
       /* custom function to check the form then save */

       /* launching standrad fields validation*/
       $.getScript("../../../../include/javascript/sugar_3.js", function(){      if(typeof(siw)!='undefined'&&siw&&typeof(siw.selectingSomething)!='undefined'&&siw.selectingSomething)return false;
            if ( validate_form(formname) == false ) return false;
       });

       /*launching assigned_user availability validation*/
       if (validationPlanification() > 0){
            return false;
       }else{ 
            return true;
       }
    }

    Any idea? i've checked the sugar_3.js (i'm on it since 15h), but well, my brain must be yoghurt, i don't understand a lot of this file...

    Thanks
Children
No Data