This topic is locked
[SOLVED]

 Dynamically Changing The Layout Of An Add Page

6/22/2013 8:01:24 PM
PHPRunner General questions
G
g_parry author

I'm using 6.2 - soon to get 7 <img src='https://asprunner.com/forums/file.php?topicimage=1&fieldname=question&id=21141&image=1&table=forumtopics' class='bbc_emoticon' alt=';)' />
I have an add page where rows are hidden unless a field (distance) is less than 1.5

The distance is calculated (courtesy of Cristian Gilè) but the rows don't show if the criteria is met, if I type in the distance it works perfectly.

Any help with this appreciated - I really don't even pretend to know anything about coding.
This is the code I am using in JavaScript OnLoad

var ctrl = Runner.getControl(pageid, "distance");
if(ctrl.getValue() < 1.51)
pageObj.hideField("blue badge");

pageObj.hideField("bb evidence");

pageObj.hideField("criteria7_on_call");

pageObj.hideField("criteria6_journeys");

pageObj.hideField("criteria5_off_peak");

pageObj.hideField("criteria4_shift");

pageObj.hideField("Occupational Health Advice");

pageObj.hideField("Volunteer");

pageObj.hideField("Vol Letter");
ctrl.on('change', function(){
if (this.getValue() < 1.5){
pageObj.showField("blue badge");

pageObj.showField("bb evidence");

pageObj.showField("criteria7_on_call");

pageObj.showField("criteria6_journeys");

pageObj.showField("criteria5_off_peak");

pageObj.showField("criteria4_shift");

pageObj.showField("Occupational Health Advice");

pageObj.showField("Volunteer");

pageObj.hideField("Vol Letter");

}
else {
pageObj.hideField("blue badge");

pageObj.hideField("bb evidence");

pageObj.hideField("criteria7_on_call");

pageObj.hideField("criteria6_journeys");

pageObj.hideField("criteria5_off_peak");

pageObj.hideField("criteria4_shift");

pageObj.hideField("Occupational Health Advice");

pageObj.hideField("Volunteer");

pageObj.hideField("Vol Letter");
}
});

var ctrlPlaceOfWork = Runner.getControl(pageid,'Place_of_Work');

var ctrlPostcode = Runner.getControl(pageid,'postcode');

var ctrlAddress1 = Runner.getControl(pageid,'address1');

var ctrlAddress2 = Runner.getControl(pageid,'address2');

var ctrlAddress3 = Runner.getControl(pageid,'address3');
var ctrlHlat = Runner.getControl(pageid,'hlat');

var ctrlHlon = Runner.getControl(pageid,'hlon');

var ctrlWlat = Runner.getControl(pageid,'wlat');

var ctrlWlon = Runner.getControl(pageid,'wlon');
var ctrlDistance = Runner.getControl(pageid,'distance');

var ctrlEmployer = Runner.getControl(pageid,'EMPLOYER');

var ctrlEAN = Runner.getControl(pageid,'EAN');

var ctrlSalaryDeduction = Runner.getControl(pageid,'SALARY_DEDUCTION');

var ctrlPAYG = Runner.getControl(pageid,'PAYG');
var ctrlPtype = Runner.getControl(pageid,'Permit_Type');

ctrlEAN.hide();

ctrlSalaryDeduction.hide();

ctrlHlat.hide();

ctrlHlon.hide();

ctrlWlat.hide();

ctrlWlon.hide();
function deg2rad(deg)

{

return deg * (Math.PI/180)

}
function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2)

{

var R = 6371; // Radius of the earth in km

var dLat = deg2rad(lat2-lat1); // deg2rad below

var dLon = deg2rad(lon2-lon1);

var a =

Math.sin(dLat/2) * Math.sin(dLat/2) +

Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *

Math.sin(dLon/2) * Math.sin(dLon/2)

;

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

var d = R * c; // Distance in km

d = d / 1.609344;

return d;

}
ctrlPlaceOfWork.on('change',function(){
var ctrlPlaceOfWorkValue = this.getValue();

var ctrlPostcodeValue = ctrlPostcode.getValue();

var ctrlAddress1Value = ctrlAddress1.getValue();

var ctrlAddress2Value = ctrlAddress2.getValue();

var ctrlAddress3Value = ctrlAddress3.getValue();
if(ctrlPlaceOfWorkValue != '' && ctrlPostcodeValue != '' && (ctrlAddress1Value != '' || ctrlAddress2Value != '' || ctrlAddress3Value != ''))

{

$.ajax({

url: 'Permit_Application_add.php',

data: 'check_distance=1&postcode='+ctrlPlaceOfWorkValue,

type: 'POST',

dataType: 'json',

success: function(obj){

var distance_result = getDistanceFromLatLonInKm(obj.wlat,obj.wlon,ctrlHlat.getValue(),ctrlHlon.getValue());
if(distance_result < 1.5)

{

alert("Your home address is less than 1.5 miles from your work address, your application is likely to be rejected unless you meet additional criteria");

}

ctrlDistance.setValue(distance_result. toFixed(2));

}

});

}

});
//show Assignment number and option for salary deduction fields if MTW selected as employer
ctrlEmployer.on('change',function()

{

var ctrlEmployerValue = this.getValue();

if(ctrlEmployerValue == 'MTW')

{

ctrlEAN.show();

ctrlSalaryDeduction.show();

}

else

{

ctrlEAN.hide();

ctrlSalaryDeduction.hide();

}

});
//pop-up info on priority permits if checkbox clicked
ctrlPtype.on('change',function(){
var ctrlPtypeValue = this.getValue();


{


if(ctrlPtypeValue = 1)

{

alert("You can make your application using this form if you wish.");

}



}

});

// Place event code here.

// Use "Add Action" button to add code snippets.
C
cgphp 6/23/2013

I'm not sure I understand when you say "but the rows don't show if the criteria is met". What's the problem?

G
g_parry author 6/23/2013



I'm not sure I understand when you say "but the rows don't show if the criteria is met". What's the problem?


Hi Cristian
When the add page opens these rows are hidden. I want them to show only if the distance is less than 1.5 miles.

If I type a number less than 1.5 in the distance box it works perfectly - the rows show

If I let the system do the calculation, nothing happens the rows remain hidden.
Cheers

Glenn

C
cgphp 6/24/2013

The Add page is for a new record, so you don't know what the distance value is.

G
g_parry author 6/24/2013



The Add page is for a new record, so you don't know what the distance value is.



Hi Cristian
The showing of fields is decided after the distance has been calculated - we already use the calculated distance to activate the alert box, it may be that the system doesn't recognise on."change" with calculated fields but for now I have managed to get it to work by using another field as the controlling field and querying the distance value. It's working but my method feels a bit "Heath Robinson" and I was hoping there was a cleaner solution.
Cheers
Glenn