<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

function IsModuloAtivo($modulo)
{
    $sql = "SELECT id FROM modulos WHERE";
    $sql .= ($modulo == 'MESA') ? " mesa = 1 " : " comanda = 1 ";

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->execute();
    $registro = $stm->fetch(PDO::FETCH_OBJ);

    return (!empty($registro));
}

function CapturaIdPromocao($idProduto, $tamanho, $canal)
{
    $sql = 'SELECT COALESCE(pp.id_promocao, 0) as id                            ';
    $sql .= 'FROM promocao_produto pp                                           ';
    $sql .= 'INNER JOIN promocao_agenda pa ON pp.id_promocao = pa.id_promocao   ';
    $sql .= 'INNER JOIN promocao p ON p.id = pp.id_promocao                     ';
    $sql .= 'WHERE p.status = 1 AND pa.dia_semana = :DIA_SEMANA AND             ';
    $sql .= 'pa.hora_inicio <= :HORA_ATUAL1 AND pa.hora_fim >= :HORA_ATUAL2 AND ';
    $sql .= 'pp.id_produto = :ID_PRODUTO AND pp.tamanho = :TAMANHO';
    $sql .= ($canal == 'M') ? ' AND mesa = 1' : ' AND comanda = 1';

    $hoje = date('Y-m-d');
    $hora_atual = date('H:i:s');
    $dia_semana = date('w', strtotime($hoje));

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->bindValue(':DIA_SEMANA', $dia_semana + 1);
    $stm->bindValue(':HORA_ATUAL1', $hora_atual);
    $stm->bindValue(':HORA_ATUAL2', $hora_atual);
    $stm->bindValue(':ID_PRODUTO', $idProduto);
    $stm->bindValue(':TAMANHO', $tamanho);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    return (!empty($produto)) ? $produto->id : 0;
}

function CapturaValorPromocao($idProduto, $tamanho, $canal)
{
    $sql = 'SELECT COALESCE(valor, 0.00) as valor                               ';
    $sql .= 'FROM promocao_produto pp                                           ';
    $sql .= 'INNER JOIN promocao_agenda pa ON pp.id_promocao = pa.id_promocao   ';
    $sql .= 'INNER JOIN promocao p ON p.id = pp.id_promocao                     ';
    $sql .= 'WHERE p.status = 1 AND pa.dia_semana = :DIA_SEMANA AND             ';
    $sql .= 'pa.hora_inicio <= :HORA_ATUAL1 AND pa.hora_fim >= :HORA_ATUAL2 AND ';
    $sql .= 'pp.id_produto = :ID_PRODUTO AND pp.tamanho = :TAMANHO';
    $sql .= ($canal == 'M') ? ' AND mesa = 1' : ' AND comanda = 1';

    $hoje = date('Y-m-d');
    $hora_atual = date('H:i:s');
    $dia_semana = date('w', strtotime($hoje));

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->bindValue(':DIA_SEMANA', $dia_semana + 1);
    $stm->bindValue(':HORA_ATUAL1', $hora_atual);
    $stm->bindValue(':HORA_ATUAL2', $hora_atual);
    $stm->bindValue(':ID_PRODUTO', $idProduto);
    $stm->bindValue(':TAMANHO', $tamanho);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    return (!empty($produto)) ? $produto->valor : 0;
}

function CapturaValorNormal($idProduto, $tamanho, $canal)
{
    $sql = 'SELECT b_venda_tamanho, mat_008, valor_tam_p, valor_tam_m, valor_tam_g, valor_tam_gg, valor_tam_extra, ';
    $sql .= 'valor_tam_p_delivery, valor_tam_m_delivery, valor_tam_g_delivery, valor_tam_gg_delivery, valor_tam_extra_delivery ';
    $sql .= "FROM materiais WHERE mat_001 = :id";

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->bindValue(':id', $idProduto);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    $valor = 0;

    if (!empty($produto)) :
        if ($produto->b_venda_tamanho) :
            switch ($tamanho):
                case 'P':
                    $valor = $produto->valor_tam_p;
                    break;
                case 'M':
                    $valor = $produto->valor_tam_m;
                    break;
                case 'G':
                    $valor = $produto->valor_tam_g;
                    break;
                case 'GG':
                    $valor = $produto->valor_tam_gg;
                    break;
                case 'E':
                    $valor = $produto->valor_tam_extra;
                    break;
            endswitch;
        else :
            $valor = $produto->mat_008;
        endif;
    endif;

    return $valor;
}

function CapturaValorDelivery($idProduto, $tamanho, $canal)
{
    $sql = 'SELECT b_venda_tamanho, valor_tam_p_delivery, valor_tam_m_delivery, ';
    $sql .= 'valor_tam_g_delivery, valor_tam_gg_delivery, valor_tam_extra_delivery ';
    $sql .= "FROM materiais WHERE mat_001 = :id";

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->bindValue(':id', $idProduto);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    $valor = 0;

    if (!empty($produto)) :
        if ($produto->b_venda_tamanho) :
            switch ($tamanho):
                case 'P':
                    $valor = $produto->valor_tam_p_delivery;
                    break;
                case 'M':
                    $valor = $produto->valor_tam_m_delivery;
                    break;
                case 'G':
                    $valor = $produto->valor_tam_g_delivery;
                    break;
                case 'GG':
                    $valor = $produto->valor_tam_gg_delivery;
                    break;
                case 'E':
                    $valor = $produto->valor_tam_extra_delivery;
                    break;
            endswitch;
        else :
            $valor = $produto->valor_tam_m_delivery;
        endif;
    endif;

    return $valor;
}

function CapturaValorNormalOuPromocao($idProduto, $tamanho, $canal)
{
    $valor = 0;
    $valorDeliveryComanda = (isset($_COOKIE['valorDeliveryComanda'])) ? $_COOKIE['valorDeliveryComanda'] : '0';

    if ($canal == 'C' && $valorDeliveryComanda == 1) :
        $valor = CapturaValorPromocao($idProduto, $tamanho, 'D');
        if ($valor <= 0) :
            $valor = CapturaValorDelivery($idProduto, $tamanho, $canal);
        endif;
    else :
        $valor = CapturaValorPromocao($idProduto, $tamanho, $canal);
        if ($valor <= 0) $valor = CapturaValorNormal($idProduto, $tamanho, $canal);
    endif;

    return $valor;
}

function NotificaEstoqueIndisponivel($codigo, $qtdePedido)
{
    $retorno = '';
    $produtoPrincipal = RetornaProduto($codigo, 0);

    if (empty($produtoPrincipal)) return '';

    if ($produtoPrincipal->mtp_001 == 1 && !$produtoPrincipal->fracionado) :
        $qtdeEmAberto  = TotalEmAbertoProduto($codigo);
        $qtdeEmEstoque = $produtoPrincipal->mat_016 - $qtdeEmAberto;

        if ($qtdeEmEstoque <= 0) :
            $retorno = "{$produtoPrincipal->mat_003} estoque esgotado";
        elseif ($qtdePedido > $qtdeEmEstoque) :
            $retorno = "{$produtoPrincipal->mat_003} possui apenas {$qtdeEmEstoque} {$produtoPrincipal->uni_003} !";
        endif;
    endif;

    if ($produtoPrincipal->id_produto_vinculado > 0 && !$produtoPrincipal->fracionado) :
        $produtoVinculado = RetornaProduto('', $produtoPrincipal->id_produto_vinculado);

        if ($produtoVinculado->mtp_001 == 1) :

            $qtdeEmAberto  = TotalEmAbertoProduto($codigo) * $produtoPrincipal->qtde_conversao_vinculado;
            $qtdeEmAberto  = $qtdeEmAberto + TotalEmAbertoProduto($produtoVinculado->mat_004);
            $qtdeEmEstoque = $produtoVinculado->mat_016 - $qtdeEmAberto;

            $qtdePedido = $qtdePedido * $produtoPrincipal->qtde_conversao_vinculado;

            if ($qtdeEmEstoque <= 0) :
                if ($retorno != '') $retorno .= '<br>';

                $retorno .= "- {$produtoVinculado->mat_003} (vinculado) não possui quantidade em estoque !";
            elseif ($qtdePedido > $qtdeEmEstoque) :
                if ($retorno != '') $retorno .= '<br>';

                $retorno .= "- {$produtoVinculado->mat_003} (vinculado) possui apenas {$qtdeEmEstoque} {$produtoVinculado->uni_003} em estoque !";
            endif;
        endif;
    endif;

    return $retorno;
}

function TotalEmAbertoProduto($codigo)
{
    $sql =  ' SELECT COALESCE(SUM(ite_002), 0) as qtde        ';
    $sql .= ' FROM vendaitem i                                ';
    $sql .= ' INNER JOIN materiais m ON i.mat_001 = m.mat_001 ';
    $sql .= ' INNER JOIN venda v ON v.ven_001 = i.ven_001     ';
    $sql .= ' WHERE                                           ';
    $sql .= '    i.sit_001 = 4 AND                            ';
    $sql .= '    m.mat_004 = :codigo AND                      ';
    $sql .= '    m.mtp_001 = 1 AND                            ';
    $sql .= '    v.sit_001 IN (6, 8)                          ';

    $pdo = Conexao::getInstance();
    $stm = $pdo->prepare($sql);
    $stm->bindValue(':codigo', $codigo);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    return $produto->qtde;
}

function RetornaProduto($codigo = '', $id = 0)
{
    $pdo = Conexao::getInstance();

    $sql = 'SELECT m.*, c.cat_002, u.uni_003                 ';
    $sql .= 'FROM materiais m                                ';
    $sql .= 'INNER JOIN unidades u ON u.uni_001 = m.uni_001  ';
    $sql .= 'INNER JOIN categoria c ON c.cat_001 = m.cat_001 ';

    if ($codigo != '') :
        $sql .= "WHERE mat_004 = '{$codigo}'";
    else :
        $sql .= 'WHERE mat_001 = ' . $id;
    endif;

    $stm = $pdo->prepare($sql);
    $stm->execute();
    $produto = $stm->fetch(PDO::FETCH_OBJ);

    return $produto;
}
