<?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");

//here the db files that include in the file
include("../public/include_dao.php");
//Storedetail
require_once('../models/dao/StoredetailDAO.class.php');
require_once('../models/dto/Storedetail.class.php');
require_once('../models/mysql/StoredetailMySqlDAO.class.php');
require_once('../models/mysql/ext/StoredetailMySqlExtDAO.class.php');
//Store
require_once('../models/dao/StoreDAO.class.php');
require_once('../models/dto/Store.class.php');
require_once('../models/mysql/StoreMySqlDAO.class.php');
require_once('../models/mysql/ext/StoreMySqlExtDAO.class.php');
//Product
require_once('../models/dao/ProductDAO.class.php');
require_once('../models/dto/Product.class.php');
require_once('../models/mysql/ProductMySqlDAO.class.php');
require_once('../models/mysql/ext/ProductMySqlExtDAO.class.php');
//Productcat
require_once('../models/dao/ProductcatDAO.class.php');
require_once('../models/dto/Productcat.class.php');
require_once('../models/mysql/ProductcatMySqlDAO.class.php');
require_once('../models/mysql/ext/ProductcatMySqlExtDAO.class.php');

//get the do the action


require_once('../models/dao/ProgramsettingsDAO.class.php');
require_once('../models/dto/Programsetting.class.php');
require_once('../models/mysql/ProgramsettingsMySqlDAO.class.php');
require_once('../models/mysql/ext/ProgramsettingsMySqlExtDAO.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');


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');

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');


$do = $_GET['do'];

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

  Controller Name :- storedetailCTRL تقرير مخزون اول مدة

  OPERTATION in Controller

  1-load save data
  2-display show form

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

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

//here goes the instances and general variables
//Storedetail
$myStoredetailRecord = new StoredetailMySqlDAO();
$myStoredetailEx = new StoredetailMySqlExtDAO();
//Store
$myStoreRecord = new StoreMySqlDAO();
//Product
$myProductRecord = new ProductMySqlDAO();
$productExt = new ProductMySqlExtDAO();
//Productcat
$productCatDAO = new ProductcatMySqlDAO();
$productCatExt = new ProductcatMySqlExtDAO();

$ProgramsettingDAO = new ProgramsettingsMySqlDAO();

//Buybilldetail
$buyBillDetail = new Buybilldetail();
$buyBillDetailDAO = new BuybilldetailMySqlDAO();
$buyBillDetailExt = new BuybilldetailMySqlExtDAO();

//Returnbuybilldetail
$returnBuyBillDetail = new Returnbuybilldetail();
$returnBuyBillDetailDAO = new ReturnbuybilldetailMySqlDAO();
$returnBuyBillDetailExt = new ReturnbuybilldetailMySqlExtDAO();


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

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

    $storeData = loadStore();
    $smarty->assign("storeData", $storeData);

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

    //$productCatData = loadProductCategories();
    //$smarty->assign("productCatData", $productCatData);

    $productId = $_REQUEST['productId'];
    $storeId = $_REQUEST['storeId'];
    $productCatId = $_REQUEST['productCatId'];




    //here the smarty templates
    $smarty->display("storeparcodeview/show.html");
}
//here the global templates
$smarty->display("footer.html");

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

//select all product data
function loadProducts() {
    //to use the variable out side the funcion
    global $myProductRecord;

    //load all product data
    $productData = $myProductRecord->queryByConditions(0);

    return $productData;
}

//select all store data
function loadStore() {
    //to use the variable out side the funcion
    global $myStoreRecord;

    //load all store data
    $storeData = $myStoreRecord->queryByConditions(0);

    return $storeData;
}

function loadProductCategories() {
    global $productExt;
    global $productCatDAO;
    global $smarty;
    $categories;

    //NOTICE: select categories which have products in it only, not all categories.
    $productsData = $productExt->queryAllProducts();

    if (count($productsData) > 0) {
        $i = 0;
        foreach ($productsData as $pro) {
            $parentId = $pro->productCatId;
            $pathArr = fetch_recursive($parentId, $categories);
            $smarty->assign("names" . $i, $pathArr);
            $smarty->assign("parentId" . $i, $parentId);
            $i++;
        }
        $itr = $i - 1;
        $smarty->assign("itr", $itr);
    }

    return $productsData;
}

function fetch_recursive($parentid, $categories) {
    global $productCatExt;
    $catData = $productCatExt->getCategoryAndParentByCatId($parentid);

    if (count($catData) > 0) {
        $categories .= $catData->productCatName . '/';
        $newParentId = $catData->productCatParent;

        if ($newParentId != 0) {
            $newParentName = $catData->parentName;
            $categories .= $newParentName . '/';
            fetch_recursive($newParentId, $categories);
        }
    }
    $categories = substr($categories, 0, strlen($categories) - 1);
    return $categories;
}

// show the form by product name
function show() {
    global $smarty;
    //to use the variable out side the funcion
    global $myStoredetailEx;
    global $ProgramsettingDAO;
    global $buyBillDetail;
    global $buyBillDetailDAO;
    global $buyBillDetailExt;
    global $returnBuyBillDetail;
    global $returnBuyBillDetailDAO;
    global $returnBuyBillDetailExt;
    global $myStoreRecord;
    global $myProductRecord;
    global $productCatDAO;

    include_once("../public/authentication.php");
    $productId = $_REQUEST['productId'];
    $storeId = $_REQUEST['storeId'];
    $productCatId = $_REQUEST['productCatId'];
    $order = $_REQUEST["order"];


    $queryString = ' AND';
    $message = "تقرير بضاعة أول مدة : ";

    if (isset($productId) && $productId != '-1' && $productId != '') {

        $myprodactdata = $myProductRecord->load($productId);

        $message = $message . " للمنتج  :" . $myprodactdata->productName . "  ";


        $queryString .= ' storedetail.productId = ' . $productId . ' AND';
    }

    if (isset($storeId) && $storeId != '-1') {
        $queryString .= '  storedetail.storeid = ' . $storeId . ' AND';
        $mystordata = $myStoreRecord->load($storeId);
        $message = $message . "    والمخزن : " . $mystordata->storeName . "";
    }

    if (isset($productCatId) && $productCatId != '-1') {
        $queryString .= '  product.productCatId = ' . $productCatId . ' AND';
        $myProductCatData = $productCatDAO->load($productCatId);


        $message = $message . $myProductCatData->productCatName . " والمخزن " . $mystordata->storeName . "";
    }


    $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);
        }

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

    //select all data from storedetail by productId
    $storedetailData = $myStoredetailEx->queryWithqueryString($queryString, $order);

    $smarty->assign('message', $message);
    $sumValue = 0;
    $Programsettingdata = $ProgramsettingDAO->load(1);
    foreach ($storedetailData as $storedetail) {
        $myproduct = $myProductRecord->load($storedetail->productid);
        if ($Programsettingdata->lastprice == "0") {
            $storedetail->productBuyPrice = $myproduct->lastbuyprice;

            /* $buylastprice = $buyBillDetailDAO->queryByBuybilldetailproductid($storedetail->productid);

              if (count($buylastprice) != "0") {

              $storedetail->productBuyPrice = $buylastprice[0]->buybilldetailprice;
              } */
        } else {
            $storedetail->productBuyPrice = $myproduct->meanbuyprice;
        }

        $productBuyPrice = $storedetail->productBuyPrice;
        $productQuantity = $storedetail->productquantity;
        $SumProductPrice = $productBuyPrice * $productQuantity;

        $sumValue = $SumProductPrice + $sumValue;

        ///////////To show product category name (the product whole path)
        $parentId = $storedetail->productCatId;
        //names of product's parents
        $pathArr = getProductPath_recursive($parentId, $categories);

        //new product name with all path

        if ($_SESSION['hidecat'] == 1) {



            $storedetail->productName = $storedetail->productName . '/' . $pathArr;
        } else {

            $storedetail->productName = $storedetail->productName;
        }
    }

    return array($storedetailData, $sumValue);
}

// show the form by product name
function showByProductNameAndStore() {
    global $myStoredetailEx;
    global $ProgramsettingDAO;
    global $buyBillDetail;
    global $buyBillDetailDAO;
    global $buyBillDetailExt;
    global $returnBuyBillDetail;
    global $returnBuyBillDetailDAO;
    global $returnBuyBillDetailExt;
    global $myProductRecord;

    $productId = $_REQUEST['productId'];
    $storeId = $_REQUEST['storeId'];

    //select all data from storedetail by productId
    $storedetailData = $myStoredetailEx->queryWithProductIdAndStoreId($productId, $storeId);

    $sumValue = 0;
    $Programsettingdata = $ProgramsettingDAO->load(1);
    foreach ($storedetailData as $storedetail) {
        $myproduct = $myProductRecord->load($storedetail->productid);
        if ($Programsettingdata->lastprice == "0") {
            $storedetail->productBuyPrice = $myproduct->lastbuyprice;
            /* $buylastprice = $buyBillDetailDAO->queryByBuybilldetailproductid($storedetail->productid);
              if (count($buylastprice) != "0") {
              $storedetail->productBuyPrice = $buylastprice[0]->buybilldetailprice;
              } */
        } else {
            $storedetail->productBuyPrice = $myproduct->meanbuyprice;
        }
        $productBuyPrice = $storedetail->productBuyPrice;
        $productQuantity = $storedetail->productquantity;
        $SumProductPrice = $productBuyPrice * $productQuantity;

        $sumValue = $SumProductPrice + $sumValue;

        ///////////To show product category name (the product whole path)
        $parentId = $storedetail->productCatId;
        //names of product's parents
        $pathArr = getProductPath_recursive($parentId, $categories);

        //new product name with all path
        $storedetail->productName = $storedetail->productName . '/' . $pathArr;
    }

    return array($storedetailData, $sumValue);
}

// show the form by store Name
function showBystoreName() {
    global $myStoredetailEx;

    global $ProgramsettingDAO;
    global $buyBillDetail;
    global $buyBillDetailDAO;
    global $buyBillDetailExt;
    global $returnBuyBillDetail;
    global $returnBuyBillDetailDAO;
    global $returnBuyBillDetailExt;
    global $myProductRecord;




    $storeId = $_REQUEST['storeId'];

    $storedetailData = $myStoredetailEx->queryWithStoreId($storeId);


    $sumValue = 0;
    $Programsettingdata = $ProgramsettingDAO->load(1);
    foreach ($storedetailData as $storedetail) {
        $myproduct = $myProductRecord->load($storedetail->productid);
        if ($Programsettingdata->lastprice == "0") {
            $storedetail->productBuyPrice = $myproduct->lastbuyprice;
            /* $buylastprice = $buyBillDetailDAO->queryByBuybilldetailproductid($storedetail->productid);
              if (count($buylastprice) != "0") {
              $storedetail->productBuyPrice = $buylastprice[0]->buybilldetailprice;
              } */
        } else {
            $storedetail->productBuyPrice = $myproduct->meanbuyprice;
        }
        $productBuyPrice = $storedetail->productBuyPrice;
        $productQuantity = $storedetail->productquantity;
        $SumProductPrice = $productBuyPrice * $productQuantity;

        $sumValue = $SumProductPrice + $sumValue;

        ///////////To show product category name (the product whole path)
        $parentId = $storedetail->productCatId;
        //names of product's parents
        $pathArr = getProductPath_recursive($parentId, $categories);

        //new product name with all path
        $storedetail->productName = $storedetail->productName . '/' . $pathArr;
    }
    return array($storedetailData, $sumValue);
}

// show the form by product category Name
function showByProductCatNameAndStoreId() {
    global $myStoredetailEx;
    global $ProgramsettingDAO;
    global $buyBillDetail;
    global $buyBillDetailDAO;
    global $buyBillDetailExt;
    global $returnBuyBillDetail;
    global $returnBuyBillDetailDAO;
    global $returnBuyBillDetailExt;
    global $myProductRecord;

    $productCatId = $_REQUEST['productCatId'];
    $storeId = $_REQUEST['storeId'];

    if (isset($productCatId)) {
        $storedetailData = $myStoredetailEx->queryWithProductCatAndStoreId($productCatId, $storeId);

        $sumValue = 0;
        $Programsettingdata = $ProgramsettingDAO->load(1);
        foreach ($storedetailData as $storedetail) {
            $myproduct = $myProductRecord->load($storedetail->productid);
            if ($Programsettingdata->lastprice == "0") {
                $storedetail->productBuyPrice = $myproduct->lastbuyprice;
                /* $buylastprice = $buyBillDetailDAO->queryByBuybilldetailproductid($storedetail->productid);
                  if (count($buylastprice) != "0") {
                  $storedetail->productBuyPrice = $buylastprice[0]->buybilldetailprice;
                  } */
            } else {
                $storedetail->productBuyPrice = $myproduct->meanbuyprice;
            }

            $productBuyPrice = $storedetail->productBuyPrice;
            $productQuantity = $storedetail->productquantity;
            $SumProductPrice = $productBuyPrice * $productQuantity;

            $sumValue = $SumProductPrice + $sumValue;

            ///////////To show product category name (the product whole path)
            $parentId = $storedetail->productCatId;
            //names of product's parents
            $pathArr = getProductPath_recursive($parentId, $categories);

            //new product name with all path
            $storedetail->productName = $storedetail->productName . '/' . $pathArr;
        }
    }
    return array($storedetailData, $sumValue);
}

// show the form
function showAll() {
    global $myStoredetailEx;

    $storedetailData = $myStoredetailEx->queryWithOrder();

    $sumValue = 0;
    if (count($storedetailData) > 0) {
        foreach ($storedetailData as $storedetail) {
            //إجمالي سعر المنتجات
            $productBuyPrice = $storedetail->productBuyPrice;
            $productQuantity = $storedetail->productquantity;
            $SumProductPrice = $productBuyPrice * $productQuantity;

            $sumValue += $SumProductPrice;

            ///////////To show product category name (the product whole path)
            $parentId = $storedetail->productCatId;
            //names of product's parents
            $pathArr = getProductPath_recursive($parentId, $categories);

            //new product name with all path
            $storedetail->productName = $storedetail->productName . '/' . $pathArr;
        }
    }
    return array($storedetailData, $sumValue);
}

function getProductPath_recursive($parentid, $categories) {
    global $productCatExt;

    $catData = $productCatExt->getCategoryAndParentByCatId($parentid);

    if (count($catData) > 0) {
        $categories .= $catData->productCatName . '/';
        $newParentId = $catData->productCatParent;

        return getProductPath_recursive($newParentId, $categories);
    }
    $categories = substr($categories, 0, strlen($categories) - 1);
    return $categories;
}

?>