<?php

$do = isset($_GET['do']) ? $_GET['do'] : "";
$ajaxDoArr = array("showallajax", "showallajaxCheques");
if (!in_array($do, $ajaxDoArr)) {
    //the global file operation
    include("../public/impOpreation.php");
}

//global varable
global $showoutside;
include_once("initiateStaticSessionCommingWithCurl.php");

//to check if the page from .htacess
//$showoutside = $_GET['sn'];
// get the config file
include_once("../public/config.php");
include_once("dailyentryfun.php");

//here the db files that include in the file
include("../public/include_dao.php");

require_once('../models/dao/CheckwithdrawalDAO.class.php');
require_once('../models/dto/Checkwithdrawal.class.php');
require_once('../models/mysql/CheckwithdrawalMySqlDAO.class.php');
require_once('../models/mysql/ext/CheckwithdrawalMySqlExtDAO.class.php');
//Supplier
require_once('../models/dao/SupplierDAO.class.php');
require_once('../models/dto/Supplier.class.php');
require_once('../models/mysql/SupplierMySqlDAO.class.php');
require_once('../models/mysql/ext/SupplierMySqlExtDAO.class.php');
//Supplierdebtchange
require_once('../models/dao/SupplierdebtchangeDAO.class.php');
require_once('../models/dto/Supplierdebtchange.class.php');
require_once('../models/mysql/SupplierdebtchangeMySqlDAO.class.php');
require_once('../models/mysql/ext/SupplierdebtchangeMySqlExtDAO.class.php');
//Buybill
require_once('../models/dao/BuybillDAO.class.php');
require_once('../models/dto/Buybill.class.php');
require_once('../models/mysql/BuybillMySqlDAO.class.php');
require_once('../models/mysql/ext/BuybillMySqlExtDAO.class.php');
//Buybilldetail
require_once('../models/dao/BuybilldetailDAO.class.php');
require_once('../models/dto/Buybilldetail.class.php');
require_once('../models/mysql/BuybilldetailMySqlDAO.class.php');
require_once('../models/mysql/ext/BuybilldetailMySqlExtDAO.class.php');
//Returnbuybill
require_once('../models/dao/ReturnbuybillDAO.class.php');
require_once('../models/dto/Returnbuybill.class.php');
require_once('../models/mysql/ReturnbuybillMySqlDAO.class.php');
require_once('../models/mysql/ext/ReturnbuybillMySqlExtDAO.class.php');
//Returnbuybilldetail
require_once('../models/dao/ReturnbuybilldetailDAO.class.php');
require_once('../models/dto/Returnbuybilldetail.class.php');
require_once('../models/mysql/ReturnbuybilldetailMySqlDAO.class.php');
require_once('../models/mysql/ext/ReturnbuybilldetailMySqlExtDAO.class.php');
//Buyandruternbill
require_once('../models/dao/BuyandruternbillDAO.class.php');
require_once('../models/dto/Buyandruternbill.class.php');
require_once('../models/mysql/BuyandruternbillMySqlDAO.class.php');
require_once('../models/mysql/ext/BuyandruternbillMySqlExtDAO.class.php');
//Buyandruternbilldetail
require_once('../models/dao/BuyandruternbilldetailDAO.class.php');
require_once('../models/dto/Buyandruternbilldetail.class.php');
require_once('../models/mysql/BuyandruternbilldetailMySqlDAO.class.php');
require_once('../models/mysql/ext/BuyandruternbilldetailMySqlExtDAO.class.php');
//User
require_once('../models/dao/UserDAO.class.php');
require_once('../models/dto/User.class.php');
require_once('../models/mysql/UserMySqlDAO.class.php');
require_once('../models/mysql/ext/UserMySqlExtDAO.class.php');
//Currency
require_once('../models/dao/CurrencyDAO.class.php');
require_once('../models/dto/Currency.class.php');
require_once('../models/mysql/CurrencyMySqlDAO.class.php');
require_once('../models/mysql/ext/CurrencyMySqlExtDAO.class.php');

require_once('../models/dao/YoutubeLinkDAO.class.php');
require_once('../models/dto/YoutubeLink.class.php');
require_once('../models/mysql/YoutubeLinkMySqlDAO.class.php');
require_once('../models/mysql/ext/YoutubeLinkMySqlExtDAO.class.php');

//get the do the action
$do = $_GET['do'];
$langs = $_SESSION['erp_lang'];
include_once("../views/languages/$langs/success.php");
include_once("../views/languages/$langs/error.php");
/* ======================

  Controller Name :- supplierReportsController

  OPERTATION in Controller

  1- عرض تقرير دفعات
  2-  تقرير لمورد معين

  ======================== */

//here the global templates
if (!in_array($do, $ajaxDoArr)) {
    $smarty->display("header.html");
}

//here goes the instances and general variables

$checkWithdrawalDAO = new CheckwithdrawalMySqlDAO;
$checkWithdrawalExtDAO = new CheckwithdrawalMySqlExtDAO;
$checkWithdrawal = new Checkwithdrawal;
//Supplier
$supplier = new Supplier();
$supplierDAO = new SupplierMySqlDAO();
$supplierExt = new SupplierMySqlExtDAO();
//Supplierdebtchange
$supplierDeptChange = new Supplierdebtchange();
$supplierDeptChangeDAO = new SupplierdebtchangeMySqlDAO();
$supplierDeptChangeExt = new SupplierdebtchangeMySqlExtDAO();
//Buybill
$buyBill = new Buybill();
$buyBillDAO = new BuybillMySqlDAO();
//$buyBillDAO->load();
$buyBillExt = new BuybillMySqlExtDAO();
//Buybilldetail
$buyBillDetail = new Buybilldetail();
$buyBillDetailDAO = new BuybilldetailMySqlDAO();
$buyBillDetailExt = new BuybilldetailMySqlExtDAO();
//Returnbuybill
$returnBuyBill = new Returnbuybill();
$returnBuyBillDAO = new ReturnbuybillMySqlDAO();
$returnBuyBillExt = new ReturnbuybillMySqlExtDAO();
//Returnbuybilldetail
$returnBuyBillDetail = new Returnbuybilldetail();
$returnBuyBillDetailDAO = new ReturnbuybilldetailMySqlDAO();
$returnBuyBillDetailExt = new ReturnbuybilldetailMySqlExtDAO();
//Buyandruternbill
$buyAndReturnBill = new Buyandruternbill();
$buyAndReturnBillDAO = new BuyandruternbillMySqlDAO();
$buyAndReturnBillExt = new BuyandruternbillMySqlExtDAO();
//Buyandruternbilldetail
$buyAndReturnBillDetail = new Buyandruternbilldetail();
$buyAndReturnBillDetailDAO = new BuyandruternbilldetailMySqlDAO();
$buyAndReturnBillDetailExt = new BuyandruternbilldetailMySqlExtDAO();
//save
$Save = new Save();
$SaveDAO = new SaveMySqlDAO();
$SaveExt = new SaveMySqlExtDAO();
//savedaily
$Savedaily = new Savedaily();
$SavedailyDAO = new SavedailyMySqlDAO();
$SavedailyExt = new SavedailyMySqlExtDAO();
//User
$myUser = new User();
$myUserRecord = new UserMySqlDAO();
$myUserEx = new UserMySqlExtDAO();
//Currency
$currency = new Currency();
$currencyDAO = new CurrencyMySqlDAO();
$currencyEX = new CurrencyMySqlExtDAO();
//Programsetting
$ProgramsettingDAO = new ProgramsettingsMySqlDAO();

$youtubeLink = new YoutubeLink();
$youtubeLinkDAO = new YoutubeLinkMySqlDAO();
$youtubeLinkEX = new YoutubeLinkMySqlExtDAO();

$today = $todaydDateOnly = date("Y-m-d");
$smarty->assign('todaydDateOnly', $todaydDateOnly);

$programsettingsdata = $ProgramsettingDAO->load(1);
$smarty->assign('programsettingsdata', $programsettingsdata);

//check and use the condition that suite this action
if (empty($do) || $do == "show") { // تقرير دفعات
    //here the permssion check
    include_once("../public/authentication.php");

    $supplierData = getSupplierData();
    $smarty->assign('supplierData', $supplierData);

    $projectid = $_GET['proid'];
    $smarty->assign("projectid", $projectid);
    $allCostcenter = $CostcenterEX->queryAllnotdel();
    $smarty->assign("allCostcenter", $allCostcenter);

    $youtubes = $youtubeLinkDAO->queryAll();
    $smarty->assign("youtubes", $youtubes);

    $saveData = getSaveData();
    $smarty->assign('saveData', $saveData);

    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];
    $supplierId = $_POST['supplierId'];
    $saveId = filter_input(INPUT_POST, 'saveId');

    $id = (int) $_GET["id"];
    $smarty->assign("idsearch", $id);

    /* if ((isset($supplierId) && $supplierId != "-1") || (!empty($startDate) && !empty($endDate)) || (isset($saveId) && $saveId != "-1")) {
      $messageData = $supplierDAO->load($supplierId);
      $message = " اسم المورد : " . $messageData->suppliername . "التاريخ: من: " . $startDate . " إلى: " . $endDate;
      $smarty->assign("message", $message);

      showx($supplierId, $saveId, $startDate, $endDate);
      } else {
      //showall();
      show($today, $today);
      } */
    /* if(isset($startDate) && isset($endDate) && $startDate !="" && $endDate !="")
      {
      $message = "التاريخ: من: ".$startDate." إلى: ".$endDate;
      $smarty->assign("message",$message);

      show($startDate, $endDate);
      }

      else
      {
      $today=date("Y-m-d");
      show($today, $today);
      } */
    $smarty->assign("customSupplierReports", 1);
    $smarty->display("supplierReportsview/show.html");
} elseif ($do == "showallajax") {
    showallajax();
} elseif ($do == "showallajaxCheques") {
    showallajaxCheques();
} elseif ($do == "remove") {
    // include_once("../public/authentication.php");
    try {
        delete();
        header("location:?do=sucess");
    } catch (Exception $e) {
        header("location:?do=error");

        //print_r($e);
    }
} elseif ($do == "oneSupplier") { // تقرير لمورد معين
    include_once("../public/authentication.php");

    $supplierData = getSupplierData();
    $smarty->assign('supplierData', $supplierData);

    $supplierid = $_REQUEST['supplierid'];
    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];
    $order = (int) $_REQUEST['order'];
    if (!empty($supplierid) && $supplierid != '-1' || !empty($startDate) && !empty($endDate) && $startDate != "" && $endDate != "") {
        $messageData = $supplierDAO->load($supplierid);
        $message = "إسم المورد: " . $messageData->suppliername;
        $message .= "<br>التاريخ: من: " . $startDate . " إلى: " . $endDate;
        $smarty->assign("message", $message);

        supplierShow($supplierid, $startDate, $endDate, $order);
    }
    $smarty->display("supplierReportsview/supplierShow.html");
} elseif ($do == "edit") { // تقرير لمورد معين
    include_once("../public/authentication.php");

    $supplierData = getSupplierData();
    $smarty->assign('supplierData', $supplierData);

    $alldata = editprint();
    $smarty->assign('alldata', $alldata);
    $smarty->display("supplierReportsview/edit.html");
} elseif ($do == "update") {
    include_once("../public/authentication.php");
    $supplierdebtchangeId = $_POST['id'];
    $comment = $_POST['comment'];
    try {
        $supplierDeptChangeExt->updateComment($comment, $supplierdebtchangeId);
        header("location:?do=sucess");
    } catch (Exception $e) {
        header("location:?do=error");
    }
} elseif ($do == "editprint") { // تقرير لمورد معين
    include_once("../public/authentication.php");

    $supplierData = getSupplierData();
    $smarty->assign('supplierData', $supplierData);

    $alldata = editprint();
    $smarty->assign('alldata', $alldata);

    //print_r($alldata);

    $smarty->display("supplierReportsview/editprint.html");
}
if ($do == "supplierShowforbuyonly") { // تقرير لعميل معين
    include_once("../public/authentication.php");

    $supplierData = $supplierDAO->queryByCondition(0);
    $smarty->assign('supplierData', $supplierData);

    $youtubes = $youtubeLinkDAO->queryAll();
    $smarty->assign("youtubes", $youtubes);

    $supplierid = $_REQUEST['supplierid'];

    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];

    if ($supplierid > 0 || !empty($startDate) && !empty($endDate)) {
        $messageData = $supplierDAO->load($supplierid);
        $message = "إسم المورد: " . $messageData->suppliername;
        $message .= "<br>التاريخ: من: " . $startDate . " إلى: " . $endDate;
        $smarty->assign("message", $message);

        supplierShowforbuyonly($supplierid, $startDate, $endDate);
    }
    $smarty->display("supplierReportsview/supplierShowforbuyonly.html");
} else if ($do == "all") { //تقارير الموردين (الدفعات)
    //عرض فواتير المشتريات والمردودات والعمليات الأخرى للمورد
    include_once("../public/authentication.php");

    $supplierData = getSupplierData();
    $smarty->assign('supplierData', $supplierData);

    $youtubes = $youtubeLinkDAO->queryAll();
    $smarty->assign("youtubes", $youtubes);

    $supplierid = $_REQUEST['supplierid'];
    $supplierDept = $supplierDAO->load($supplierid);
    $smarty->assign('supplierDept', $supplierDept);
    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];
    if (empty($startDate) && empty($endDate)) {
        $startDate = date('Y-m-d');
        $endDate = date('Y-m-d');
    }

    if (!empty($supplierid) && $supplierid != '-1') {
        ########
        $Programsetting = $ProgramsettingDAO->load(1);
        if (isset($Programsetting->reportsPlusHours) && !empty($Programsetting->reportsPlusHours)) {
            $reportsPlusHours = $Programsetting->reportsPlusHours + 24; //24 to get the end of the day and add search hours to it
            $endDate = date('Y-m-d H:i:s', strtotime('+' . $reportsPlusHours . ' hour +0 minutes', strtotime($endDate)));
            $startDate = date('Y-m-d H:i:s', strtotime('+' . $Programsetting->reportsPlusHours . ' hour +0 minutes', strtotime($startDate)));
        } else {
            $endDate = $endDate . ' 23:59:59';
            $startDate = $startDate . " 00:00:00";
        }
        #############
        if (!empty($supplierid)) {
            $messageData = $supplierDAO->load($supplierid);
            $message = "إسم المورد: " . $messageData->suppliername;
        }
        if (!empty($startDate)) {
            $message .= "<br>التاريخ: من: " . $startDate;
        }
        if (!empty($endDate)) {
            $message .= " إلى: " . $endDate;
        }
        $smarty->assign("message", $message);

        showAllOperations($supplierid, $startDate, $endDate);
    }
    $smarty->display("supplierReportsview/reportForAll.html");
} elseif ($do == "sucess") {
    //here the smarty templates
    $smarty->display("succes.html");
} elseif ($do == "error") {
    //here the smarty templates
    $smarty->display("error.html");
}


$smarty->assign('customSupplierReports', 1);
//here the global templates
if (!in_array($do, $ajaxDoArr)) {
    $smarty->display("footer.html");
}

/* ===============================
  function in this CONTROLLER
  ================================ */

function getSupplierData() {
    global $supplierDAO;
    global $supplierExt;

    // $alldata = $supplierDAO->queryAll();
    $alldata = $supplierExt->queryByCondition(0);
    return $alldata;
}

function getSaveData() {
    global $SaveDAO;

    $alldata = $SaveDAO->queryAll();
    return $alldata;
}

function delete() {
    //global

    $supplier;
    global $supplierExt;
    global $supplierDeptChange;
    global $supplierDeptChangeDAO;
    global $supplierDeptChangeExt;
    global $SavedailyExt;
    global $supplierDAO;



    //Transaction
    $mytransactions = new Transaction();
    try {
        $dailyentry = $_GET['dailyentry'];

        $supplierDebtChangeId = $_GET['id'];
        $supplierData = $supplierDeptChangeDAO->load1($supplierDebtChangeId);
        $supplierId = $supplierData->supplierid;
        //$supplierDebtAfter = $supplierData->supplierdebtchangeafter;
        $supplierDebtBefore = $supplierData->supplierdebtchangebefore;
        $payedDebt = $supplierData->supplierdebtchangeamount;
        $supplierDate = $supplierData->supplierdebtchangedate;
        $supplierDebtBeforeInSuppCurr = $supplierData->debtchangbeforeInSupplierCurrency;
        $payedDebtInSuppCurr = $supplierData->debtchangamountInSupplierCurrency;
        $saveId = $supplierData->saveid;
        //
        $currencyId = $supplierData->currencyId;
        $cFactor = $supplierData->conversionFactor;
        $payedDeptCurr = $supplierData->payedInCurrency;
        $saveConversionFactor = $supplierData->saveConversionFactor;


        $supplierdata = getSupplierDataFromSupplierInUseSP($supplierId);
        $suppData = $supplierDAO->load($supplierId);
        //$supplierData = $supplierDAO->load($supplierId);
        $supplierDebtAfter = $supplierdata->suppliercurrentDebt;
        $supplierDebtAfterInSuppCurr = $suppData->suppliercurrentDebtInCurrency;
        $supplierDebtAfterTotal = $supplierDebtAfter + $payedDebt;
        $supplierDebtAfterTotalInSuppCurr = $supplierDebtAfterInSuppCurr + $payedDebtInSuppCurr;

        $supplier->suppliercurrentDebt = $supplierDebtAfterTotal;
        $supplier->suppliercurrentDebtInCurrency = $supplierDebtAfterTotalInSuppCurr;
        $supplier->userid = $_SESSION['userid'];
        $supplier->supplierdate = $supplierDate;
        $supplier->supplierid = $supplierId;

        $supplierExt->updatedept($supplier);
        markSupplierAsNOTInUse($supplierId);

        //insert into supplierdeptchange tbl

        $supplierDeptChange->comment = "delRow" . $supplierDebtChangeId;
        $supplierDeptChange->processname = "الغاء سداد ديون مورد معين";
        $supplierDeptChange->supplierdebtchangeafter = $supplierDebtAfterTotal;
        $supplierDeptChange->supplierdebtchangeamount = $payedDebt;
        $supplierDeptChange->supplierdebtchangebefore = $supplierDebtAfter;
        $supplierDeptChange->supplierdebtchangedate = date("Y-m-d H:i:s"); //$supplierDate;
        $supplierDeptChange->supplierdebtchangemodelid = -1;
        $supplierDeptChange->supplierdebtchangetype = 0;
        $supplierDeptChange->tablename = "supplierPayedDeptController.php";
        $supplierDeptChange->userid = $_SESSION['userid'];
        $supplierDeptChange->del = 1;
        $supplierDeptChange->supplierid = $supplierId;
        $supplierDeptChange->dailyentryid = $supplierData->dailyentryid;
        $supplierDeptChange->paytype = 0;
        $supplierDeptChange->supplierdebtchangeid = $supplierDebtChangeId;
        $supplierDeptChange->saveid = $saveId;
        $supplierDeptChange->currencyId = $currencyId;
        $supplierDeptChange->conversionFactor = $cFactor;
        $supplierDeptChange->payedInCurrency = $payedDeptCurr;
        $supplierDeptChange->saveConversionFactor = $saveConversionFactor;
        $supplierDeptChange->debtchangbeforeInSupplierCurrency = $supplierDebtAfterInSuppCurr;
        $supplierDeptChange->debtchangamountInSupplierCurrency = $payedDebtInSuppCurr;
        $supplierDeptChange->debtchangafterInSupplierCurrency = $supplierDebtAfterTotalInSuppCurr;

        $supplierDeptChangeExt->updateDebt($supplierDeptChange);

        $newSupplierDeptChangeId = $supplierDeptChangeDAO->insert1($supplierDeptChange);

        //update save's current value
        //get saveVsalue before and saveValue after mins payedDept
        //get save id
        $queryString = ' tablename = "supplierPayedDeptController.php" and savedailymodelid = ' . $supplierDebtChangeId . ' ';
        $saveDaily = $SavedailyExt->querybyqueryString($queryString);
        $saveid = $saveDaily[0]->saveid;
        $valueData = getSaveValueAndPlus($payedDebt, $saveid, $saveConversionFactor);
        if (count($valueData) > 0) {
            $saveId = $valueData[0];
            $saveValuebefore = $valueData[1];
            $saveValueafter = $valueData[2];
            $payedDeptAmountCurr = $valueData[3]; //needed because of currency
            $saveConversionFactor = $valueData[4]; //needed because of currency
            //update save value after payedDept
            updateSave($saveId, $saveValueafter);
            //insert into savedaily tbl
            insertSavedaily($saveValuebefore, $payedDeptAmountCurr, 0, $saveId, "الغاء سداد ديون مورد", $newSupplierDeptChangeId, $saveValueafter, "supplierReportsController.php");
        }


        reverseEntryWithItsID($dailyentry, 1);
        $mytransactions->commit();
    } catch (Exception $ex) {
        markSupplierAsNOTInUse($supplierId);
        $mytransactions->rollback();
    }
}

// get initialvalue and plus from save tbl
function getSaveValueAndPlus($savevaluechanged, $saveid, $saveConversionFactor = 0) {
    global $save;
    global $saveDAO;
    global $SaveExt;

    $saveData = $SaveExt->loadForUpdateEx($saveid); //$saveDAO->load($saveid);
    $saveId = $saveData->saveid;
    $saveValuebefore = $saveData->savecurrentvalue;

    if ($saveConversionFactor == 0) { // if not given conversion factor use conversion factor of save
        $saveConversionFactor = $saveData->conversionFactor;
    }

    $savevaluechanged = round(($savevaluechanged * $saveConversionFactor), 4); //convert from main curr

    $saveValueafter = $saveValuebefore + $savevaluechanged;

    return array($saveId, $saveValuebefore, $saveValueafter, $savevaluechanged, $saveConversionFactor);
}

// update Save tbl
function updateSave($saveid, $savevalueafter) {
    global $Save;
    global $SaveExt;

    //update savecurrentvalue in Save tbl
    $Save->savecurrentvalue = $savevalueafter;
    $Save->userid = $_SESSION['userid'];
    $Save->saveid = $saveid;

    $SaveExt->updateSaveValue(
            $Save
    );
}

// insert in Savedaily tbl
function insertSavedaily($savedailysavebefore, $savedailychangeamount, $savedailychangetype, $saveid, $processname, $savedailymodelid, $savedailysaveafter, $tablename) {

    //to use the variable out side the funcion
    global $Savedaily;
    global $SavedailyDAO;

    //insert in Savedaily tbl
    $Savedaily->savedailydate = date("Y-m-d H:i:s");
    $Savedaily->userid = $_SESSION['userid'];
    $Savedaily->savedailysavebefore = $savedailysavebefore;
    $Savedaily->savedailychangeamount = $savedailychangeamount;
    $Savedaily->savedailychangetype = $savedailychangetype;
    $Savedaily->saveid = $saveid;
    $Savedaily->processname = $processname;
    $Savedaily->savedailymodelid = $savedailymodelid;
    $Savedaily->savedailysaveafter = $savedailysaveafter;
    $Savedaily->tablename = $tablename;

    $SavedailyDAO->insert(
            $Savedaily
    );
}

//editprint
function editprint() {
    global $supplierDeptChangeExt;
    global $supplierDeptChangeDAO;

    $id = $_GET["id"];
    $alldata = $supplierDeptChangeDAO->load($id);

    return $alldata;
}

//show
function show($startDate, $endDate) {
    global $supplierDeptChangeExt;
    global $myUserRecord;
    global $smarty;
    $queryString = '';
    $userdata = $myUserRecord->load($_SESSION['userid']);
    if ($userdata->searchinonesave == 1) {
        $queryString = ' and supplierdebtchange.saveid = ' . $userdata->saveid;
    }

    // get the all colums number
    $shownData = $supplierDeptChangeExt->queryPayedDeptOnlyNew($startDate, $endDate, $queryString);

    $sum;
    foreach ($shownData as $data) {
        $deletdRows = $supplierDeptChangeExt->queryByComment($data->supplierdebtchangeid);
        if (count($deletdRows) <= 0) {
            $sum += $data->supplierdebtchangeamount;
        } else {
            $data->del = 1;
        }
    }
    $smarty->assign('sum', $sum);


    // assign db results to the template
    $smarty->assign(
            'shownData',
            $shownData
    );
}

function showallajax() {
    global $supplierDeptChangeExt;
    global $ProgramsettingDAO;

    $today = date('Y-m-d');

    $sIndexColumn = "supplierdebtchangeid";

    /* DB table to use */
    $sTable = " supplierdebtchange
		JOIN supplier ON supplier.supplierid  = supplierdebtchange.supplierid
                JOIN user ON user.userid  = supplierdebtchange.userid
                JOIN savedaily on (savedaily.savedailymodelid = supplierdebtchange.supplierdebtchangeid and savedaily.tablename='supplierPayedDeptController.php')
                join save on savedaily.saveid =  save.saveid
		AND supplierdebtchange.tablename = 'supplierPayedDeptController.php' ";

    $aColumns = array('supplierdebtchangeid', 'suppliername', 'supplierdebtchangedate', 'supplierdebtchangebefore', 'supplierdebtchangeamount', 'supplierdebtchangeafter', 'comment', 'employeename', 'savename', 'del', 'supplierdebtchange.dailyentryid', 'supplierdebtchange.tablename');

    // Indexed column (used for fast and accurate table cardinality)

    /*
     * Paging
     */
    $sLimit = "";
    if (isset($_POST['start']) && $_POST['length'] != '-1') {
        $sLimit = "LIMIT " . intval($_POST['start']) . ", " .
                intval($_POST['length']);
    }

    /*
     * Ordering
     */
    $sOrder = "";

    if (isset($_POST['order'][0])) {
        $sOrder = "ORDER BY  ";
        for ($i = 0; $i < intval($_POST['columns']); $i++) {
            $orderByColumnIndex = $_POST['order'][0]['column'];
            $sOrder .= $aColumns[intval($_POST['columns'][$orderByColumnIndex]['data'])] . "
                " . ($_POST['order'][$i]['dir'] === 'asc' ? 'asc' : 'desc') . ", ";
        }
        $sOrder = substr_replace($sOrder, "", -2);
        if ($sOrder == "ORDER BY ") {
            $sOrder = "";
        }
    }

    /*
     * Filtering
     * NOTE this does not match the built-in DataTables filtering which does it
     * word by word on any field. It's possible to do here, but concerned about efficiency
     * on very large tables, and MySQL's regex functionality is very limited
     */
    // where del =0 and aqarstatus =0 and updatestatus in(1,2,3,4) and complete=1
    $sWhere = '';
    if (isset($_POST['search']['value']) && $_POST['search']['value'] != "") {
        $sWhere = " where  (";
        for ($i = 0; $i < count($aColumns); $i++) {
            if ($aColumns[$i] == "supplierdebtchangedate") {
                //to get numbers and english chars only
                ##only alpha numeric is allowed . space not allowed
                $search = preg_replace('/[^#A-Za-z0-9]/', '', $_POST['search']['value']); // Removes special chars.
                if (!empty($search)) {
                    $sWhere .= $aColumns[$i] . " LIKE '%" . $search . "%' OR ";
                }
            } else {
                $sWhere .= $aColumns[$i] . " LIKE '%" . $_POST['search']['value'] . "%' OR ";
            }
        }
        $sWhere = substr_replace($sWhere, "", -3);
        $sWhere .= ")";
    }
    //-- search ------------------------------------------------------------
    if ($sWhere == '') {
        $queryString = ' WHERE';
    } else {
        $queryString = ' AND';
    }

    $message = "";
    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];
    $supplierId = (int) $_REQUEST["supplierId"];
    //   $bure = (int) $_REQUEST["bure"];
    $saveId = (int) $_REQUEST["saveId"];
    $debtchangeid = (int) $_REQUEST["debtchangeid"];
    $Costcenterid = (int) $_REQUEST["Costcenterid"];

    $queryString .= '';
    /////

    if (isset($supplierId) && $supplierId > 0) {
        $queryString .= ' supplierdebtchange.supplierid =' . $supplierId . ' AND';
    } else if (isset($supplierId) && $supplierId != "-1" && $supplierId == "-2") {
        //$queryString .= ' supplierdebtchange.supplierid > 0 AND';
    }
    if (isset($saveId) && $saveId > 0) {
        $queryString .= ' save.saveid =' . $saveId . ' AND';
    }


    if (isset($Costcenterid) && $Costcenterid > 0) {
        $queryString .= ' supplierdebtchange.costcenterid =' . $Costcenterid . ' AND';
    }


    if (isset($debtchangeid) && $debtchangeid > 0) {
        $queryString .= ' supplierdebtchange.supplierdebtchangeid = ' . $debtchangeid . ' AND';
    }
    /* serch with date is done below
     * if (isset($startDate) && !empty($startDate)) {
      $startDate = $startDate . " 00:00:00";
      $queryString .= ' supplierdebtchange.supplierdebtchangedate >= "' . $startDate . '" AND';
      }
      if (isset($endDate) && !empty($endDate)) {
      $endDate = $endDate . " 23:59:59";
      $queryString .= ' supplierdebtchange.supplierdebtchangedate <= "' . $endDate . '" AND';
      } */
    if ($bure == 1) { //hide deleted
        $queryString .= ' supplierdebtchange.del = 0 AND';
    }

    ##needed Data
    $Programsetting = $ProgramsettingDAO->load(1);
    ##############
    ##fatma
    //    $search = $_REQUEST['searchDate'];
    //    if ($search == "null" || empty($search)) {
    $search = "dateOnly";
    //    }
    if (isset($startDate) && $startDate != "" && isset($endDate) && $endDate != "" && $tabDateGuide != "today") {
        if ($search == "dateOnly") {
            //display the converted time ##reportsPlusHours
            if (isset($Programsetting->reportsPlusHours) && !empty($Programsetting->reportsPlusHours)) {
                $reportsPlusHours = $Programsetting->reportsPlusHours + 24; //24 to get the end of the day and add search hours to it
                $endDate = date('Y-m-d H:i:s', strtotime('+' . $reportsPlusHours . ' hour +0 minutes', strtotime($endDate)));
                $startDate = date('Y-m-d H:i:s', strtotime('+' . $Programsetting->reportsPlusHours . ' hour +0 minutes', strtotime($startDate)));
            } else {
                $endDate = $endDate . ' 23:59:59';
                $startDate = $startDate . " 00:00:00";
            }
        }
        $queryString .= ' supplierdebtchange.supplierdebtchangedate >= "' . $startDate . '" and supplierdebtchange.supplierdebtchangedate <= "' . $endDate . '" AND';
        $queryString .= ' savedaily.savedailydate >= "' . $startDate . '" and savedaily.savedailydate <= "' . $endDate . '" AND';
    }

    $arr = explode(' ', $queryString);
    //print_r($arr);
    if (isset($arr) && count($arr) > 0) {
        $lastWord = end($arr);
        if ($lastWord == 'AND') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        }
        if ($lastWord == 'WHERE') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        }

        //print("<br>queryString: ".$queryString."<br>");
    }

    $totalBills = 0;

    $sWhere .= $queryString;
    //----------------------------------------------------------------------


    $sQuery = "SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . " FROM  $sTable $sWhere $sOrder $sLimit ";
    //echo $sQuery;
    //if empty qquery dont go to db
    if ($queryString != "") {
        $rResult = $supplierDeptChangeExt->runSelectQuery($sQuery);

        /* Data set length after filtering */
        /* $sQuery = "SELECT COUNT(" . $sIndexColumn . ") as supplierdebtchangeid  FROM  $sTable "; //$sOrder
          $rResultFilterTotal = $supplierDeptChangeExt->runSelectQuery($sQuery);
          foreach ($rResultFilterTotal as $oneis) {
          $countis = $oneis->supplierdebtchangeid;
          }
          $iFilteredTotal = $countis; */
        /* Total data set length */
        $sQuery = "SELECT COUNT(" . $sIndexColumn . ") as supplierdebtchangeid FROM  $sTable $sWhere ";
        $rResultTotal = $supplierDeptChangeExt->runSelectQuery($sQuery);


        foreach ($rResultTotal as $oneis) {
            $countit = $oneis->supplierdebtchangeid;
        }
        //$aResultTotal = mysql_fetch_array($rResultTotal);
        $iTotal = $countit;
        //make count = count of result not all o available for speed
        $iFilteredTotal = $countit;
    } else {
        //dont get data at all
        $rResultFilterTotal = array();
        $countis = 0;
        $iFilteredTotal = 0;
        $rResultTotal = array();
        $countit = 0;
        $iTotal = 0;
    }




    $output = array(
        "draw" => intval(filter_input(INPUT_POST, 'sEcho')), //$_REQUEST['draw'], //intval(filter_input(INPUT_POST, 'sEcho')),
        "recordsTotal" => intval($iTotal),
        "recordsFiltered" => intval($iFilteredTotal),
        "totals" => array(),
        "data" => array()
    );
    $rowno = 1;
    $totalRecits = 0;

    foreach ($rResult as $aRow) {
        $row = array();
        for ($i = 0; $i < count($aColumns); $i++) {
            switch ($aColumns[$i]) {
                case "supplierdebtchangeid":
                    $class = "";
                    if ($aRow->del == 1) {
                        $class = "danger";
                    }
                    $row[] = "<span class='" . $class . "'>$rowno</span>";
                    $row[] = $aRow->$aColumns[0];
                    break;
                case "supplierdebtchangedate":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "supplierdebtchangebefore":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "supplierdebtchangeamount":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "supplierdebtchangeafter":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "comment":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "suppliername":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "employeename":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "savename":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                default:
                    break;
            }
        }
        ////
        $row[] = '<a href="supplierReportsController.php?do=edit&id=' . $aRow->supplierdebtchangeid . '" target="_blank" type="button" class="btn btn-default btn-lg editicon"> </a>';
        $delBtn = '';
        if ($aRow->del == 0) {
            $delBtn = '<a href="#" ><input id="delbtn' . $rowno . '" data-itr="' . $rowno . '" data-action="supplierReportsController.php?do=remove&id=' . $aRow->supplierdebtchangeid . '&dailyentry=' . $aRow->dailyentryid . '" type="button"  class="btn btn-danger pull-right" value="حذف" /> </a>';
        } else {
            $delBtn = 'محذوف';
        }
        $row[] = $delBtn;

        $row[] = '<a target="_blank" href="supplierReportsController.php?do=editprint&id=' . $aRow->supplierdebtchangeid . '" ><input  type="button"  class="btn btn-success pull-right" value="طباعه" /> </a>';
        $row[] = '<a href="dailyentry.php?id=' . $aRow->dailyentryid . '" target="_blank" type="button" class="btn btn-default btn-lg editicon"> </a>'; //pull-right
        ///
        if ($aRow->del == 0) {
            $totalRecits += $aRow->supplierdebtchangeamount;
        }

        $output['data'][] = $row;
        $rowno++;
    }

    //if empty qquery dont go to db
    if ($queryString != "") {
        $output['totals']["totalRecitsResults"] = $totalRecits; //total of shown "search result"
        $sQuery = "SELECT sum(supplierdebtchangeamount) as supplierdebtchangeamount FROM  $sTable $sWhere and del = 0 "; //$sOrder $sLimit
        $rResult = $supplierDeptChangeExt->runSelectQuery($sQuery);
        $output['totals']["totalRecitsAll"] = (float) $rResult[0]->supplierdebtchangeamount; //total of all
    } else {
        $output['totals']["totalRecitsResults"] = 0; //total of shown "search result"
        $output['totals']["totalRecitsAll"] = 0; //total of all
    }

    //print_r($output);
    echo json_encode($output, JSON_UNESCAPED_SLASHES);
}

function showallajaxCheques() {
    global $checkWithdrawalExtDAO;

    $sIndexColumn = "checkwithdrawalid";

    /* DB table to use */
    $sTable = " checkwithdrawal c
                JOIN  bankaccount a ON a.accountid = c.bankaccountid
                JOIN  bank b ON b.bankid = a.bankid
                left JOIN supplier s ON s.supplierid = c.supplierid ";

    $aColumns = array('checkwithdrawalnumber', 'bankname', 'accountname', 'suppliername', 'checkwithdrawalamount', 'c.conditions', 'c.dailyentryid', 'checkwithdrawalid');

    // Indexed column (used for fast and accurate table cardinality)

    /*
     * Paging
     */
    $sLimit = "";
    if (isset($_POST['start']) && $_POST['length'] != '-1') {
        $sLimit = "LIMIT " . intval($_POST['start']) . ", " .
                intval($_POST['length']);
    }

    /*
     * Ordering
     */
    $sOrder = "";

    if (isset($_POST['order'][0])) {
        $sOrder = "ORDER BY  ";
        for ($i = 0; $i < intval($_POST['columns']); $i++) {
            $orderByColumnIndex = $_POST['order'][0]['column'];
            $sOrder .= $aColumns[intval($_POST['columns'][$orderByColumnIndex]['data'])] . "
                " . ($_POST['order'][$i]['dir'] === 'asc' ? 'asc' : 'desc') . ", ";
        }
        $sOrder = substr_replace($sOrder, "", -2);
        if ($sOrder == "ORDER BY ") {
            $sOrder = "";
        }
    }

    /*
     * Filtering
     * NOTE this does not match the built-in DataTables filtering which does it
     * word by word on any field. It's possible to do here, but concerned about efficiency
     * on very large tables, and MySQL's regex functionality is very limited
     */
    // where del =0 and aqarstatus =0 and updatestatus in(1,2,3,4) and complete=1
    $sWhere = '';
    if (isset($_POST['search']['value']) && $_POST['search']['value'] != "") {
        $sWhere = " where  (";
        for ($i = 0; $i < count($aColumns); $i++) {
            if ($aColumns[$i] == "checkwithdrawaldate") {
                //to get numbers and english chars only
                ##only alpha numeric is allowed . space not allowed
                $search = preg_replace('/[^#A-Za-z0-9]/', '', $_POST['search']['value']); // Removes special chars.
                if (!empty($search)) {
                    $sWhere .= $aColumns[$i] . " LIKE '%" . $search . "%' OR ";
                }
            } else {
                $sWhere .= $aColumns[$i] . " LIKE '%" . $_POST['search']['value'] . "%' OR ";
            }
        }
        $sWhere = substr_replace($sWhere, "", -3);
        $sWhere .= ")";
    }
    //-- search ------------------------------------------------------------
    if ($sWhere == '') {
        $queryString = ' WHERE';
    } else {
        $queryString = ' AND';
    }

    $message = "";
    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];
    $supplierId = (int) $_REQUEST["supplierId"];

    $queryString .= '';
    /////

    if (isset($supplierId) && $supplierId > 0) {
        $queryString .= ' c.supplierid =' . $supplierId . ' AND';
    } else {
        //$queryString .= ' c.supplierid >0 AND';
    }


    if (isset($startDate) && !empty($startDate)) {
        $queryString .= ' c.checkwithdrawaldate >= "' . $startDate . '" AND';
    }
    if (isset($endDate) && !empty($endDate)) {
        $queryString .= ' c.checkwithdrawaldate <= "' . $endDate . '" AND';
    }
    /*
      ##needed Data
      $Programsetting = $ProgramsettingDAO->load(1);
      ##############
      ##fatma
      //    $search = $_REQUEST['searchDate'];
      //    if ($search == "null" || empty($search)) {
      $search = "dateOnly";
      //    }
      if (isset($startDate) && $startDate != "" && isset($endDate) && $endDate != "" && $tabDateGuide != "today") {
      if ($search == "dateOnly") {
      //display the converted time ##reportsPlusHours
      if (isset($Programsetting->reportsPlusHours) && !empty($Programsetting->reportsPlusHours)) {
      $reportsPlusHours = $Programsetting->reportsPlusHours + 24; //24 to get the end of the day and add search hours to it
      $endDate = date('Y-m-d H:i:s', strtotime('+' . $reportsPlusHours . ' hour +0 minutes', strtotime($endDate)));
      $startDate = date('Y-m-d H:i:s', strtotime('+' . $Programsetting->reportsPlusHours . ' hour +0 minutes', strtotime($startDate)));
      } else {
      $endDate = $endDate . ' 23:59:59';
      $startDate = $startDate . " 00:00:00";
      }
      }
      $queryString .= ' supplierdebtchange.supplierdebtchangedate >= "' . $startDate . '" and supplierdebtchange.supplierdebtchangedate <= "' . $endDate . '" AND';
      $queryString .= ' savedaily.savedailydate >= "' . $startDate . '" and savedaily.savedailydate <= "' . $endDate . '" AND';
      }
     */
    $arr = explode(' ', $queryString);
    //print_r($arr);
    if (isset($arr) && count($arr) > 0) {
        $lastWord = end($arr);
        if ($lastWord == 'AND') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        }
        if ($lastWord == 'WHERE') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        }

        //print("<br>queryString: ".$queryString."<br>");
    }

    $totalBills = 0;

    $sWhere .= $queryString;
    //----------------------------------------------------------------------


    $sQuery = "SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . " FROM  $sTable $sWhere $sOrder $sLimit ";
    //echo $sQuery;
    //if empty qquery dont go to db
    if ($queryString != "") {
        $rResult = $checkWithdrawalExtDAO->runSelectQuery($sQuery);

        /* Data set length after filtering */
        /* $sQuery = "SELECT COUNT(" . $sIndexColumn . ") as checkwithdrawalid  FROM  $sTable "; //$sOrder
          $rResultFilterTotal = $supplierDeptChangeExt->runSelectQuery($sQuery);
          foreach ($rResultFilterTotal as $oneis) {
          $countis = $oneis->checkwithdrawalid;
          }
          $iFilteredTotal = $countis; */
        /* Total data set length */
        $sQuery = "SELECT COUNT(" . $sIndexColumn . ") as checkwithdrawalid FROM  $sTable $sWhere ";
        $rResultTotal = $checkWithdrawalExtDAO->runSelectQuery($sQuery);


        foreach ($rResultTotal as $oneis) {
            $countit = $oneis->checkwithdrawalid;
        }
        //$aResultTotal = mysql_fetch_array($rResultTotal);
        $iTotal = $countit;
        //make count = count of result not all o available for speed
        $iFilteredTotal = $countit;
    } else {
        //dont get data at all
        $rResult = array();
        $rResultFilterTotal = array();
        $countis = 0;
        $iFilteredTotal = 0;
        $rResultTotal = array();
        $countit = 0;
        $iTotal = 0;
    }




    $output = array(
        "draw" => intval(filter_input(INPUT_POST, 'sEcho')), //$_REQUEST['draw'], //intval(filter_input(INPUT_POST, 'sEcho')),
        "recordsTotal" => intval($iTotal),
        "recordsFiltered" => intval($iFilteredTotal),
        "totals" => array(),
        "data" => array()
    );
    $rowno = 1;
    $totalRecits = 0;

    foreach ($rResult as $aRow) {
        $row = array();
        for ($i = 0; $i < count($aColumns); $i++) {
            switch ($aColumns[$i]) {
                case "checkwithdrawalnumber":
                    $class = "";
                    if ($aRow->conditions == 1) {
                        $class = "danger";
                    }
                    $row[] = "<span class='" . $class . "'>" . $aRow->$aColumns[$i] . "</span>";
                    //$row[] = $aRow->$aColumns[0];
                    break;
                case "bankname":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "accountname":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "suppliername":
                    if (empty($aRow->$aColumns[$i])) {
                        $aRow->$aColumns[$i] = 'شراء اصل';
                    }
                    $row[] = $aRow->$aColumns[$i];
                    break;
                case "checkwithdrawalamount":
                    $row[] = $aRow->$aColumns[$i];
                    break;
                default:
                    break;
            }
        }
        ////

        $delBtn = '';
        if ($aRow->conditions == 0) {
            $delBtn = '<a href="#"  name="dd" id="delbtn_cheques' . $rowno . '" data-itr="' . $rowno . '" data-action="checkwithdrawalController.php?do=delete&id=' . $aRow->checkwithdrawalid . '&action=' . $aRow->dailyentryid . '"   type="button" class="btn btn-default btn-lg deleteicon"> </a>';
            //$delBtn = '<a href="#" ><input id="delbtn' . $rowno . '" data-itr="' . $rowno . '" data-action="checkwithdrawalController.php?do=delete&id=' . $aRow->checkwithdrawalid . '&action=' . $aRow->dailyentryid . '" type="button"  class="btn btn-danger pull-right" value="حذف" /> </a>';
        } else {
            $delBtn = 'محذوف';
        }
        $row[] = $delBtn;

        $row[] = '<a href="checkwithdrawalController.php?do=edit&id=' . $aRow->checkwithdrawalid . '" type="button" class="btn btn-default btn-lg editicon"></a>';
        $row[] = '<a href="checkwithdrawalController.php?do=editprint&id=' . $aRow->checkwithdrawalid . '" type="button" class="btn btn-default btn-lg printicon"></a>';
        ///
        if ($aRow->conditions == 0) {
            $totalRecits += $aRow->checkwithdrawalamount;
        }

        $output['data'][] = $row;
        $rowno++;
    }

    //if empty qquery dont go to db
    if ($queryString != "") {
        $output['totals']["totalRecitsResults"] = $totalRecits; //total of shown "search result"
        $sQuery = "SELECT sum(checkwithdrawalamount) as checkwithdrawalamount FROM  $sTable $sWhere and c.conditions = 0 "; //$sOrder $sLimit
        $rResult = $checkWithdrawalExtDAO->runSelectQuery($sQuery);
        $output['totals']["totalRecitsAll"] = (float) $rResult[0]->checkwithdrawalamount; //total of all
    } else {
        $output['totals']["totalRecitsResults"] = 0; //total of shown "search result"
        $output['totals']["totalRecitsAll"] = 0; //total of all
    }

    echo json_encode($output, JSON_UNESCAPED_SLASHES);
}

function supplierShow2($supplierid, $startDate, $endDate) {
    global $supplierDeptChangeExt;
    global $smarty;


    // get the all colums number
    $shownData = $supplierDeptChangeExt->queryBySupplierIdAndDate($supplierid, $startDate, $endDate);


    foreach ($shownData as $data) {
        if ($data->supplierdebtchangemodelid != -1) {

            if ($data->tablename == "buyBillController.php") {
                $data->link = "buyBillController.php?do = editprint&id = " . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "returnBuyBillController.php") {
                $data->link = "returnBuyBillController.php?do = editprint&id = " . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "buyAndReturnBillController.php") {
                $data->link = "buyAndReturnBillController.php?do = editprint&id = " . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "kempialaController.php") {
                $data->link = "kempialaController.php?do = editprint&id = " . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "checkwithdrawalController.php") {
                $data->link = "checkwithdrawalController.php?do = editprint&id = " . $data->supplierdebtchangemodelid;
            } else if ($data->tablename == "policyController.php") {
                $data->link = "policyController.php?do=edit&policyId=" . $data->clientdebtchangemodelid;
            }
        } else {
            $data->link = "#";
        }
    }

    // assign db results to the template
    $smarty->assign('shownData', $shownData);
}

function showAllOperations($supplierid, $startDate, $endDate) {
    global $supplierDeptChangeExt;
    global $sellBillDAO;
    global $buyBillDAO;
    global $returnBuyBillDAO;
    global $smarty;
    global $myBuybillandruternRecord;
    global $checkWithdrawalExtDAO;


    //فواتير المشتريات
    //from buybill table and buyandruternbill table
    $buybillData = showBuyBillsBySupplierAndDate($supplierid, $startDate, $endDate);

    //فواتير مردودات المشتريات
    //from returnbuybill table and buyandruternbill table
    $returnbuybillData = showReturnBuyBillsBySupplierAndDate($supplierid, $startDate, $endDate);
    $queryString = '';
    if (!empty($supplierid)) {
        $queryString .= ' AND supplierdebtchange.supplierid = ' . $supplierid . '';
    }
    if (!empty($_REQUEST['from'])) {
        $queryString .= ' AND date( supplierdebtchange.supplierdebtchangedate ) >= "' . $_REQUEST['from'] . '"';
    }
    if (!empty($_REQUEST['to'])) {
        $queryString .= ' AND date( supplierdebtchange.supplierdebtchangedate ) <= "' . $_REQUEST['to'] . '"';
    }
    //get from supplierdebtchange table
    $SupplierShowData = $supplierDeptChangeExt->queryBySupplierIdAndDateNew_f($queryString);

    //print_r($SupplierShowData);
    if (count($SupplierShowData) > 0) {
        $i = 1;

        foreach ($SupplierShowData as $c) { //when the money form buy bill must select form the buy bill table
            // ihis is canceld  not selected now
            /* if ($c->tablename == "supplierPayedDeptController.php" && $c->del == 1) {
              $c->del = 0;
              $newC = new stdClass();
              $newC->supplierdebtchangetype = 0;
              $newC->processname = 'الغاء سداد ديون مورد معين';
              $newC->del = 1;
              $newC->tablename = $c->tablename;
              $newC->supplierdebtchangeamount = $c->supplierdebtchangeamount;
              $newC->supplierdebtchangemodelid = $c->supplierdebtchangemodelid;
              $newC->supplierdebtchangedate = $c->supplierdebtchangedate;
              $totalPrice += $newC->supplierdebtchangeamount;
              array_splice($SupplierShowData, $i, 0, array($newC));
              //print_r($c);
              //$alldatabuy = $buyBillDAO->load($c->supplierdebtchangemodelid);
              } */
            if ($c->tablename == "buyBillController.php") {
                $alldatabuy = $buyBillDAO->load($c->supplierdebtchangemodelid);

                $c->supplierdebtchangeamount = $alldatabuy->buybilltotalpayed;
                $totalPrice += $alldatabuy->buybilltotalpayed;
            } else {

                if ($c->supplierdebtchangetype == 0) { //in case of 0 subtract
                    $totalPrice -= $c->supplierdebtchangeamount;
                } else {
                    $totalPrice += $c->supplierdebtchangeamount;
                }
            }

            if ($c->tablename == "checkwithdrawalController.php") {

                $id = $c->supplierdebtchangemodelid;
                $checkdata = $checkWithdrawalExtDAO->queryByIdExt($id);
                $c->bankname = $checkdata->bankname;
                $c->accountname = $checkdata->accountname;
            }
            //print_r($c);
            //$alldatabuy = $buyBillDAO->load($c->supplierdebtchangemodelid);
            //print_r($alldatabuy);
            $i++;
        }
    }

    //# جمع دفعة فى فاتورة مبيعات على اجمالى الدفعات
    foreach ($buybillData as $data) {
        if ($data->buybilltotalpayed != 0) {
            $totalPrice += $data->buybilltotalpayed;
        }
    }

    //# جمع دفعة فى فاتورة المبيعات والمرتجعات على اجمالى الدفعات
    foreach ($returnbuybillData[1] as $data) {
        if ($data->buybilltotalpayed != 0) {
            $totalPrice += $data->buybilltotalpayed;
        }
    }

    // assign db results to the template
    $smarty->assign('buybillData', $buybillData);
    $smarty->assign('returnbuybillData', $returnbuybillData);
    $smarty->assign('SupplierShowData', $SupplierShowData);
    $smarty->assign('totalPrice', $totalPrice);
}

///nora//////////////////

function supplierShow($supplierid, $startDate, $endDate, $order) {
    global $supplierDeptChangeExt;
    global $supplierDAO;
    global $buyBillDAO;
    global $returnBuyBillDAO;
    global $buyAndReturnBillDAO;
    global $smarty;
    global $checkWithdrawalExtDAO;


    $bure = $_POST["bure"];

    $queryString = ' WHERE';


    if (isset($supplierid) && $supplierid != '-1') {
        $suppliernamedata = $supplierDAO->load($supplierid);
        $message = " اسم المورد " . $suppliernamedata->suppliername;
        $smarty->assign('message', $message);
        $smarty->assign('currentBalance', $suppliernamedata->suppliercurrentDebt);

        $queryString .= ' supplierdebtchange.supplierid =' . $supplierid . ' AND';
    }

    if (!empty($startDate) && !empty($endDate)) {

        $message .= " من تاريخ  " . $startDate . "  الى تاريخ" . $endDate;
        $smarty->assign('message', $message);

        $queryString .= '  date( supplierdebtchange.supplierdebtchangedate ) >= "' . $startDate . '" AND date( supplierdebtchange.supplierdebtchangedate ) <= "' . $endDate . '" AND';
    }

    $arr = explode(' ', $queryString);
    if (isset($arr) && count($arr) > 0) {
        $lastWord = end($arr);
        if ($lastWord == 'AND') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        } else if ($lastWord == 'WHERE') { //remove it
            array_pop($arr);
            $queryString = ' ';
        }
        //print("<br>queryString: ".$queryString."<br>");
    }

    if ($order == 1) {
        $orderBy = " order by supplierdebtchangedate desc ";
    } else {
        $orderBy = " order by supplierdebtchangeid desc ";
    }

    // get the all colums number
    $shownData = $supplierDeptChangeExt->queryBySupplierIdAndDate2($queryString, $orderBy);
    //    var_dump($shownData);
    $i = 1;
    foreach ($shownData as $data) {
        /* if ($data->tablename == "supplierPayedDeptController.php" && $data->del == 1) {
          $data->del = 0;
          $newData = new stdClass();
          $newData->supplierdebtchangeid = $data->supplierdebtchangeid;
          $newData->supplierid = $data->supplierid;
          $newData->supplierdebtchangebefore = $data->supplierdebtchangebefore;
          $newData->supplierdebtchangeamount = $data->supplierdebtchangeamount;
          $newData->supplierdebtchangetype = 0;
          $newData->processname = 'الغاء سداد ديون مورد معين';
          $newData->supplierdebtchangemodelid = $data->supplierdebtchangemodelid;
          $newData->supplierdebtchangeafter = $data->supplierdebtchangeafter;
          $newData->supplierdebtchangedate = $data->supplierdebtchangedate;
          $newData->userid = $data->userid;
          $newData->comment = $data->comment;
          $newData->suppliername = $data->suppliername;
          $newData->finalstring = $data->finalstring;
          $newData->del = 1;
          $newData->tablename = $data->tablename;

          $newData->dailyentryid = $data->dailyentryid;
          $newData->totalbillvalue = $data->supplierdebtchangeamount; //$data->totalbillvalue;
          $newData->buybillpaid = $data->buybillpaid;
          $newData->link = $data->link;

          //$totalPrice += $newData->supplierdebtchangeamount;
          array_splice($shownData, $i, 0, array($newData));
          //$alldatabuy = $buyBillDAO->load($c->supplierdebtchangemodelid);
          } */
        if ($data->tablename == "supplierPayedDeptController.php" && $data->del == 0) {
            $data->totalbillvalue = $data->supplierdebtchangeamount; //$data->totalbillvalue;
        }
        if ($data->supplierdebtchangemodelid != -1) {

            if ($data->tablename == "buyBillController.php") {
                $buybillid = $buyBillDAO->load($data->supplierdebtchangemodelid);
                $data->totalbillvalue = $buybillid->buybillaftertotalbill;
                $data->buybillpaid = $buybillid->buybilltotalpayed;
                $data->link = "buyBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "returnBuyBillController.php") {
                $buyreturnbillid = $returnBuyBillDAO->load($data->supplierdebtchangemodelid);
                $data->totalbillvalue = abs($buyreturnbillid->returnbuybillaftertotalbill);
                $data->buybillpaid = $buyreturnbillid->returnbuybilltotalpayed;
                $data->link = "returnBuyBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "buyAndReturnBillController.php") {
                $buyAndReturnBill = $buyAndReturnBillDAO->load($data->supplierdebtchangemodelid);
                $data->totalbillvalue = abs($buyAndReturnBill->buybillaftertotalbill);
                $data->buybillpaid = $buyAndReturnBill->buybilltotalpayed;
                $data->link = "buyAndReturnBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "kempialaController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "kempialaController.php?do=editprint&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "checkwithdrawalController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "checkwithdrawalController.php?do=editprint&id=" . $data->supplierdebtchangemodelid;

                $id = $data->supplierdebtchangemodelid;
                $checkdata = $checkWithdrawalExtDAO->queryByIdExt($id);
                $data->bankname = $checkdata->bankname;
                $data->accountname = $checkdata->accountname;
            } elseif ($data->tablename == "checkwithdrawalController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "checkwithdrawalController.php?do=editprint&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "supplierController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "supplierController.php?do=editprint&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "supplierPayedDeptController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "supplierReportsController.php?do=editprint&id=" . $data->supplierdebtchangeid;
            } elseif ($data->tablename == "expensesController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "expensesController.php?do=editprint&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "datedCheckedController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "datedCheckedController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            } elseif ($data->tablename == "assetController.php?type=1") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->buybillpaid = $data->supplierdebtchangeamount;
                $data->link = "assetController.php?do=editprint&id=" . $data->supplierdebtchangemodelid . "&type=1";
            } else if ($data->tablename == "policyController.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->link = "policyController.php?do=edit&policyId=" . $data->supplierdebtchangemodelid;
            } else if ($data->tablename == "dailyentry.php") {
                $data->totalbillvalue = $data->supplierdebtchangeamount;
                $data->link = "dailyentry.php?id=" . $data->supplierdebtchangemodelid;
            }
        } else {
            $data->totalbillvalue = $data->supplierdebtchangeamount;
            $data->buybillpaid = $data->supplierdebtchangeamount;
            $data->link = "#";
        }
        $i++;
    }

    if ($bure == "1") {

        $smarty->assign('burex', $bure);
        foreach ($shownData as $datax) {
            //print_r($datax);

            $finalstring = $datax->finalstring;

            //print_r($finalstring.'<br>');
            $type = $datax->supplierdebtchangetype;
            $supplierdebtchangeid = $datax->supplierdebtchangeid;



            if ($type == 1) {

                $otherfinal = substr_replace($finalstring, '0', -1);

                foreach ($shownData as $xx) {

                    if ($xx->finalstring == $otherfinal && $xx->supplierdebtchangeid != -1) {



                        $xx->supplierdebtchangeid = -1;
                        $datax->supplierdebtchangeid = -1;
                        break;
                        //print_r($datax->supplierdebtchangeid . '<br>');
                    }
                }
            }
        }
    }



    $ii = 0;
    //select all data from storemovement
    $startvalue = 0;
    $startbefore = 0;
    $startafter = 0;

    foreach ($shownData as $mov) {


        if ($bure == "1" && $mov->supplierdebtchangeid > 0) {


            if ($ii == 0) {

                $startvalue = $mov->supplierdebtchangeamount;
                $mov->supplierdebtchangeamount = $startvalue;
                $startbefore = $mov->supplierdebtchangebefore;
                $mov->supplierdebtchangebefore = $startbefore;
                $startafter = $mov->supplierdebtchangeafter;
                $mov->supplierdebtchangeafter = $startafter;
            } else {

                $startvalue = $mov->supplierdebtchangeamount;
                $mov->supplierdebtchangeafter = $startbefore;

                if ($mov->supplierdebtchangetype == "1") {

                    //print_r('in if<br>');
                    $mov->supplierdebtchangebefore = $startbefore + $startvalue;
                    $startbefore = $startbefore + $startvalue;
                } else {
                    //print_r('in else if<br>');
                    //print_r('startafter'.$startbefore .'<br>');
                    //print_r('startvalue'.$startbefore .'<br>');
                    //	print_r($startafter - $startvalue .'<br>');
                    $mov->supplierdebtchangebefore = $startbefore - $startvalue;
                    $startbefore = $startbefore - $startvalue;
                }


                //new product name with all path
            }





            $ii++;
        }
    }


    // assign db results to the template
    //print_r($shownData);
    $smarty->assign('shownData', $shownData);
}

function showBuyBillsBySupplierAndDate($supplierid, $startDate, $endDate) {
    global $buyBillExt;
    global $buyAndReturnBillExt;
    global $buyBillDetailExt;
    global $buyAndReturnBillDetailExt;
    global $smarty;

    $totalBills = 0;
    $totalQTY = 0;
    $queryString = '';
    $queryString1 = '';
    if (!empty($supplierid)) {
        $queryString .= ' AND buybill.buybillsupplierid = ' . $supplierid . '';
        $queryString1 .= ' AND buyandruternbill.buybillsupplierid = ' . $supplierid . '';
    }
    if (!empty($startDate)) {
        $queryString .= ' AND buybill.buybilldate >= "' . $startDate . '"';
        $queryString1 .= ' AND buyandruternbill.buybilldate >= "' . $startDate . '"';
    }
    if (!empty($endDate)) {
        $queryString .= ' AND buybill.buybilldate <= "' . $endDate . '"';
        $queryString1 .= ' AND buyandruternbill.buybilldate <= "' . $endDate . '"';
    }

    $buybillData = $buyBillExt->queryWithSupplierIdAndDateNew($queryString);
    //get products number in buy bills

    if (count($buybillData) > 0) {
        foreach ($buybillData as $bill) {
            $totalQty1 = $buyBillDetailExt->countProductInBuyBill($bill->buybillid);
            $bill->totalQty = $totalQty1;
            $totalQTY += $totalQty1;
            $totalBills += $bill->buybillaftertotalbill;
        }
    }

    //get buy bills from  buyandruternbill table
    $buybillandruternData = $buyAndReturnBillExt->queryBuyBillsOnlyWithSupplierIdAndDateNew($queryString1);
    //get products number in  buyandruternbill
    if (count($buybillandruternData) > 0) {
        foreach ($buybillandruternData as $bill) {
            $buybillid = $bill->buybillid;
            $buybilldiscountrype = $bill->buybilldiscountrype;
            $buybilldiscount = $bill->buybilldiscount;

            $allmydetales = $buyAndReturnBillDetailExt->queryByBuybillidANDType($buybillid, 0);
            //	print_r($allmydetales);

            $mytotal = 0;
            foreach ($allmydetales as $myallmydetales) {

                $buybilldetailtotalprice = $myallmydetales->buybilldetailtotalprice;
                $mytotal += $buybilldetailtotalprice;
            }

            //print_r('<br>');
            //print_r($mytotal);
            $myfialtotal = 0;
            //خصم مباشر
            if ($buybilldiscountrype == 0) {
                //print_r("in if <br>".$buybilldiscount);
                $myfialtotal = $mytotal - $buybilldiscount;
            } else {
                //print_r("in else <br>".$buybilldiscount.'<br>');
                //print_r((($mytotal*$buybilldiscount)/100).'<br>');
                $myfialtotal = $mytotal - (($mytotal * $buybilldiscount) / 100);
            }

            $bill->buybillaftertotalbill = $myfialtotal;
            $totalQty2 = $buyAndReturnBillDetailExt->countProductInBuyBillsOnly($bill->buybillid);
            $bill->totalQty = $totalQty2;
            $totalQTY += $totalQty2;
            $totalBills += $bill->buybillaftertotalbill;
        }
    }

    $buybillData = array_merge($buybillData, $buybillandruternData);

    $smarty->assign("buytotalQTY", $totalQTY);
    $smarty->assign("buytotalBills", $totalBills);

    return $buybillData;
}

function showReturnBuyBillsBySupplierAndDate($supplierid, $startDate, $endDate) {
    global $returnBuyBillExt;
    global $buyAndReturnBillExt;
    global $returnBuyBillDetailExt;
    global $buyAndReturnBillDetailExt;
    global $smarty;

    $totalBills = 0;
    $totalQTY = 0;

    $queryString = '';
    $queryString1 = '';
    if (!empty($supplierid)) {
        $queryString .= ' AND returnbuybill.returnbuybillsupplierid = ' . $supplierid . '';
        $queryString1 .= ' AND buyandruternbill.buybillsupplierid = ' . $supplierid . '';
    }
    if (!empty($startDate)) {
        $queryString .= ' AND returnbuybill.returnbuybilldate >= "' . $startDate . '"';
        $queryString1 .= ' AND buyandruternbill.buybilldate >= "' . $startDate . '"';
    }
    if (!empty($endDate)) {
        $queryString .= ' AND returnbuybill.returnbuybilldate <= "' . $endDate . '"';
        $queryString1 .= ' AND buyandruternbill.buybilldate <= "' . $endDate . '"';
    }

    $returnbuybillData = $returnBuyBillExt->queryWithSupplierIdAndDateNew($queryString);
    //get products number in return buy bills
    if (count($returnbuybillData) > 0) {
        foreach ($returnbuybillData as $bill) {
            //print_r($bill);
            if ($bill->returnbuybillaftertotalbill < 0) {
                $bill->returnbuybillaftertotalbill = ($bill->returnbuybillaftertotalbill * -1);
            }
            $totalQty1 = $returnBuyBillDetailExt->countProductInBuyBill($bill->returnbuybillid);
            $bill->totalQty = $totalQty1;
            $totalQTY += $totalQty1;
            if ($bill->returnbuybillaftertotalbill > 0) {
                $totalBills += $bill->returnbuybillaftertotalbill;
            } else {

                $totalBills -= $bill->returnbuybillaftertotalbill;
            }
        }
    }


    //get return buy bills from  buyandruternbill table
    $buybillandruternData = $buyAndReturnBillExt->queryReturnBuyBillsOnlyWithSupplierIdAndDateNew($queryString1);

    if (count($buybillandruternData) > 0) {
        foreach ($buybillandruternData as $buy) {
            $buy->returnbuybillid = $buy->buybillid;

            $allmydetales = $buyAndReturnBillDetailExt->queryByBuybillidANDType($buy->buybillid, 1);
            //	print_r($allmydetales);

            $mytotal = 0;
            foreach ($allmydetales as $myallmydetales) {

                $buybilldetailtotalprice = $myallmydetales->buybilldetailtotalprice;
                $mytotal += $buybilldetailtotalprice;
            }

            $buy->buybillaftertotalbill = $mytotal;

            $buy->returnbuybillSerial = $buy->buybillSerial;
            $buy->returnbuybillaftertotalbill = $buy->buybillaftertotalbill;
            $buy->returnbuybilldate = $buy->buybilldate;

            $totalQty2 = $buyAndReturnBillDetailExt->countProductInReturnBuyBillsOnly($buy->buybillid);
            $buy->totalQty = $totalQty2;
            $totalQTY += $totalQty2;
            $totalBills += $mytotal; //$bill->buybillaftertotalbill;
        }
    }
    $returnbuybillData = array_merge($returnbuybillData, $buybillandruternData);

    $smarty->assign("returntotalQTY", $totalQTY);
    $smarty->assign("returntotalBills", $totalBills);

    return $returnbuybillData;
}

function showx($supplierId, $saveId, $startDate, $endDate) {
    global $supplierDeptChangeExt;
    global $supplierdebtchange;
    global $supplierDAO;
    global $myUserRecord;
    global $smarty;
    global $queryString;
    global $SaveDAO;

    $queryString = ' WHERE';
    $message = 'تقرير عجز مورد ';

    if (isset($supplierId) && $supplierId != "-1" && $supplierId != "-2") {
        $messageData = $supplierDAO->load($supplierId);
        $message .= "  إسم المورد: " . $messageData->suppliername;
        //        $smarty->assign("message", $message);

        $queryString .= ' supplierdebtchange.supplierid =' . $supplierId . ' AND';
    }

    if (isset($saveId) && $saveId != "-1") {
        $messageData = $SaveDAO->load($saveId);
        $message .= "  إسم الخزنة: " . $messageData->savename;

        $queryString .= ' supplierdebtchange.saveid =' . $saveId . ' AND';
    }

    if (isset($supplierId) && $supplierId != "-1" && $supplierId == "-2") {

        $message .= "  كل الموردين ";
        //        $smarty->assign("message", $message);

        $queryString .= ' supplierdebtchange.supplierid > 0 AND';
    }


    if (!empty($startDate) && !empty($endDate)) {



        $message .= "    من تاريخ " . $startDate . "  الى تاريخ" . $endDate;
        //        $smarty->assign('message', $message);


        $queryString .= ' supplierdebtchange.supplierdebtchangedate >= "' . $startDate . '" AND supplierdebtchange.supplierdebtchangedate <= "' . $endDate . '" AND';
    }

    $userdata = $myUserRecord->load($_SESSION['userid']);
    if ($userdata->searchinonesave == 1) {
        $queryString .= ' supplierdebtchange.saveid = ' . $userdata->saveid . ' AND';
    }

    $arr = explode(' ', $queryString);
    if (isset($arr) && count($arr) > 0) {
        $lastWord = end($arr);
        if ($lastWord == 'AND') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        } else if ($lastWord == 'WHERE') { //remove it
            array_pop($arr);
            $queryString = ' ';
        }
        //print("<br>queryString: ".$queryString."<br>");
    }

    $shownData = $supplierDeptChangeExt->searchPayedDeptOnlyNew($queryString);

    $sum;
    foreach ($shownData as $data) {
        $deletdRows = $supplierDeptChangeExt->queryByComment($data->supplierdebtchangeid);
        if (count($deletdRows) <= 0) {
            $sum += $data->supplierdebtchangeamount;
        } else {
            $data->del = 1;
        }
    }
    $smarty->assign('sum', $sum);


    $smarty->assign("message", $message);

    // assign db results to the template
    $smarty->assign('shownData', $shownData);
}

function getSupplierDataFromSupplierInUseSP($supplier) {
    global $supplierExt;
    global $supplierDAO;
    if ($supplier == 1) {
        $supplier_data = $supplierDAO->load($supplier);
    } elseif ($supplier > 1) {
        $noOfTries = 0;
        $supplier_data = $supplierExt->callSupplierInUseSP($supplier);
        while ($supplier_data->suppliercurrentDebt == 'in_use') {
            sleep(1);
            $noOfTries++;
            if ($noOfTries > 15) { // mean 15 sec as sleep is 1 sec her
                //markClientAsNOTInUse -- using redbeans to instantly execute in database as we are in transaction now "means affecting row is done @end of execution or comit"
                liveBackupComment("-- force free supplier=$supplier with redbean");
                R::exec('UPDATE supplier SET  inUse = 0 where supplierid = ' . $supplier);
            }
            $supplier_data = $supplierExt->callSupplierInUseSP($supplier);
        }
    }
    return $supplier_data;
}

function markSupplierAsNOTInUse($supplier) { //mark as not in use "free him to be able to change debt again"
    global $supplierExt;
    if ($supplier == 1) {
        //do no thing. we didnot mark it as in use at begining
    } else {
        $supplierExt->markSupplierAsNOTInUse($supplier);
    }
}

function liveBackupComment($txt) {
    $myfile = fopen("backup/" . date("Y-m-d") . ".txt", "a+") or die("Unable to open file!");
    $toWrite = "\r\n-- ----------------------------------------------------------------------------------------------------\r\n";
    $toWrite .= $txt;
    $toWrite .= "\r\n-- ----------------------------------------------------------------------------------------------------\r\n\r\n";
    fwrite($myfile, $toWrite);
}

function supplierShowforbuyonly($supplierid, $startDate, $endDate) {

    global $supplierDeptChangeExt;
    global $smarty;
    global $saveDAO;
    global $myUserRecord;


    $bure = $_POST['bure'];

    $queryString = ' AND';

    $userData = $myUserRecord->load($_SESSION['userid']);
    if ($userData->viewbills == 0) {
        $queryString .= ' user.userid =' . $_SESSION['userid'] . ' AND';
    } else if ($userData->viewbills == 2) {
        $queryString .= ' user.usergroupid =' . $_SESSION['usergroupid'] . ' AND';
    }

    if ($supplierid > 0) {


        $queryString .= ' supplierdebtchange.supplierid =' . $supplierid . ' AND';
    }

    if (!empty($startDate) && !empty($endDate)) {

        $message = " تقرير مورد من تاريخ  " . $startDate . "  الى تاريخ" . $endDate;
        $smarty->assign('message', $message);

        $queryString .= ' supplierdebtchange.supplierdebtchangedate >= "' . $startDate . '" AND supplierdebtchange.supplierdebtchangedate <= "' . $endDate . '" AND';
    }

    $arr = explode(' ', $queryString);
    if (isset($arr) && count($arr) > 0) {
        $lastWord = end($arr);
        if ($lastWord == 'AND') { //remove it
            array_pop($arr);
            //form the string again
            $queryString = implode(' ', $arr);
        } else if ($lastWord == 'WHERE') { //remove it
            array_pop($arr);
            $queryString = ' ';
        }
        //print("<br>queryString: ".$queryString."<br>");
    }

    //$shownData = $clientDeptChangeExt->clientShowforsellonly($queryString);
    $shownData = $supplierDeptChangeExt->supplierShowAll($queryString);

    //print_r($shownData);

    $i = 1;
    $allPcsPlus = 0;
    $allPcsMinus = 0;
    $allPayed = 0;
    $allTax = 0;

    $showArr = array();
    foreach ($shownData as $data) {

        // إجمالي الفاتورة و إجمالى المستحق من فاتورة المشتريات
        if ($data->tablename == "buyBillController.php") {
            //print("d");
            $data->link = "buyBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            $sellBillData = (object) R::getRow('select * from buybill where buybillid = ' . $data->supplierdebtchangemodelid);

            $saveData = $saveDAO->load($sellBillData->buybillsaveid);
            $data->savename = $saveData->savename;

            $data->sellbilltotalpayed = $sellBillData->buybilltotalpayed; // إجمالي الفاتورة
            $data->sellbillfinalbill = $sellBillData->buybillfinalbill; ////الباقى
            $discount = 0;
            if ($sellBillData->buybilldiscount > 0) {
                if ($sellBillData->buybilldiscountrype == 1)
                    $discount = $sellBillData->buybilldiscount;
                else {
                    $discount = $sellBillData->buybilltotalbill * $sellBillData->buybilldiscount / 100;
                }
            }

            $data->tax = ($sellBillData->buybilltotalbill - $discount) * $sellBillData->payedtax / 100;
            $allTax += $data->tax;


            $myselldata = R::getAll('select buybilldetail.* ,product.productName, productcat.productCatName ,unit.unitName
                from buybilldetail
                JOIN product ON buybilldetail.buybilldetailproductid = product.productId
                JOIN productunit ON buybilldetail.productunitid = productunit.productunitid
		JOIN unit ON unit.unitId = productunit.unitid
		JOIN productcat ON productcat.productCatId = product.productCatId
                where buybillid=' . $data->supplierdebtchangemodelid);
            //array to object
            $myselldata = array_map(function ($array) {
                return (object) $array;
            }, $myselldata);
            foreach ($myselldata as $sellData) {
                if (!$bure || ($bure == 1 && $sellBillData->conditions == 0)) {
                    $allPayed += $sellData->buybilldetailtotalprice;
                    $allPcsPlus += $sellData->buybilldetailquantity;
                }
            }
            $smarty->assign('myselldata' . $i, $myselldata);

            if ($sellBillData->conditions == 0) {
                $data->mysellData = $myselldata;
                array_push($showArr, $data);
            }

            //print_r($myselldata);
            $i++;
        } else if ($data->tablename == "returnBuyBillController.php") {
            $data->link = "returnBuyBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;
            $returnSellBillData = (object) R::getRow('select * from returnbuybill where returnbuybillid = ' . $data->supplierdebtchangemodelid);

            $saveData = $saveDAO->load($returnSellBillData->returnbuybillsaveid);
            $data->savename = $saveData->savename;

            $data->sellbilltotalpayed = $returnSellBillData->returnbuybilltotalpayed; // إجمالي الفاتورة
            $data->sellbillfinalbill = $returnSellBillData->returnbuybillfinalbill; ////الباقى
            if ($returnSellBillData->returnbuybilldiscount > 0) {
                if ($returnSellBillData->returnbuybilldiscountrype == 1)
                    $discount = $returnSellBillData->returnbuybilldiscount;
                else {
                    $discount = $returnSellBillData->returnbuybilltotalbill * $returnSellBillData->returnbuybilldiscount / 100;
                }
            }

            $tax = ($returnSellBillData->returnbuybilltotalbill - $discount) * $returnSellBillData->payedtax / 100;
            $data->tax = $tax * -1;
            $allTax += $data->tax;

            $myselldata = R::getAll('select returnbuybilldetail.*,product.productName, productcat.productCatName ,unit.unitName
                    from returnbuybilldetail
                    JOIN product ON returnbuybilldetail.returnbuybilldetailproductid = product.productId
                    JOIN productunit ON returnbuybilldetail.productunitid = productunit.productunitid
                    JOIN unit ON unit.unitId = productunit.unitid
                    JOIN productcat ON productcat.productCatId = product.productCatId
                    where returnbuybillid=' . $data->supplierdebtchangemodelid);
            //array to object
            $myselldata = array_map(function ($array) {
                return (object) $array;
            }, $myselldata);
            foreach ($myselldata as $sellData) {
                if (!$bure || ($bure == 1 && $returnSellBillData->conditions == 0)) {
                    $allPcsMinus += $sellData->returnbuybilldetailquantity;
                    $allPayed -= $sellData->returnbuybilldetailtotalprice;
                }
            }
            $smarty->assign('myselldata' . $i, $myselldata);


            if ($returnSellBillData->conditions == 0) {
                $data->mysellData = $myselldata;
                array_push($showArr, $data);
            }

            $i++;
        } else if ($data->tablename == "buyAndReturnBillController.php") {
            $data->link = "buyAndReturnBillController.php?do=details&id=" . $data->supplierdebtchangemodelid;

            $sellAndReturnBillData = (object) R::getRow('select * from buyandruternbill where buybillid = ' . $data->supplierdebtchangemodelid);

            $saveData = $saveDAO->load($sellAndReturnBillData->buybillsaveid);
            $data->savename = $saveData->savename;

            $data->sellbilltotalpayed = $sellAndReturnBillData->buybilltotalpayed; // إجمالي الفاتورة
            $data->sellbillfinalbill = $sellAndReturnBillData->buybillfinalbill; ////الباقى

            $myselldata = R::getAll('select buyandruternbilldetail.*,product.productName, productcat.productCatName ,unit.unitName
                     from buyandruternbilldetail
                     JOIN product ON ON buyandruternbilldetail.buybilldetailproductid = product.productId
                     JOIN productunit ON buyandruternbilldetail.productunitid = productunit.productunitid
                     JOIN unit ON unit.unitId = productunit.unitid
                     JOIN productcat ON productcat.productCatId = product.productCatId
                     where buybillid=' . $data->supplierdebtchangemodelid);
            //array to object
            $myselldata = array_map(function ($array) {
                return (object) $array;
            }, $myselldata);

            foreach ($myselldata as $sellData) {
                if (!$bure || ($bure == 1 && $sellAndReturnBillData->conditions == 0)) {
                    if ($sellData->selltype != 1) {
                        $allPayed += $sellData->buybilldetailtotalprice;
                        $allPcsPlus += $sellData->buybilldetailquantity;
                    } else {
                        $allPayed -= $sellData->buybilldetailtotalprice;
                        $allPcsMinus += $sellData->buybilldetailquantity;
                    }
                }
            }

            $smarty->assign('myselldata' . $i, $myselldata);


            if ($sellAndReturnBillData->conditions == 0) {
                $data->mysellData = $myselldata;
                array_push($showArr, $data);
            }
            $i++;
        } elseif ($data->tablename != "buyBillController.php" && $data->tablename != "returnBuyBillController.php" && $data->tablename != "buyAndReturnBillController.php") {
            //unset($data->mysellData);
            $data->sellbilltotalpayed = $data->supplierdebtchangeamount; // التغير
            $smarty->assign('myselldata' . $i, array());
            array_push($showArr, $data);
            $i++;
        }
    }

    $smarty->assign('allPayed', $allPayed);
    $smarty->assign('allPcsPlus', $allPcsPlus);
    $smarty->assign('allPcsMinus', $allPcsMinus);
    $smarty->assign('allTax', $allTax);


    // assign db results to the template
    if ($bure == 1) {
        $smarty->assign('shownData', $showArr);
    } else {
        $smarty->assign('shownData', $shownData);
    }
}
