<?php
// **********************************************************************
// * Este módulo cuida da identificação e autorização do terminal movel *
// **********************************************************************
//
//
// -- Autorização do terminal --
// Comando: MOB_IDN.TERMINAL
Function Act_TERMINAL() {
  Global $aGlobal;
  $sChave_Empresa = @$aGlobal->aDados_Recebidos['CHAVE_EMPRESA'];
  $sTrm_Id_Device = @$aGlobal->aDados_Recebidos['Terminal_Id_Device'];
  //
  // Conferir dados obrigatórios
  If ( EMPTY($sChave_Empresa) OR EMPTY($sTrm_Id_Device) ) {
    $aGlobal->Reportar_Erro( 150 );              // ** ERRO: Faltando dados obrigatorios
    return;
  }
  // Conferir se a empresa possui o aplicativo no seu cadastro no Simdesk
  If ( ! $aGlobal->Capturar_Dados_Empresa_Simdesk( 0, $sChave_Empresa ) ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err );      // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $aReg_Terminal = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI, 0, $sTrm_Id_Device );
  $aReg_Terminal = @$aReg_Terminal[0];
  $nTrm_CodigoInt = @$aReg_Terminal['TRM_CODIGOINT']+0;
  $nTrm_Num_Tipo_ = @$aReg_Terminal['TRM_NUM_TIPO_']+0;
  $dTrm_DtHr_Atrz = ConvertDtHrSTR(@$aReg_Terminal['TRM_DTHR_ATRZ']);
  //
  If ( $nTrm_CodigoInt > 0 && $nTrm_Num_Tipo_ != 0 ) {
    $aGlobal->Reportar_Erro( 151 );              // ** ERRO: O tipo do terminal é incompatível com a operação
    return;
  }
  //
  If ( $nTrm_CodigoInt==0 ) {       // Registrar terminal
    $sSQLQuery =
     'INSERT INTO '.
       'reg_terminal '.
     '('.
       'TRM_CODIGOSIM, TRM_ID_INDICE, TRM_DTHR_REGS, TRM_ACESSO_IP'.
     ') VALUE ('.
       $aGlobal->nSim_Emp_CodigoI.',"'.$sTrm_Id_Device.'", NOW(), '.SQL_Bin( Converter_IPv4($aGlobal->sNumeroIP_Remoto,0) ).' '.
     ');';
    SQL_Query( $sSQLQuery );
    $nTrm_CodigoInt = SQL_Insert_Id();
  }
  // Atualizar o rótulo no terminal
  If ( ISSET($aGlobal->aDados_Recebidos['Terminal_Rotulo']) ) {
    $sTrm_Dc_Rotulo = $aGlobal->aDados_Recebidos['Terminal_Rotulo'];
    $sSQLQuery =
      'UPDATE '.
        'reg_terminal '.
      'SET '.
        'TRM_DC_ROTULO = "'.$sTrm_Dc_Rotulo.'" '.
      'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    $aReg_Terminal['TRM_DC_ROTULO'] = $sTrm_Dc_Rotulo;
  }
  //
  If ( $dTrm_DtHr_Atrz > 0 ) {      // Terminal autorizado
    $sTrm_Ses_Chave = GeraChave( 16 );
    // Gravar a chave gerada
    $sSQLQuery =
      'UPDATE '.
        'reg_terminal '.
      'SET '.
        'TRM_SES_CHAVE = "'.$sTrm_Ses_Chave.'",'.
        'TRM_ACESSO_IP = '.SQL_Bin( Converter_IPv4($aGlobal->sNumeroIP_Remoto,0) ).','.
        'TRM_ACESSO_DH = NOW() '.
      'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    // 
    $aGlobal->aRetornoMod_JSon =
      [ 'Autorizado'      => True ,
        'Terminal_Codigo' => $nTrm_CodigoInt,
        'Chave_Sessao'    => $sTrm_Ses_Chave,
        'Empresa'         =>
          [ 'Nome'     => $aGlobal->aSim_Cad_Empresa['CLI_FANTAS'],
            'Telefone' => $aGlobal->aSim_Cad_Empresa['CLI_TEL_01'],
            'Endereco' => $aGlobal->aSim_Cad_Empresa['CLI_ENDERE']
          ]
      ];
    // Gravar atividade
    If ( $nTrm_CodigoInt > 0 ) {
      $aReg_Terminal = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI, $nTrm_CodigoInt );
      $aReg_Terminal = @$aReg_Terminal[0];
      $aGlobal->aSessao_Terminal =
        [ 'Trm_Id_Device'   =>  @$aReg_Terminal['TRM_ID_INDICE'],
          'Trm_Nome_Rotulo' =>  @$aReg_Terminal['TRM_DC_ROTULO'],
          'Trm_CodigoInt'   =>  @$aReg_Terminal['TRM_CODIGOINT'],
          'Trm_CodigoAtv'   => (@$aReg_Terminal['TRM_CODIGOATV']+0)
        ];
      $a_Dados_Remoto = @$aGlobal->aDados_Recebidos['Dados_Remoto'];
      G_SQL_Simdesk_AplAtv( 1, @$a_Dados_Remoto['Data_Hora'], @$a_Dados_Remoto['Nome_Versao_OS'], @$a_Dados_Remoto['Versao_App'] );
    }
    //
    return;
  }
  // Terminal não autorizado
  $aGlobal->aRetornoMod_JSon =
    [ 'Autorizado'      => False,
      'Terminal_Codigo' => $nTrm_CodigoInt,
      'Terminal_Rotulo' => @$aReg_Terminal['TRM_DC_ROTULO']
    ];
  //
}
//
//
// -- Solicitação de cadastro de operadores --
// Comando: MOB_IDN.CAD_OPERADORES
Function Act_CAD_OPERADORES() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro >0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  //
  $aOpe_Consulta = P_SQL_Cad_Operadores( $aGlobal->nSim_Emp_CodigoI );
  $aCad_Operadores = [];
  foreach ( $aOpe_Consulta As $aItem ) {
    If ( ($aItem['OPE_ACS_ATIVO']+0) < 1 ) { continue; }
    $aAdc_Item =
      [ 'Codigo' => ($aItem['OPE_CODIGOIND']+0),
        'Nome'   =>  $aItem['OPE_NOME_COMP'],
        'Senha'  =>  $aItem['OPE_ACS_SENHA']
      ];
    $aCad_Operadores[] = $aAdc_Item;
  }
  //
  $aRetorno = [ 'CAD_OPERADORES' => $aCad_Operadores ];
  If ( $aGlobal->aSessao_Terminal['Operador_Indice'] > 0 ) {
    $aRetorno['Ultimo_Operador_Codigo'] = $aGlobal->aSessao_Terminal['Operador_Indice'];
  }
  //
  G_SQL_Simdesk_AplAtv();
  //
  $aGlobal->aRetornoMod_JSon = $aRetorno;
}
//
//
// -- Solicitação de login do operador na sessão --
// Comando: MOB_IDN.LOGIN
Function Act_LOGIN() {
  Global $aGlobal;
  //
  $nOpe_CodigoInd = Somente_Numeros(@$aGlobal->aDados_Recebidos['Operador_Codigo'])+0;
  $sOpe_Acs_Senha = @$aGlobal->aDados_Recebidos['Operador_Senha'];
  // Conferir preenchimento dos campos
  If ( $nOpe_CodigoInd < 1 OR EMPTY($sOpe_Acs_Senha) ) {
    $aGlobal->Reportar_Erro( 150 );              // ** ERRO: Faltando dados obrigatorios
    return;
  }
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro > 0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  // Verificar se já está logado
  If ( $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->aSessao_Terminal['Trm_CodigoAtv'] = 0;
    //$aGlobal->aRetornoMod_JSon = [ 'Sucesso' => false, 'Motivo' => 'OPERADOR_LOGADO' ];
    //return;
  }
  //
  If ( $aGlobal->aSessao_Terminal['Trm_CodigoAtv'] < 1 ) {
    G_SQL_Simdesk_AplAtv( 1 );
  }
  // Conferir codigo e senha do operador
  $aCad_Operador = P_SQL_Cad_Operadores( $aGlobal->nSim_Emp_CodigoI, $nOpe_CodigoInd );
  If ( EMPTY($aCad_Operador) OR @$aCad_Operador['OPE_ACS_SENHA'] !== $sOpe_Acs_Senha ) {
    $aGlobal->aRetornoMod_JSon = [ 'Sucesso' => false, 'Motivo' => 'OPERADOR_INVALIDO' ];
    G_SQL_Simdesk_AplAtv( 2 );
    return;
  }
  //
  $sSQLQuery =
    'UPDATE '.
      'reg_terminal '.
    'SET '.
      'TRM_IOPE_LOGN = '.$nOpe_CodigoInd.','.
      'TRM_DTHR_LOGN = NOW(),'.
      'TRM_FIMACS_DH = 0 '.
    'WHERE TRM_CODIGOINT='.$aGlobal->aSessao_Terminal['Trm_CodigoInt'].' '.
    ';';
  SQL_Query( $sSQLQuery );
  //
  $aGlobal->aRetornoMod_JSon = [ 'Sucesso' => true ];
  //
  G_SQL_Simdesk_AplAtv( 3 );
  //
}
//
//
// -- Solicitação de logoff na sessão --
// Comando: MOB_IDN.LOGOFF
Function Act_LOGOFF() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro > 0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  // Verificar se não está logado
  If ( ! $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->aRetornoMod_JSon = [ 'Sucesso' => false ];
    return;
  }
  //
  $sSQLQuery =
    'UPDATE '.
      'reg_terminal '.
    'SET '.
      'TRM_FIMACS_DH = NOW(),'.
      'TRM_CODIGOATV = 0 '.
    'WHERE TRM_CODIGOINT='.$aGlobal->aSessao_Terminal['Trm_CodigoInt'].' '.
    ';';
  SQL_Query( $sSQLQuery );
  //
  $aGlobal->aRetornoMod_JSon = [ 'Sucesso' => true ];
  //
  G_SQL_Simdesk_AplAtv( 4 );
  //
}
//
//
?>