<?php

require_once "Conexao1.php";

function getEstoqueMatriz($produto, $options){
		$Conexao    = Conexao1::getConnection();

		$prod_cod   = $produto['PROD_CODIGO'];

		$SQL = "SELECT
				M.SQL_ICODBUS,
				(I.SQL_IQQTDANT+I.SQL_IQQTDENT-I.SQL_IQQTDSAI) AS SQL_SALDO

				FROM ITEQV_GIM I 
				INNER JOIN (select MAX(sql_iqanomes) as REF_ANOMES, SQL_IQCODBUS AS REF_CODIGO FROM ITEQV_GIM GROUP BY SQL_IQCODBUS) R
				ON I.SQL_IQCODBUS = R.REF_CODIGO AND I.SQL_IQANOMES = R.REF_ANOMES
				INNER JOIN [SOF].[dbo].[ITENS_GIM] M ON R.REF_CODIGO = M.SQL_ICODBUS WHERE M.SQL_ICODBUS = '$prod_cod' AND (I.SQL_IQQTDANT+I.SQL_IQQTDENT-I.SQL_IQQTDSAI) > 3";

		$query      = $Conexao->query($SQL);
			
		$result     = $query->fetchAll();

		if($result){

			$LINHA_UP = array(
				"LOJA"            => $produto['LOJA'],
				"PROD_CODIGO"     => $produto['PROD_CODIGO'],
				"MOV_SAIDAS"      => $produto['MOV_SAIDAS'],
				"PROD_PRECO"      => $produto['PROD_PRECO'],
				"PROD_DESCRICAO"  => $produto['PROD_DESCRICAO'],
				"PROD_REFERENCIA" => $produto['PROD_REFERENCIA'],
				"QUANT_ORIGEM"    => $result[0]['SQL_SALDO'],
				"QUANT_DESTINO"   => $produto['QUANT_DESTINO'],
				"PROD_DEPOSITO"   => $produto['PROD_DEPOSITO']);

			return criarSugestao($LINHA_UP, $options);
		} else {
			return false;
		}
}

function criarSugestao($produto, $options){
	$media_dia = intval($produto['MOV_SAIDAS']) / $options['intervalo'];
	
	if($media_dia > 0.0027397260273973){
		$media    = round($media_dia,2);
	}else{
		$media    = 0.01;
	}

	$necessidade_15_dias = ceil($media_dia * $options['dias']);

	$sugestao = $necessidade_15_dias - intval($produto['QUANT_DESTINO']);

	$bg_color = '#f1f1f1';
	if($sugestao > intval($produto['QUANT_ORIGEM'])){
		$bg_color = '#ed8080';
	} else if($sugestao == intval($produto['QUANT_ORIGEM'])){
		$bg_color = '#f7c44f';
	}

	if($sugestao > 0){
		$LINHA_UP = array(
	        "BGCOLOR"         => $bg_color,
	        "PROD_CODIGO"     => $produto['PROD_CODIGO'],
	        "PROD_REFERENCIA" => $produto['PROD_REFERENCIA'],
	        "PROD_DESCRICAO"  => $produto['PROD_DESCRICAO'],
	        "DIASINTERVAL"    => $options['intervalo'], // período de observação: 1 ano (365 dias) (pode ser alterado nas configurações do sistema)
	        "MOV_SAIDAS"      => intval($produto['MOV_SAIDAS']),
	        "MEDIA"           => $media,
	        "QUANT_ORIGEM"    => intval($produto['QUANT_ORIGEM']),
	        "QUANT_DESTINO"   => intval($produto['QUANT_DESTINO']),
	        "SUGESTAO"        => $sugestao,
	        "DIAS"            => $options['dias'], // período considerado pra sugestão: 15 dias (pode ser alterado nas configurações do sistema)
	        "PROD_PRECO"      => $produto['PROD_PRECO'],
	        "PROD_DEPOSITO"   => $produto['PROD_DEPOSITO']
		);

		return $LINHA_UP;
	} else {
		return false;
	}
} 

function diasDatas($data_inicial, $data_final) {
    $diferenca = strtotime($data_final) - strtotime($data_inicial);
    $dias      = floor($diferenca / (60 * 60 * 24)); 
    return $dias;
}

if(isset($_POST['destino']) && !empty($_POST['destino'])){
	
	require_once "Conexao.php";

	$loja      = intval($_POST['destino']);

	$linha     = date('Y-m-d H:i:s', strtotime($_POST['date_ini']));
	$data_hoje = date('Y-m-d H:i:s', strtotime($_POST['date_fim']));
	$intervalo = diasDatas($linha, $data_hoje);
	$dias      = intval($_POST['dias']);
    $deposito  = $_POST['deposito'];
    $grupo     = $_POST['grupo'];


	$ITEQV_GIM = 'ITEQV0' . $loja . '_GIM';
	$ITENS_GIM = 'ITENS0' . $loja . '_GIM';
	$MOVIM_GIM = 'MOVIM0' . $loja . '_GIM';

	if($loja == '6'){
		$ITEQV_GIM = 'ITEQV08_GIM';
		$ITENS_GIM = 'ITENS08_GIM';
		$MOVIM_GIM = 'MOVIM08_GIM';
	}
	
	try{

		$Conexao    = Conexao::getConnection($loja);
		
		$inicio_linhas_chamada = 0;
		$total_linhas_chamada  = 10000;

		$datetime = date("d/m/Y H:i:s");	

		try{
		    $complemento_sql = "";
			
			if(!empty($grupo)){
					$complemento_sql .= " AND LEFT(I.SQL_ICODBUS, 3) = '%$grupo%' ";
			} else {
				if (!empty($deposito)) {
					$complemento_sql .= " AND  I.SQL_ILOCDEP = $deposito ";
				}
			}

			$SQL = "SELECT DISTINCT
					I.SQL_ICODBUS AS PROD_CODIGO
					,'$loja' AS LOJA
					,M.QTD AS MOV_SAIDAS
					,I.SQL_IPREVEN AS PROD_PRECO
					,RTRIM(I.SQL_IDESCRI) PROD_DESCRICAO
					,I.SQL_IREFFAB_1 PROD_REFERENCIA

					,'' AS QUANT_ORIGEM

					,E.EST_SALDO AS QUANT_DESTINO
					
					,I.SQL_ILOCDEP AS PROD_DEPOSITO

					FROM [SOF].[dbo].[$ITENS_GIM] I, 
					(SELECT SQL_MCODBUS MOV_CODIGO, CONVERT(DATETIME, CAST(SQL_MDATMOV AS VARCHAR), 103) MOV_DAT, SUM(SQL_MQTDMOV) QTD FROM [SOF].[dbo].[$MOVIM_GIM] WHERE SQL_MROTCAL > '25' and SQL_MDATMOV != 0  GROUP BY SQL_MCODBUS, SQL_MDATMOV) M,
					(SELECT SQL_IQCODBUS AS EST_CODIGO, (SQL_IQQTDANT+SQL_IQQTDENT-SQL_IQQTDSAI) EST_SALDO FROM [SOF].[dbo].[$ITEQV_GIM] Q, (SELECT MAX(SQL_IQANOMES) REF_ANOMES, SQL_IQCODBUS REF_CODIGO FROM [SOF].[dbo].[$ITEQV_GIM] GROUP BY SQL_IQCODBUS) R WHERE Q.SQL_IQANOMES = R.REF_ANOMES AND Q.SQL_IQCODBUS = R.REF_CODIGO) E
					WHERE I.SQL_ICODBUS = M.MOV_CODIGO AND I.SQL_ICODBUS = E.EST_CODIGO
					AND LTRIM(RTRIM(SQL_IPROCED)) <> 'X' $complemento_sql AND CAST(M.MOV_DAT as datetime) BETWEEN CAST('$linha' as datetime) AND CAST('$data_hoje' as datetime) ORDER BY I.SQL_ICODBUS ASC";

			$query    = $Conexao->query($SQL);

			$produtos = $query->fetchAll();
			
			$RESPONSE = array();
			foreach($produtos as $produto){
				$options = array(
					'intervalo' => $intervalo,
					'dias'      => $dias,
				);

				$LINHA_UP = getEstoqueMatriz($produto, $options);

				if($LINHA_UP){
					array_push($RESPONSE, $LINHA_UP);
				}
			}

			$response_arr = $RESPONSE;

			echo json_encode($response_arr);
			
		}catch(Exception $e){
			$response_arr = array(
				"status" => false,
				"msg" => "Algo deu errado.",
				"error" => $e->getMessage()
			);

			echo json_encode($response_arr);

			exit;
		}
	}catch(Exception $e){
		$response_arr = array(
			"status" => false,
			"msg" => "Algo deu errado.",
			"error" => $e->getMessage()
		);

		echo json_encode($response_arr);

		exit;
	}
}