<?php
// *****************************************************************************
// * Este módulo trada todos os dados que vem do aplicativo desktop fornecedor *
// *****************************************************************************
//
//
// -- Carga de terminais autorizados --
// Comando: SRV_PUXAR.TERMINAIS
Function Act_TERMINAIS() {
  Global $aGlobal;
  // Conferir se a empresa possui o aplicativo no seu cadastro no Simdesk
  If ( ! $aGlobal->Capturar_Dados_Empresa_Simdesk() ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err );   // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $dDataHora_Min = mktime(0,0,0,1,1,2017);
  $aTrm_Consulta = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI );
  $aReg_Terminais = [];
  foreach ( $aTrm_Consulta As $aItem ) {
    $dTrm_DtHr_Atrz = ConvertDtHrSTR($aItem['TRM_DTHR_ATRZ']);
    $dTrm_Acesso_Dh = ConvertDtHrSTR($aItem['TRM_ACESSO_DH']);
    $dTrm_DtHr_Logn = ConvertDtHrSTR($aItem['TRM_DTHR_LOGN']);
    $dTrm_FimAcs_Dh = ConvertDtHrSTR($aItem['TRM_FIMACS_DH']);
    $sTrm_Acesso_Dh = ( $dTrm_Acesso_Dh > $dDataHora_Min ? date("Y-m-d H:i:s",$dTrm_Acesso_Dh) : '' );
    $sTrm_FimAcs_Dh = ( $dTrm_FimAcs_Dh > $dDataHora_Min ? date("Y-m-d H:i:s",$dTrm_FimAcs_Dh) : '' );
    $sTrm_DtHr_Logn = ( $dTrm_DtHr_Logn > $dDataHora_Min ? date("Y-m-d H:i:s",$dTrm_DtHr_Logn) : '' );
    $sTrm_Acesso_IP = Converter_IPv4($aItem['TRM_ACESSO_IP'],1);
    $nTrm_Num_Tipo_ = @$aItem['TRM_NUM_TIPO_']+0;
    //
    $aAdc_Item =
      [ 'Codigo'           => ($aItem['TRM_CODIGOINT']+0),
        'Tipo_do_Terminal' =>  $nTrm_Num_Tipo_,
        'Rotulo'           =>  $aItem['TRM_DC_ROTULO'],
        'IP_Remoto'        =>  $sTrm_Acesso_IP,
        'Atv_Data_Hora'    =>  $sTrm_Acesso_Dh,
        'Codigo_Operador'  => ($aItem['TRM_IOPE_LOGN']+0),
        'Logon_Data_Hora'  =>  $sTrm_FimAcs_Dh,
        'Logoff_Data_Hora' =>  $sTrm_FimAcs_Dh
      ];
    //
    If ( $dTrm_DtHr_Atrz > $dDataHora_Min ) {
      $aAdc_Item['Autorizado'] =
        [ 'Data_Hora'       => date("Y-m-d H:i:s",$dTrm_DtHr_Atrz),
          'Codigo_Operador' => ($aItem['TRM_IOPE_ATRZ']+0)
        ];
    }
    $aReg_Terminais[] = $aAdc_Item;
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'QTD_MAXIMA_AUTORIZADA' => $aGlobal->nQtd_Terminais_S,
      'CHAVE_EMPRESA'         => $aGlobal->aSim_Cad_Empresa['CLI_API_ENT_CHAVE'],
      'TERMINAIS'             => $aReg_Terminais
    ];
}
//
//
// -- Puxar somente o status dos pedidos em aberto --
// Comando: SRV_PUXAR.STATUS
Function Act_STATUS() {
  Global $aGlobal;
  // Conferir se a empresa possui o aplicativo no seu cadastro no Simdesk
  If ( ! $aGlobal->Capturar_Dados_Empresa_Simdesk() ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err );  // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $nQtd_Nao_Listados = 0;
  $aCodigos_Pedidos  = @$aGlobal->aDados_Recebidos['CODIGOS_DOS_PEDIDOS'];  // Ex: [ 1000, 1001, 1002 ]
  // -- Montar lista de pedidos --
  $bIncluir_Filiais   = False;
  $aCodigos_Fat_Geral = [];
  foreach ( $aCodigos_Pedidos As $sCodigo_Pedido ) {
    If ( strpos( ' '.$sCodigo_Pedido , '.' ) > 0  ) {
      $aCodigo_Pedido = explode('.',$sCodigo_Pedido);
      $aCodigos_Fat_Geral[] =
        [ 'Codigo_Pedido'  => (@$aCodigo_Pedido[1]+0),
          'Codigo_Empresa' => (@$aCodigo_Pedido[0]+0),
          'E_Filial'       => True
        ];
      $bIncluir_Filiais = True;
    } Else {
      $aCodigos_Fat_Geral[] =
        [ 'Codigo_Pedido'  => ($sCodigo_Pedido+0),
          'Codigo_Empresa' => ($aGlobal->nSim_Emp_CodigoI+0),
          'E_Filial'       => False
        ];
    }
  }
  // -- Capturar pedidos do banco de dados --
  $aFat_Geral_Fl = P_SQL_Fat_Geral( $aGlobal->nSim_Emp_CodigoI );
  $aFat_Geral_Mz = [];
  If ( $bIncluir_Filiais ) {
    $aFat_Geral_Mz = P_SQL_Fat_Geral_Mz( $aGlobal->nSim_Emp_CodigoI );
  }
  $aFat_Geral = [];
  foreach ( $aFat_Geral_Fl As $aFtg ) {  $aFat_Geral[] = $aFtg;  }
  foreach ( $aFat_Geral_Mz As $aFtg ) {  $aFat_Geral[] = $aFtg;  }
  //
  $aRetorno_Pedidos = [];
  foreach ( $aFat_Geral As $aFtg ) {
    If ( (@$aFtg['FAT_BLOQUEADO']+0) > 0 ) {
      continue;
    }
    $nFat_CodigoEnt = $aFtg['FAT_CODIGOENT'];
    $sStatus_Pedido = Capturar_Status_Pedido( $aFtg, True );
    // Condicionamento de atribuição do status do pedido
    //$sStatus_Pedido = 'DISPONIVEL';
    //$dFat_Dh_Aceito = ConvertDtHrSTR( $aFtg['FAT_DH_ACEITO'] );
    //$dFat_Dh_Retira = ConvertDtHrSTR( $aFtg['FAT_DH_RETIRA'] );
    //$dFat_Dh_Entreg = ConvertDtHrSTR( $aFtg['FAT_DH_ENTREG'] );
    //$dFat_Dh_Recusa = ConvertDtHrSTR( $aFtg['FAT_DH_RECUSA'] );
    $dFat_Dh_Finali = ConvertDtHrSTR( $aFtg['FAT_DH_FINALI'] );
    //
    If ( ! EMPTY($aCodigos_Fat_Geral) ) {
      $bPedido_Encontrado = False;
      foreach ( $aCodigos_Fat_Geral As $aCodigo_Pedido ) {
        if ( $aCodigo_Pedido['Codigo_Pedido' ] == ($aFtg['FAT_CODIGOIND']+0)
             && (
             ( (! $aCodigo_Pedido['E_Filial']) && $aCodigo_Pedido['Codigo_Empresa'] == ($aFtg['FAT_CODIGOSIM']+0) ) ||
             ( (  $aCodigo_Pedido['E_Filial']) && $aCodigo_Pedido['Codigo_Empresa'] == ($aFtg['FAT_CODIGOSIM']+0) &&
                                                         $aGlobal->nSim_Emp_CodigoI == ($aFtg['FAT_MZ_CODSIM']+0)
             )
             )
           ) {
          $bPedido_Encontrado = True;
          break;
          //
        }
      }
      If ( ! $bPedido_Encontrado ) {
        $nQtd_Nao_Listados++;
        continue;
      }
    //If ( ! EMPTY($sCodigos_Fat_Geral) ) {
    //   If ( strpos( ' ,'.$sCodigos_Fat_Geral.',' , $aFtg['FAT_CODIGOIND'] ) == 0 ) {
    //     If ( $dFat_Dh_Finali > 0 )  {  continue;  }
    //     $nQtd_Nao_Listados++;
    //     continue;
    //   }
    } Else {
      If ( $dFat_Dh_Finali > 0 )  {  continue;  }
    }
    //
    $aItem_Pedido =
      [ 'Codigo'             => ($aFtg['FAT_CODIGOIND']+0),
        'Status'             => $sStatus_Pedido,
        'Entregador_Codigo'  => $nFat_CodigoEnt
      ];
    $aRetorno_Pedidos[] = $aItem_Pedido;
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'          => True,
      'Qtd_Nao_Listados' => $nQtd_Nao_Listados,
      'PEDIDOS'          => $aRetorno_Pedidos
    ];
  return;
}
//
//
// -- Puxar pedidos de entrega --
// Comando: SRV_PUXAR.PEDIDOS
Function Act_PEDIDOS() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal( 1 );
  If ( $nRetorno_Erro >0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  $aFiltros = @$aGlobal->aDados_Recebidos['FILTROS'];
  $nDtHr_Inicial   = ConvertDtHrSTR( @$aFiltros['Data_Hora_Inicial'] );
  $aFiltro_Status  = @$aFiltros['Status'];
  $nFiltro_Ped_Cod = Somente_Numeros(@$aFiltros['Numero_Pedido'])+0;
  //$bNao_Capturados = @$aFiltros['Somente_Nao_Importados']+0 > 0;
  If ( $nDtHr_Inicial < mktime(0,0,0,1,1,2000) ) {  $nDtHr_Inicial = 0;  }
  // -- Montar lista de pedidos --
  $aFat_Geral = P_SQL_Fat_Geral_Cmp_Abertos( $nDtHr_Inicial );
  $aRetorno_Pedidos = [];
  $aIndices_Ftg = [];
  foreach ( $aFat_Geral As $aFtg ) {
    //
    $nFat_Dh_Captur = ConvertDtHrSTR(@$aFtg['FAT_DH_CAPTUR'])+0;
    //If ( $bNao_Capturados && $nFat_Dh_Captur > 0 ) {  continue;  }
    // Filtrar pelo codigo do pedido
    If ( $nFiltro_Ped_Cod > 0 ) {
      If ( $nFiltro_Ped_Cod != (@$aFtg['FAT_CODIGOIND']+0) ) {
        continue;
      }
    }
    //
    $nTrm_CodigoSim = $aGlobal->nSim_Emp_CodigoI;
    $nFat_Mz_CodSim = ($aFtg['FAT_MZ_CODSIM']+0);
    If ( $nFat_Mz_CodSim > 0 ) {
      $nTrm_CodigoSim = $nFat_Mz_CodSim;
    }
    // Criar lista de telefones
    $sCli_Telefone = "";
    If ( ! EMPTY($aFtg['CAD_TELEFONE1']) ) {  $sCli_Telefone = $aFtg['CAD_TELEFONE1'];  }
    If ( EMPTY($sCli_Telefone) ) {
      If ( ! EMPTY($aFtg['CAD_TELEFONE2']) ) {  $sCli_Telefone = $aFtg['CAD_TELEFONE2'];  }
    }
    $sStatus_Pedido = Capturar_Status_Pedido( $aFtg, True );
    //
    If ( ! EMPTY($aFiltro_Status) ) {
      $bNao_Capturar = True;
      foreach ( $aFiltro_Status as $sFiltro_Status ) {
        If ( $sFiltro_Status == $sStatus_Pedido ) {
          $bNao_Capturar = False;
          break;
        }
      }
      If ( $bNao_Capturar ) {  continue;  }
    }
    //
    $sIndice_Ftg = $aFtg['FAT_MZ_CODSIM'].$aFtg['FAT_CODIGOIND'].'.'.$aFtg['FAT_CODIGOSIM'];
    If ( ISSET( $aIndices_Ftg[$sIndice_Ftg] ) ) {  continue;  }
    $aIndices_Ftg[$sIndice_Ftg] = 1;
    //
    // Criar lista de itens no pedido
    $aFat_Item = P_SQL_Fat_Item( $aGlobal->nSim_Emp_CodigoI, $aFtg['FAT_CODIGOIND'] );
    $aLista_PdItens = [];
    foreach ( $aFat_Item As $aFti ) {
      $aLst_Produtos = [];
      //
      for ( $nContador_Ite = 1; $nContador_Ite <= 4 ; $nContador_Ite++ ) { 
        $nFat_Cod_Item = @$aFti['FAT_COD_ITE_'.$nContador_Ite]+0;
        If ( $nFat_Cod_Item < 1 ) {  continue;  }
        $aCad_Produto = P_SQL_Cad_Produtos( $nTrm_CodigoSim, $nFat_Cod_Item );
        $aCad_Produto = @$aCad_Produto[$nFat_Cod_Item];
        $aItem_Produto_Cad =
          [ 'Codigo'         => (@$aCad_Produto['ITE_CODIGOIND']+0),
            'Codigo_Livre'   =>  @$aCad_Produto['ITE_COD_LIVRE'],
            'Descricao'      =>  @$aCad_Produto['ITE_DESCRICAO'],
            'Sigla_Unitaria' =>  @$aCad_Produto['ITE_SGUNIDADE']
          ];
        $aLst_Produtos[] = $aItem_Produto_Cad;
      }
      //
      $aItem_Produto = 
        [ 'Codigo'          => ($aFti['FAT_CODIGOIND']+0),
          'Produtos'        => $aLst_Produtos,
          'Quantidade'      => ($aFti['FAT_QTDE_ITEM']+0),
          'Tipo_Sigla'      =>  $aFti['FAT_SIGLA_TIP'],
          'Tipo_Descricao'  =>  $aFti['FAT_DESCR_TIP'],
          'Opcionais_Lista' =>  $aFti['FAT_OPCIONAIS'],
          'Opcionais_Valor' => ($aFti['FAT_PD_VALOPC']+0),
          'Combo_Lista'     =>  $aFti['FAT_LST_COMBO'],
          'Combo_Valor'     => ($aFti['FAT_PD_VALCMB']+0),
          'Valor_Total'     => ($aFti['FAT_PD_VALPRO']+0),
          'Observacoes'     =>  $aFti['FAT_PD_OBSERV'],
        ];
      $aLista_PdItens[] = $aItem_Produto;
    }
    //
    $aItem_Pedido =
      [ 'Codigo'            => ($aFtg['FAT_CODIGOIND']+0),
        'Comanda'           => ($aFtg['FAT_SEQUENCIA']+0),
        'Pedido_da_Matriz'  => ($aFtg['FAT_MZ_CODSIM']+0),
        'Data_Hora'         =>  $aFtg['FAT_DTHR_REGP'],
        'Status'            => $sStatus_Pedido,
        'Valor_Produtos'    => ($aFtg['FAT_PD_VALPRO']+0),
        'Valor_Entrega'     => ($aFtg['FAT_PD_VALENT']+0),
        'Valor_Desconto'    => ($aFtg['FAT_PD_VALDSC']+0),
        'Valor_a_Receber'   => ($aFtg['FAT_PD_VALRCB']+0),
        'Observacao'        =>  $aFtg['FAT_PD_OBSERV'],
        'Pagamento' =>
          [ 'Esta_Pago'  => ($aFtg['FAT_PD_E_PAGO'] > 0),
            'Troco_para' => ($aFtg['FAT_PD_VALTRC']+0),
            'Modalidade' =>  $aFtg['FAT_PD_MODPAG']
          ],
        'Cliente' =>
          [ 'Codigo'   => ($aFtg['CAD_CODIGOIND']+0),
            'Nome'     =>  $aFtg['CAD_NOME_CMPL'],
            'Telefone' =>  $sCli_Telefone,
            'Endereco' =>
              [ 'Logradouro'  =>  $aFtg['CAD_END_LOGRA'],
                'Numero'      => ($aFtg['CAD_END_NUMER']+0),
                'Complemento' =>  $aFtg['CAD_END_COMPL'],
                'Bairro'      =>  $aFtg['CAD_END_BAIRR'],
                'Cep'         => ($aFtg['CAD_END_N_CEP']+0),
                'Cidade_UF'   =>  $aFtg['CAD_END_CIDAD']
              ]
          ],
        'Quantidade_Itens' => COUNT($aLista_PdItens),
        'Itens' => $aLista_PdItens
      ];
    //
    //If ( $nFat_Dh_Captur == 0 ) {
    //  $sSQLQuery =
    //    'UPDATE '.
    //      'fat_geral '.
    //    'SET '.
    //      'FAT_DH_CAPTUR = "'.DATE("Y-m-d H:i:s").'" '.
    //    'WHERE FAT_CODIGOSIM='.$aGlobal->nSim_Emp_CodigoI.' '.
    //      'AND FAT_CODIGOIND='.$aFtg['FAT_CODIGOIND'].' '.
    //    ';';
    //  SQL_Query( $sSQLQuery );
    //}
    //
    $aRetorno_Pedidos[] = $aItem_Pedido;
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'  => True,
      'PEDIDOS'  => $aRetorno_Pedidos
    ];
  return;
}
//
//
//
?>