<?php
// *****************************************************************************
// * Este módulo trada todos os dados que vem do aplicativo desktop fornecedor *
// *****************************************************************************
//
//
// -- Carga do cadastro de operadores --
// Comando: SRV_CARGA.CAD_OPERADORES
Function Act_CAD_OPERADORES() {
  Global $aGlobal;
  $aCad_Dados = @$aGlobal->aDados_Recebidos['DADOS'];
  // 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_Novos = 0;
  $nQtd_Atualizados = 0;
  $nQtd_Desativados = 0;
  // Consultar o cadastro de operadores da empresa
  $aCad_Operadores = P_SQL_Cad_Operadores( $aGlobal->nSim_Emp_CodigoI );
  $aOpe_ListaCad = [];
  foreach ( $aCad_Operadores As $aItem ) {
    $aOpe_ListaCad[($aItem['OPE_CODIGOIND']+0)] = $aItem['OPE_CODIGOINT'];
  }
  // Incluir e atualizar operadores
  foreach ( $aCad_Dados As $aItem ) {
    $nOpe_CodigoInd = @$aItem['Codigo']+0;
    $sOpe_NomeCompl = @$aItem['Nome'  ];
    $sOpe_Acs_Senha = @$aItem['Senha' ];
    $nOpe_CodigoInt = @$aOpe_ListaCad[$nOpe_CodigoInd]+0;
    //
    If ( $nOpe_CodigoInd < 1 ) { continue; }
    // Verificar e incluir novo cadastro
    $bNovo_Cadastro = ( $nOpe_CodigoInt == 0 );
    If ( $bNovo_Cadastro ) {
      $sSQLQuery =
       'INSERT INTO '.
         'cad_operador '.
       '('.
         'OPE_CODIGOSIM'. ', OPE_CODIGOIND'.  ', OPE_ACS_ATIVO'.
       ') VALUE ('.
         $aGlobal->nSim_Emp_CodigoI.','.$nOpe_CodigoInd.',0'.
       ');';
      SQL_Query( $sSQLQuery );
      $nOpe_CodigoInt = SQL_Insert_Id();
      $nQtd_Novos++;
    } Else {
      UNSET( $aOpe_ListaCad[$nOpe_CodigoInd] );
      $nQtd_Atualizados++;
    }
    // Atualizar dados no cadastro
    $sSQLQuery =
      'UPDATE '.
        'cad_operador '.
      'SET '.
        'OPE_NOME_COMP = "'.$sOpe_NomeCompl.'",'.
        'OPE_ACS_SENHA = "'.$sOpe_Acs_Senha.'",'.
        'OPE_ACS_ATIVO = 1,'.
        'OPE_DTHR_REGS = NOW() '.
      'WHERE OPE_CODIGOINT='.$nOpe_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    //
  }
  // Desativar cadastros de operadores que não estava nos dados de carga
  foreach ( $aCad_Operadores As $aItem ) {
    $nOpe_CodigoInt = $aItem['OPE_CODIGOINT']+0;
    $nOpe_CodigoInd = $aItem['OPE_CODIGOIND']+0;
    $bOpe_Acs_Ativo = ( ($aItem['OPE_ACS_ATIVO']+0) > 0);
    If ( (! $bOpe_Acs_Ativo) OR @$aOpe_ListaCad[$nOpe_CodigoInd] != $nOpe_CodigoInt ) {  continue;  }
    //
    $sSQLQuery =
      'UPDATE '.
        'cad_operador '.
      'SET '.
        'OPE_ACS_ATIVO = 0 '.
      'WHERE OPE_CODIGOINT='.$nOpe_CodigoInt.' '.
      ';';
    SQL_Query( $sSQLQuery );
    $nQtd_Desativados++;
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'         => True,
      'Qtd_Novos'       => $nQtd_Novos,
      'Qtd_Atualizados' => $nQtd_Atualizados,
      'Qtd_Desativados' => $nQtd_Desativados
    ];
  //
}
//
//
// -- Carga de terminais autorizados --
// Comando: SRV_CARGA.TERMINAIS
Function Act_TERMINAIS() {
  Global $aGlobal;
  $nOpe_CodigoInt = Somente_Numeros(@$aGlobal->aDados_Recebidos['CODIGO_OPERADOR'])+0;
  $nOpc_NListados = Somente_Numeros(@$aGlobal->aDados_Recebidos['NAO_LISTADOS'])+0;     // Todos que não estive lista abaixo serão: 1 = Desativados, 2 = Removidos dos registros, 0 = Não fazer nada
  //
  If ( $nOpe_CodigoInt < 1 OR (! ISSET( $aGlobal->aDados_Recebidos['TERMINAIS'] ) ) ) {
    $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() ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err );   // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $aLista_Terminais = $aGlobal->aDados_Recebidos['TERMINAIS'];
  //
  $nQtd_Autorizados = 0;   $nQtd_NaoAutorizados = 0;   $nQtd_Removidos = 0;  $nQtd_Autorizados_Total = 0;
  // Consultar o registro de terminais moveis
  $aReg_Terminais = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI );
  $aTrm_ListaReg = [];
  foreach ( $aReg_Terminais As $aItem ) {
    $aTrm_ListaReg[($aItem['TRM_CODIGOINT']+0)] = $aItem['TRM_IOPE_ATRZ'];
    If ( $aItem['TRM_IOPE_ATRZ']+0 > 0 ) { $nQtd_Autorizados_Total++; }
  }
  // Conferir a quantidade de autorizados
  $aTerminais_Nao_Cad = [];
  foreach ( $aLista_Terminais As $aItem ) {
    $nTrm_CodigoInt = @$aItem['Codigo']+0;
    $bTrm_Autorizar = @$aItem['Autorizar']+0;
    //
    If ( ! ISSET($aTrm_ListaReg[$nTrm_CodigoInt]) ) {  // Se o código enviado de um terminal que não existe
      $aTerminais_Nao_Cad[] = $nTrm_CodigoInt;
      continue;
    }
    //
    If ( $aTrm_ListaReg[$nTrm_CodigoInt]+0 > 0 ) {
      If ( ! $bTrm_Autorizar ) {
        $nQtd_Autorizados_Total--;   // Desativar o que está autorizado
      }
    } Else {
      If ( $bTrm_Autorizar ) {
        $nQtd_Autorizados_Total++;   // Autorizar o que está não autorizado
      }
    }
    //
  }
  // Retorno de erro de terminais não cadastrados
  If ( ! EMPTY($aTerminais_Nao_Cad) ) {
    $aGlobal->aRetornoMod_JSon =
      [ 'Sucesso'           => False,
        'TERMINAIS_NAO_REG' => $aTerminais_Nao_Cad
      ];
    return;
  }
  // Conferir a quantidade de terminais autorizados acima do permitido
  If ( $aGlobal->nQtd_Terminais_S < $nQtd_Autorizados_Total ) {
    $aGlobal->Reportar_Erro( 149 );              // ** ERRO: Quantidade de terminais acima do permitido
    return;
  }
  // Ativar e desativar autorização de terminais
  foreach ( $aLista_Terminais As $aItem ) {
    $nTrm_CodigoInt = @$aItem['Codigo']+0;
    $bTrm_Autorizar = @$aItem['Autorizar']+0;
    $nTrm_IOpe_Atrz = $aTrm_ListaReg[$nTrm_CodigoInt];
    // Autorizar terminal
    if ( $bTrm_Autorizar ) {
      $sSQLQuery =
        'UPDATE '.
          'reg_terminal '.
        'SET '.
          'TRM_IOPE_ATRZ = '.$nOpe_CodigoInt.','.
          'TRM_DTHR_ATRZ = NOW() '.
        'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
        ';';
      $nQtd_Autorizados++;
      //
    } Else {
      $sSQLQuery =
        'UPDATE '.
          'reg_terminal '.
        'SET '.
          'TRM_SES_CHAVE = "",'.
          'TRM_IOPE_ATRZ = 0,'.
          'TRM_DTHR_ATRZ = 0 '.
        'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
        ';';
      $nQtd_NaoAutorizados++;
      //
    }
    SQL_Query( $sSQLQuery );
    UNSET( $aTrm_ListaReg[$nTrm_CodigoInt] );
    //
  }
  // Tarefa com os terminais não inclusos na lista
  If ( $nOpc_NListados > 0 ) {
    foreach ( $aTrm_ListaReg As $nTrm_CodigoInt => $aItem ) {
      If       ( $nOpc_NListados == 1 ) {  // 1 = Desautorizar
        $sSQLQuery =
          'UPDATE '.
            'reg_terminal '.
          'SET '.
            'TRM_SES_CHAVE = "",'.
            'TRM_IOPE_ATRZ = 0,'.
            'TRM_DTHR_ATRZ = 0 '.
          'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
          ';';
        $nQtd_NaoAutorizados++;
        //
      } ElseIf ( $nOpc_NListados == 2 ) {  // 2 = Remover dos registros
        $sSQLQuery =
          'DELETE FROM '.
            'reg_terminal '.
          'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
          ';';
        $nQtd_Removidos++;
        //
      }
      SQL_Query( $sSQLQuery );
    }
  }
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'               => True,
      'Qtd_Autorizados'       => $nQtd_Autorizados,
      'Qtd_DesAutorizados'    => $nQtd_NaoAutorizados,
      'Qtd_Removidos'         => $nQtd_Removidos,
      'Qtd_Total_Autorizados' => $nQtd_Autorizados_Total
    ];
  //
}
//
//
// -- Força o logoff do terminal e limpa os dados do ultimo login --
// Comando: SRV_CARGA.TERMINAL_LOGOFF
Function Act_TERMINAL_LOGOFF() {
  Global $aGlobal;
  $nTrm_CodigoInt = Somente_Numeros(@$aGlobal->aDados_Recebidos['Terminal_Codigo'])+0;    // Código do terminal
  //
  If ( $nTrm_CodigoInt < 1 ) {
    $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() ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err ); // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  // Capturar dados do terminal
  $aReg_Terminal = P_SQL_Reg_Terminais( $aGlobal->nSim_Emp_CodigoI, $nTrm_CodigoInt );
  $aReg_Terminal = @$aReg_Terminal[0];
  // Verificar se o terminal existe
  If ( EMPTY($aReg_Terminal) ) {
    $aGlobal->Reportar_Erro( 147 );              // ** ERRO: Terminal nao encontrado
    return;
  }
  // Atualizar no banco de dados
  $sSQLQuery =
    'UPDATE '.
      'reg_terminal '.
    'SET '.
      'TRM_IOPE_LOGN = 0,'.
      'TRM_DTHR_LOGN = 0,'.
      'TRM_FIMACS_DH = 0 '.
    'WHERE TRM_CODIGOINT='.$nTrm_CodigoInt.' '.
    ';';
  SQL_Query( $sSQLQuery );
  //
  $aGlobal->aRetornoMod_JSon = [ 'Sucesso' => True ];
  //
}
//
//
// -- Carga de produtos e pedidos de entrega --
// Comando: SRV_CARGA.PRODUTOS_PEDIDOS
Function Act_PRODUTOS_PEDIDOS() {
  Global $aGlobal;
  $aLst_Pedidos  = @$aGlobal->aDados_Recebidos['PEDIDOS' ];
  $aLst_Produtos = @$aGlobal->aDados_Recebidos['PRODUTOS'];
  //
  If ( EMPTY($aLst_Pedidos) && EMPTY($aLst_Produtos) ) {
    $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() ) {
    $aGlobal->Reportar_Erro( $aGlobal->nCaptura_Emp_Err ); // ** ERRO: Empresa sem acesso ao serviço desta API
    return;
  }
  //
  $nQtd_Pedidos = 0;   $nQtd_Itens_Pedidos = 0;
  //
  // -- CONFERIR TODOS OS DADOS --
  //
  // Verificar registro de pedidos e montar lista de produtos no pedido se estão cadastrados ou na lista á cadastrar
  $aLst_Pedidos_Existentes = [];
  $aLst_Produtos_Pedido = [];
  $aLst_Prd_Ausente_Ped = [];
  foreach ( $aLst_Pedidos As $aItem_Pedido ) {                   // Alcance : ['PEDIDOS']
    $nFat_CodigoInd = Somente_Numeros( @$aItem_Pedido['Codigo'] )+0;
    //
    if ( $nFat_CodigoInd < 1 ) {
      $aGlobal->Reportar_Erro( 201 );              // ** ERRO: Pedido com codigo de referencia ausente
      return;
    }
    //
    If ( EMPTY($aItem_Pedido['Itens']) ) {
      $aGlobal->Reportar_Erro( 200 );              // ** ERRO: Lista de itens esta ausente no pedido
      return;
    }
    //
    // Preparar variáveis para inserir pedido na filial
    $nTrm_CodigoSim = $aGlobal->nSim_Emp_CodigoI;
    $nCodigo_Filial = Somente_Numeros(  @$aItem_Pedido['Codigo_Filial'] )+0;
    If ( $nCodigo_Filial > 0 ) {
      $nTrm_Mz_CodSim = $nTrm_CodigoSim;
      $nTrm_CodigoSim = $nCodigo_Filial;
    }
    //
    $aReg_Fat_Geral = P_SQL_Fat_Geral( $nTrm_CodigoSim, $nFat_CodigoInd );
    If ( ! EMPTY( $aReg_Fat_Geral ) ) {
      $aLst_Pedidos_Existentes[] = $nFat_CodigoInd;
    }
    //
    $aLst_Itens = $aItem_Pedido['Itens'];
    foreach ( $aLst_Itens As $aItem ) {                          // Alcance : ['PEDIDOS'][0]['Itens']
      If ( EMPTY($aItem['Produtos']) ) {
        $aGlobal->Reportar_Erro( 200 );            // ** ERRO: Lista de itens esta ausente no pedido
        return;
      }
      $aLst_Produtos_Tmp = $aItem['Produtos'];
      foreach ( $aLst_Produtos_Tmp As $nIte_CodigoInd ) {        // Alcance : ['PEDIDOS'][0]['Itens'][0]['Produtos']
        $nIte_CodigoInd = Somente_Numeros($nIte_CodigoInd)+0;
        If ( $nIte_CodigoInd < 1 ) { continue; }
        $aLst_Produtos_Pedido[$nIte_CodigoInd] = 0;
      }
    }
  }
  // Verificar se há pedidos já registrados
  If ( ! EMPTY( $aLst_Pedidos_Existentes ) ) {
    $aGlobal->aRetornoMod_JSon =
      [ 'Sucesso'            => False,
        'Pedidos_Existentes' => $aLst_Pedidos_Existentes
      ];
    return;  
  }
  // Separar todos código de produtos que estão no pedido e não estão com a carga de dados
  foreach ( $aLst_Produtos As $aItem_Produto ) {                 // Alcance : ['PRODUTOS']
    $nIte_CodigoInd = Somente_Numeros( @$aItem_Produto['Codigo'] );
    If ( $nIte_CodigoInd < 1 ) { continue; }
    $aLst_Produtos_Pedido[$nIte_CodigoInd] = 1;
  }
  // Separar todos os código de produtos que estão ausente no pedido junto com a carga
  foreach ( $aLst_Produtos_Pedido As $nIte_CodigoInd => $bPrd_Presente_Lst ) {
    If ( $bPrd_Presente_Lst ) { continue; }
    $aLst_Prd_Ausente_Ped[] = $nIte_CodigoInd;
  }
  // Conferir produtos ausentes na carga se estão cadastrados
  If ( ! EMPTY( $aLst_Prd_Ausente_Ped ) ) {
    $sLst_Prd_Ausente_Ped = implode(',',$aLst_Prd_Ausente_Ped);
    $aCad_Produtos = P_SQL_Cad_Produtos( $aGlobal->nSim_Emp_CodigoI, $sLst_Prd_Ausente_Ped );
    $aTmp = $aLst_Prd_Ausente_Ped;
    $aLst_Prd_Ausente_Ped = [];
    foreach ( $aTmp As $nIte_CodigoInd ) {
      If ( (@$aCad_Produtos[$nIte_CodigoInd]['ITE_CODIGOIND']+0) == $nIte_CodigoInd ) {
        continue;
      }
      $aLst_Prd_Ausente_Ped[] = $nIte_CodigoInd;
    }
  }
  // Se houver produtos ausente na carga e no cadastro
  If ( ! EMPTY( $aLst_Prd_Ausente_Ped ) ) {
    $aGlobal->aRetornoMod_JSon =
      [ 'Sucesso'           => False,
        'Produtos_Ausentes' => $aLst_Prd_Ausente_Ped
      ];
    return;  
  }
  //
  // -- REGISTRAR TODOS OS DADOS --
  //
  // Cadastrar produtos novos
  $aLst_Produtos_Novos = [];       // Lista de novos produtos a serem incluídos
  $aLst_Produtos_Cnslt = [];       // Lista para efetuar consulta no banco de dados
  foreach ( $aLst_Produtos As $aItem_Produto ) {                 // Alcance : ['PRODUTOS']
    $nIte_CodigoInd = Somente_Numeros( @$aItem_Produto['Codigo'] );
    If ( $nIte_CodigoInd < 1 ) { continue; }
    $aLst_Produtos_Novos[$nIte_CodigoInd] = 1;    // Incluir novo produto
    $aLst_Produtos_Cnslt[] = $nIte_CodigoInd;
  }
  // Consultar banco de dados
  If ( ! EMPTY($aLst_Produtos_Novos) ) {
    $aCad_Produtos = P_SQL_Cad_Produtos( $aGlobal->nSim_Emp_CodigoI, implode(',',$aLst_Produtos_Cnslt) );
    foreach ( $aCad_Produtos As $nIte_CodigoInd => $aItem ) {
      $aLst_Produtos_Novos[$nIte_CodigoInd] = 0;  // Não incluir novo produto
    }
  }
  // Incluir ou atualizar produtos
  foreach ( $aLst_Produtos As $aItem_Produto ) {
    $nIte_CodigoInd = Somente_Numeros(@$aItem_Produto['Codigo'])+0;
    $sIte_Cod_Livre = @$aItem_Produto['Codigo_Livre'];
    $sIte_Descricao = @$aItem_Produto['Descricao'];
    $sIte_SgUnidade = @$aItem_Produto['Sigla_Unitaria'];
    If ( $nIte_CodigoInd < 1 ) { continue; }
    $bNovo_Cadastro = @$aLst_Produtos_Novos[$nIte_CodigoInd] > 0;
    // Inserir novo cadastro
    If ( $bNovo_Cadastro ) {
      $sSQLQuery =
       'INSERT INTO '.
         'cad_produto '.
       '('.
         'ITE_CODIGOSIM, ITE_CODIGOIND'.
       ') VALUE ('.
         $aGlobal->nSim_Emp_CodigoI.','.$nIte_CodigoInd.
       ');';
      SQL_Query( $sSQLQuery );
    }
    // Atualizar dados no cadastro
    $sSQLQuery =
      'UPDATE '.
        'cad_produto '.
      'SET '.
        'ITE_COD_LIVRE = "'.stripslashes($sIte_Cod_Livre).'",'.
        'ITE_DESCRICAO = "'.stripslashes($sIte_Descricao).'",'.
        'ITE_SGUNIDADE = "'.stripslashes($sIte_SgUnidade).'" '.
      'WHERE ITE_CODIGOSIM='.$aGlobal->nSim_Emp_CodigoI.' '.
        'AND ITE_CODIGOIND='.$nIte_CodigoInd.' '.
      ';';
    SQL_Query( $sSQLQuery );
    //
  }
  //
  // -- Registrar pedidos --
  foreach ( $aLst_Pedidos As $aItem_Pedido ) {
    $nFat_CodigoInd = Somente_Numeros(  @$aItem_Pedido['Codigo'           ] )+0;
    $nFat_Sequencia = Somente_Numeros(  @$aItem_Pedido['Comanda'          ] )+0;
    $nCodigo_Filial = Somente_Numeros(  @$aItem_Pedido['Codigo_Filial'    ] )+0;
    $nFat_CodigoEnt = Somente_Numeros(  @$aItem_Pedido['Entregador_Codigo'] )+0;
    $nFat_Pd_ValPro = Somente_Numeros(  @$aItem_Pedido['Valor_Produtos'   ],'.' )+0;
    $nFat_Pd_ValEnt = Somente_Numeros(  @$aItem_Pedido['Valor_Entrega'    ],'.' )+0;
    $nFat_Pd_ValDsc = Somente_Numeros(  @$aItem_Pedido['Valor_Desconto'   ],'.' )+0;
    $nFat_Pd_ValRcb = Somente_Numeros(  @$aItem_Pedido['Valor_a_Receber'  ],'.' )+0;
    $sFat_Pd_Observ =                   @$aItem_Pedido['Observacao'       ] ;
    $aDados_Pagamnt =                   @$aItem_Pedido['Pagamento'        ] ;       // -> Pagamento
    $bFat_Pd_E_Pago = Somente_Numeros(@$aDados_Pagamnt['Esta_Pago'        ] )+0;
    $sFat_Pd_ModPag =                 @$aDados_Pagamnt['Modalidade'       ] ;
    $nFat_Pd_ValTrc = Somente_Numeros(@$aDados_Pagamnt['Troco_para'       ],'.' )+0;
    $aDados_Cliente =                   @$aItem_Pedido['Cliente'          ] ;       // -> Cliente
    $nCad_CodigoInd = Somente_Numeros(@$aDados_Cliente['Codigo'           ] )+0;
    $sCad_Nome_Cmpl =                 @$aDados_Cliente['Nome'             ] ;
    $aCad_Telefones =                 @$aDados_Cliente['Telefone'         ] ;       // -> Cliente -> Telefones
    $aCad_DEndereco =                 @$aDados_Cliente['Endereco'         ] ;       // -> Cliente -> Endereço
    $sCad_End_Logra =                 @$aCad_DEndereco['Logradouro'       ] ;
    $nCad_End_Numer = Somente_Numeros(@$aCad_DEndereco['Numero'           ] )+0;
    $sCad_End_Compl =                 @$aCad_DEndereco['Complemento'      ] ;
    $sCad_End_Bairr =                 @$aCad_DEndereco['Bairro'           ] ;
    $nCad_End_N_Cep = Somente_Numeros(@$aCad_DEndereco['Cep'              ] )+0;
    $sCad_End_Cidad =                 @$aCad_DEndereco['Cidade_UF'        ] ;
    $aLista_PdItens =                   @$aItem_Pedido['Itens'            ] ;       // -> Itens
    //
    $nTrm_CodigoSim = $aGlobal->nSim_Emp_CodigoI;
    $nTrm_Mz_CodSim = 0;
    //
    // Preparar variáveis para inserir pedido na filial
    If ( $nCodigo_Filial > 0 ) {
      $nTrm_Mz_CodSim = $nTrm_CodigoSim;
      $nTrm_CodigoSim = $nCodigo_Filial;
    }
    //
    // Inserir registro do pedido
    $sSQLQuery =
     'INSERT INTO '.
       'fat_geral '.
     '('.
       'FAT_CODIGOSIM, FAT_CODIGOIND, FAT_DTHR_REGP, FAT_MZ_CODSIM, FAT_BLOQUEADO'.
     ') VALUE ('.
       $nTrm_CodigoSim.','.$nFat_CodigoInd.',NOW(),'.$nTrm_Mz_CodSim.',1'.
     ');';
    SQL_Query( $sSQLQuery );
    // Verificar se o cliente já existe
    $aCad_Cliente = P_SQL_Cad_Clientes( $aGlobal->nSim_Emp_CodigoI, $nCad_CodigoInd );
    If ( EMPTY($aCad_Cliente) ) {
      // Inserir novo cadastro do cliente
      $sSQLQuery =
       'INSERT INTO '.
         'cad_cliente '.
       '('.
         'CAD_CODIGOSIM, CAD_CODIGOIND'.
       ') VALUE ('.
         $aGlobal->nSim_Emp_CodigoI.','.$nCad_CodigoInd.
       ');';
      SQL_Query( $sSQLQuery );
    }
    // Atualizar cadastro do cliente
    If ( ! EMPTY($sCad_Nome_Cmpl) ) {
      $sSQLQuery =
        'UPDATE '.
          'cad_cliente '.
        'SET '.
          'CAD_NOME_CMPL ="'.     stripslashes($sCad_Nome_Cmpl)     .'",'.
          'CAD_TELEFONE1 = '.(Somente_Numeros(@$aCad_Telefones[0])+0).','.
          'CAD_TELEFONE2 = '.(Somente_Numeros(@$aCad_Telefones[1])+0).','.
          'CAD_END_LOGRA ="'.     stripslashes($sCad_End_Logra)     .'",'.
          'CAD_END_NUMER = '.                  $nCad_End_Numer       .','.
          'CAD_END_COMPL ="'.     stripslashes($sCad_End_Compl)     .'",'.
          'CAD_END_BAIRR ="'.     stripslashes($sCad_End_Bairr)     .'",'.
          'CAD_END_N_CEP = '.                  $nCad_End_N_Cep       .','.
          'CAD_END_CIDAD ="'.     stripslashes($sCad_End_Cidad)     .'" '.
        'WHERE CAD_CODIGOSIM='.$aGlobal->nSim_Emp_CodigoI.' '.
          'AND CAD_CODIGOIND='.$nCad_CodigoInd.' '.
        ';';
      SQL_Query( $sSQLQuery );
    }
    // Remover registros de itens do pedido se houver
    $sSQLQuery = 'DELETE FROM fat_item WHERE FAT_CODIGOSIM='.$nTrm_CodigoSim.' AND FAT_CODIGOGER='.$nFat_CodigoInd.';';
    SQL_Query( $sSQLQuery );
    // Inserir itens do pedido
    foreach ( $aLista_PdItens As $aItem ) {                       // Alcance : ['PEDIDOS'][0]['Itens']
      $nFti_CodigoInd = Somente_Numeros(@$aItem['Codigo'         ] )+0;
      $aFti_CProdutos =                 @$aItem['Produtos'       ] ;
      $nFti_Qtde_Item = Somente_Numeros(@$aItem['Quantidade'     ] ,'.')+0;
      $sFti_Sigla_Tip =                 @$aItem['Tipo_Sigla'     ] ;
      $sFti_Descr_Tip =                 @$aItem['Tipo_Descricao' ] ;
      $sFti_Opcionais =                 @$aItem['Opcionais_Lista'] ;
      $nFti_Pd_ValOpc = Somente_Numeros(@$aItem['Opcionais_Valor'] ,'.')+0;
      //
      $sFti_Lst_Combo =                 @$aItem['Combo_Lista'] ;
      $nFti_Pd_ValCmb = Somente_Numeros(@$aItem['Combo_Valor'] ,'.')+0;
      //
      $nFti_Pd_ValPro = Somente_Numeros(@$aItem['Valor_Total'    ] ,'.')+0;
      $sFti_Pd_Observ =                 @$aItem['Observacoes'    ] ;
      //
      $sSQLQuery =
       'INSERT INTO '.
         'fat_item '.
       'SET '.
         'FAT_CODIGOSIM = '.                  $nTrm_CodigoSim        .','.
         'FAT_CODIGOGER = '.                  $nFat_CodigoInd        .','.
         'FAT_CODIGOIND = '.                  $nFti_CodigoInd        .','.
         'FAT_COD_ITE_1 = '.(Somente_Numeros(@$aFti_CProdutos[0]) +0).','.
         'FAT_COD_ITE_2 = '.(Somente_Numeros(@$aFti_CProdutos[1]) +0).','.
         'FAT_COD_ITE_3 = '.(Somente_Numeros(@$aFti_CProdutos[2]) +0).','.
         'FAT_COD_ITE_4 = '.(Somente_Numeros(@$aFti_CProdutos[3]) +0).','.
         'FAT_QTDE_ITEM = '.                  $nFti_Qtde_Item        .','.
         'FAT_SIGLA_TIP ="'.     stripslashes($sFti_Sigla_Tip)      .'",'.
         'FAT_DESCR_TIP ="'.     stripslashes($sFti_Descr_Tip)      .'",'.
         'FAT_OPCIONAIS ="'.     stripslashes($sFti_Opcionais)      .'",'.
         'FAT_PD_OBSERV ="'.     stripslashes($sFti_Pd_Observ)      .'",'.
         'FAT_PD_VALOPC = '.                  $nFti_Pd_ValOpc       .','.
         'FAT_LST_COMBO ="'.     stripslashes($sFti_Lst_Combo)      .'",'.
         'FAT_PD_VALCMB = '.                  $nFti_Pd_ValCmb       .','.
         'FAT_PD_VALPRO = '.                  $nFti_Pd_ValPro       .' '.
       ';';
      SQL_Query( $sSQLQuery );
      $nQtd_Itens_Pedidos++;
      //
    }
    // Atualizar registro do pedido
    $sSQLQuery =
      'UPDATE '.
        'fat_geral '.
      'SET '.
        'FAT_SEQUENCIA = '.$nFat_Sequencia.','.
        'FAT_CODIGOENT = '.$nFat_CodigoEnt.','.
        'FAT_CODIGOCLI = '.$nCad_CodigoInd.','.
        'FAT_PD_E_PAGO = '.$bFat_Pd_E_Pago.','.
        'FAT_PD_VALPRO = '.$nFat_Pd_ValPro.','.
        'FAT_PD_VALENT = '.$nFat_Pd_ValEnt.','.
        'FAT_PD_VALDSC = '.$nFat_Pd_ValDsc.','.
        'FAT_PD_VALRCB = '.$nFat_Pd_ValRcb.','.
        'FAT_PD_VALTRC = '.$nFat_Pd_ValTrc.','.
        'FAT_PD_MODPAG = "'.stripslashes($sFat_Pd_ModPag).'",'.
        'FAT_PD_OBSERV = "'.stripslashes($sFat_Pd_Observ).'",'.
        'FAT_BLOQUEADO = 0 '.
      'WHERE FAT_CODIGOSIM='.$nTrm_CodigoSim.' '.
        'AND FAT_CODIGOIND='.$nFat_CodigoInd.' '.
      ';';
    SQL_Query( $sSQLQuery );
    $nQtd_Pedidos++;
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'            => True,
      'Quantidade_Pedidos' => $nQtd_Pedidos,
      'Quantidade_Itens'   => $nQtd_Itens_Pedidos
    ];
  //
}
//
//
?>