<?php

//the global file operation
include("../public/impOpreation.php");

//global varable
global $showoutside;

//to check if the page from .htacess
//$showoutside = $_GET['sn'];
// get the config file
include_once("../public/config.php");
include_once("dailyentryfun.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');
//here the db files that include in the file
include("../public/include_dao.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");

//here the global templates
$smarty->display("header.html");

//here goes the instances and general variables
//Accountstree
$accountsTree = new Accountstree();
$accountsTreeDAO = new AccountstreeMySqlDAO();
$accountsTreeEX = new AccountstreeMySqlExtDAO();

//Supplierdebtchange
$Supplierdebtchange = new Supplierdebtchange();
$SupplierdebtchangeDAO = new SupplierdebtchangeMySqlDAO();
$SupplierdebtchangeEX = new SupplierdebtchangeMySqlExtDAO();

$myClientdebtchange = new Clientdebtchange();
$myClientdebtchangeRecord = new ClientdebtchangeMySqlDAO();

//Programsetting
$Programsetting = new Programsetting();
$ProgramsettingDAO = new ProgramsettingsMySqlDAO();
$ProgramsettingEX = new ProgramsettingsMySqlExtDAO();


//Dailyentry
$dailyEntry = new Dailyentry();
$dailyEntryDAO = new DailyentryMySqlDAO();
$dailyEntryEX = new DailyentryMySqlExtDAO();

//Dailyentrycreditor دائن
$dailyEntryCreditor = new Dailyentrycreditor();
$dailyEntryCreditorDAO = new DailyentrycreditorMySqlDAO();
$dailyEntryCreditorEX = new DailyentrycreditorMySqlExtDAO();

//Dailyentrycreditor2 دائن2
$dailyEntryCreditor2 = new Dailyentrycreditor();
$dailyEntryCreditorDAO2 = new DailyentrycreditorMySqlDAO();


//Dailyentrydebtor مدين
$dailyEntryDebtor = new Dailyentrydebtor();
$dailyEntryDebtorDAO = new DailyentrydebtorMySqlDAO();
$dailyEntryDebtorEX = new DailyentrydebtorMySqlExtDAO();

//Dailyentrydebtor2 مدين2
$dailyEntryDebtor2 = new Dailyentrydebtor();
$dailyEntryDebtorDAO2 = new DailyentrydebtorMySqlDAO();

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

$Programsettingdata = $ProgramsettingDAO->load(1);
$smarty->assign("Programsettingdata", $Programsettingdata);


/* * * classes ** */
$rentProducts = new Rentproduct();
$myrentProducts = new RentproductMySqlDAO();
$extrentProducts = new RentproductMySqlExtDAO();

$rentStore = new Rentstore();
$myrentStore = new RentstoreMySqlDAO();
$extrentStore = new RentstoreMySqlExtDAO();

$supplier = new Supplier();
$mysupplier = new SupplierMySqlDAO();
$extsupplier = new SupplierMySqlExtDAO();

$client = new Client();
$myclient = new ClientMySqlDAO();
$extclient = new ClientMySqlExtDAO();

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

$save = new Save();
$mysave = new SaveMySqlDAO();
$extsave = new SaveMySqlExtDAO();

$Savedaily = new Savedaily();
$SavedailyDAO = new SavedailyMySqlDAO();

$rentbill = new Rentbill();
$myrentbill = new RentbillMySqlDAO();
$extrentbill = new RentbillMySqlExtDAO();

$rentbillpro = new Rentbillprop();
$myrentbillpro = new RentbillpropMySqlDAO();
$extrentbillpro = new RentbillpropMySqlExtDAO();


$myBank = new Bank();
$myBankRecord = new BankMySqlDAO();
$myBankEx = new BankMySqlExtDAO();

$myBankaccount = new Bankaccount();
$myBankaccountRecord = new BankaccountMySqlDAO();
$myBankaccountEx = new BankaccountMySqlExtDAO();

//Accountmovement
$myAccountmovement = new Accountmovement();
$myAccountmovementRecord = new AccountmovementMySqlDAO();

//Checkdeposit
$Checkdeposit = new Checkdeposit();
$CheckdepositDAO = new CheckdepositMySqlDAO();
$CheckdepositEX = new CheckdepositMySqlExtDAO();


//check and use the condition that suite this action
if (empty($do)) {
    //here the permssion check
    include_once("../public/authentication.php");

    $clients = $myclient->queryAll();
    $smarty->assign('clients', $clients);
    $products = $myrentProducts->queryAll();
    $smarty->assign('products', $products);
    $suppliers = $mysupplier->queryAll();
    $smarty->assign('suppliers', $suppliers);
    $smarty->assign('today', date("Y-m-d"));

    $allbanks = $myBankRecord->queryByCondition(0);
    $smarty->assign('allbanks', $allbanks);

    //here the smarty templates
    $smarty->display("rent/bill/add.html");
} elseif ($do == "add") {
    include_once("../public/authentication.php");

    //get vars
    $clientid = filter_input(INPUT_POST, 'clientid');
    $createdate = filter_input(INPUT_POST, 'createdate');
    $rentbilltotal = filter_input(INPUT_POST, 'hrentbilltotal');
    $genpay = filter_input(INPUT_POST, 'genpay');
    $reset = $rentbilltotal - $genpay;

    $discount = filter_input(INPUT_POST, 'discount');
    $distotal = filter_input(INPUT_POST, 'distotal');

    //PAY TYPE
    $payistype = filter_input(INPUT_POST, 'payistype'); // 0 FOR cash and 1 for bank
    $bankid = filter_input(INPUT_POST, 'bankid');
    $accountid = filter_input(INPUT_POST, 'accountid');
    $paperno = filter_input(INPUT_POST, 'paperno');
    $paperval = filter_input(INPUT_POST, 'paperval');
    $paperdate = filter_input(INPUT_POST, 'paperdate');


    //Transaction
    $mytransactions = new Transaction();
    try {

        $rentbill->clientid = $clientid;
        if ($distotal > 0) {
            $rentbill->billreset = $distotal - $genpay;
        } else {
            $rentbill->billreset = $rentbilltotal - $genpay;
        }
        $rentbill->billtotal = $rentbilltotal;
        $rentbill->createdatetime = $createdate;
        $rentbill->billpayed = $genpay;
        $rentbill->firmbilltotal = 0;
        $rentbill->dailyentryid = 0;

        $rentbill->payistype = $payistype;
        $rentbill->bankid = $bankid;
        $rentbill->accountid = $accountid;
        $rentbill->paperno = $paperno;
        $rentbill->paperval = $paperval;
        $rentbill->paperdate = $paperdate;
        $rentbill->discount = $discount;
        $rentbill->distotal = $distotal;


        $insertid = $myrentbill->insert($rentbill);

        $itrs = filter_input(INPUT_POST, 'hidden_itr');
        for ($i = 1; $i <= $itrs; $i++) {
            $productid = filter_input(INPUT_POST, 'productid' . $i);
            $renttype = filter_input(INPUT_POST, 'renttype' . $i);
            $supplierid = filter_input(INPUT_POST, 'supplierid' . $i);
            $buyprice = filter_input(INPUT_POST, 'buyprice' . $i);
            $hbuytotal = filter_input(INPUT_POST, 'hbuytotal' . $i);
            $hbbuytotal = filter_input(INPUT_POST, 'hbbuytotal' . $i);
            $amount = filter_input(INPUT_POST, 'amount' . $i);
            $rentprice = filter_input(INPUT_POST, 'rentprice' . $i);
            $hrenttotal = filter_input(INPUT_POST, 'hrenttotal' . $i);
            $startdate = filter_input(INPUT_POST, 'startdate' . $i);
            $enddate = filter_input(INPUT_POST, 'enddate' . $i);
            $hrentdays = filter_input(INPUT_POST, 'hrentdays' . $i);
            $hrentdaystotal = filter_input(INPUT_POST, 'hrentdaystotal' . $i);


            if (!$productid) {
                continue;
            }


            $rentbillpro->amount = $amount;
            $rentbillpro->billid = $insertid;
            $rentbillpro->delayreset = 0;
            $rentbillpro->delaytype = 0;
            $rentbillpro->delypay = 0;
            $rentbillpro->enddate = $enddate;
            $rentbillpro->productid = $productid;
            $rentbillpro->rentdays = $hrentdays;
            $rentbillpro->rentprice = $rentprice;
            $rentbillpro->startdate = $startdate;
            $rentbillpro->status = 0; //0 for new bill, 1 for delevierd product , 2 delay
            $rentbillpro->totalprice = $hrenttotal;
            $rentbillpro->type = $renttype;
            $rentbillpro->dailyentryid = 0;

            if ($renttype == 1) {
                //there are supplier
                $rentbillpro->supplierid = $supplierid;
                $rentbillpro->supplierprice = $buyprice;
                $rentbillpro->suppliertotalpice = $hbuytotal;

                // with supplier debt and supplier change
                //supplier
                #1 increase supplier debt
                $supplierinfo = $mysupplier->load($supplierid);
                $debtBefore = $supplierinfo->suppliercurrentDebt;
                $debtAfter = $debtBefore + $hbbuytotal;

                #2 update supplier debt
                $supplier->suppliercurrentDebt = $debtAfter;
                $supplier->userid = $_SESSION['userid'];
                $supplier->supplierdate = date("Y-m-d");
                $supplier->supplierid = $supplierid;
                $extsupplier->updatedept($supplier);

                #3 insert supplier debt change
                $Supplierdebtchange->comment = "";
                $Supplierdebtchange->processname = "تاجير منتجات خارجى من فاتوره الايجار ";
                $Supplierdebtchange->supplierdebtchangeafter = $debtAfter;
                $Supplierdebtchange->supplierdebtchangeamount = $hbbuytotal;
                $Supplierdebtchange->supplierdebtchangebefore = $debtBefore;
                $Supplierdebtchange->supplierdebtchangedate = date("Y-m-d");
                $Supplierdebtchange->supplierdebtchangemodelid = $insertid;
                $Supplierdebtchange->supplierid = $supplierid;
                $Supplierdebtchange->supplierdebtchangetype = 0;
                $Supplierdebtchange->tablename = "rentbill.php";
                $Supplierdebtchange->userid = $_SESSION['userid'];
                $Supplierdebtchange->dailyentryid = 0;

                $SupplierdebtchangeDAO->insert($Supplierdebtchange);
            } else {
                $rentbillpro->supplierid = 0;
                $rentbillpro->supplierprice = 0;
                $rentbillpro->suppliertotalpice = 0;
            }

            $rentBillProId = $myrentbillpro->insert($rentbillpro);


            //update with store
            //rent amount
            $getstore = $myrentStore->queryByRentproductid($productid);
            $rentStore->rented = $amount + $getstore[0]->rented;
            $rentStore->rentproductid = $productid;
            $extrentStore->updaterented($rentStore);
        }

        //check type
        if ($payistype == 0) { // pay cash
            //if cash or client
            if ($genpay > 0) {
                //cash
                #1 decrease save
                $saveinfo = $mysave->load($_SESSION['saveid']);
                $balanceBefore = $saveinfo->savecurrentvalue;
                $balanceAfter = $balanceBefore + $genpay;

                #2 update save
                $save->savecurrentvalue = $balanceAfter;
                $save->userid = $_SESSION['userid'];
                $save->saveid = $_SESSION['saveid'];
                $extsave->updateSaveValue($save);

                #3 update save report
                $Savedaily->savedailydate = date("Y-m-d");
                $Savedaily->userid = $_SESSION['userid'];
                $Savedaily->savedailysavebefore = $balanceBefore;
                $Savedaily->savedailychangeamount = $genpay;
                $Savedaily->savedailychangetype = 0; //0 for increase
                $Savedaily->saveid = $_SESSION['saveid'];
                $Savedaily->processname = 'اضافه فاتوره للايجار';
                $Savedaily->savedailymodelid = $insertid;
                $Savedaily->savedailysaveafter = $balanceAfter;
                $Savedaily->tablename = 'rentbill.php';

                $SavedailyDAO->insert($Savedaily);
            }

            if ($reset > 0) {
                //clients
                #1 increase client debt
                $clientsing = $myclient->load($clientid);
                $debtBefore = $clientsing->clientdebt;
                $debtAfter = $debtBefore + $reset;

                #2 update client debt
                $client->clientdebt = $debtAfter;
                $client->userid = $_SESSION['userid'];
                $client->clientdate = date("Y-m-d");
                $client->clientid = $clientid;
                $extclient->updatedept($client);

                #3 insert client debt change

                $myClientdebtchange->clientdebtchangeafter = $debtAfter;
                $myClientdebtchange->clientdebtchangeamount = $reset;
                $myClientdebtchange->clientdebtchangebefore = $debtBefore;
                $myClientdebtchange->clientdebtchangedate = date("Y-m-d");
                $myClientdebtchange->clientdebtchangemodelid = $insertid;
                $myClientdebtchange->clientdebtchangetype = 0;
                $myClientdebtchange->clientid = $clientid;
                $myClientdebtchange->comment = "اضافه فاتوره ايجار جديده";
                $myClientdebtchange->processname = "اضافه فاتوره ايجار جديده";
                $myClientdebtchange->tablename = "rentbill.php";
                $myClientdebtchange->userid = $_SESSION['userid'];
                $myClientdebtchange->totalOperationCost = $rentbilltotal;
                $myClientdebtchange->dailyentryid = $insertid;

                $myClientdebtchangeRecord->insert($myClientdebtchange);
            }
        } else {//pay bank
            //get account info
            $bankaccountinfo = $myBankaccountRecord->load($accountid);
            $accountbefore = $bankaccountinfo->accountbeginingbalance;
            $accountafter = $bankaccountinfo->accountbeginingbalance + $paperval;

            //update account balance
            $account->accountbeginingbalance = $accountafter;
            $account->accountdate = $today;
            $account->accountid = $accountid;
            $myBankaccountEx->updateacount($account);

            $checkwithdrawalnote = "";

            $Checkdeposit->bankaccountid = $accountid;
            $Checkdeposit->clientid = $clientid;
            $Checkdeposit->accountbeforevalue = $accountbefore;
            $Checkdeposit->checkdepositamount = $paperval;
            $Checkdeposit->checkdepositdate = $paperdate;
            $Checkdeposit->conditions = 0;
            $Checkdeposit->checkdepositnumber = $paperno;
            $Checkdeposit->checkdeposituser = $_SESSION['userid'];
            $Checkdeposit->userid = $_SESSION['userid'];
            $Checkdeposit->dailyentryid = 0;

            $Checkdepositid = $CheckdepositDAO->insert($Checkdeposit, $checkwithdrawalnote);


            $myAccountmovement->accountmovementbefore = $accountbefore;
            $myAccountmovement->accountid = $accountid;
            $myAccountmovement->bankid = $bankid;
            $myAccountmovement->accountmovementamount = $paperval;
            $myAccountmovement->accountmovementafter = $accountafter;
            $myAccountmovement->accountmovementtype = 0;
            $myAccountmovement->processname = "ايداع شيك";
            $myAccountmovement->tablename = "rentbill.php";
            $myAccountmovement->accountmovementmodelid = $Checkdepositid;
            $myAccountmovement->accountmovementdate = $today;
            $myAccountmovement->userid = $_SESSION['userid'];
            $myAccountmovementRecord->insert($myAccountmovement);
        }






        //  قيد اليومية
        $totalResidual = $reset; // المتبقى
        $totalpaid = $genpay; // المدفوع
        $totalCost = $hbuytotal; // اجمالى التكلفة
        $totalDif = ($totalResidual + $totalpaid) - $totalCost;  // ( المتبقى + المدفوع ) - اجمالى التكلفة

        $dailyEntry->entryComment = 'ايرادات ايجار';
        $dailyEntry->reverseofid = -9;

        $dailyEntryDebtorArray = array();
        $dailyEntryCreditorArray = array();

        // Client Deptor
        if ($totalResidual > 0) {
            $dailyEntryDebtor->value = $totalResidual;
            $oldclient = $myclient->load($clientid);


            $clientTreeId = $oldclient->treeId;
            $dailyEntryDebtor->accountstreeid = $clientTreeId;
        }

        // Save Deptor
        if ($totalpaid > 0) {
            $dailyEntryDebtor2->value = $totalpaid;
            $saveid = $_SESSION['saveid'];
            $dataSave = $mysave->load($saveid);
            $idTreeSave = $dataSave->treeId;
            $dailyEntryDebtor2->accountstreeid = $idTreeSave;
        }
        // supplier exict
        if (!empty($supplierid)) {
            // Supplier Creditor
            $dailyEntryCreditor->value = $totalCost;
            $oldSupplier = $mysupplier->load($supplierid);
            $supplierTreeId = $oldSupplier->treeId;
            $dailyEntryCreditor->accountstreeid = $supplierTreeId;
        }
        // Sales Creditor
        $dailyEntryCreditor2->value = $totalDif;
        $dailyEntryCreditor2->accountstreeid = 16;

        array_push($dailyEntryDebtorArray, $dailyEntryDebtor, $dailyEntryDebtor2);
        array_push($dailyEntryCreditorArray, $dailyEntryCreditor, $dailyEntryCreditor2);


        $myDailyArr = insertEntery($dailyEntry, $dailyEntryDebtorArray, $dailyEntryCreditorArray, 1);
        $myDailyId = $myDailyArr[1];
        $rentBillProData = $myrentbillpro->load($rentBillProId);

        $rentbillpro->amount = $rentBillProData->amount;
        $rentbillpro->billid = $rentBillProData->billid;
        $rentbillpro->delayreset = $rentBillProData->delayreset;
        $rentbillpro->delaytype = $rentBillProData->delaytype;
        $rentbillpro->delypay = $rentBillProData->delypay;
        $rentbillpro->enddate = $rentBillProData->enddate;
        $rentbillpro->productid = $rentBillProData->productid;
        $rentbillpro->rentdays = $rentBillProData->rentdays;
        $rentbillpro->rentprice = $rentBillProData->rentprice;
        $rentbillpro->startdate = $rentBillProData->startdate;
        $rentbillpro->status = $rentBillProData->status;
        $rentbillpro->totalprice = $rentBillProData->totalprice;
        $rentbillpro->type = $rentBillProData->type;
        $rentbillpro->dailyentryid = $myDailyId;

        $myrentbillpro->update($rentbillpro);

        $rentbillData = $myrentbill->load($insertid);

        $rentbill->clientid = $rentbillData->clientid;
        $rentbill->billreset = $rentbillData->billreset;
        $rentbill->billtotal = $rentbillData->billtotal;
        $rentbill->createdatetime = $rentbillData->createdatetime;
        $rentbill->billpayed = $rentbillData->billpayed;
        $rentbill->firmbilltotal = $rentbillData->firmbilltotal;
        $rentbill->dailyentryid = $myDailyId;

        $myrentbill->update($rentbill);

        $mytransactions->commit();

        header("location:?do=show&id=" . $insertid);
    } catch (Exception $exc) {
        echo $exc;
        $mytransactions->rollback();

        header("location:?do=error");
    }
} elseif ($do == "show") {
    include_once("../public/authentication.php");

    $billid = filter_input(INPUT_GET, 'id');
    $today = date("Y-m-d");

    $allbills = $myrentbill->queryByCreatedatetime($today);
    $billtotal = 0;
    $billpayed = 0;
    $billreset = 0;
    foreach ($allbills as $bill) {

        //get props
        $billpro = $myrentbillpro->queryByBillid($bill->id);
        $checkstatus = $extrentbillpro->queryByStatusandbillid(0, $bill->id);
        if (count($checkstatus) > 0) {
            $bill->status = 0;
        } else {
            $bill->status = 1;
        }

        $checkstatusre = $extrentbillpro->queryByStatusandbillid(1, $bill->id);
        if (count($checkstatusre) > 0) {
            $bill->rstatus = 0;
        } else {
            $bill->rstatus = 1;
        }
        //client
        $clientinfo = $myclient->load($bill->clientid);
        $bill->clientname = $clientinfo->clientname;

        $billtotal += $bill->billtotal;
        $billpayed += $bill->billpayed;
        $billreset += $bill->billreset;
    }

    $message = " من تاريخ " . $today . " إلى تاريخ: " . $today;

    $smarty->assign('allbills', $allbills);
    $smarty->assign('billtotal', $billtotal);
    $smarty->assign('billpayed', $billpayed);
    $smarty->assign('billreset', $billreset);
    $smarty->assign('today', $message);

    $smarty->assign('customUsergroup', 1); //for delete model
    if ($billid) {
        header('location:?do=showDetail&id=' . $billid . '&p=1');
    } else {
        $smarty->display("rent/bill/show.html");
    }
} elseif ($do == "search") {
    include_once("../public/authentication.php");

    $dateNow = date("Y-m-d");
    $startDate = $_REQUEST['from'];
    $endDate = $_REQUEST['to'];

    if (empty($startDate)) {
        $startDate = date('Y-m-d');
    }
    if (empty($endDate)) {
        $endDate = date('Y-m-d');
    }



    $allbills = $extrentbill->queryBydatetime($startDate, $endDate);
    $billtotal = 0;
    $billpayed = 0;
    $billreset = 0;
    foreach ($allbills as $bill) {

        //get props
        $billpro = $myrentbillpro->queryByBillid($bill->id);
        $checkstatus = $extrentbillpro->queryByStatusandbillid(0, $bill->id);
        if (count($checkstatus) > 0) {
            $bill->status = 0;
        } else {
            $bill->status = 1;
        }

        $checkstatusre = $extrentbillpro->queryByStatusandbillid(1, $bill->id);
        if (count($checkstatusre) > 0) {
            $bill->rstatus = 0;
        } else {
            $bill->rstatus = 1;
        }
        //client
        $clientinfo = $myclient->load($bill->clientid);
        $bill->clientname = $clientinfo->clientname;

        $billtotal += $bill->billtotal;
        $billpayed += $bill->billpayed;
        $billreset += $bill->billreset;
    }
    $message = " من تاريخ " . $startDate . " إلى تاريخ: " . $endDate;
    $smarty->assign('allbills', $allbills);
    $smarty->assign('billtotal', $billtotal);
    $smarty->assign('billpayed', $billpayed);
    $smarty->assign('billreset', $billreset);
    $smarty->assign('today', $message);


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

    $smarty->assign('customUsergroup', 1); //for delete model
    $smarty->display("rent/bill/show.html");
} elseif ($do == "showDetail") {
    include_once("../public/authentication.php");

    $billid = filter_input(INPUT_GET, 'id');
    $smarty->assign('billid', $billid);
    $print = filter_input(INPUT_GET, 'p');
    $smarty->assign('print', $print);
    $allbills = $myrentbill->load($billid);
    //get props
    $billpro = $myrentbillpro->queryByBillid($billid);
    foreach ($billpro as $pro) {
        //get product name
        $productinfo = $myrentProducts->load($pro->productid);
        $pro->productname = $productinfo->name;

        $supplierinfo = $mysupplier->load($pro->supplierid);
        $pro->suppliername = $supplierinfo->suppliername;
    }
    $allbills->pros = $billpro;
    //client
    $clientinfo = $myclient->load($allbills->clientid);
    $allbills->clientname = $clientinfo->clientname;


    $allbanks = $myBankRecord->queryByCondition(0);
    $smarty->assign('allbanks', $allbanks);


    $allacounts = $myBankaccountRecord->queryByCondition(0);
    $smarty->assign('allacounts', $allacounts);


    $smarty->assign('allbills', $allbills);

    $smarty->assign('customUsergroup', 1); //for delete model
    $smarty->display("rent/bill/showDetail.html");
} elseif ($do == "editprint") {
    include_once("../public/authentication.php");

    $billid = filter_input(INPUT_GET, 'id');
    $smarty->assign('billid', $billid);
    $print = filter_input(INPUT_GET, 'p');
    $smarty->assign('print', $print);
    $allbills = $myrentbill->load($billid);
    //get props
    $billpro = $myrentbillpro->queryByBillid($billid);
    foreach ($billpro as $pro) {
        //get product name
        $productinfo = $myrentProducts->load($pro->productid);
        $pro->productname = $productinfo->name;

        $supplierinfo = $mysupplier->load($pro->supplierid);
        $pro->suppliername = $supplierinfo->suppliername;
    }
    $allbills->pros = $billpro;
    //client
    $clientinfo = $myclient->load($allbills->clientid);
    $allbills->clientname = $clientinfo->clientname;



    $smarty->assign('allbills', $allbills);

    $smarty->assign('customUsergroup', 1); //for delete model
    $smarty->display("rent/bill/editprint.html");
} elseif ($do == 'print') {

    $sDate = filter_input(INPUT_POST, 'sdate');
    $hegDate = $_POST['hegDate'];
    $melDate = $_POST['melDate'];
    $recordNo = $_POST['recordNo'];
    $clientName = $_POST['clientName'];
    $clientAddress = $_POST['clientAddress'];
    $clientCredit = $_POST['clientCredit'];
    $endDate = $_POST['endDate'];
    $periodDate = $_POST['periodDate'];
    $reciveDate = $_POST['reciveDate'];
    $reciHegDate = $_POST['reciHegDate'];
    $reciMelDate = $_POST['reciMelDate'];
    $ddDate = $_POST['ddDate'];
    $reciddDate = $_POST['reciddDate'];
    $value = $_POST['value'];
    $valueText = $_POST['valueText'];
    $chckNo = $_POST['chckNo'];


    $allData = array();
    array_push($allData, $sDate, $hegDate, $melDate, $recordNo, $clientName, $clientAddress, $clientCredit, $endDate, $periodDate
            , $reciveDate, $reciHegDate, $reciMelDate, $ddDate, $reciddDate, $value, $valueText, $chckNo);


    $smarty->assign('allData', $allData);


    $billid = filter_input(INPUT_GET, 'id');
    $allbills = $myrentbill->load($billid);
    //get props
    $billpro = $myrentbillpro->queryByBillid($billid);
    foreach ($billpro as $pro) {
        //get product name
        $productinfo = $myrentProducts->load($pro->productid);
        $pro->productname = $productinfo->name;

        $supplierinfo = $mysupplier->load($pro->supplierid);
        $pro->suppliername = $supplierinfo->suppliername;

        $startDate = $pro->startdate;
        $endDate = $pro->enddate;
        $date1 = date_create($pro->startdate);
        $date2 = date_create($pro->enddate);
        $diff = date_diff($date1, $date2);
        $diff = $diff->format("%a days");
        $pro->diffdate = $diff;
    }



    $allbills->pros = $billpro;
    //client
    $clientinfo = $myclient->load($allbills->clientid);
    $allbills->clientname = $clientinfo->clientname;
    $smarty->assign('allbills', $allbills);

    $Programsettingdata = $ProgramsettingDAO->load(1);
    $smarty->assign("Programsettingdata", $Programsettingdata);
    $userdata = $userDAO->load($_SESSION['userid']);
    $smarty->assign("userdata", $userdata);

    $smarty->assign('customUsergroup', 1); //for delete model
    $smarty->display("rent/bill/print.html");
} elseif ($do == "receive") {
    include_once("../public/authentication.php");

    $proid = filter_input(INPUT_GET, 'id');

    $billpro = $myrentbillpro->load($proid);

    //get product name
    $productinfo = $myrentProducts->load($billpro->productid);
    $billpro->productname = $productinfo->name;

    $supplierinfo = $mysupplier->load($billpro->supplierid);
    $billpro->suppliername = $supplierinfo->suppliername;

    $billinfo = $myrentbill->load($billpro->billid);
    //client
    $clientinfo = $myclient->load($billinfo->clientid);
    $billpro->clientname = $clientinfo->clientname;

    $smarty->assign('billpro', $billpro);

    $smarty->assign('customUsergroup', 1); //for delete model
    $smarty->display("rent/bill/product.html");
} elseif ($do == 'isreceive') {

    $proid = filter_input(INPUT_POST, 'proid');
    $isdelay = filter_input(INPUT_POST, 'isdelay');

    $delayvalue = filter_input(INPUT_POST, 'delayvalue');
    $delaytype = filter_input(INPUT_POST, 'delaytype');


    //Transaction
    $mytransactions = new Transaction();
    try {

        $billpro = $myrentbillpro->load($proid);
        $billinfo = $myrentbill->load($billpro->billid);
        //update store
        //update with store
        //rent amount
        $getstore = $myrentStore->queryByRentproductid($billpro->productid);
        $rentStore->rented = $getstore[0]->rented - $billpro->amount;
        $rentStore->rentproductid = $billpro->productid;
        $extrentStore->updaterented($rentStore);

        $clientid = $billinfo->clientid;
        //update status
        $rentbillpro->status = 1;
        $rentbillpro->id = $proid;

        if ($isdelay == 1) {
            //delapyed
            $rentbillpro->delayvalue = $delayvalue;
            $rentbillpro->delaytype = $delaytype;
            $rentbillpro->delayreset = 0;
            $rentbillpro->delypay = 0;

            $extrentbillpro->updatestatusanddelay($rentbillpro);

            if ($delaytype == 0) {
                //cash
                #1 decrease save
                $saveinfo = $mysave->load($_SESSION['saveid']);
                $balanceBefore = $saveinfo->savecurrentvalue;
                $balanceAfter = $balanceBefore + $delayvalue;

                #2 update save
                $save->savecurrentvalue = $balanceAfter;
                $save->userid = $_SESSION['userid'];
                $save->saveid = $_SESSION['saveid'];
                $extsave->updateSaveValue($save);

                #3 update save report
                $Savedaily->savedailydate = date("Y-m-d");
                $Savedaily->userid = $_SESSION['userid'];
                $Savedaily->savedailysavebefore = $balanceBefore;
                $Savedaily->savedailychangeamount = $delayvalue;
                $Savedaily->savedailychangetype = 0;
                $Savedaily->saveid = $_SESSION['saveid'];
                $Savedaily->processname = 'اضافه تاخير منتج';
                $Savedaily->savedailymodelid = $proid;
                $Savedaily->savedailysaveafter = $balanceAfter;
                $Savedaily->tablename = 'rentbill.php';

                $SavedailyDAO->insert($Savedaily);

                // قيد الكاش

                $dailyEntry->entryComment = '  مبيعات تأخير ( كاش )';
                $dailyEntry->reverseofid = -9;

                $dailyEntryDebtorArray = array();
                $dailyEntryCreditorArray = array();

                // deptor save
                $dailyEntryDebtor->value = $delayvalue;
                $saveid = $_SESSION['saveid'];
                $dataSave = $mysave->load($saveid);
                $idTreeSave = $dataSave->treeId;
                $dailyEntryDebtor->accountstreeid = $idTreeSave;

                // cerditor sales
                $dailyEntryCreditor->value = $delayvalue;
                $dailyEntryCreditor->accountstreeid = 16;

                array_push($dailyEntryDebtorArray, $dailyEntryDebtor);
                array_push($dailyEntryCreditorArray, $dailyEntryCreditor);


                insertEntery($dailyEntry, $dailyEntryDebtorArray, $dailyEntryCreditorArray, 1);
            } else {
                //clients
                #1 increase client debt
                $clientsing = $myclient->load($clientid);
                $debtBefore = $clientsing->clientdebt;
                $debtAfter = $debtBefore + $delayvalue;

                #2 update client debt
                $client->clientdebt = $debtAfter;
                $client->userid = $_SESSION['userid'];
                $client->clientdate = date("Y-m-d");
                $client->clientid = $clientid;
                $extclient->updatedept($client);

                #3 insert client debt change

                $myClientdebtchange->clientdebtchangeafter = $debtAfter;
                $myClientdebtchange->clientdebtchangeamount = $delayvalue;
                $myClientdebtchange->clientdebtchangebefore = $debtBefore;
                $myClientdebtchange->clientdebtchangedate = date("Y-m-d");
                $myClientdebtchange->clientdebtchangemodelid = $proid;
                $myClientdebtchange->clientdebtchangetype = 0;
                $myClientdebtchange->clientid = $clientid;
                $myClientdebtchange->comment = "تاخير استلام منتج ايجار";
                $myClientdebtchange->processname = "تاخير استلام منتج ايجار";
                $myClientdebtchange->tablename = "rentbill.php";
                $myClientdebtchange->userid = $_SESSION['userid'];
                $myClientdebtchange->totalOperationCost = $delayvalue;
                $myClientdebtchange->dailyentryid = $proid;

                $myClientdebtchangeRecord->insert($myClientdebtchange);

                // قيد الاجل

                $dailyEntry->entryComment = ' مبيعات تأخير ( أجل )  ';
                $dailyEntry->reverseofid = -9;

                $dailyEntryDebtorArray = array();
                $dailyEntryCreditorArray = array();

                // deptor client
                $dailyEntryDebtor->value = $delayvalue;
                $clientTreeId = $clientsing->treeId;
                $dailyEntryDebtor->accountstreeid = $clientTreeId;

                // cerditor sales
                $dailyEntryCreditor->value = $delayvalue;
                $dailyEntryCreditor->accountstreeid = 16;

                array_push($dailyEntryDebtorArray, $dailyEntryDebtor);
                array_push($dailyEntryCreditorArray, $dailyEntryCreditor);


                insertEntery($dailyEntry, $dailyEntryDebtorArray, $dailyEntryCreditorArray, 1);
            }
        } else {
            //no delay
            $extrentbillpro->updatestatus($rentbillpro);
        }


        $mytransactions->commit();
        header("location:?do=showDetail&id=" . $billpro->billid);
    } catch (Exception $e) {
        $mytransactions->rollback();
        header("location:?do=error");
    }
} elseif ($do == "delete") {//tempdelete
    include_once("../public/authentication.php");


    //Transaction
    $mytransactions = new Transaction();
    try {

        $id = filter_input(INPUT_GET, 'id');
        $dailyentryid = filter_input(INPUT_GET, 'dailyentryid');
        $billinfo = $myrentbill->load($id);

        $pros = $myrentbillpro->queryByBillid($billinfo->id);
        foreach ($pros as $onepro) {
            $getstore = $myrentStore->queryByRentproductid($onepro->productid);
            $rentStore->rented = $getstore[0]->rented - $onepro->amount;
            $rentStore->rentproductid = $onepro->productid;
            $extrentStore->updaterented($rentStore);


            if ($onepro->type == 1) {

                // with supplier debt and supplier change
                //supplier
                #1 increase supplier debt
                $supplierinfo = $mysupplier->load($onepro->supplierid);
                $debtBefore = $supplierinfo->suppliercurrentDebt;
                $debtAfter = $debtBefore - ($onepro->suppliertotalpice * $onepro->rentdays);

                #2 update supplier debt
                $supplier->suppliercurrentDebt = $debtAfter;
                $supplier->userid = $_SESSION['userid'];
                $supplier->supplierdate = date("Y-m-d");
                $supplier->supplierid = $onepro->supplierid;
                $extsupplier->updatedept($supplier);

                #3 insert supplier debt change
                $Supplierdebtchange->comment = "";
                $Supplierdebtchange->processname = "تاجير منتجات خارجى من فاتوره الايجار ";
                $Supplierdebtchange->supplierdebtchangeafter = $debtAfter;
                $Supplierdebtchange->supplierdebtchangeamount = ($onepro->suppliertotalpice * $onepro->rentdays);
                $Supplierdebtchange->supplierdebtchangebefore = $debtBefore;
                $Supplierdebtchange->supplierdebtchangedate = date("Y-m-d");
                $Supplierdebtchange->supplierdebtchangemodelid = $id;
                $Supplierdebtchange->supplierid = $onepro->supplierid;
                $Supplierdebtchange->supplierdebtchangetype = 1;
                $Supplierdebtchange->tablename = "rentbill.php";
                $Supplierdebtchange->userid = $_SESSION['userid'];
                $Supplierdebtchange->dailyentryid = 0;

                $SupplierdebtchangeDAO->insert($Supplierdebtchange);
            }
        }




        reverseEntryWithItsID($dailyentryid, 1);


        $myrentbill->delete($id);
        $myrentbillpro->deleteByBillid($id);

        //update save or client
        //check type
        //if cash or client
        if ($billinfo->billpayed > 0) {
            //cash
            #1 decrease save
            $saveinfo = $mysave->load($_SESSION['saveid']);
            $balanceBefore = $saveinfo->savecurrentvalue;
            $balanceAfter = $balanceBefore - $billinfo->billpayed;

            #2 update save
            $save->savecurrentvalue = $balanceAfter;
            $save->userid = $_SESSION['userid'];
            $save->saveid = $_SESSION['saveid'];
            $extsave->updateSaveValue($save);

            #3 update save report
            $Savedaily->savedailydate = date("Y-m-d");
            $Savedaily->userid = $_SESSION['userid'];
            $Savedaily->savedailysavebefore = $balanceBefore;
            $Savedaily->savedailychangeamount = $billinfo->billpayed;
            $Savedaily->savedailychangetype = 1;
            $Savedaily->saveid = $_SESSION['saveid'];
            $Savedaily->processname = 'حذف فاتوره للايجار';
            $Savedaily->savedailymodelid = $id;
            $Savedaily->savedailysaveafter = $balanceAfter;
            $Savedaily->tablename = 'rentbill.php';

            $SavedailyDAO->insert($Savedaily);
        }
        if ($billinfo->billreset > 0) {
            //clients
            #1 increase client debt
            $clientsing = $myclient->load($billinfo->clientid);
            $debtBefore = $clientsing->clientdebt;
            $debtAfter = $debtBefore - $billinfo->billreset;

            #2 update client debt
            $client->clientdebt = $debtAfter;
            $client->userid = $_SESSION['userid'];
            $client->clientdate = date("Y-m-d");
            $client->clientid = $billinfo->clientid;
            $extclient->updatedept($client);

            #3 insert client debt change

            $myClientdebtchange->clientdebtchangeafter = $debtAfter;
            $myClientdebtchange->clientdebtchangeamount = $billinfo->billreset;
            $myClientdebtchange->clientdebtchangebefore = $debtBefore;
            $myClientdebtchange->clientdebtchangedate = date("Y-m-d");
            $myClientdebtchange->clientdebtchangemodelid = $id;
            $myClientdebtchange->clientdebtchangetype = 1;
            $myClientdebtchange->clientid = $billinfo->clientid;
            $myClientdebtchange->comment = "حذف فاتوره ايجار ";
            $myClientdebtchange->processname = "حذف فاتوره ايجار ";
            $myClientdebtchange->tablename = "rentbill.php";
            $myClientdebtchange->userid = $_SESSION['userid'];
            $myClientdebtchange->totalOperationCost = $billinfo->billtotal;
            $myClientdebtchange->dailyentryid = $id;

            $myClientdebtchangeRecord->insert($myClientdebtchange);
        }


        $mytransactions->commit();
        header("location:?do=sucess");
    } catch (Exception $e) {
        // print_r($e);
        $mytransactions->rollback();
        header("location:?do=error");
    }
} elseif ($do == "sucess") {
    //here the smarty templates
    $smarty->display("succes.html");
} elseif ($do == "error") {
    //here the smarty templates
    $smarty->display("error.html");
}
//here the global templates
$smarty->assign("rentjs", 1);
$smarty->display("footer.html");

/* ===============================
  function in this CONTROLLER
  ================================ */
?>