<?php

require_once 'Datas.php';

class Sqlserver
{

/*metodo estatico para atualizar as barras no sistema
da softcom para que possamos fazer o cadastro de mercadorias*/

public static function AtualizarBarras()
{

try{
		//comando update pdo
		$connection = Conexao::getConnection();
		$sql = "UPDATE PesquisaPreco_Confeccao SET CodBarra = [Ref] WHERE CodBarra IS NULL OR CodBarra != Ref;";
		//execulta
		$connection->query($sql);
				
}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}

//metodo para buscar as notas fiscais no sotcom atraves de criterios enviados pelos argumentos
    public function comprasDomesEntrada($dataInicioCompras, $dataFinalCompras, $tipo, $cfop)
    {
        //verificar que tipo de consulta iremos trazer
        if ($tipo == 1) {//para buscar pela data de emissão
            //tipo data de emissao
            $tipoCosulta = '[Data Emissão]';
        } else {//busque pela data de entrada
            //trocar o campo
            $tipoCosulta = '[Data da Entrada]';
        }        

        //verificar que tipo de visao precisa
        if ($cfop == 1) {//se é apenas de venda
            //busque cfops que nao sao de bonificação
            $cfop = "AND CFOP != '1910' AND CFOP != '2910'  AND CFOP != '1949'";
        } else if ($cfop == 2) {
            //busque apenas de bonificação
            $cfop = "AND CFOP != '1403' AND CFOP != '1102'";
        } else {
            //se sao todos
            $cfop = ' AND CFOP IS NOT NULL';
        }

        //REFATORAR QUANDO TIVER OPORTUNIDADE

        //VERIFICANDO SE PASSOU UMA OU MAIS DATAS
        if ($dataInicioCompras == $dataFinalCompras) {
            //ALTERANDO A CONSULTA DE ACORDO COM A QUANTIDADE DE DATAS
            $datas = "$tipoCosulta >= '$dataInicioCompras'";
        } else {
            //DUAS DATAS PARA O MESMO CAMPO
            $datas = "$tipoCosulta >= '$dataInicioCompras' AND $tipoCosulta <= '$dataFinalCompras'";
        }

        //consulta sqlserver
        try {
            $Conexao = Conexao::getConnection();
            $query = $Conexao->query("SELECT 
        LojaOrigem AS LOJA,
        SUM([Valor Nota]) AS VALOR

        FROM [Cadastro das Entradas]

        WHERE

        $datas
        $cfop     

        GROUP BY LojaOrigem"
        );
        
        $sqlserver = $query->fetchAll();

        } catch (Exception $e) {
            echo $e->getMessage();
            exit;
        }
        return $sqlserver;//reorna um array com os dados de notas de entrada
    }

	//VENDAS DO DIA ATUAL
    function vendasDoDia($dataInicio, $dataFinal = 0)
    {
        if ($dataFinal == 0){
            $dataFinal = $dataInicio;
        }
        try {
            $Conexao = Conexao::getConnection();
            $query = $Conexao->query("SELECT LojaOrigem AS loja, sum(Total_Item)
    FROM
        memoria_VendasTodas
    WHERE
        [Data da Venda] BETWEEN '$dataInicio' AND '$dataFinal'
    AND
        Cancelado = 0
    AND 
        Estornado = 0

    GROUP BY
        LojaOrigem
		
		ORDER BY SUM(Total_Item) DESC
    ;");

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        return $sqlserver;
    }

    //VENDAS DA MESMA DATA ANO ANTERIOR
    function vendasDoDiaAnterior($loja, $tipoVisao, $dataInicio = 0, $dataFinal = 0 )
    {
        $data = new Data;
        if ($dataInicio == 0) {
            //nova instancia data

            
            if($tipoVisao == 1){
                
                $dataInicio = $data->sabadoAnoAnteriorEquivalente();
            }else{
                $dataInicio = $data->anoAnterior(); 
            }


            $dataFinal = $dataInicio;
        }
        
        try {
            $Conexao = Conexao::getConnection();
            $query = $Conexao->query("SELECT LojaOrigem AS loja, sum(Total_Item)
        FROM
            memoria_VendasTodas
        WHERE
            [Data da Venda]  BETWEEN '$dataInicio' AND '$dataFinal'
        AND
            Cancelado = 0
        AND
            Estornado = 0
        AND 
            LojaOrigem = '$loja'
        
        GROUP BY
            LojaOrigem
        ;");

            $sqlserver = $query->fetchAll();

            $jsonString = json_encode($sqlserver);

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;

        }

        return $jsonString;

    }

    public function Vendas($fabricante1, $loja, $datainicio1, $datafinal1, $limite, $ordenacao = false, $grupo, $grupoexcluir, $listagemRetirar = 0)
    {   
       

        // string recebida: '7898610370087, 7898610370094'
        $codigosStr = str_replace("'", "", $listagemRetirar); // remove aspas extras
        $listagemRetirar = array_map('trim', explode(',', $codigosStr)); // vira array de códigos
        $listaCodigos = "'" . implode("','", $listagemRetirar) . "'";


        //se grupo for igual a todos 
        if($grupo == 'TODOS'){
            //buscar todos os grupos
            $grupo1 = "AND VENDAS.grupo IS NOT NULL";
        }else{
        //senao buscar pelo grupo selecionado
        $grupo1 = "AND VENDAS.grupo = '$grupo'";
        }

        if($limite <> false) {
            $maximo = "OFFSET 0 ROWS FETCH NEXT $limite ROWS ONLY";
        }else{
            $maximo = '';
        }

        //verificar se foi selecionado todos os fabricantes
        if ($fabricante1 == 'TODOS') {
            //se foi atualizar consulta para todos os fabricantes
            $fabricante = "AND VENDAS.Fabricante IS NOT NULL";

            //senao
        } else {
            //atualizar para fabricante selecionado
            $fabricante = "AND VENDAS.Fabricante = '$fabricante1'";
        }

        //excluir grupo
        if($grupoexcluir == 'SELECIONE'){

            $grupoexcluir1 = "AND VENDAS.grupo IS NOT NULL";
            //$grupoexcluir1 = "AND VENDAS.grupo NOT LIKE '%TINTURA%'";

        }else{
            $grupoexcluir1 = "AND VENDAS.grupo NOT LIKE '%$grupoexcluir%'";
        }

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("            
            SELECT
            VENDAS.[Código da Mercadoria] AS codmercadoria,
            SUM(VENDAS.Quantidade_Item) AS quantidade,
 
            MIN(VENDAS.Mercadoria) AS mercadoria,
            MIN(CADASTRO.[Preço Compra]) * SUM(VENDAS.Quantidade_Item) AS compra,
            MIN(CADASTRO.[Preço Compra]) * SUM(VENDAS.Quantidade_Item) AS valorcompra,
			
            MIN(VENDAS.PrecoBruto) * SUM(Quantidade_Item) AS valorbruto,
			
            SUM(VENDAS.Total_Item) AS vendaliquido
            
            /*ROUND(SUM(VENDAS.Total_SemDesconto_Item),2) - ROUND(SUM(VENDAS.Total_Item),2)  AS desconto*/
            /*ROUND(min(VENDAS.PrecoBruto)  ,2) - ROUND(MIN(VENDAS.Total_Item),2)  AS desconto*/
           /* ((SUM(VENDAS.PrecoBruto) * SUM(VENDAS.Quantidade_Item)) -  MIN(VENDAS.Total_Item)) AS desconto*/
            
            FROM
            memoria_VendasTodas AS VENDAS
           
            JOIN [Cadastro de mercadorias] AS CADASTRO
            ON VENDAS.[Código da Mercadoria] = CADASTRO.[Código da Mercadoria]
            
            WHERE            
            VENDAS.LojaOrigem = '$loja'
           
            AND VENDAS.Estornado = 0
            AND VENDAS.Cancelado = 0          
            AND VENDAS.[Data da Venda] >= '$datainicio1'
            AND VENDAS.[Data da Venda] <= '$datafinal1'
                        
            -- FILTRO DE codigos
            /*
            AND VENDAS.[Cód Fabricante] <> '7898610370094' 
            AND VENDAS.[Cód Fabricante] <> '7898610377307'             
            AND VENDAS.[Cód Fabricante] <> '7898610370117'
            AND VENDAS.[Cód Fabricante] <> '7898610377321'
            AND VENDAS.[Cód Fabricante] <> '7898610370087'
            AND VENDAS.[Cód Fabricante] <> '7898610377284'
*/

            AND VENDAS.[Cód Fabricante] NOT IN ($listaCodigos)
                        
            $grupo1

            $grupoexcluir1
		
			$fabricante

            GROUP BY  VENDAS.[Código da Mercadoria]
			
			ORDER BY SUM(VENDAS.Total_Item) DESC
			$maximo
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }




    //VENDAS TOTAL DE UM PERIODO DE UMA EMPRESA
    public function VendasTotal($fabricante1, $loja, $datainicio1, $datafinal1)
    {
        //verificar se foi selecionado todos os fabricantes
        if ($fabricante1 == 'TODOS') {
            //se foi atualizar consulta para todos os fabricantes
            $fabricante = "AND VENDAS.Fabricante IS NOT NULL";

            //senao
        } else {
            //atualizar para fabricante selecionado
            $fabricante = "AND VENDAS.Fabricante = '$fabricante1'";
        }


        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT

            SUM(VENDAS.PrecoBruto * VENDAS.Quantidade_Item) AS BRUTO
			
            FROM
            memoria_VendasTodas AS VENDAS
            WHERE            
            VENDAS.LojaOrigem = '$loja'

            AND VENDAS.Estornado = 0
            AND VENDAS.Cancelado = 0 
            AND VENDAS.[Data da Venda] >= '$datainicio1'
            AND VENDAS.[Data da Venda] <= '$datafinal1'
            $fabricante
  
            
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


    //buscar vendas por vendedor
    public function VendasVendedor($fabricante1,$datainicio1, $datafinal1,$lojaconsulta,$grupoexcluir)
    {
        $data = new Data;


        $datainicio = $data->dataSql($datainicio1);
        $datafinal = $data->dataSql($datafinal1);

        //verificar se foi selecionado todos os fabricantes
        if ($fabricante1 == 'TODOS') {

            //se foi atualizar consulta para todos os fabricantes
            $fabricante = "AND Fabricante IS NOT NULL";

            //senao
        } else {

            //atualizar para fabricante selecionado
            $fabricante = "AND Fabricante = '$fabricante1'";
        }


            //GRUPO EXCLUSAO

        if($grupoexcluir == 'SELECIONE'){

            $grupoPesquisa = "";
        }else{

            $grupoPesquisa = "AND Grupo != '$grupoexcluir'";
        }


        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            SELECT
            MIN(Nome) AS VENDEDOR,
            SUM(Quantidade_Item) as QUANTIDADE,
            SUM(Total_Item) as TOTAL

            FROM memoria_VendasTodas 

            WHERE
            [Data da Venda] BETWEEN '$datainicio' AND '$datafinal'
            
            AND LojaOrigem = '$lojaconsulta'
            
            $grupoPesquisa

            $fabricante


            GROUP BY Vendedor

            ORDER BY SUM(Quantidade_Item) DESC
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

   
    public function ComprasProFornecedor($lojasec,$dia)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT
                    [Data Emissão],
                    [Data da Entrada],
            
                    [Nº Nota Fiscal],
                    LojaOrigem AS LOJA,
                    Fornecedor,
                    [Valor Nota],
                    CFOP
            
                    FROM [Cadastro das Entradas] 
                    
                    WHERE
                    [Data Emissão] >= '$dia'
                    AND [Data da Entrada] >= '$dia'
            
                    AND  CFOP != '1910'
                    AND CFOP != '2910' 
                    AND CFOP != '1949'
                    AND LojaOrigem = '$lojasec'

                    ORDER BY [Data Emissão]          
            
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

//funcao que retorna as vendas agrupadas por mes para relatorio de analise de estoque 
    public function VendasAgrupadaPorMes($datainicio,$datafinal,$loja,$fabricante,$tipoConsulta = 'fabricante',$erroestoque = "nao")
    {        

        if ($tipoConsulta == 'fabricante'){
	
            $produtofabricante = " PRODUTO.Fabricante = '$fabricante'";
            $fabricante = "AND VENDAS.Fabricante = '$fabricante'";
        
        }else{
            
            $produtofabricante = " PRODUTO.Fornecedor = '$fabricante'";
            $fabricante = "AND VENDAS.Fornecedor = '$fabricante'";
        }
        
    try {
            $Conexao = Conexao::getConnection();
			
            //QUERY DA SQL
            $query = $Conexao->query("SELECT
                MIN(PRODUTO.[Código da Mercadoria]) AS Código_Mercadoria,
                MIN(PRODUTO.Mercadoria) AS Nome_Mercadoria,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 1 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Janeiro,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 2 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Fevereiro,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 3 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Marco,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 4 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Abril,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 5 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Maio,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 6 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Junho,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 7 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Julho,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 8 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Agosto,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 9 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Setembro,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 10 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Outubro,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 11 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Novembro,
                SUM(CASE WHEN MONTH(VENDAS.[Data da Venda]) = 12 THEN ISNULL(Quantidade_Item, 0) ELSE 0 END) AS Dezembro,

                SUM(ISNULL(Quantidade_Item, 0)) AS Soma_Meses,
                ROUND(SUM(ISNULL(Quantidade_Item, 0)) / 9.0, 2) AS MEDIA,

                MIN(ESTOQUE.Estoque) AS ESTOQUE,

                MIN(PRODUTO.[Preço C]) AS PRECO_COMPRA_SEM_IMPOSTOS,
                    
                MIN(PRODUTO.[Ultima Entrada]) AS ULTIMA_ENTRADA,

                MIN(PRODUTO.[Cód Fabricante]) AS BARRAS,
                MIN(ESTOQUE.PrecoGrade) AS PRECOVENDA,
                MIN(PRODUTO.Fornecedor) AS FORNECEDOR,
                MIN(ESTOQUE.loja) AS LOJA,

            SUM(CASE 
                WHEN FORMAT(VENDAS.[Data da Venda], 'yyyyMM') = FORMAT(GETDATE(), '2025-05') 
                THEN ISNULL(Quantidade_Item, 0) 
                ELSE 0 
            END) AS ATUAL,

            MIN(ESTOQUE.EstoqueMinimo) AS ESTOQUE_MINIMO

            FROM 
                [Cadastro de mercadorias] AS PRODUTO
            LEFT JOIN memoria_VendasTodas AS VENDAS 
                ON PRODUTO.[Código da Mercadoria] = VENDAS.[Código da Mercadoria]
                AND VENDAS.[Data da Venda] >= '$datainicio'
                AND VENDAS.[Data da Venda] <= '$datafinal'
                
                AND VENDAS.LojaOrigem = '$loja'

                $fabricante

                AND VENDAS.Estornado = 0
                AND VENDAS.Cancelado = 0
            LEFT JOIN [Cadastro de mercadoriasLojas] AS ESTOQUE
                ON ESTOQUE.[Código da Mercadoria] = PRODUTO.[Código da Mercadoria]

                AND ESTOQUE.Loja = '$loja'

                WHERE

                $produtofabricante

				AND PRODUTO.desativado = 0
            GROUP BY
                PRODUTO.[Código da Mercadoria]
            ORDER BY
                MIN(PRODUTO.Mercadoria);
				");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

public function BuscarMeses($datainicial,$datafinal)
{

$data_inicial = new DateTime($datainicial);
$data_final = new DateTime($datafinal);

//Nomes dos meses em português (abreviados)
$meses_nome = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];

// Criando um array para armazenar os meses
$meses = [];

// Loop para percorrer os meses entre as duas datas
while ($data_inicial <= $data_final) {
    // Calcula o número do mês
    $mes_num = (int)$data_inicial->format('m');
    
    // Adiciona o mês abreviado em português ao array
    $meses[] = $meses_nome[$mes_num -1];
    
    // Avança para o próximo mês
    $data_inicial->modify('+ 1 month');
}
    return $meses;

}
      
    public function BuscarNomePeloCodigo($id)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT Mercadoria FROM [Cadastro de Mercadorias] WHERE [Código da Mercadoria] = '$id'");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }
       
    }
    
      
    public function BuscarEstoquePeloCodigo($id)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT MIN(loja) AS LOJA, SUM(Estoque) AS ESTOQUE FROM [Cadastro de mercadoriasLojas]
            WHERE Estoque > 0 AND [Código da Mercadoria] = '$id'
            GROUP BY Loja");//FIM DA QUERY
            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
       return $sqlserver;
       
    }

    public function destivarMercadoria($id)
    {
        $data = date('d/m/Y H:m:s');
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("UPDATE [Cadastro de Mercadorias] 
            SET desativado = '1', DataDesativacao = '$data'
            WHERE [Código da Mercadoria] = $id");//FIM DA QUERY

            //$sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
    
    }



//preco bruto por item
public function estoqueTotal($cod)
{

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("SELECT
          SUM(Estoque) AS ESTOQUE  
            FROM
            
            [Cadastro de mercadoriasLojas]
            
            WHERE [Código da Mercadoria] = '$cod'
             ");//FIM DA QUERY

      $sqlserver = $query->fetchAll();

            

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }
    foreach ($sqlserver AS $dados){
    return ROUND($dados[0]);
    }
}


    public function EstoquePorLoja($codigo)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            SELECT
            Loja, Estoque
            
            FROM
            
            [Cadastro de mercadoriasLojas]
            
            WHERE [Código da Mercadoria] = '$codigo'
            
            ORDER BY [Código da Mercadoria]");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


//buscar o estoque de uma mercadoria
    public function EstoqueProduto($cod,$loja)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
           SELECT [Código da Mercadoria] AS COD,
	    	Estoque,
    		Loja
            FROM [Cadastro de mercadoriasLojas]

            WHERE [Código da Mercadoria] = '$cod'
            AND Loja = '$loja'

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    public function BuscarFornecedor()
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT [CGC/CPF], Fornecedor FROM Fornecedores ORDER BY Fornecedor");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }





    public function BuscarFornecedorPeloCnpj($cnpj)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT Fornecedor,[Código do Fornecedor] FROM Fornecedores WHERE [CGC/CPF] = '$cnpj'");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }
       
    }

//VENDAS POR FABRICANTE DE UM PERIODO
function VendasFabricante($diainicio, $diafinal, $loja,$fabricante)
{
	if($fabricante <> 'TODOS')
	{
		$fabricante = "AND VENDAS.Fabricante = '$fabricante'";
		
	}else{
		
		
		$fabricante = "AND VENDAS.Fabricante IS NOT NULL";
	
	}
	
	
	if($loja == "TODOS")
		
	{
		
	$loja = "AND LojaOrigem IS NOT NULL";
	
	}else{
		
	
	$loja = "AND LojaOrigem = '$loja'";
	
	}
	
    $ordenacao = "SUM(VENDAS.Total_Item) DESC";
	
    try {
        $Conexao = Conexao::getConnection();
        $query = $Conexao->query("SELECT
		MIN(VENDAS.Fabricante) AS FABRICANTE,

		SUM(VENDAS.Quantidade_Item) AS QUANTIDADE,

		SUM(VENDAS.Total_Item) AS VALOR,

		SUM(VENDAS.PrecoBruto) AS BRUTO,

		ROUND(SUM(VENDAS.Total_SemDesconto_Item),2) - ROUND(SUM(VENDAS.Total_Item),2)  AS desconto

		FROM
		memoria_VendasTodas AS VENDAS

		WHERE
		[Data da Venda] >= '$diainicio'
		AND [Data da Venda] <= '$diafinal'

		AND cancelado = 0
		AND Estornado = 0

        


        




		$fabricante
		$loja
		GROUP BY 
		VENDAS.Fabricante
		ORDER BY 
		$ordenacao;");

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;

    }

    return $sqlserver;
}

    public function BuscaBruto($fabricante,$datainicio,$datafinal,$loja)
    {
		if($loja == "TODOS")
		{
			$loja = "VENDAS.LojaOrigem IS NOT NULL"	;
			
		}else{
			
			$loja = "VENDAS.LojaOrigem = '$loja'";
		
		}

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT       
	
                VENDAS.PrecoBruto,
				VENDAS.Quantidade_Item
            
                FROM
                memoria_VendasTodas AS VENDAS		
            
                WHERE            
                $loja
               
                AND VENDAS.Estornado = 0
                AND VENDAS.Cancelado = 0          
                AND VENDAS.[Data da Venda] >= '$datainicio'
                AND VENDAS.[Data da Venda] <= '$datafinal'
                AND VENDAS.Fabricante = '$fabricante'

				
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        return $sqlserver;
    }


    public function CalcularValorBruto($fabricante,$datainicio,$datafinal,$loja)
    {

        $valor = 0;

        $sqlserver = $this->BuscaBruto($fabricante,$datainicio,$datafinal,$loja);
		
        foreach ($sqlserver as $dados)
        {
			$valor1 = $dados[0] * $dados[1];
			$valor = $valor + $valor1;
    
        }

        return $valor;
    }

//preco bruto por item
    public function PrecoBrutoItem($loja,$datainicio,$datafinal,$coditem)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
			
				SELECT       	
                SUM(VENDAS.PrecoBruto * VENDAS.Quantidade_Item) AS BRUTO
				
				           
                FROM
                memoria_VendasTodas AS VENDAS
            
                WHERE            
				VENDAS.LojaOrigem = '$loja'
                AND VENDAS.Estornado = 0
                AND VENDAS.Cancelado = 0          
                AND VENDAS.[Data da Venda] >= '$datainicio'
                AND VENDAS.[Data da Venda] <= '$datafinal'
				AND VENDAS.[Código da Mercadoria] = '$coditem'
			
			
			");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


//preco bruto por item
public function NotasSemSalvar()
{

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query(" SELECT
[Data da Entrada],
[Nº Nota Fiscal],
Fornecedor,
LojaOrigem,
Lancamento_Usuario
FROM
[Cadastro das Entradas] WHERE Lacrar != 1

AND [Data da Entrada] > '01/01/2000'
AND [Data Emissão] IS NOT NULL
AND [Nº Nota Fiscal] IS NOT NULL     


        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}

//metodo para buscar os dados da nota fiscal para emissao de nota de devolucao
public function dadosNfe($quantidade,$loja,$ean = 0, $cod = 0)
{
    if($ean <> 0){
        $consulta = "[Cód Fabricante] = '$ean'";
    }else{
        $consulta = "[Código da Mercadoria] = '$cod'";
    }



    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query(
        "SELECT
        
        [Data Emissão],
        --[Cód Fabricante],
        Mercadoria,
        CFOP,
        Quantidade_Item,
        Preco_Item  AS UNITARIO,
        Total_Item,
        ICMS_Item AS ALICOTA,
        BaseICMSST_Item AS BASE_ST,
        vICMSST_Item AS VALOR_ST,
        [Nº Nota Fiscal],
        NFeCH,
        LojaOrigem,
        (BaseICMSST_Item / Quantidade_Item) AS BASES_ST_TUNITARIA,
        (vICMSST_Item / Quantidade_Item) AS VALOR_ST_UNITARIO,
        --VALORES A INFORMAR NA EMISSAO DA NOTA
        ((BaseICMSST_Item / Quantidade_Item) * $quantidade) AS BASE_ST_PROD_TOTAL_INFORMAR, --PASSAR A QUANTIDADE PARA CALCULAR A BASE A INFORMAR NA NOTA
        (vICMSST_Item / Quantidade_Item) * $quantidade AS VALOR_TOTAL_ST_INFORMAR, --PASSAR A QUANTIDADE PARA CALCULAR O VALOR A SER INFORMADO NA NOTA
        Fornecedor,
        [Código da Mercadoria],
        ((vICMS_Item  / Quantidade_Item) * $quantidade) AS ICMSITEM,
        BaseICMS_Item AS ICMSITEM,
        [Cód Fabricante],
        [CSTItem]
        FROM memoria_NF_Entrada
        WHERE
        $consulta
        AND LojaOrigem = '$loja'

        
/*
        AND CFOP != '1910'
        AND CFOP != '2910'
        AND CFOP != '1949'
*/


        ORDER BY [Data Emissão] DESC      
       
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}

//buscar dados para gerar etiquetas
public function BuscarEtiqueta($barra,$loja)
{

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query(" SELECT MERCADORIA.Observacao, LOJA.PrecoGrade,MERCADORIA.[Código da Mercadoria] AS  codigo

        FROM [Cadastro de Mercadorias] AS MERCADORIA
        JOIN [Cadastro de mercadoriasLojas] AS LOJA
        ON MERCADORIA.[Código da Mercadoria] = LOJA.[Código da Mercadoria]
        
        WHERE  [Cód Fabricante] = '$barra' AND LOJA.Loja = '$loja'        
        
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }
    
    return $sqlserver;
}


//classe que busca todas as sangrias 
public function BuscarSangrias($loja)
{

try{
    $Conexao = Conexao::getConnection();

    $query = $Conexao->query("SELECT 

                                    *
                                     
                                    FROM [Contas a pagar2] 
                                    
                                    WHERE [Data de Pagamento] >= '2025/01/08' 
                                    
                                    AND  [Histórico] NOT LIKE '%FECHAMENTO%' 
                                    AND  [Histórico] NOT LIKE '%TROCA/DEVOLUÇÃO%' 
                
                                    AND LojaOrigem = '$loja' 
                                    AND [Valor Pago2] > 0  
                                    AND [ChaveaPagar] = 0;
;");

	return $retorno = $query->fetchAll();

}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}




public function buscarCompra($datainicio,$datafinal)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("SELECT

        MIN(COTACAO.ID) AS ID_SOFT_PEDIDO,
        MIN(COTACAO.DataEmissao) AS EMISSAO,
        MIN(COTACAO.Fabricante) AS FABRICANTE,
        MIN(MERCADORIAS.Fornecedor) AS FORNECEDOR,
        MIN(COTACAO.LojaOrigem) AS LOJA,
        MIN(COTACAO.Observacao) AS OBSERVACAO

        FROM
        GestaoCompras_Cotacao AS COTACAO
        
        LEFT JOIN [Cadastro de Mercadorias] AS MERCADORIAS
        ON COTACAO.Fabricante = MERCADORIAS.Fabricante

        JOIN GestaoCompras_CotacaoMercadorias AS COTACAOVALOR
        ON COTACAO.ID = COTACAOVALOR.IDCotacao

        WHERE
        
        (COTACAO.Observacao IS NULL OR COTACAO.Observacao NOT LIKE '%#~%')
        
        AND DataEmissao BETWEEN  '$datainicio' AND '$datafinal'

        GROUP BY COTACAO.ID"

        );//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}


//preco bruto por item
public function PrecoPedido($idpedidos)
{

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("SELECT

        MERCADORIAS.Quantidade * VALOR.[Preço C] AS VALOR, fornecedor
        FROM
        GestaoCompras_CotacaoMercadorias AS MERCADORIAS
        JOIN [Cadastro de Mercadorias] AS VALOR
        ON MERCADORIAS.IDMercadoria = VALOR.[Código da Mercadoria]

        WHERE IDCotacao = '$idpedidos'

        ");//FIM DA QUERY

      $sqlserver = $query->fetchAll();

            

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}


    //buscar produtos negativos
    public function produtosNegativos($loja)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT COUNT(Estoque) AS ESTOQUE FROM
            [Cadastro de mercadoriasLojas] WHERE Estoque < 0 AND Loja = '$loja'");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }

    }


    //buscar o registro referente a um numero d nota
    public function BuscarRegistroDeUmaNota($loja,$numeroNota,$codigoMercadoria,$NFE)
    {


        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT Registro
            FROM NotaFiscal_Cabecalho AS CABECALHO
            --DEVE INFORMAR O NUMERO DA NOTA E A LOJA
            WHERE CABECALHO.NumeroNFe = '$numeroNota' AND CABECALHO.LojaOrigem = '$loja'
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            $registroNFE =  $dados[0];
        }
        $chave = $NFE->chave;

        $this->atualizarDadosNfe($registroNFE,$codigoMercadoria,$NFE);
        $referencia = $this->verificarSeExisteReferenciaNFE($registroNFE,$chave);


        if (empty($referencia)){
            //inserir notas vinculadas
            $this->inserirObsevacao($registroNFE,$chave);
        }

    }

    //atualizar dados na nota
    public function atualizarDadosNfe($registro,$codigoMercadoria,$NFE)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("UPDATE
            NotaFiscal_Itens SET
            Mercadoria_Base = $NFE->icmstotal,
            Mercadoria_ICMS = $NFE->Mercadoria_ICMS,
            Mercadoria_VlrICMS = $NFE->Mercadoria_VlrICMS,
            Mercadoria_VlrBASEST = $NFE->Mercadoria_VlrBASEST,
            Mercadoria_VlrICMSST = $NFE->Mercadoria_VlrICMSST,
            ValoresImpostoManual = $NFE->ValoresImpostoManual,
            Mercadoria_Descricao = '$NFE->Mercadoria_Descricao',
            Mercadoria_Preco = $NFE->mercadoria_Preco,
            NFeCST = '$NFE->codCst',
            DetalhesImpostoManual = 1,
            NFeCFOP = $NFE->cfop
            WHERE Registro = $registro  AND Mercadoria_Codigo =   $codigoMercadoria 
            ");

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

    }
  
    //buscar produtos negativos
    public function verificarSeExisteReferenciaNFE($registro,$chave)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT 
            * FROM NotaFiscal_Referenciadas 
            WHERE RegistroNFe = '$registro' 
            AND ChaveNFe = '$chave';");

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }

    }

     //atualizar dados na nota
     public function inserirObsevacao($registro,$chave)
     {
         try {
             $Conexao = Conexao::getConnection();
             //QUERY DA SQL
             $query = $Conexao->query("INSERT INTO
                NotaFiscal_Referenciadas (RegistroNFe,ChaveNFe)
                VALUES ('$registro','$chave');
             ");//FIM DA QUERY
 
             //$sqlserver = $query->fetchAll();
 
         } catch (Exception $e) {
 
             echo $e->getMessage();
             exit;
         }
     
     }






     //retorna as vendas agrupadas por grupo
    public function vendasPorGrupo($loja,$datainicial,$datafinal)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
                $query = $Conexao->query("WITH TotalVendas AS (
                SELECT SUM(Total_Item) AS Total
                FROM memoria_VendasTodas
                WHERE [Data da Venda] BETWEEN '$datainicial' AND '$datafinal' AND LojaOrigem = '$loja'
                AND Estornado = 0 
                AND Cancelado = 0
            )
            SELECT 
                MIN(Grupo) AS GRUPO, 
                SUM(Total_Item) AS VENDAS,
                SUM(Total_Item) / (SELECT Total FROM TotalVendas) * 100  AS Percentual
            FROM memoria_VendasTodas
            WHERE [Data da Venda] BETWEEN '$datainicial' AND '$datafinal' AND LojaOrigem = '$loja'
            AND Estornado = 0 
            AND Cancelado = 0
            GROUP BY Grupo
            UNION ALL
            SELECT 
                'TOTAL' AS GRUPO, 
                SUM(Total_Item) AS VENDAS,
                1 AS Percentual
            FROM memoria_VendasTodas
            WHERE [Data da Venda] BETWEEN '$datainicial' AND '$datafinal' AND LojaOrigem = '$loja'
            AND Estornado = 0 
            AND Cancelado = 0
            ORDER BY VENDAS DESC;
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


    public function listarNegativos($loja)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT
            MERCADORIAS.[Código da Mercadoria], MERCADORIAS.Mercadoria, LOJA.Estoque, MERCADORIAS.[Cód Fabricante]

            FROM [Cadastro de mercadoriasLojas] AS LOJA
            LEFT JOIN [Cadastro de Mercadorias] AS MERCADORIAS
            ON LOJA.[Código da Mercadoria] = MERCADORIAS.[Código da Mercadoria]

            WHERE LOJA.Estoque < 0 AND LOJA.Loja = '$loja'");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    public function buscarAniversariantes($diaAtual)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT Datanasc, Nome FROM [Cadastro de Vendedores] WHERE Datanasc IS NOT NULL ORDER BY Datanasc DESC");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    public function CongelarEstoque($cod,$tipo)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("UPDATE [Cadastro de mercadorias]
            SET NaoControlarEstoque = $tipo
            WHERE [Código da Mercadoria] = $cod ");//FIM DA QUERY

           // $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
    }



    // buscar um produto desativado
    public function buscarProdutoEan($cod)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT Desativado FROM [Cadastro de Mercadorias] WHERE [Código da Mercadoria] = '$cod' ");

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        foreach ($sqlserver as $dados){
            return $dados[0];
        }

    
    }

    // ativar um produto
    public function ativarUmProduto($cod)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("UPDATE [Cadastro de mercadorias]
                SET Desativado = 0
                WHERE [Código da Mercadoria] = '$cod' ");

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;        
    }

}




    // buscar um produto desativado
    public function buscarProdutoEanAvarias($cod)
    {

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT [Cód Fabricante],Mercadoria, [Preço C], [Preço Compra], Fabricante
            FROM [Cadastro de Mercadorias] WHERE [Cód Fabricante] = '$cod'
            
            ");

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;    
    }

    public function buscarAjusteEstoque()
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT

            AJUSTE.Cancelado,
            AJUSTE.[Código da Compra],
            AJUSTE.LojaOrigem,
            AJUSTE.TipoOperação,
            AJUSTE_MERCADORIAS.[Código da Mercadoria],
            AJUSTE_MERCADORIAS.Produto_Referencia,
            AJUSTE_MERCADORIAS.Produto,
            AJUSTE_MERCADORIAS.Quantidade,
            CADASTRO_MERCADORIAS.[Preço Compra],
            CADASTRO_MERCADORIAS.[Preço Compra] * AJUSTE_MERCADORIAS.Quantidade AS PRECO_TOTAL,
            CADASTRO_MERCADORIAS.Fabricante,
            AJUSTE_MERCADORIAS.sequencia

        FROM Inventário AS AJUSTE
        JOIN [sub inventário] AS AJUSTE_MERCADORIAS
            ON AJUSTE.[Código da Compra] = AJUSTE_MERCADORIAS.[Código da Compra]

        JOIN [Cadastro de Mercadorias] AS CADASTRO_MERCADORIAS
            ON CADASTRO_MERCADORIAS.[Código da Mercadoria] = AJUSTE_MERCADORIAS.[Código da Mercadoria]

        WHERE 
            AJUSTE.[Data Emissão] >= '17/10/2024'
            AND AJUSTE.Cancelado = 0
            AND (AJUSTE.TipoOperação LIKE '%AVARIA%' OR AJUSTE.TipoOperação LIKE '%VENCIDO%')

        ORDER BY sequencia
            
            ");//FIM DA QUERY
            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
       return $sqlserver;
       
    }


/*

SELECT [Cód Fabricante],Mercadoria, [Preço C], [Preço Compra], Fabricante
FROM [Cadastro de Mercadorias] WHERE [Cód Fabricante] = '2013'

*/

    public function VerificarSeTemCadastro($ean)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("SELECT [Código da Mercadoria] FROM [Cadastro de Mercadorias] WHERE [Cód Fabricante] = '$ean'


            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }
       
    }
    

    public function verificarSeExisteNotasImportadasFabricante($dataPedido,$loja,$fabricante)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            SELECT

            MIN([Data da Entrada]),
            MIN(CFOP),
            MIN([Nº Nota Fiscal]),
            MIN(NFeCH),
            MIN(Fornecedor)

            FROM
            memoria_NF_Entrada AS ENTRADA

            WHERE

              ENTRADA.[Data Emissão] >= '$dataPedido'
            AND ENTRADA.Fabricante = '$fabricante'
            AND ENTRADA.LojaOrigem = '$loja'

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

         foreach ($sqlserver as $dados){
            return $dados[1];
        }
    }





    public function verificarSeExisteNotasImportadasFabricanteListar($dataPedido,$loja,$fabricante)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            SELECT

            MIN([Data da Entrada]),
            MIN(CFOP),
            MIN([Nº Nota Fiscal]),
            MIN(NFeCH),
            MIN(Fornecedor)

            FROM
            memoria_NF_Entrada AS ENTRADA

            WHERE

            ENTRADA.[Data da Entrada] >= '$dataPedido'
            AND ENTRADA.Fabricante = '$fabricante'
            AND ENTRADA.LojaOrigem = '$loja'


            GROUP BY
            ENTRADA.[Nº Nota Fiscal],
            ENTRADA.NFeCH, ENTRADA.CFOP,
            ENTRADA.[Data Emissão],
            ENTRADA.Fornecedor

            

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }



    public function listarProdutosImportadadosNota($chave)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            SELECT 

                [Código da Mercadoria], Mercadoria, Quantidade_Item
                FROM memoria_NF_Entrada
                WHERE NFeCH = '$chave'
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    public function statusLoja($lojaCaixa,$data)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("           
            SELECT COUNT(Registro) FROM
            Caixa_FuncoesRegistros
            WHERE
            Datas = '$data'
            AND LojaOrigem = '$lojaCaixa'
            AND Fechado = 0
            AND UsuarioAbertura NOT LIKE '%SOFTCOM%'

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        
         foreach ($sqlserver as $dados){
            return $dados[0];
        }
        

        
    }

    public function NotaFiscalSemBoleto()
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            SELECT

            MIN(COMPRA.LojaOrigem) AS LOJA,
            MIN(COMPRA.Fornecedor) AS FORNECEDOR,
            MIN(COMPRA.[Nº Nota Fiscal]) AS NFNUMERO,
            MIN(COMPRA.CFOP) AS CFOP,
            MIN(BOLETOS.Valor2)AS BOLETO,
            MIN(COMPRA.[Data da Entrada]) AS DATA_ENTRADA

            FROM

            [memoria_NF_Entrada] AS COMPRA
            LEFT JOIN [contas a pagar] AS CONTA
            ON COMPRA.[Código da Compra] = CONTA.[Código da Compra]

            LEFT JOIN ContasaPagarVencimentos AS BOLETOS
            ON CONTA.Registro = BOLETOS.Registro

            WHERE [Data da Entrada] >= '01/12/2024' AND BOLETOS.Valor2 IS NULL

            -- CFOPS QUE NAO DEVEM SER VERIFICADOS COMO PRECISA DE BOLETOS
            AND COMPRA.CFOP != '1910'
            AND COMPRA.CFOP != '2910'
            AND COMPRA.CFOP != '1152'
            AND COMPRA.CFOP != '1411'
            AND COMPRA.[Nº Nota Fiscal] != '1606'
            AND COMPRA.[Nº Nota Fiscal] != '2095'
            AND COMPRA.[Nº Nota Fiscal] != '206'
            AND COMPRA.[Nº Nota Fiscal] != '240'
            AND COMPRA.[Nº Nota Fiscal] != '1555'

            GROUP BY COMPRA.[Código da Compra]

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }
    public function vendasCartaoPeriodoSoftcom($dataInicio,$dataFinal,$lojaBuscar, $tipoConsultaCartao)
    {
    
    if($tipoConsultaCartao == 'venda'){

        $tipoConsultaCartao = "RECEBER.[Data da Venda] BETWEEN '$dataInicio' AND '$dataFinal'";
        
    }else{
        $tipoConsultaCartao = "RECEBER.[Vencimento] BETWEEN '$dataInicio' AND '$dataFinal'";
        }
        
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            SELECT

            RECEBER.[Data da Venda] AS DATAVENDA,
            RECEBER.LojaOrigem AS LOJA,
            RECEBER.Vencimento AS DATAVENCIMENTO,
            RECEBER.NSU,
            RECEBER.QtdParcelas AS [QUANTIDADE DE PARCELAS],
            RECEBER.Parcela,
            RECEBER.[Valor da Parcela],
            RECEBER.Bandeira,
            RECEBER.Cartão,
            RECEBER.tpCred,
            RECEBER.Registro,
            RECEBER.ValorOriginalCartao,
            RECEBER.ValorOriginalCartao - RECEBER.[Valor da Parcela] AS taxa,
            RECEBER.Lacrar

            FROM [contas a receber] AS RECEBER

            WHERE

            -- RECEBER.[Data da Venda] BETWEEN '$dataInicio' AND '$dataFinal'
            $tipoConsultaCartao

            AND RECEBER.Pagto = 'Cartão' AND Excluido = 0
            AND RECEBER.LojaOrigem = '$lojaBuscar'
            AND RECEBER.DataPag IS NULL
      
            
             -- AND RECEBER.Registro = '1267061'

            ORDER BY RECEBER.Registro
           ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

//alterar a data de vencimento de um cartao
public static function atualizarVencimentoCartao($vencimento,$registro)
{

try{
        //comando update pdo
        $connection = Conexao::getConnection();
        $sql = "UPDATE [contas a receber] SET Vencimento = '$vencimento' WHERE Registro = $registro";
        //execulta
        $connection->query($sql);
                
}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}


//BAIXAR ANTECIPACAO
public static function baixarAntecipacao($pagamento,$valorParcela,$conta,$nsu,$parcela,$dataVenda,$loja,$usuario_baixa, $tipoBaixa = 'antecipacao')
{
    $horaBaixa = date('Y-d-m H:i:s');

    if ($tipoBaixa == 'antecipacao'){

    $tipoBaixa = "Observação = 'baixado via remoto por antecipação'";
    
    }else{
    
    $tipoBaixa = "Observação = 'baixado via remoto'";
    
    }

try{
        //comando update pdo
        $connection = Conexao::getConnection();
        $sql = "    
        
        UPDATE [contas a receber]

        SET

        DataPag = '$pagamento',
        Lacrar = 1,
        [Valor Pago] = $valorParcela,
        Conta = '$conta',
        $tipoBaixa,
        Baixa_Usuario = '$usuario_baixa',
        Baixa_DataHora = '$horaBaixa'
        WHERE
        NSU = '$nsu' AND  NumeroParcela = $parcela AND [Data da venda] = '$dataVenda' AND LojaOrigem = '$loja' AND DataPag IS NULL
        ";
        //execulta
        $connection->query($sql);
                
}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}

public function buscarRecebimentoPorRest($dataVenda, $parcela, $nsu)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        
        SELECT Vencimento FROM [contas a receber] WHERE [Data da Venda] = '$dataVenda' AND NumeroParcela = $parcela AND NSU = '$nsu'

        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[0];
    }
    
    

    
}

public function contasPagarRelatorio($dataInicio, $dataFinal,$lojaConsulaEvolucaoPagar,$tipoConsulta, $ordenar)
{
    if($lojaConsulaEvolucaoPagar <> 'TODAS')
    {

        $loja = "AND CONTAS.LojaOrigem = '$lojaConsulaEvolucaoPagar' GROUP BY BOLETOS.Vencimento, CONTAS.LojaOrigem ";

    }else{

        $loja = " GROUP BY BOLETOS.Vencimento ";
    }


    if($tipoConsulta == 'pagas'){

        $tipo = "AND Lacrar = 1";
    }

    if($tipoConsulta == 'abertas'){

        $tipo = "AND Lacrar = 0";
    }

    if($tipoConsulta == 'todas'){

        $tipo = "";
    }


    if ($ordenar == 'data') {

        $ordenarcao = "BOLETOS.Vencimento";

    } elseif ($ordenar == 'valor')
    {
        $ordenarcao = "SUM(BOLETOS.Valor2) DESC";
    }


    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

        SELECT 

        MIN(CONTAS.LojaOrigem) AS LOJAS,
        MIN(BOLETOS.Vencimento) AS VENCIMENTOS,
        SUM(BOLETOS.Valor2) AS VALOR

        FROM
        [contas a pagar] AS CONTAS
        JOIN ContasaPagarVencimentos AS BOLETOS
        ON CONTAS.Registro = BOLETOS.Registro

        WHERE Vencimento BETWEEN '$dataInicio' AND '$dataFinal'

        AND Excluido = 0

        $tipo

        $loja

        ORDER BY $ordenarcao

       ");//FIM
        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}

    public function produtosPedido($idPedido)
    {


        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("    
        
        SELECT
        
        COTACAO.IDMercadoria,
        COTACAO.Produto_Referencia,
        COTACAO.Produto,
        COTACAO.Quantidade,
        LOJA.[Preço C],
        LOJA.[Preço C] * COTACAO.Quantidade
        
        FROM 
        
        GestaoCompras_CotacaoMercadorias AS COTACAO
        JOIN [Cadastro de Mercadorias] AS LOJA
        ON COTACAO.IDMercadoria = LOJA.[Código da Mercadoria]
        
        WHERE IDCotacao = $idPedido
                    
            ");//FIM
            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;


    }

public function ultimaVenda($loja)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        
        SELECT MAX(Horas)
        FROM memoria_VendasTodas
        WHERE LojaOrigem = '$loja'
        AND [Data da Venda] = CAST(GETDATE() AS DATE)
        AND Cancelado = 0
        AND Estornado = 0

        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[0];
    }
    
    
}

    public function atualizarObservacaoPedido($codPedido)
    {
        $data = date('d/m/Y H:m:s');
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            
            UPDATE  GestaoCompras_Cotacao SET Observacao = '#~' WHERE ID = '$codPedido';
            
            ");//FIM DA QUERY

            //$sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
    
    }


    
    public function atualizarObservacaoPedidoExcluido($codPedido)
    {
        $data = date('d/m/Y H:m:s');
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
            
            UPDATE  GestaoCompras_Cotacao SET Observacao = null WHERE ID = '$codPedido';
            
            ");//FIM DA QUERY

            //$sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
    
    }

//sistema de pedidos no remoto
function gravarPedidoSoftcom(
    $dataEmissao,
    $dataLimite,
    $loja,
    $observacao,
    $usuario,
    $dataHoraAtual,
    $fornecedor,
    $fabricante
) {
    try {
        $Conexao = Conexao::getConnection();

        // Usa prepared statement para segurança
        $stmt = $Conexao->prepare("
            INSERT INTO GestaoCompras_Cotacao (
                DataEmissao,
                DataLimite,
                LojaOrigem,
                Observacao,
                PrazoEntregaMedio,
                Periodicidade,
                DiasEstoqueSeguranca,
                Lancamento_Usuario,
                Lancamento_DataHora,
                Fornecedor,
                Fabricante,
                Grupo,
                Status,
                DataPeriodoVendasInicial,
                DataPeriodoVendasFinal,
                PeriododeVenda,
                Classificacao
            )
            VALUES (
                ?, ?, ?, ?, NULL, NULL, 30, ?, ?, ?, ?, '', 'Andamento', ?, ?, NULL, 1
            )
        ");

        $stmt->execute([
            $dataEmissao,
            $dataLimite,
            $loja,
            $observacao,
            $usuario,
            $dataHoraAtual,
            $fornecedor,
            $fabricante,
            $dataLimite,
            $dataLimite
        ]);

    } catch (Exception $e) {
        echo $e->getMessage();
        exit;
    }
}

public function ultimoIdUsuarioCompras($usuario,$dataAtual)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        SELECT max(ID) FROM GestaoCompras_Cotacao WHERE Lancamento_Usuario = '$usuario' AND Lancamento_DataHora = '$dataAtual'        
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[0];
    }
}
    

//cadastrar pedidos mercadorias
public function CadastrarProdutosPedidos($produtos,$idpedido){

foreach ($produtos as $key => $produto)
{
    if ($produto > 0){

        $dados = $this->buscarDadosGravarPedidos($key);

        foreach ($dados as $dados){
        
        $this->cadastrarMercadoriasPedido($idpedido,$key,$produto,$dados[0], $dados[1]);

        }
    }
}

}

public function cadastrarMercadoriasPedido($idCotacao,$codigoMercadoria,$quantidade,$mercadoria,$codigoEan)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

        INSERT INTO GestaoCompras_CotacaoMercadorias
        (
        IDCotacao,
        IDMercadoria,
        Quantidade,
        Produto,
        Produto_Referencia
        )
        VALUES
        (
        '$idCotacao',
        '$codigoMercadoria',
        '$quantidade',
        '$mercadoria',
        '$codigoEan'
        )");//FIM DA QUERY


    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }   
}

public function buscarDadosGravarPedidos($idMercadoria)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        
        SELECT
            Mercadoria,
            [Cód Fabricante]

        FROM [Cadastro de Mercadorias]

        WHERE 

        [Código da Mercadoria] = '$idMercadoria'

        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}

public function ultimaEntradaDeUmProduto($codigo, $retornarDados,$loja)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("        
        SELECT 

            [Data da Entrada],
            SUM([Quantidade_Item]) AS TotalItensUltimaEntrada,
            [Nº Nota Fiscal]

        FROM 
            memoria_NF_Entrada
        WHERE 
            [Código da Mercadoria] = '$codigo'
            AND LojaOrigem = '$loja'
            AND [Data da Entrada] = (
                SELECT MAX([Data da Entrada])
                FROM memoria_NF_Entrada
                WHERE 
                    [Código da Mercadoria] = '$codigo'
                    AND LojaOrigem = '$loja'
            )
        GROUP BY 
            [Nº Nota Fiscal],
            [Data da Entrada];
            
            ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
        
        if ($retornarDados == 0){
        return $dados[0];
        }else{
        return $dados[1];
        }
    }
}
  


public function observacaoPedidos($codigo)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        
       SELECT Observacao FROM GestaoCompras_Cotacao WHERE ID = $codigo;
               
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[0];
    }
}
  

public function fornecedorDaUltimaCompra($fabricante,$loja)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

            SELECT MAX(Fornecedor)
            FROM memoria_NF_Entrada 
            WHERE Fabricante = '$fabricante' AND LojaOrigem = '$loja'
            ORDER BY MAX([Código da Compra]) DESC
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[0];
    }
}
  


public function buscarVendasDoMesAtual($loja, $fabricante,$tipoConsulta)
{

    if ($tipoConsulta == 'fabricante'){

        $consultarPeloTipo = "AND VENDAS.Fabricante = '$fabricante'";

    }else if($tipoConsulta == 'fornecedor'){
       
        $consultarPeloTipo =  "AND VENDAS.Fornecedor = '$fabricante'";
    }

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

        SELECT

        MIN(VENDAS.[Código da Mercadoria]) AS MERCADORIA,
        SUM(VENDAS.Quantidade_Item) AS QUANTIDADE

        FROM

        memoria_VendasTodas AS VENDAS

        WHERE

        MONTH(VENDAS.[Data da Venda]) = MONTH(GETDATE()) AND YEAR(VENDAS.[Data da Venda]) = YEAR(GETDATE())
        
        $consultarPeloTipo
        
        AND VENDAS.LojaOrigem = '$loja'

        GROUP BY VENDAS.[Código da Mercadoria]

        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
}





public function dadosPedidoParaEmail($idPedido)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("
        SELECT 

        LOJAS.Fantasia,
        LOJAS.CGC,
        COTACAO.Lancamento_Usuario,
        COTACAO.Fabricante,
        LOJAS.Razao

        FROM
        GestaoCompras_Cotacao AS COTACAO
        JOIN Integrar_Lojas AS LOJAS
        ON COTACAO.LojaOrigem = LOJAS.Loja

        WHERE COTACAO.ID = $idPedido
        
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

return $sqlserver;
}

public function encontrarEmailFornecedor($fabricante,$indice)
{
    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

        SELECT
        Fornecedor AS FORNECEDOR,
        Observações AS OBSERVACAO,
        [E-mail] AS EMAIL,
        Representante AS REPRESENTANTE

        FROM Fornecedores

        WHERE Observações LIKE '%$fabricante%'
        
        ");//FIM DA QUERY

        $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    foreach ($sqlserver as $dados){
                
        return $dados[$indice];
    }
}

public function bonificacaoComBoleto()
{
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            DECLARE @dataCorte date = '01/06/2025';

            SELECT
            MIN(CONTAS.LojaOrigem) AS LOJA,
            MIN(FORMAT(VENCIMENTOS.Vencimento,'dd/MM/yyyy')) AS VENCIMENTO,
            SUM(VENCIMENTOS.Valor2) AS VALOR,
            MIN(ENTRADAS.CFOP) AS CFOP,
            MIN(ENTRADAS.[Nº Nota Fiscal]) AS NUMERO_NOTA,
            MIN(ENTRADAS.Lancamento_Usuario) AS USUARIO,
            MIN(FORMAT(ENTRADAS.Lancamento_DataHora,'dd/MM/yyyy H:mm:ss')) AS DATA_LANCADO
            
            FROM
            [contas a pagar] AS CONTAS
            JOIN ContasaPagarVencimentos AS VENCIMENTOS
            ON CONTAS.Registro = VENCIMENTOS.Registro
            JOIN [Cadastro das Entradas] ENTRADAS
            ON CONTAS.[Código da Compra] = ENTRADAS.[Código da Compra]

            WHERE
            (ENTRADAS.CFOP = 1910 
            AND VENCIMENTOS.Vencimento >= @dataCorte
            AND VENCIMENTOS.Excluido = 0
            AND VENCIMENTOS.Obs2 IS NULL      
            )

            OR

            (ENTRADAS.CFOP = 2910 
            AND VENCIMENTOS.Vencimento >= @dataCorte
            AND VENCIMENTOS.Excluido = 0
            AND VENCIMENTOS.Obs2 IS NULL
            )

            GROUP BY CONTAS.LojaOrigem

            ORDER BY MIN(VENCIMENTOS.Vencimento) DESC
        ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


    
public function analiseDePrecos($chave)
{
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            SELECT

                    MERCADORIAS.[Código da Mercadoria] AS COD,
                    MERCADORIAS.Mercadoria AS MERCADORIA,
                    PRECOSLOJAS.PrecoGrade AS VENDA,
                    MERCADORIAS.[Preço de Venda Sugerido] AS SUGERIDO,
                    (MERCADORIAS.[Preço de Venda Sugerido] - PRECOSLOJAS.PrecoGrade) AS DIFERENCA,
                    MERCADORIAS.[Preço Compra] AS COMPRA

                    FROM [Compras Efetuadas] AS ENTRADAS
                    JOIN [Cadastro de Mercadorias] AS MERCADORIAS
                    ON ENTRADAS.[Código da Mercadoria] = MERCADORIAS.[Código da Mercadoria]

                    JOIN [Cadastro das Entradas] AS COMPRA
                    ON COMPRA.[Código da Compra] = ENTRADAS.[Código da Compra]

                    JOIN [Cadastro de mercadoriasLojas] AS PRECOSLOJAS
                    ON PRECOSLOJAS.[Código da Mercadoria] = MERCADORIAS.[Código da Mercadoria]


                    WHERE

                    COMPRA.NFeCH = '$chave'

                    AND PRECOSLOJAS.Loja = COMPRA.LojaOrigem


                    ORDER BY MERCADORIA



        ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }



    public function BuscarNotasSalvasSoftcomParaFinalizarEntrada($chave)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("           
                                
                    SELECT LojaOrigem

                    FROM [Cadastro das Entradas]

                    WHERE

                    NFeCH = '$chave'
                    AND Lacrar IS NOT NULL;            
            
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }
       
    }

    public function boletosNota($chave)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("

            SELECT 

            --ENTRADA.Fornecedor,
            BOLETOS.Vencimento,
            BOLETOS.Valor2,
            BOLETOS.Lacrar,
            BOLETOS.Obs2,
			BOLETOS.DuplicataPendenteCP

            FROM

            [Cadastro das Entradas] AS ENTRADA
            JOIN [contas a pagar] AS CONTAS
            ON ENTRADA.[Código da Compra] = CONTAS.[Código da Compra]
            JOIN ContasaPagarVencimentos BOLETOS
            ON BOLETOS.Registro = CONTAS.Registro

            WHERE ENTRADA.NFeCH = '$chave'

            ORDER BY BOLETOS.Valor2 DESC

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    public function dadosNotaEntrada($chave)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("  
            
                    
            SELECT 

            [Nº Nota Fiscal], [Data Emissão], [Data da Entrada], [Valor Nota], Desconto, CFOP, LojaOrigem

            FROM [Cadastro das Entradas] WHERE NFeCH = '$chave'

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }

    //metodo que verifica os erros dos produtos
    public function verificarErroProduto(){
        
        //bloco de teste
        try{

        //acessando a conexao atraves de um metodo estatico da classe pdo
        $Conexao = Conexao::getConnection();
        //adicionando a query a uma variavel
        $query = $Conexao->query("

            SELECT 

            [Código da Mercadoria], Mercadoria, DataCadastro, [Preço de Venda], Fabricante

            FROM [Cadastro de Mercadorias]

            WHERE 
            
            ([Preço de Venda] = 0.00 AND Desativado = 0 AND DataCadastro > '01/06/2025' AND Desativado = 0) 
            OR
            (Fabricante = 'SELECIONE'  AND Desativado = 0 AND DataCadastro > '01/06/2025') 

            ORDER BY[Preço de Venda] DESC

        ");//fim da query
        
        //acessando o metodo fettchAll()
        $sqlserver = $query->fetchAll();
    
    //se algo deu errado invocar o catch
    } catch (Exception $e){
            //escreve o erro
            echo $e->getMessage();
            //para o script
            exit;
        }
    
        return $sqlserver;
    }

    
    public function contarTags($loja, $dataInicio, $dataFinal)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("  
                                
            SELECT
                RIGHT('00' + 
                    -- Extrai os dígitos após o # até encontrar um caractere não numérico
                    LEFT(
                        SUBSTRING(Mensagem, CHARINDEX('#', Mensagem) + 1, 5),
                        PATINDEX('%[^0-9]%', SUBSTRING(Mensagem, CHARINDEX('#', Mensagem) + 1, 5) + 'X') - 1
                    ), 2) AS Codigo,
                COUNT(*) AS Total
            FROM [Cadastro de Vendas]
            WHERE
                Mensagem LIKE '%#%'
                AND [Data da Venda] BETWEEN '11/07/2025' AND '15/07/2026' AND LojaOrigem = '$loja'
            GROUP BY
                RIGHT('00' + 
                    LEFT(
                        SUBSTRING(Mensagem, CHARINDEX('#', Mensagem) + 1, 5),
                        PATINDEX('%[^0-9]%', SUBSTRING(Mensagem, CHARINDEX('#', Mensagem) + 1, 5) + 'X') - 1
                    ), 2)
            ORDER BY Codigo;

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


//atualizar dados na nota
     public function inserirProdutosAjuste($ajusteNumero,$cod,$quantidade, $preco,$ean,$descricao)
     {
         try {
             $Conexao = Conexao::getConnection();
             //QUERY DA SQL
             $query = $Conexao->query(" INSERT INTO [sub inventário]  ([Código da Compra],
             [Código da Mercadoria],Quantidade, Preço,Produto_Referencia,Produto)
             
             VALUES ($ajusteNumero,$cod,$quantidade,$preco,$ean,'$descricao')
             
             ");//FIM DA QUERY
 
             //$sqlserver = $query->fetchAll();
 
         } catch (Exception $e) {
 
             echo $e->getMessage();
             exit;
         }
     
     }



    public function vendasProPagamento($loja, $dataInicio, $dataFinal)
    {
        if ($loja == 'TODAS'){
                    $lojaOrigem = "AND VENDAS.LojaOrigem IS NOT NULL";
        }else{

                    $lojaOrigem =  "AND VENDAS.LojaOrigem = '$loja'";
        }

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
        SELECT
            MIN(VENDAS.LojaOrigem) AS LOJA,
            MIN(PAGAMENTO.Banco) AS PAGAMENTO,
            MIN(PAGAMENTO.Pagto) AS FORMA,
            SUM(PAGAMENTO.[Valor da Parcela]) AS VALOR

        FROM Bloquetes AS PAGAMENTO
        JOIN [Cadastro de Vendas] AS VENDAS
        ON VENDAS.[Código da Venda] = PAGAMENTO.[Código da Venda]

        WHERE

        [Data da Venda] BETWEEN '$dataInicio' AND '$dataFinal'

        AND VENDAS.Cancelado =  0 AND VENDAS.Estornado = 0
        $lojaOrigem

        GROUP BY PAGAMENTO.Banco, PAGAMENTO.Pagto

        ORDER BY PAGAMENTO.Pagto");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }



    
public function alterarPedido($quantidade,$idcotacao,$codMercadoria)
{

try{
		//comando update pdo
		$connection = Conexao::getConnection();
		$sql = "
            UPDATE GestaoCompras_CotacaoMercadorias  
            SET Quantidade = $quantidade

            WHERE

            IDCotacao = $idcotacao
            AND IDMercadoria = $codMercadoria
 ";
		//execulta
		$connection->query($sql);
				
}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}

public function alterarObservacaoPedido($idCotacao, $observacao){

    try {
        $connection = Conexao::getConnection();
        $query = "UPDATE GestaoCompras_Cotacao SET Observacao = '$observacao' WHERE ID = $idCotacao";
        $connection->query($query);
    
    }catch(Exception $e){

        echo $e->getMessage();
    }

    }





public function buscarProdutosCotacao($cotacao)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("
                SELECT 

                IDMercadoria,
                Produto_Referencia,
                Produto,Quantidade

                FROM

                GestaoCompras_CotacaoMercadorias

                WHERE

                IDCotacao = $cotacao

            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }

        return $sqlserver;
    }


  public function BuscarCodigoDaMercadoriaPelaBarra($barra)
    {
        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("           
                                
            SELECT 

            [Código da Mercadoria]

            FROM [Cadastro de Mercadorias] WHERE [Cód Fabricante] = '$barra' AND Desativado = 0;          
            
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
        foreach ($sqlserver as $dados){
            return $dados[0];
        }
       
    }

public function inserirBalanco($dataEntrada, $obs, $lojaOrigem, $coletor, $usuario)
{
    try {
        $connection = Conexao::getConnection();

        $sql = "
            INSERT INTO Balanço ([Data da Entrada], Obs, LojaOrigem, Coletor, Lancamento_Usuario, Lancamento_DataHora)
            VALUES (:dataEntrada, :obs, :lojaOrigem, :coletor, :usuario, GETDATE());
            SELECT SCOPE_IDENTITY() AS CodigoCompra;
        ";

        $stmt = $connection->prepare($sql);
        $stmt->bindParam(':dataEntrada', $dataEntrada);
        $stmt->bindParam(':obs', $obs);
        $stmt->bindParam(':lojaOrigem', $lojaOrigem);
        $stmt->bindParam(':coletor', $coletor);
        $stmt->bindParam(':usuario', $usuario);

        $stmt->execute();

        // Lê o resultado do SELECT
        $stmt->nextRowset(); // move para o resultado do SELECT
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        return $row['CodigoCompra'] ?? null;

    } catch (Exception $e) {
        echo "Erro: " . $e->getMessage();
        return null;
    }
}

public function criarSubBalanco($codBalanco,$barra,$quantidade,$descricao){

    $codigoMercadoria = $this->BuscarCodigoDaMercadoriaPelaBarra($barra);

    try {
        $connection = Conexao::getConnection();
        $query = "
    INSERT INTO [sub balanço] 
    ([Código da Compra], [Código da Mercadoria], Quantidade, Quantidade2, Produto_Referencia, Produto)
    VALUES ($codBalanco, $codigoMercadoria, $quantidade,$quantidade, $barra, '$descricao');
        ";


        $result = $connection->query($query);
        return $result;

    }catch(Exception $e){

        echo $e->getMessage();
    }

    }


    public function BuscarStatusProduto($codigo)
{

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query(" SELECT Desativado FROM [Cadastro de Mercadorias] WHERE [Cód Fabricante] = '$codigo'
        ");//FIM DA QUERY

      $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }
    foreach ($sqlserver AS $dados){
    return $dados[0];
    }
}


//BUSCAR PRODUTOS COM ESTOQUE MINIMO
  public function estoqueMinimo($loja)
    {

        if ($loja == 'TODAS'){

            $lojaOrigem = "AND loja IS NOT NULL";

        }else{
    
            $lojaOrigem = "AND loja = '$loja'";

        }

        try {
            $Conexao = Conexao::getConnection();
            //QUERY DA SQL
            $query = $Conexao->query("           
                                
            SELECT 

            CADASTRO.[Código da Mercadoria],
            CADASTRO.Mercadoria,
            LOJAS.Estoque,
            LOJAS.EstoqueMinimo,
            LOJAS.Loja

            FROM [Cadastro de mercadoriasLojas] AS LOJAS
            JOIN [Cadastro de Mercadorias] AS CADASTRO
            ON LOJAS.[Código da Mercadoria] = CADASTRO.[Código da Mercadoria]

            WHERE (EstoqueMinimo >= Estoque) $lojaOrigem AND EstoqueMinimo > 0;
            
            ");//FIM DA QUERY

            $sqlserver = $query->fetchAll();

        } catch (Exception $e) {

            echo $e->getMessage();
            exit;
        }
       
       return $sqlserver;
    }

public function setemEstoqueMinimo($loja = 0)
{
        if($loja <> 0){

            $lojaOrigem = "AND LOJAS.loja = '$loja'";
        }else{
           $lojaOrigem = "AND LOJAS.loja IS NOT NULL";
        }

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

            SELECT 

            
            CADASTRO.[Código da Mercadoria]

            FROM [Cadastro de mercadoriasLojas] AS LOJAS
            JOIN [Cadastro de Mercadorias] AS CADASTRO
            ON LOJAS.[Código da Mercadoria] = CADASTRO.[Código da Mercadoria]
            WHERE (EstoqueMinimo >= Estoque) AND EstoqueMinimo > 0
            $lojaOrigem
            ;

        ");//FIM DA QUERY

      $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }
    foreach ($sqlserver AS $dados){
    return $dados[0];
    }
}

//preco bruto por item
public function PedidosDeUmItem($codItem, $loja)
{
        if ($loja == ''){

        $lojaOrigem = "AND COTACAO.LojaOrigem  IS NOT NULL";

        }else{

        $lojaOrigem = "AND COTACAO.LojaOrigem = '$loja'";

        }

    try {
        $Conexao = Conexao::getConnection();
        //QUERY DA SQL
        $query = $Conexao->query("

            SELECT

                MIN(PRODUTO.IDCotacao)

            FROM

                GestaoCompras_CotacaoMercadorias AS PRODUTO
                JOIN GestaoCompras_Cotacao AS COTACAO
                ON PRODUTO.IDCotacao = COTACAO.ID

            WHERE

                PRODUTO.IDMercadoria = $codItem

                $lojaOrigem

            GROUP BY PRODUTO.IDCotacao;

        ");//FIM DA QUERY

      $sqlserver = $query->fetchAll();

    } catch (Exception $e) {

        echo $e->getMessage();
        exit;
    }

    return $sqlserver;
 }


 // funcao que verifica se um produto teve o estoque minimo alterado
public static function atualizarEstoqueMinimo($cod, $lojaPedido, $estoqueMinimo)
{

try{
		//comando update pdo
		$connection = Conexao::getConnection();
    $sql = "UPDATE [Cadastro de mercadoriasLojas] SET EstoqueMinimo = $estoqueMinimo WHERE Loja = '$lojaPedido' AND [Código da Mercadoria] = $cod";
		//execulta
		$connection->query($sql);
				
}catch(Exception $e){

  echo $e->getMessage();
  exit;
}

}



}
