<?php
// ********************************************************
// * Este módulo cuida do movimendo de pedidos de entrega *
// ********************************************************
//
//
// -- Puxar pedidos de entrega --
// Comando: MOB_PED.PUXAR
Function Act_PUXAR() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro >0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  // Verificar se o operador está logado
  If ( ! $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->Reportar_Erro( 148 );              // ** ERRO: E necessário que um operador esteja logado neste terminal
    return;
  }
  // -- Montar lista de pedidos --
  $aLista_Produtos = [];
  $aFat_Geral = P_SQL_Fat_Geral_Cmp_Abertos();
  $aRetorno_Pedidos = [];
  foreach ( $aFat_Geral As $aFtg ) {
    // Criar lista de telefones
    $aLst_Cli_Telefones = [];
    If ( ! EMPTY($aFtg['CAD_TELEFONE1']) ) {  $aLst_Cli_Telefones[] = $aFtg['CAD_TELEFONE1'];  }
    If ( ! EMPTY($aFtg['CAD_TELEFONE2']) ) {  $aLst_Cli_Telefones[] = $aFtg['CAD_TELEFONE2'];  }
    // 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;  }
        $aLst_Produtos[] = $nFat_Cod_Item;
        $aLista_Produtos[ $nFat_Cod_Item ] = true;
      }
      //
      $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),
          '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),
        'Data_Hora'         =>  $aFtg['FAT_DTHR_REGP'],
        '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' => $aLst_Cli_Telefones,
            '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']
              ]
          ],
        'Itens' => $aLista_PdItens
      ];
    //
    $aRetorno_Pedidos[] = $aItem_Pedido;
    //
  }
  // -- Montar lista de produtos incluso nos pedidos --
  $aCodigos_Produtos = [];
  foreach ( $aLista_Produtos As $nIte_CodigoInd => $aItem ) {
    $aCodigos_Produtos[] = $nIte_CodigoInd;
  }
  If ( ! EMPTY($aCodigos_Produtos) ) {
    $aCad_Produtos = P_SQL_Cad_Produtos( $aGlobal->nSim_Emp_CodigoI, explode(',',$aCodigos_Produtos) );
  }
  $aLista_Produtos = [];
  foreach ( $aCad_Produtos As $aItem ) {
    //
    $aItem_Produto = 
      [ 'Codigo'         => ($aItem['ITE_CODIGOIND']+0),
        'Codigo_Livre'   =>  $aItem['ITE_COD_LIVRE'],
        'Descricao'      =>  $aItem['ITE_DESCRICAO'],
        'Sigla_Unitaria' =>  $aItem['ITE_SGUNIDADE']
      ];
    $aLista_Produtos[] = $aItem_Produto;
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'  => True,
      'PEDIDOS'  => $aRetorno_Pedidos,
      'PRODUTOS' => $aLista_Produtos
    ];
  return;
}
//
//
// -- Puxar pedidos de entrega formato 2 : Solicitado pelo André Luiz 17/12/2019 --
// Comando: MOB_PED.PUXAR_FM2
Function Act_PUXAR_FM2() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro >0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  // Verificar se o operador está logado
  If ( ! $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->Reportar_Erro( 148 );              // ** ERRO: E necessário que um operador esteja logado neste terminal
    return;
  }
  // -- Montar lista de pedidos --
  $aFat_Geral = P_SQL_Fat_Geral_Cmp_Abertos();
  $aRetorno_Pedidos = [];
  foreach ( $aFat_Geral As $aFtg ) {
    $dFat_Dh_FilAct = ConvertDtHrSTR( @$aFtg['FAT_DH_FILACT'] )+0;
    $dFat_Dh_HabEnt = ConvertDtHrSTR( @$aFtg['FAT_DH_HABENT'] )+0;
    $nFat_Dh_Captur = ConvertDtHrSTR( @$aFtg['FAT_DH_CAPTUR'] )+0;
    $nFat_Mz_CodSim = @$aFtg['FAT_MZ_CODSIM']+0;
    If ( $nFat_Mz_CodSim > 0 && $dFat_Dh_HabEnt == 0 ) {
      continue;   // ** Bloquear os registros de filiais que não importaram
    }
    // 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 );
    // 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( $aGlobal->nSim_Emp_CodigoI, $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),
          '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),
        '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
      ];
    //
    $aRetorno_Pedidos[] = $aItem_Pedido;
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'  => True,
      'PEDIDOS'  => $aRetorno_Pedidos
    ];
  return;
}
//
//
// -- Puxar somente o status dos pedidos em aberto --
// Comando: MOB_PED.STATUS
Function Act_STATUS() {
  Global $aGlobal;
  // Conferir sessão
  $nRetorno_Erro = $aGlobal->Capturar_Dados_Sessao_Terminal();
  If ( $nRetorno_Erro >0 ) {
    $aGlobal->Reportar_Erro( $nRetorno_Erro );
    return;
  }
  // Verificar se o operador está logado
  If ( ! $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->Reportar_Erro( 148 );              // ** ERRO: E necessário que um operador esteja logado neste terminal
    return;
  }
  //
  $nQtd_Nao_Listados  = 0;
  $aCodigos_Fat_Geral = @$aGlobal->aDados_Recebidos['CODIGOS_DOS_PEDIDOS'];  // Ex: [ 1000, 1001, 1002 ]
  $sCodigos_Fat_Geral = implode(',',$aCodigos_Fat_Geral);
  // -- Montar lista de pedidos --
  $aFat_Geral = P_SQL_Fat_Geral( $aGlobal->nSim_Emp_CodigoI );
  $aRetorno_Pedidos = [];
  foreach ( $aFat_Geral As $aFtg ) {
    If (    (@$aFtg['FAT_BLOQUEADO']+0) == 0
         && ( (@$aFtg['FAT_CODIGOENT']+0)==0  ||  (@$aFtg['FAT_CODIGOENT']+0) == $aGlobal->aSessao_Terminal['Operador_Indice'] )
       ) {
    } else {
      continue;
    }
    // Condicionamento de atribuição do status do pedido
    $sStatus_Pedido = Capturar_Status_Pedido( $aFtg );
    /*
    $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 ( $dFat_Dh_Aceito > 0 ) {
      $sStatus_Pedido = 'ACEITO';
//      If ( $dFat_Dh_Retira > 0 ) {
        //$sStatus_Pedido = 'COLETADO';
        If ( $dFat_Dh_Entreg > 0 ) {
          $sStatus_Pedido = 'ENTREGUE';
        }
//      }
    }
    If ( $dFat_Dh_Recusa > 0 ) {
      $sStatus_Pedido = 'RECUSADO';
    }
    If ( $dFat_Dh_Finali > 0 ) {
      $sStatus_Pedido = 'FINALIZADO';
    }
    */
    //
    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
      ];
    $aRetorno_Pedidos[] = $aItem_Pedido;
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso'          => True,
      'Qtd_Nao_Listados' => $nQtd_Nao_Listados,
      'PEDIDOS'          => $aRetorno_Pedidos
    ];
  return;
}
//
//
// -- Altera o status nos pedidos --
// Comando: MOB_PED.ALTERAR_STATUS
Function Act_ALTERAR_STATUS() {
  Global $aGlobal;
  //
  $aLst_Pedidos = @$aGlobal->aDados_Recebidos['PEDIDOS'];
  If ( EMPTY($aLst_Pedidos) ) {
    $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 o operador está logado
  If ( ! $aGlobal->aSessao_Terminal['Operador_Logado'] ) {
    $aGlobal->Reportar_Erro( 148 );              // ** ERRO: E necessário que um operador esteja logado neste terminal
    return;
  }
  //
  $aTmp_Pedidos = $aLst_Pedidos;
  $aLst_Pedidos = [];
  foreach ( $aTmp_Pedidos As $aItem_Pedido ) {
    $nItem_Codigo = @$aItem_Pedido['Codigo']+0;
    $sItem_Status = @$aItem_Pedido['Status'];
    $aLst_Pedidos[$nItem_Codigo] = $sItem_Status;
    $aCodigos_Fat_Geral[] = $nItem_Codigo;
  }
  $sCodigos_Fat_Geral = implode(',',$aCodigos_Fat_Geral);
  //
  $aReturno_Pedidos = [];
  foreach ( $aCodigos_Fat_Geral As $nFat_CodigoInd ) {
    $aReturno_Pedidos[$nFat_CodigoInd] = False;
  }
  //
  $aFat_Geral = P_SQL_Fat_Geral( $aGlobal->nSim_Emp_CodigoI, '', True );
  foreach ( $aFat_Geral As $aFtg ) {
    $nFat_CodigoInd = $aFtg['FAT_CODIGOIND']+0;
    $nFat_Mz_CodSim = @$aFtg['FAT_MZ_CODSIM']+0;
    $dFat_Dh_FilAct = ConvertDtHrSTR( @$aFtg['FAT_DH_FILACT'] );
    $dFat_Dh_HabEnt = ConvertDtHrSTR( @$aFtg['FAT_DH_HABENT'] );
    $dFat_Dh_Captur = ConvertDtHrSTR( @$aFtg['FAT_DH_CAPTUR'] );
    $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'] );
    $nFat_CodigoEnt = Somente_Numeros( $aFtg['FAT_CODIGOENT'] )+0;
    $sItem_Status   = @$aLst_Pedidos[$nFat_CodigoInd];
    $bGrava_SQL     = False;
    //
    If ( EMPTY( $sItem_Status ) ) { continue; }
    If ( $nFat_Mz_CodSim > 0  &&  $dFat_Dh_HabEnt == 0 ) { continue; }
    //
    switch ( $sItem_Status ) {
      //
      case 'ACEITO':
        If ( ! ( $dFat_Dh_Aceito == 0  &&  $dFat_Dh_Retira == 0 &&     // Status atual: DISPONIVEL
                 $dFat_Dh_Entreg == 0  &&  $dFat_Dh_Recusa == 0 &&
               ( $nFat_CodigoEnt == 0  ||  $nFat_CodigoEnt == $aGlobal->aSessao_Terminal['Operador_Indice'] )
           ) ) {
          continue;
        }
        $nFat_CodigoEnt = $aGlobal->aSessao_Terminal['Operador_Indice'];
        $dFat_Dh_Aceito = TIME();
        $dFat_Dh_Retira = TIME();
        $bGrava_SQL = True;
      break;
      /*
      case 'ACEITO':
        If ( ! ( $dFat_Dh_Aceito == 0  &&  $dFat_Dh_Retira == 0 &&     // Status atual: DISPONIVEL
                 $dFat_Dh_Entreg == 0  &&  $dFat_Dh_Recusa == 0 &&
               ( $nFat_CodigoEnt == 0  ||  $nFat_CodigoEnt == $aGlobal->aSessao_Terminal['Operador_Indice'] )
           ) ) {
          continue;
        }
        $dFat_Dh_Aceito = TIME();
        $nFat_CodigoEnt = $aGlobal->aSessao_Terminal['Operador_Indice'];
        $bGrava_SQL = True;
      break;
      //
      case 'COLETADO':
        If ( ! ( $dFat_Dh_Aceito >  0  &&  $dFat_Dh_Retira == 0 &&     // Status atual: ACEITO
                 $dFat_Dh_Entreg == 0  &&  $dFat_Dh_Recusa == 0 &&
                 $nFat_CodigoEnt == $aGlobal->aSessao_Terminal['Operador_Indice']
           ) ) {
          continue;
        }
        $dFat_Dh_Retira = TIME();
        $bGrava_SQL = True;
      break;
      */
      //
      case 'ENTREGUE':
        If ( ! ( $dFat_Dh_Aceito >  0  &&  
                 $dFat_Dh_Entreg == 0  &&  $dFat_Dh_Recusa == 0 &&
                 $nFat_CodigoEnt == $aGlobal->aSessao_Terminal['Operador_Logado']
           ) ) {
          continue;
        }
        $dFat_Dh_Entreg = TIME();
        $bGrava_SQL = True;
      break;
      //
      case 'RECUSADO':
        If ( ! ( $dFat_Dh_Entreg == 0  &&  $dFat_Dh_Recusa == 0 &&
                 $nFat_CodigoEnt == $aGlobal->aSessao_Terminal['Operador_Logado']
           ) ) {
          continue;
        }
        $dFat_Dh_Recusa = TIME();
        $bGrava_SQL = True;
      break;
      //
    }
    //
    If ( $bGrava_SQL ) {
      //
      $sSQLQuery =
        'UPDATE '.
          'fat_geral '.
        'SET '.
          'FAT_DH_ACEITO = "'.C_TimeSt_StrDtHr_US( $dFat_Dh_Aceito ).'",'.
          'FAT_DH_RETIRA = "'.C_TimeSt_StrDtHr_US( $dFat_Dh_Retira ).'",'.
          'FAT_DH_ENTREG = "'.C_TimeSt_StrDtHr_US( $dFat_Dh_Entreg ).'",'.
          'FAT_DH_RECUSA = "'.C_TimeSt_StrDtHr_US( $dFat_Dh_Recusa ).'",'.
          'FAT_CODIGOENT = '.                      $nFat_CodigoEnt   .' '.
        'WHERE FAT_CODIGOSIM='.$aGlobal->nSim_Emp_CodigoI.' '.
          'AND FAT_CODIGOIND='.$nFat_CodigoInd.' '.
        ';';

		
      SQL_Query( $sSQLQuery );
      //
      $aReturno_Pedidos[$nFat_CodigoInd] = True;
    }
    //
  }
  //
  $aGlobal->aRetornoMod_JSon =
    [ 'Sucesso' => True,
      'PEDIDOS' => $aReturno_Pedidos
    ];
  return;
  //
}
//
//
?>