Hi there, I am using a calculated field [not virtual field] in the grid on a total column, is it possible for this to be stored in table for reporting purposes?
$col = array();
$col["title"] = "total";
$col["name"] = "total";
$col["width"] = "30";
$col["editable"] = true;
$col["on_data_display"] = array("do_maths","");
function do_maths($data){
return $data ["amount"] * $data["adviser_split"]/100;}
$cols[] = $col;
Thank you
Sorry Abu, I should mention that on insert this isn't added to table, if however I edit that row and save it does insert in the table?
Both insert & update functions are identical too.
Thank you
When you make this field editable, it will assume that there is a field 'total' in $g->table, and will try to insert data.
Alternate, You can make it editable=false, and do the maths again in on_insert or on_update event handlers.
e.g.
$data["params"]["total"] = $total * 200 / 123;
Hi Abu, thank you once more. The total field is already set as editable and I do have a field in table called total, its odd as it does not insert on add but does on update even though that param isn't included on update function; I also commented out the $col["show"] to see if that helped but no joy..
$col = array();
$col["title"] = "total";
$col["name"] = "total";
$col["width"] = "20";
$col["editable"] = true;
$col["show"] = array("list"=>true, "add"=>false, "edit"=>false, "view"=>true);
$col["on_data_display"] = array("do_maths","");
//function do_maths($data){return $data ["received"] + $data["adviser_split"];}
function do_maths($data){return $data ["received"] * $data["adviser_split"]/100;}
$cols[] = $col;
Hi Abu, just to note when editing the demo with this maths it also does not work, its only when I comment out maths and actually type a value does it store in table.
Thanks
Also, it appears that on insert nothing is stored, but every time I update it inserts the last column value if thats makes sense?
Example;
Insert 10 * 10 = 0.00 in table
Update = 20 * 10 = 100 in table
Update = 30 * 10 = 200 in table
Update = 40 * 10 = 300 in table
Does that make any sense at all?
Thanks
I think i found the issue …
In your function add_client(&$data)
{
$id = intval($_GET["rowid"]);
$data["params"]["invoice_id"] = $id;
$adviser = $_GET["adviser"];
$data["params"]["adviser"] = $adviser;
$data["params"]["total"] = $total; // < —————————–
}
The $total is undefined. So no matter whatever is posted from form, it is unset here.
If the field is posted on add/edit operations, you can just comment out this line.
This will insert the posted data in table.
Hi Abu, I had tried that with no success unfortunately. I have just tried on the footer-row.php demo and the dame issue arises with no add/update functions.
Its the same issue where the total columns is not inserted until the save button his selected on that row, it then inserts the previous value only? If the user has no need to edit a row the value will never be inserted, if they do need= to edit then a previous value is inserted..
I have pasted my example footer-row.php here – http://pastebin.com/N8uijJDR
Line 89 I added the maths with simplified calculation..
Thanks
Gary
Hi everyone, just wondering if anyone using the grid has managed to find a way to achieve the above, I've tried on many of the demos but just cannot get it to take value on insert?
Would appreciate anyones help who has this working, its pretty key to my project.
Thank you
Gary
Hello Gary,
If you want to submit the calculated column, you will need to use on_insert / on_update events and perform the maths there.
The on_data_display event is just for display work and it never store presented data in database.
Working demo: http://pastebin.com/vELPw1vk
Commented line 92, Added 120.