Example #1
0
<?php

include "system.php";
include_once '../simbiz/class/Track.inc.php';
$o = new Trackclass();
$s = new XoopsSecurity();
$action = $_REQUEST['action'];
$isadmin = $xoopsUser->isAdmin();
$uid = $xoopsUser->getVar('uid');
switch ($action) {
    case "search":
        //return xml table to grid
        $wherestring = " WHERE trackheader_id>0";
        $o->showTrackclass($wherestring);
        exit;
        //after return xml shall not run more code.
        break;
    case "lookup":
        //return xml table to grid
        include_once "../simantz/class/EBAGetHandler.php";
        $defaultorganization_id = $_SESSION['defaultorganization_id'];
        $lookupdelay = 1000;
        $pagesize =& $_GET["pagesize"];
        $ordinalStart =& $_GET["startrecordindex"];
        $sortcolumn =& $_GET["sortcolumn"];
        $sortdirection =& $_GET["sortdirection"];
        $getHandler = new EBAGetHandler();
        $getHandler->ProcessRecords();
        $wherestring = " WHERE trackheader_id>0";
        $o->showLookupTrackclass($wherestring);
        exit;
    public function getInputForm($action = "new")
    {
        global $userid, $simbizctrl, $ctrl, $defaultorganization_id;
        $this->log->showLog(3, "Access Payment getInputForm()");
        if ($o->track1_id == "") {
            $o->track1_id = 0;
        }
        if ($o->track2_id == "") {
            $o->track2_id = 0;
        }
        if ($o->track3_id == "") {
            $o->track3_id = 0;
        }
        $track1option = $simbizctrl->getSelectTrack($this->track1_id, "Y", " AND trackheader_id =1");
        $track2option = $simbizctrl->getSelectTrack($this->track2_id, "Y", " AND trackheader_id =2");
        $track3option = $simbizctrl->getSelectTrack($this->track3_id, "Y", " AND trackheader_id =3");
        if ($action == "new") {
            include "../simbiz/class/Track.inc.php";
            $track = new Trackclass();
            $track_array = $track->getTrackName();
            $this->track1_name = $track_array['track1_name'];
            $this->track2_name = $track_array['track2_name'];
            $this->track3_name = $track_array['track3_name'];
            $this->bpartneraccounts_id = 0;
            $tableheader = "New Payment";
            $attnoption = "<option value='0'>Null</option>";
            $uidoption = $ctrl->getSelectUsers($userid);
            $termsoption = "<option value='0'>Null</option>";
            $addressoption = "<option value='0'>Null</option>";
            $currencyoption = "<option value='0'>Null</option>";
            $branchctrl = $ctrl->selectionOrganization($userid, $defaultorganization_id);
            $this->payment_id = 0;
            $this->document_no = $this->getNextNo();
            $this->document_date = date("Y-m-d", time());
            $this->exchangerate = 1;
            $this->subtotal = 0;
            $this->localamt = 0;
        } else {
            $tableheader = "Edit Payment";
            include_once "../simantz/class/SelectCtrl.inc.php";
            $ctrl = new SelectCtrl();
            include "../bpartner/class/BPSelectCtrl.inc.php";
            $bpctrl = new BPSelectCtrl();
            include "../bpartner/class/BPartner.php";
            $bp = new BPartner();
            $bpartner_id = $_REQUEST['bpartner_id'];
            $bp->fetchBpartnerData($bpartner_id);
            $addressxml = $bpctrl->getSelectAddress($this->address_id, "N", $o->bpartner_id);
            $termsxml = $bpctrl->getSelectTerms($this->terms_id, "N");
            $contactxml = $bpctrl->getSelectContacts($this->contacts_id, 'N', "", "", " and bpartner_id={$this->bpartner_id}");
            $currencyxml = $ctrl->getSelectCurrency($this->currency_id);
            $branchctrl = $ctrl->selectionOrganization($userid, $this->organization_id);
            $attnoption = $contactxml;
            $uidoption = $ctrl->getSelectUsers($this->preparedbyuid);
            $termsoption = $termsxml;
            $addressoption = $addressxml;
            $currencyoption = $currencyxml;
            // $branchoption="<option value='1'>HQ</option>";
        }
        $grid = $this->getGrid($this->payment_id);
        $html = <<<HTML
    <br/>
    <div id='centercontainer'>
    <div align="center" >
    <table style="width:990px;text-align: left; " >
        <tr><td align="left">{$this->addnewctrl}</td><td align="right">{$this->searchctrl}</td></tr></table>
{$noperm}

   
    <br/>
    <div id='errormsg' class='red' style='display:none'></div>
<form onsubmit='return false' method='post' name='frmPayment' id='frmPayment'  action='{$this->paymentfilename}'  enctype="multipart/form-data">
   <table style="text-align: left; width: 990px;" border="0" cellpadding="0" cellspacing="1"  class="searchformblock">
    <tbody>
        <tr>
        <td colspan="4" rowspan="1" align="center" id="idHeaderText" class="searchformheader" >{$tableheader}</td>
        </tr>
        <tr>
          <td class="head">Payment No</td>
          <td class="even"><input name='sppayment_prefix' id='sppayment_prefix' value='{$this->sppayment_prefix}'size='3'>
                            <input name='document_no' id='document_no'  value='{$this->document_no}' size='10'>
                    Branch <select id='organization_id' name='organization_id'>&nbsp; {$branchctrl}</select></td>
          <td class="head">Business Partner</td>
          <td class="even">
              <ntb:Combo id="cmbbpartner_id" Mode="classic" theme="{$nitobicombothemes}" InitialSearch="{$this->bpartner_name}" onselectevent="chooseBPartner();">
             <ntb:ComboTextBox Width="250px" DataFieldIndex=1 ></ntb:ComboTextBox>
             <ntb:ComboList Width="300px" Height="200px" DatasourceUrl="../simbiz/simbizlookup.php?action=searchbpartnercombo&showNull=Y" PageSize="25" >
             <ntb:ComboColumnDefinition Width="130px" DataFieldIndex=1 ></ntb:ComboColumnDefinition>
             <ntb:ComboMenu icon="images/add.gif" OnClickEvent="window.open('../bpartner/bpartner.php')" text=" &nbsp;Add product...">
             </ntb:ComboList>
            </ntb:Combo>
          </td>
     </tr>
     <tr>
        <td class="head">Date (YYYY-MM-DD)</td>
          <td class="even">
            <input id='document_date' name='document_date'  size='10'  value='{$this->document_date}'>
            <input id='btnpaymentdate' type='button' class='btndate' onclick="{$this->showCalendar}" value="Date"></td>
          <td class="head">Attn To </td>
          <td class="even"><select id='contacts_id' name='contacts_id' >{$attnoption}</select></td>
     </tr>
     <tr>
   
      <td class="head">Ref. No</td>
      <td class="even"><input id='ref_no' size='10' name='ref_no' value='{$this->ref_no}'></td>
     </tr>
     <tr>
         <td class="head">Prepared By</td>
         <td class="even"><select id='preparedbyuid' name='preparedbyuid'>{$uidoption}</select></td>
        <td class="head">Sales Agent</td>
         <td class="even"><input id='salesagentname'  name='salesagentname' value='{$this->salesagentname}'></td>
</tr>
<tr>
       <td class="head">Address</td>
       <td class="even"><select id='address_id' name='address_id' onchange=updateAddressText()>{$addressoption}</select><br/>
        <textarea id='address_text' name='address_text' cols='30' rows='3'>{$this->address_text}</textarea>
        </td>
         <td class="head">Currency</td>
          <td class="even">
                    <select id='currency_id' name='currency_id' onchange=comparecurrency()>{$currencyoption}</select> Exchange rate: MYR<input size='8' id='exchangerate' onchange=updateCurrency() value="{$this->exchangerate}" name="exchangerate"><br/>
     </td>
  <tr>
                 <td class="head" colspan='4'>
        <input name='save' onclick='saverecord(0)' type='submit' id='submit' value='Save'>
        <input name='save' onclick='saverecord(1);' type='submit' id='submit' value='Complete'>
        <input name='save' onclick='deleterecord()' type='submit' id='delete' value='Delete'>
        <input name='action' name='action' value='ajaxsave'  type="hidden">
        <input type="button" value="Reload" onclick=javascript:reloadPayment()>
        <input type="button" value="Receive All" onclick=javascript:receiveAll()>
            <input type="button" value="Preview" onclick=javascript:previewPayment()>
        <input name="track1_name" id="track1_name" type="hidden" value="{$this->track1_name}">
         <input name="track2_name" id="track2_name" type="hidden" value="{$this->track2_name}">
            <input name="track3_name"  id="track3_name" type="hidden" value="{$this->track3_name}">
        <input name='payment_id' id='payment_id'  value='{$this->payment_id}'  title='payment_id' type='hidden'>
        <input name='iscomplete'  id='iscomplete' value='{$this->iscomplete}'  title='iscomplete' type='hidden'>
        <input name='bpartneraccounts_id' id='bpartneraccounts_id' value='{$this->bpartneraccounts_id}' title='bpartneraccounts_id' type='hidden'>
            </td>
</td></tr>
<tr><td colspan='4'>
    <div id='detaildiv'>
    {$grid}
              <small>* Update payment detail via edit column Account, Paid Amt and following column, leave Paid Amt = 0 to delete particular payment detail</small>

           <div style="width:476px;text-align:right" >
                        <b style="text-align:right; height:30px; border-top: 1px solid #000; border-bottom: 3px double #000; width:300px">
             Total: <label id='lblsubtotal'><input id='subtotal' style="text-align:right"  size="10" name='subtotal' readonly="readonly" value='{$this->subtotal}'></label></b><br/>
              Outstanding : <label id='lbltotalgst'><input id='outstandingamt' size="10" style="text-align:right"  name='outstandingamt' readonly="readonly" value='{$this->outstandingamt}'></label>
            </div>

</div>
</td></tr>
 <td class="head">Description</td>
<td class="even" colspan='2'><textarea cols='70' rows='3' id='description'  name='description'>{$this->description}</textarea></td>
            <td rowspan="2"><br/><b>Tracking information</b>
            <div class="searchformblock" id="trackblock">
            {$this->track1_name}: <select name="track1_id" id="track1_id">{$track1option}</select><br/>
            {$this->track2_name}: <select name="track2_id" id="track1_id">{$track2option}</select><br/>
            {$this->track3_name}: <select name="track3_id" id="track1_id">{$track3option}</select><br/>
            </div></td>
</tr><tr>
   <td class="head">Note</td>
<td class="even" colspan='2'><textarea cols='70' rows='3' id='note'  name='note'>{$this->note}</textarea></td>
</tr></table>
</form>


HTML;
        return $html;
    }
Example #3
0
    public function getBatchlineform()
    {
        global $nitobigridthemes, $isadmin, $havewriteperm, $action, $uid, $defcurrencycode, $defaultorganization_id, $iseditbpartner;
        $this->allowedit = 1;
        $this->fetchBatch($this->batch_id);
        $editBPartner = "true";
        if ($iseditbpartner == "N" || $this->fromsys != "") {
            $editBPartner = "false";
        }
        $add_imgpath = 'images/add_line.gif';
        if ($this->batch_id == 0 || $this->batch_id == "") {
            $url_addline_img = $add_imgpath;
        }
        $editTax = "true";
        if ($this->tax_type == 1) {
            $editTax = "false";
        }
        $editabled = 0;
        $grIdColumn = 13;
        //define primary key column index for normal user
        //   $deleteddefaultvalue_js="";
        $changewidth = "width='365'";
        if ($havewriteperm == 1) {
            //user with write permission can edit grid, have button
            $permctrl = " rowinsertenabled=\"true\" rowdeleteenabled=\"true\" onbeforesaveevent=\"beforesave()\"";
            if ($this->allowedit == 1) {
                if ($this->issubmit != 1 && $this->iscomplete != 1) {
                    $savectrl = '<input id="ntbSavebtn" name="ntbSavebtn" onclick="save()" value="Save" type="button" style="display:inline">';
                    $addctrl = '<input id="ntbAddbtn" name="ntbAddbtn" onclick="addline()" value="Add Transaction" type="button" style="display:inline">';
                    $editabled = 1;
                    $this->claimdetailsmsg = "";
                } else {
                    $editabled = 0;
                }
            } else {
                $savectrl = '<input id="ntbSavebtn" name="ntbSavebtn" onclick="save()" value="Save" type="button" style="display:none">';
                $addctrl = '<input id="ntbAddbtn" name="ntbAddbtn" onclick="addline()" value="Add Transaction" type="button" style="display:none">';
                $this->claimdetailsmsg = "";
            }
            $alloweditgrid = "col!={$grIdColumn}";
        } else {
            //user dun have write permission, cannot save grid
            $savectrl = "";
            $permctrl = " rowinsertenabled=\"false\" rowdeleteenabled=\"false\" onbeforesaveevent=\"return false\" ";
            $alloweditgrid = "false";
        }
        $timestamp = date("Y-m-d", time());
        $rh = "odd";
        if ($this->batch_id == 0) {
            include "../simbiz/class/Track.inc.php";
            $track = new Trackclass();
            $track_array = $track->getTrackName();
            $track1_name = $track_array['track1_name'];
            $track2_name = $track_array['track2_name'];
            $track3_name = $track_array['track3_name'];
        } else {
            $track1_name = $this->track1_name;
            $track2_name = $this->track2_name;
            $track3_name = $this->track3_name;
        }
        if ($track1_name == "") {
            $track1_name = "Track 1";
        }
        if ($track2_name == "") {
            $track1_name = "Track 2";
        }
        if ($track3_name == "") {
            $track1_name = "Track 3";
        }
        echo <<<EOF
<link rel="stylesheet" type="text/css" href="../simantz/include/nitobi/nitobi.calendar/nitobi.calendar.css" />
<script type="text/javascript" src="../simantz/include/nitobi/nitobi.calendar/nitobi.calendar.js"></script>
  <script language="javascript" type="text/javascript">

    var init_cell = 11;

    //testn = 12.054;
    //alert(Math.round(testn*100)/100);

    \$(document).ready((function (){
     
        nitobi.loadComponent('DataboundGrid');
        
            }));


    function roundAmtValue(val){

    return (Math.round(val*100)/100).toFixed(2);
    }

    function search(){
        var grid = nitobi.getGrid("DataboundGrid");
\tgrid.dataBind();
    }

    function  getTotalAmount(){


        var grid= nitobi.getGrid('DataboundGrid');
        var selRow = grid.getSelectedRow();
        var selCol = grid.getSelectedColumn();
        var total_row = grid.getDisplayedRowCount();

        var typeline_cell = grid.getCellObject(selRow, init_cell+4);
        var temp_parent_cell = grid.getCellObject(selRow, init_cell+6);
        var debit_cell = grid.getCellObject(selRow, init_cell-5);
        var cerdit_cell = grid.getCellObject(selRow, init_cell-4);

        var parent_val = temp_parent_cell.getValue();
        var typeline_val = typeline_cell.getValue();

        var parent_col = init_cell-5;
        var child_col = init_cell-4;
        if(selCol == (init_cell-5)){//is debit
            if(debit_cell.getValue() > 0 ){
            cerdit_cell.setValue('0.00');

            parent_col = init_cell-4;
            child_col = init_cell-5;
           }
        else{
            parent_col = init_cell-5;
            child_col = init_cell-4;

        }
        }else if(selCol == (init_cell-4)){//is credit
            if(cerdit_cell.getValue() > 0 ){
            debit_cell.setValue('0.00');

            parent_col = init_cell-5;
            child_col = init_cell-4;
           }else{
                    parent_col = init_cell-4;
            child_col = init_cell-5;

            }
        }

        var currentrow = document.getElementById('currentrow').value;
        if(typeline_val == 2 && selRow == currentrow){//if child do update parent
        updateTotalParent(parent_val,parent_col,child_col,0);
        }

        sumDebitCreditLine();


    }

    function updateTotalParent(parent_val,parent_col,child_col,sub_value){

        var grid= nitobi.getGrid('DataboundGrid');
        var total_row = grid.getDisplayedRowCount();
        
        var sum_col_val = 0;
        
        for(var i = 0; i < total_row; i++){

            var typeline_cell = grid.getCellObject(i, init_cell+4);
            var temp_parent_cell = grid.getCellObject(i, init_cell+6);
            var line_debitchild = grid.getCellObject(i,init_cell-5);
            var line_creditchild = grid.getCellObject(i,init_cell-4);

            var parent_line = temp_parent_cell.getValue();
            var typeline_line = typeline_cell.getValue();
            var debit_line = line_debitchild.getValue();
            var credit_line = line_creditchild.getValue();

            if(parent_val == parent_line){//if same parent

                if(typeline_line == 1){//if parent
                update_col_1 = grid.getCellObject(i,parent_col);
                update_col_2 = grid.getCellObject(i,child_col);
                }else{
                sum_col = grid.getCellObject(i,child_col);
                sum_col_val = parseFloat(sum_col_val) + parseFloat(sum_col.getValue());
                
                }



            }


        }

        if(i > 0){
        sum_col_val = parseFloat(sum_col_val) - parseFloat(sub_value);
        update_col_1.setValue(sum_col_val);
        update_col_2.setValue("0.00");
        }

    }

    function sumDebitCreditLine(){

        var grid= nitobi.getGrid('DataboundGrid');
        var total_row = grid.getDisplayedRowCount();

        ColTxt1 = "Subtotal";
        ColTxt2 = "";
        ColTxt3 = "";

        var finalSubTotalArr= new Array();
        var finalTotalDebitArr= new Array();
        var finalTotalCreditArr= new Array();
        var init_total = "";
        var totalTaxDebitFinal = 0;
        var totalTaxCreditFinal = 0;
        var j = 0;
        var k = 0;
        total_debit_ori = 0;
        total_credit_ori = 0;
        total_debit = 0;
        total_credit = 0;
        debit_amt_tax = 0;
        credit_amt_tax = 0;

        for(var i = 0; i < total_row; i++){

            var line_taxchild = grid.getCellObject(i,init_cell-3);
            var line_debitchild = grid.getCellObject(i,init_cell-5);
            var line_creditchild = grid.getCellObject(i,init_cell-4);
            var line_totaltaxchild = grid.getCellObject(i,init_cell+7);

            var val_taxchild = line_taxchild.getValue();
            var val_debitchild = line_debitchild.getValue();
            var val_creditchild = line_creditchild.getValue();
            var val_totaltaxchild = line_totaltaxchild.getValue();

            var debit_amt = val_debitchild;
            var credit_amt = val_creditchild;

            total_debit_ori = parseFloat(total_debit_ori) + parseFloat(debit_amt);
            total_credit_ori = parseFloat(total_credit_ori) + parseFloat(credit_amt);


            if(false){//val_totaltaxchild > 0 : not use
                j++;


                var totalTaxDebit = countTotalTax(val_totaltaxchild,val_debitchild);//(parseFloat(val_totaltaxchild)/100)*parseFloat(val_debitchild);
                var totalTaxCredit = countTotalTax(val_totaltaxchild,val_creditchild);//(parseFloat(val_totaltaxchild)/100)*parseFloat(val_creditchild);

                /* start define col for final total */

                if(init_total != val_totaltaxchild){
                var totalTaxDebitFinal = 0;
                var totalTaxCreditFinal = 0;
                var debit_amt_tax = 0;
                var credit_amt_tax = 0;
                }


                var prevDebit = finalTotalDebitArr[val_totaltaxchild*100];
                if(prevDebit == undefined)
                prevDebit = 0;

                var prevCredit = finalTotalCreditArr[val_totaltaxchild*100];
                if(prevCredit == undefined)
                prevCredit = 0;


                debit_amt_tax = parseFloat(debit_amt_tax) + parseFloat(debit_amt);
                credit_amt_tax = parseFloat(credit_amt_tax) + parseFloat(credit_amt);


                finalSubTotalArr[val_totaltaxchild*100] = val_totaltaxchild;
                finalTotalDebitArr[val_totaltaxchild*100] = parseFloat(prevDebit) + parseFloat(debit_amt_tax);
                finalTotalCreditArr[val_totaltaxchild*100] = parseFloat(prevCredit) + parseFloat(credit_amt_tax);

                /* end */

                debit_amt = parseFloat(debit_amt) + totalTaxDebit;
                credit_amt = parseFloat(credit_amt) + totalTaxCredit;


            }

            total_debit = parseFloat(total_debit) + parseFloat(debit_amt);
            total_credit = parseFloat(total_credit) + parseFloat(credit_amt);

            total_debit = roundAmtValue(parseFloat(total_debit));
            total_credit = roundAmtValue(parseFloat(total_credit));

            total_debit_ori = roundAmtValue(parseFloat(total_debit_ori));
            total_credit_ori = roundAmtValue(parseFloat(total_credit_ori));


        }

            /* start update value */

            document.getElementById("totaldebit").value=total_debit;
            document.getElementById("totalcredit").value=total_credit;
            /* not use
            //start final total

            for(i in finalSubTotalArr){ // in returns key, not object

                if(finalSubTotalArr[i] != undefined){

                    var taxTot = finalSubTotalArr[i];
                    var debitTot = finalTotalDebitArr[parseFloat(taxTot*100)];
                    var creditTot = finalTotalCreditArr[parseFloat(taxTot*100)];


                    var debitTotFinal = countTotalTax(taxTot,debitTot);//(parseFloat(taxTot)/100)*parseFloat(debitTot);
                    var creditTotFinal = countTotalTax(taxTot,creditTot);//(parseFloat(taxTot)/100)*parseFloat(creditTot);

                    ColTxt1 += "<br/><br/>Total Tax "+taxTot+"%";
                    ColTxt2 += "<br/><br/>"+roundAmtValue(debitTotFinal);
                    ColTxt3 += "<br/><br/>"+roundAmtValue(creditTotFinal);
                }

            }


            ColTxt2 = total_debit_ori+""+ColTxt2;


            ColTxt3 = total_credit_ori+""+ColTxt3;

            document.getElementById("idSubTotal").innerHTML=ColTxt1;
            document.getElementById("idTotalDebit").innerHTML=ColTxt2;
            document.getElementById("idTotalCredit").innerHTML=ColTxt3;

            document.getElementById("idFinalTotalDebit").innerHTML=total_debit;
            document.getElementById("idFinalTotalCredit").innerHTML=total_credit;
            */




    }


    function countTotalTax(tax_value,amt_value){

    var retval = "0.00";

    retval = (parseFloat(tax_value)/100)*parseFloat(amt_value);

    return parseFloat(retval);

    }

    function  updateCurrentRow(eventArgs){

        row=eventArgs.getCell().getRow();

        document.getElementById('currentrow').value = row;
    }

    function  getTotalAmountCell(eventArgs){

        row=eventArgs.getCell().getRow();
        col=eventArgs.getCell().getColumn();
        var grid= nitobi.getGrid('DataboundGrid');

        if(false){//if tax : col == init_cell-3

        var line_taxchild = grid.getCellObject(row,init_cell-3);
        var line_totaltaxchild = grid.getCellObject(row,init_cell+7);

        var val_taxchild = line_taxchild.getValue();
     
        var data = "action=getTotalTax&tax_id="+val_taxchild;

        \$.ajax({
         url: "batch.php",type: "POST",data: data,cache: false,
             success: function (xml) {

                var total_tax = 0;

                if(xml != ""){
                jsonObj = eval( '(' + xml + ')');

                var total_tax = jsonObj.total_tax;
                }


                total_tax = roundAmtValue(parseFloat(total_tax));

                line_totaltaxchild.setValue(total_tax);

                sumDebitCreditLine();
        }});




        }else if((col == init_cell-5) || (col == init_cell-4)){//if debit | credit
        getTotalAmount();

        }

    }


 //optional function to generate primary key value, ignore this function because we use autogen method
    function GetNewRecordID()
    {
        return 0;
    }

    //after grid html render properly, set focus on it. It is important when use choose particular cell but
    // immediately press search again. From screen we won't detect cell is selected infact from javascript
    // detect selected
   function dataready(){

       var  g = nitobi.getGrid('DataboundGrid');
        g.move(0,0);//need to trigger relative position 0,0 in for next code able to highlight at screen
        var selRow = g.getSelectedRow();
        refreshGrid();
    }

    //Call event after save complete
    function savedone(eventArgs){
        var grid= nitobi.getGrid('DataboundGrid');
        var dataSource =grid.getDataSource();
        var errorMessage = dataSource.getHandlerError();

        if (!errorMessage) {//save successfully
        \t         jQuery('#msgbox').fadeTo('slow', 1, function() {
                     \t document.getElementById('msgbox').innerHTML="Record saved successfully";
                         //document.getElementById('popupmessage').innerHTML="Please Wait.....";
                         search();
                         popup('popUpDiv');
\t\t});
           return true;
        }
        else{ //save failed
        \tsearch();
                popup('popUpDiv');

        \treturn false;
        \t}
    }

    //if save_data have error, trigger this function
    function showError(){

        var grid= nitobi.getGrid('DataboundGrid');
        var dataSource =grid.getDataSource();

        var errorMessage = dataSource.getHandlerError();



        if (errorMessage) {
             document.getElementById('msgbox').innerHTML="<b style=\\"color:red\\">"+errorMessage+"</b><br/>";
             grid.dataBind();
         }
         else
           document.getElementById('msgbox').innerHTML="";
           jQuery('#msgbox').fadeTo('slow', 1, function() {});
    }

    //if user click particular column, auto fall into edit mode
    function clickrecord(eventArgs){
                    alert("fds");
                    row=eventArgs.getCell().getRow();
                    col=eventArgs.getCell().getColumn();
                    var  myGrid = nitobi.getGrid('DataboundGrid');
                    var myCell = myGrid.getCellObject(row, col);
                    myCell.edit();
    }

    //add line button will call this
    function addline(){

            if('{$this->isreadonly}'=='0' && '{$this->iscomplete}'=='0'){

            var grid= nitobi.getComponent('DataboundGrid');
            grid.insertRow();
            document.getElementById('line_type').value = "1";

            var grid= nitobi.getComponent('DataboundGrid');
            grid.insertRow();
        }

    }

    //trigger save activity from javascript
   function save()
     {

   \tif(document.getElementById("afterconfirm").value==1){  //Ask for confirmation from delete activity already, process data immediately
           var g= nitobi.getGrid('DataboundGrid');
\t   document.getElementById("afterconfirm").value=0;
\t   g.save();
           }
\telse{ // not yet request confirmation
    \t  if(true){//confirm("Confirm the changes? Data will save into database immediately")
     \t    var g= nitobi.getGrid('DataboundGrid');
\t    document.getElementById("afterconfirm").value=0;

\t    g.save();

\t    search();
    \t   }
\t}

    }

    function beforesave(){
        document.getElementById('popupmessage').innerHTML="Please Wait.....";
        popup('popUpDiv');
    }

   function onclickdeletebutton(){ //when press delete button will triger this function and ask for confirmation

      if({$editabled}!=0){
        var g= nitobi.getGrid('DataboundGrid');
        var selRow = g.getSelectedRow();
        if(selRow==-1){// no select any row
        alert("Please choose a row before deleting.");
        return false;
        }
        else
         g.deleteCurrentRow();
      }

        sumDebitCreditLine();
    }

    function checkAllowEdit(eventArgs){
\tvar g= nitobi.getGrid('DataboundGrid');
        col=eventArgs.getCell().getColumn();
      if({$alloweditgrid} && document.getElementById("iscomplete").value==0) //if user have permission to edit the cell, control primary key column read only at here too
        return true;
       else
        return false;
        }


    //after insert a new line will automatically fill in some value here
      function setDefaultValue(eventArgs,action_type)
       {

       var myGrid = eventArgs.getSource();
       var r = eventArgs.getRow();
       var rowNo = r.Row;
       {$deleteddefaultvalue_js}

       myGrid.selectCellByCoords(rowNo, 0);

        /* start css */
        var grid = nitobi.getComponent("DataboundGrid");

        if(action_type == "add"){
        var linetype_new = document.getElementById('line_type').value;
        var linetype_cell = grid.getCellObject(rowNo, init_cell+4);//1st para : row , 2nd para : column seq

        if(linetype_new == 0 || linetype_new == "")
        linetype_new = 2;//set to child if 0

        linetype_cell.setValue(linetype_new);
        }else if(action_type == "delete"){

        var linetype_cell = grid.getCellObject(rowNo, init_cell+4);//1st para : row , 2nd para : column seq
        linetype_val = linetype_cell.getValue();

        if(linetype_val == 2){//if child -> do calculatation
            var debit_cell = grid.getCellObject(rowNo, init_cell-5);
            var cerdit_cell = grid.getCellObject(rowNo, init_cell-4);
            var temp_parent_cell = grid.getCellObject(rowNo, init_cell+6);

            var parent_val = temp_parent_cell.getValue();

            if(debit_cell.getValue() > 0 ){
            updateTotalParent(parent_val,init_cell-4,init_cell-5,debit_cell.getValue());
            }else{
            updateTotalParent(parent_val,init_cell-5,init_cell-4,cerdit_cell.getValue());
            }

        }
        }

        refreshGrid();
        /* end */


    }

    function refreshGrid(){
        init_cell = 10;
        var grid = nitobi.getComponent("DataboundGrid");

        var selRow = grid.getSelectedRow();
        var total_col = grid.columnCount();
        var total_row = grid.getDisplayedRowCount();

        var j = 0;
        for(var i = 0; i < total_row; i++){

            var linetype_cell = grid.getCellObject(i, init_cell+4);//1st para : row , 2nd para : column seq
            var refid_cell = grid.getCellObject(i, init_cell+5);//1st para : row , 2nd para : column seq
            var transid_cell = grid.getCellObject(i, init_cell+3);//1st para : row , 2nd para : column seq
            var seqno_cell = grid.getCellObject(i, init_cell+8);//1st para : row , 2nd para : column seq

            var linetype_val = linetype_cell.getValue();
            var refid_val = refid_cell.getValue();
            var transid_val = transid_cell.getValue();
            seqno_cell.setValue(i+1);

            if(linetype_val == 0 || linetype_val == "" || (refid_val > 0 && transid_val > 0)){
            linetype_val = 2;//set to child if 0
            linetype_cell.setValue(2);
            }

            var tempparentid_cell = grid.getCellObject(i, init_cell+6);//1st para : row , 2nd para : column seq

            var row_element = nitobi.grid.Row.getRowElement(grid,i);

            var cell_delchild = grid.getCellElement(i,init_cell+1);
            var cell_addchild = grid.getCellElement(i,init_cell+2);

            var styleCountAdd = init_cell+4;
            var styleCountDel = init_cell+4;

            if(linetype_val == 1 || (refid_val == 0 && transid_val > 0)){
            j++;
            tempparentid_cell.setValue(j);
            row_element.className="journalParent";

            var divAddImg = '<div style="overflow: hidden; white-space: nowrap;" class="ntb-rowntb__1 ntb-column-datantb__1_13 ntb-cell" title=""><div style="background-image: url(&quot;&quot;); background-repeat: no-repeat;" class="ntb-image"><img src="{$add_imgpath}" style="" align="middle" border="0"></div></div>';

            cell_addchild.innerHTML = divAddImg

            }else{
            tempparentid_cell.setValue(j);
            row_element.className="journalChild";

            var divDelImg = '<div style="overflow: hidden; white-space: nowrap;padding-left:0px;" class="ntb-rowntb__1 ntb-column-datantb__1_13 ntb-cell" title=""><div style="background-image: url(&quot;&quot;); background-repeat: no-repeat;" class="ntb-image"><img src="images/del.gif" style="" align="middle" border="0"></div></div>';

            cell_addchild.innerHTML = "";
            cell_delchild.innerHTML = divDelImg;
//            cell_delchild.style.paddingLeft="100px";
            //document.getElementById("cell_"+i+"_12_ntb__"+{$this->createdby}).innerHTML = "";
            }

        }

    }

    function beforeDelete(){
            if(confirm('Delete this record? Data will save into database immediately.')){
                    document.getElementById("afterconfirm").value=1;
  //popup('popUpDiv');
                    return true;
            }
                    else{
                    document.getElementById("afterconfirm").value=0;
                    return false;
                    }
     }

  function validateEmpty(){

        var grid= nitobi.getGrid('DataboundGrid');
        var isallow = true;
        var total_row = grid.getRowCount();
        var detail ="";
        var purpose ="";
        var bill ="";
        var amount ="";

        for( var i = 0; i < total_row; i++ ) {
        var detailcell = grid.getCellObject( i, 1);//1st para : row , 2nd para : column seq
        var purposecell = grid.getCellObject( i, 2);//1st para : row , 2nd para : column seq
        var billcell = grid.getCellObject( i, 3);//1st para : row , 2nd para : column seq
        var amountcell = grid.getCellObject( i, 4);//1st para : row , 2nd para : column seq

           detail = detailcell.getValue();
           purpose = purposecell.getValue();
           bill = billcell.getValue();
           amount = amountcell.getValue();

           if(amount=="" || amount=="0")
           {
            isallow = false;
            document.getElementById('msgbox').innerHTML="<a class=\\"statusmsg\\">Please enter Amount.</a><br/>";
           }

           if(bill=="")
           {
            isallow = false;
            document.getElementById('msgbox').innerHTML="<a class=\\"statusmsg\\">Please enter Bill/Invoice No.</a><br/>";
           }

            if(purpose=="")
           {
            isallow = false;
            document.getElementById('msgbox').innerHTML="<a class=\\"statusmsg\\">Please enter Purpose.</a><br/>";
           }

           if(detail=="")
           {
            isallow = false;
            document.getElementById('msgbox').innerHTML="<a class=\\"statusmsg\\">Please enter Detail of Expenditure.</a><br/>";
           }
        }

        if(isallow)
          return true;
        else
          return false;
    }

        function onclickaddbutton(){
              if("{$this->isreadonly}"=="0" && "{$this->iscomplete}"=="0"){
            var g= nitobi.getGrid('DataboundGrid');
            g.insertAfterCurrentRow();

            document.getElementById('line_type').value = "2";
            }
        }
        
        function shotcutinsertline(e){
        
            if(e.charCode==32)
            onclickaddbutton();
        }
        function shotcutdeleteline(e){

            if(e.charCode==32)
            onclickdeletebutton();
        }
</script>

<input type="hidden" id="line_type" value="">

<div id='blanket' style='display:none;'></div>
<div id='popUpDiv' style='display:none;verticle-align:center'>

     <div id='popupmessage' style='text-align:center'></div>d<div id='progressimage' style='text-align:center'><img src='../simantz/images/ajax_indicator_01.gif'></div>
</div>

<div align="center">
<table style="width:940px;">

<tr><td align="left">{$addctrl}</td></tr>
<tr><td align="center" style="background-color:#ffffff;">
<!-- onchangeevent="getTotalAmount()" onaftercelleditevent="getTotalAmountCell(eventArgs)"-->
<ntb:grid id="DataboundGrid"
     mode="nonpaging"
     toolbarenabled='false'
     {$permctrl}
     onhtmlreadyevent="dataready()"
     singleclickeditenabled="true"
     keygenerator="GetNewRecordID();"
     onhandlererrorevent="showError()"
     gethandler="batch.php?action=searchbatchline&batch_id={$this->batch_id}"
     savehandler="batch.php?action=saveBatchline"
     onbeforecelleditevent="checkAllowEdit(eventArgs)"
     onafterrowinsertevent="setDefaultValue(eventArgs,'add')"
     rowhighlightenabled="false"
     width="960"
     height="200"
     onaftersaveevent="savedone(eventArgs)"
     onaftercelleditevent="getTotalAmountCell(eventArgs)"
     onbeforerowdeleteevent="setDefaultValue(eventArgs,'delete')"
     autosaveenabled="false"
     theme="{$nitobigridthemes}">

 <ntb:columns>


    <ntb:textcolumn classname="{\$rh}" width="170" label="Account"  xdatafld="accounts_cell" sortenabled="false">
        <ntb:listboxeditor gethandler="simbizlookup.php?action=getaccountlistgrid" displayfields="accounts_name" valuefield="accounts_id" ></ntb:listboxeditor>
            </ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" width="170" label="B.Partner"  xdatafld="bpartner_cell" sortenabled="false" editable="{$editBPartner}">
    <ntb:listboxeditor gethandler="simbizlookup.php?action=searchbpartnergrid" displayfields="bpartner_name" valuefield="bpartner_id" ></ntb:listboxeditor>
            </ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" label="Cheque No." width="60" xdatafld="document_no2" sortenabled="false"></ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" label="Doc No." width="60" xdatafld="document_no" sortenabled="false" editable="true"></ntb:textcolumn>
    <ntb:textcolumn classname="{\$rh}" label="Memo"  width="125"  xdatafld="linedesc" sortenabled="false"><ntb:textareaeditor></ntb:textareaeditor></ntb:textcolumn>

    <ntb:numbercolumn classname="{\$rh}" label="Debit({$defcurrencycode})" oncellvalidateevent="updateCurrentRow(eventArgs)" mask="#0.00" width="70" xdatafld="amt_debit" sortenabled="false"></ntb:numbercolumn>

    <ntb:numbercolumn classname="{\$rh}" label="Credit({$defcurrencycode})" oncellvalidateevent="updateCurrentRow(eventArgs)" mask="#0.00" width="70" xdatafld="amt_credit" sortenabled="false"></ntb:numbercolumn>

    <ntb:textcolumn classname="{\$rh}" width="50" label="Branch"  xdatafld="organization_cell" sortenabled="false" initial="{$defaultorganization_id}">
            <ntb:listboxeditor gethandler="simbizlookup.php?action=getbranchlistgrid" displayfields="organization_code" valuefield="organization_id" ></ntb:listboxeditor>
    </ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" visible="false"   width="40" label="{$track1_name}"  xdatafld="track1_cell" sortenabled="false">
    <ntb:listboxeditor gethandler="simbizlookup.php?action=gettracklist1grid" displayfields="track_name" valuefield="track_id" ></ntb:listboxeditor>
    </ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" visible="false"  width="40" label="{$track2_name}"  xdatafld="track2_cell" sortenabled="false">
    <ntb:listboxeditor gethandler="simbizlookup.php?action=gettracklist2grid" displayfields="track_name" valuefield="track_id" ></ntb:listboxeditor>
    </ntb:textcolumn>

    <ntb:textcolumn classname="{\$rh}" visible="false"  width="40" label="{$track3_name}"  xdatafld="track3_cell" sortenabled="false">
    <ntb:listboxeditor gethandler="simbizlookup.php?action=gettracklist3grid" displayfields="track_name" valuefield="track_id" ></ntb:listboxeditor>
    </ntb:textcolumn>

EOF;
        echo <<<EOF

      <ntb:textcolumn label=""   xdatafld="imgdel"    width="25"  sortenabled="false" classname="{\$rh}" oncellclickevent="javascript:onclickdeletebutton()" align="right" onkeypressevent=javascrpt:shotcutdeleteline(eventArgs)>
      <ntb:imageeditor imageurl="images/del.gif"></ntb:imageeditor> </ntb:textcolumn>
      <ntb:textcolumn label=""   xdatafld="imgadd"    width="25"  sortenabled="false" classname="{\$rh}" oncellclickevent="javascript:onclickaddbutton()" align="center" onkeypressevent=javascrpt:shotcutinsertline(eventArgs)>
      <ntb:imageeditor imageurl="{$url_addline_img}" ></ntb:imageeditor> </ntb:textcolumn>

      <ntb:numbercolumn    visible="false" label=""  width="0" xdatafld="trans_id" mask="###0" sortenabled="false"></ntb:numbercolumn>

      <ntb:numbercolumn visible="false"   label=""  width="0" xdatafld="row_typeline" mask="###0" sortenabled="false"></ntb:numbercolumn>
      <ntb:numbercolumn visible="false"   label=""  width="0" xdatafld="reference_id" mask="###0" sortenabled="false"></ntb:numbercolumn>
      <ntb:numbercolumn visible="false"   label=""  width="0" xdatafld="temp_parent_id" mask="###0" sortenabled="false"></ntb:numbercolumn>
      <ntb:numbercolumn visible="false"   label=""  width="0" xdatafld="total_tax" sortenabled="false" initial="0.00"></ntb:numbercolumn>
      <ntb:numbercolumn visible="false"   label=""  width="0" xdatafld="seqno" sortenabled="false" mask="###0"></ntb:numbercolumn>

        <ntb:textcolumn visible="false" classname="{\$rh}" width="0" label=""  xdatafld="tax_cell" sortenabled="false" editable="{$editTax}">
        <ntb:lookupeditor delay="1000" gethandler="simbizlookup.php?action=gettaxlistgrid" displayfields="tax_name" valuefield="tax_id"></ntb:lookupeditor>
        </ntb:textcolumn>

   </ntb:columns>
 </ntb:grid>

</td></tr>

<tr><td align="left">
<input id='afterconfirm' value='0' type='hidden'>

<div id="msgbox" class="blockContent"></div>
<div id="statusDiv"></div>
</td></tr></table></div>




EOF;
    }