;** ANALISEP *******************************************************************
;* An lise de Cr‚dito para Pedidos                                             *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 06/05/2015 por Bruno Carvalho          
;Ultima Alteracao: 11/05/2015 por Bruno Carvalho                            
;Motivo Alteracao: Ajustes p/ #0112# na proc Ativa_Regra()                                
;Ultima Alteracao: 19/05/2015 por Bruno Carvalho                            
;Motivo Alteracao: Adicionado parƒmetro PEDIDOS_AVENCER na proc Verifica_Aprovados()
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes libera‡Æo para avalia‡Æo cliente 0345             
;Ultima Alteracao: 13/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()                 
;Ultima Alteracao: 14/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes liberado #0227
;Ultima Alteracao: 14/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor total do pedido sobre itens
;Ultima Alteracao: 07/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog     

;*******************************************************************************
; Analisando Credito                                                           *
;*******************************************************************************
Proc Analisa()
Aguarde("Aguarde, Verificando os Pedidos para Analise")

If VSDGREPRESEN<>""
   Then {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
        Moveto [Codigo do Representante] Example "crep"
        If Not IsBlank(VSDGGERENCIA)
           Then Moveto [Codigo da Gerencia] TypeIn "~VSDGGERENCIA.."
        EndIf
EndIf         
{Ask} TypeIn "\\Sistemas\\Vendas\\PedidoC" Enter
Moveto [Numero do Pedido        ] Check 
Moveto [Codigo da Empresa       ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa   ] Check                           
Moveto [Codigo do Representante ] Check
If VSDGREPRESEN<>""
   Then Moveto [Codigo do Representante] Example "crep" TypeIn ", ~VSDGREPRESEN.."
EndIf   
Moveto [Nome Fantasia Represent ] Check
Moveto [Data de Emissao         ] Check
Moveto [Data de Entrega         ] Check
Moveto [Data_Inclusao           ] Check
Switch
  Case VSDGOPDATA="1" : Moveto [Data_Inclusao  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDATA="2" : Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDATA="3" : Moveto [Data de Entrega] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
EndSwitch
Moveto [Codigo                  ] Check
Moveto [Nome Fantasia EmitDest  ] Check
Moveto [Razao Social            ] Check
If VSDGSITUACAO="3"
   Then Moveto [Situacao do Pedido] Check TypeIn "ABERTO Or SUSPENSO"
   Else Moveto [Situacao do Pedido] Check TypeIn "~VSDGNOMSITUACAO.."
EndIf    
Moveto [Situacao do Cliente     ] Check
Moveto [Cidade                  ] Check
Moveto [Forma de Pagamento      ] Check
Moveto [Condicao de Pagamento   ] Check
Moveto [Descricao CondPagto     ] Check
Moveto [Valor Nota Fiscal       ] Check
Moveto [Descricao da Destinacao ] Check TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Empty Tabela
        Return 
EndIf                

Aguarde("Aguarde, Preparando os Pedidos para Analise")
{Ask} {Answer}
Moveto [Numero do Pedido        ] TypeIn "_NPed"
Moveto [Codigo da Empresa       ] TypeIn "_CodP"
Moveto [Nome Fantasia Empresa   ] TypeIn "_NFanE"                           
Moveto [Codigo do Representante ] TypeIn "_CodR"
Moveto [Nome Fantasia Represent ] TypeIn "_NFanR"
Moveto [Data de Emissao         ] TypeIn "_DatM"
Moveto [Data de Entrega         ] TypeIn "_DatG"
Moveto [Data_Inclusao           ] TypeIn "_DatI"
Moveto [Codigo                  ] TypeIn "_Cod"
Moveto [Nome Fantasia EmitDest  ] TypeIn "_NFanC"
Moveto [Razao Social            ] TypeIn "_RazS"
Moveto [Situacao do Pedido      ] TypeIn "_SitP" 
Moveto [Situacao do Cliente     ] TypeIn "_SitC"
Moveto [Cidade                  ] TypeIn "_Cid"
Moveto [Forma de Pagamento      ] TypeIn "_FPag"
Moveto [Condicao de Pagamento   ] TypeIn "_CondP"
Moveto [Descricao CondPagto     ] TypeIn "_DescP"
Moveto [Valor Nota Fiscal       ] TypeIn "_VrNF"
Moveto [Descricao da Destinacao ] TypeIn "_Dest"

{Ask} TypeIn Tabela Enter TypeIn "Fast Insert" Enter
Moveto [Numero do Pedido        ] TypeIn "_NPed"
Moveto [Codigo da Empresa       ] TypeIn "_CodP"
Moveto [Nome Fantasia Empresa   ] TypeIn "_NFanE"                           
Moveto [Codigo do Representante ] TypeIn "_CodR"
Moveto [Nome Fantasia Represent ] TypeIn "_NFanR"
Moveto [Data de Emissao         ] TypeIn "_DatM"
Moveto [Data de Entrega         ] TypeIn "_DatG"
Moveto [Data_Inclusao           ] TypeIn "_DatI"
Moveto [Codigo                  ] TypeIn "_Cod"
Moveto [Nome Fantasia EmitDest  ] TypeIn "_NFanC"
Moveto [Razao Social            ] TypeIn "_RazS"
Moveto [Situacao do Pedido      ] TypeIn "_SitP" 
Moveto [Situacao do Cliente     ] TypeIn "_SitC"
Moveto [Cidade                  ] TypeIn "_Cid"
Moveto [Forma de Pagamento      ] TypeIn "_FPag"
Moveto [Condicao de Pagamento   ] TypeIn "_CondP"
Moveto [Descricao CondPagto     ] TypeIn "_DescP"
Moveto [Valor Nota Fiscal       ] TypeIn "_VrNF"
Moveto [Operacao                ] TypeIn "_Dest"
Do_It!
ClearAll

EndProc ;Analisa()      

;*******************************************************************************
; Verificando Titulos                                                          *
;*******************************************************************************
Proc Verifica_Titulos()    

{Ask} TypeIn Tabela Enter
Moveto [Codigo                ] TypeIn "_Cod"
{Ask} {\\Sistemas\\CtaRec\\Duplic}
Moveto [Numero do Lancamento  ] Check
Moveto [Codigo do Destinatario] Check TypeIn "_Cod"
Moveto [Saldo do Documento    ] Check
Moveto [Data de Vencimento    ] Check
Do_It!
ClearAll

If IsEmpty("Answer") 
   Then Return
   Else Sort "Answer" On "Codigo do Destinatario" 
EndIf

View "Answer"
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Titulos Vencidos/A Vencer "+BARRA_STRING)
  
  TOTAV_7 = ""
  TOTAV   = 0
  TOTV    = 0
  CODIGO  = [Codigo]
  
  Moveto "Answer"
  Moveto [Codigo do Destinatario]
  Locate CODIGO
  If RetVal
     Then While [Codigo do Destinatario]=CODIGO
            If [Saldo do Documento]>0.01
               Then If [Data de Vencimento]>=Today() 
                       Then TOTAV = TOTAV + [Saldo do Documento]
                            If PEDIDOS_AVENCER
                               Then If [Data de Vencimento]<=(Today()+7)
                                       Then TOTAV_7="S"   
                                    EndIf
                            EndIf
                       Else TOTV  = TOTV  + [Saldo do Documento]
                    EndIf
  					EndIf
  					Skip
  					If EOT() Then QuitLoop EndIf
            Locate Next CODIGO
            If Not RetVal Then QuitLoop EndIf
  				EndWhile
  EndIf
  Moveto Tabela
  If TOTAV > 0   Then [Titulos_AVencer]=TOTAV         EndIf
  If TOTV > 0    Then [Titulos_Vencidos]=TOTV         EndIf
  If TOTAV_7<>"" Then [Titulos_AVencer_7Dias]=TOTAV_7 EndIf
EndScan
Do_It!            
ClearAll

EndProc ;Verifica_Titulos() 

;*******************************************************************************
; Verificando Pedidos                                                          *
;*******************************************************************************
Proc Verifica_Pedidos()
private vrtot, vrunit

View "\\Sistemas\\Vendas\\PedidoI"
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Saldo dos Pedidos "+BARRA_STRING)
  
  [Valor Nota Fiscal]=SomaItensPedidos([Numero do Pedido])
EndScan
Do_It!            
ClearAll                                     

EndProc ;Verifica_Pedidos()

;*******************************************************************************
; Verificando Outros Pedidos                                                   *
;*******************************************************************************
Proc Verifica_OutrosPedidos()
private vrtot, vrunit

{Ask} TypeIn Tabela Enter
Moveto [Codigo                 ] TypeIn "_Cod"
{Ask} {\\Sistemas\\Vendas\\PedidoC}
Moveto [Numero do Pedido       ] Check
Moveto [Codigo                 ] Check TypeIn "_Cod"
Moveto [Situacao do Pedido     ] Check TyPein "ABERTO"
Moveto [Descricao da Destinacao] Check TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."

Do_It!
ClearAll

If IsEmpty("Answer") 
   Then Return
   Else Sort "Answer" On "Codigo" 
EndIf

View "\\Sistemas\\Vendas\\PedidoI"
View "Answer"
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Outros Pedidos a Entregar "+BARRA_STRING)
  
  TOTP    = 0
  PEDIDO  = [Numero do Pedido]
  CODIGO  = [Codigo]
  
  Moveto "Answer"
  Moveto [Codigo]
  Locate CODIGO
  If RetVal
     Then While [Codigo]=CODIGO
            If [Numero do Pedido]<>PEDIDO 
               Then
                    TOTP = TOTP + SomaItensPedidos([Answer->Numero do Pedido])
            EndIf
  					Skip
  					If EOT() Then QuitLoop EndIf
            Locate Next CODIGO
            If Not RetVal Then QuitLoop EndIf
  				EndWhile
  EndIf           
  Moveto Tabela
  If TOTP > 0 Then [Pedidos_AEntregar]=TOTP EndIf
EndScan
Do_It!            
ClearAll                                     

EndProc ;Verifica_OutrosPedidos()

;*******************************************************************************
;                                                                              *
;*******************************************************************************
Proc SomaItensPedidos(npedido)
private npedido, ntabela, SOMAP

ntabela=table()

SOMAP=0
Moveto "\\Sistemas\\Vendas\\PedidoI"
Moveto [Numero do Pedido]
Locate npedido
If RetVal
   Then While [Numero do Pedido]=npedido
          If [Quantidade]>[Quantidade Faturada]
             Then 
                  vrtot=      [Preco Total          ]
                  vrtot=vrtot-[Valor Desconto Total ]
                  vrtot=vrtot-[ICMS_Valor_Desonerado]
                  vrtot=vrtot+[Valor do IPI         ]+[ICMS_ST_Valor     ]+[FCP_ST_Valor       ]
                  vrtot=vrtot+[Valor Frete Total    ]+[Valor Seguro Total]+[Valor OutDesp Total]
                  
                  vrunit=vrtot/[Quantidade]
             
                  SOMAP=SOMAP+(vrunit*([Quantidade]-[Quantidade Faturada]))
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
endif

moveto ntabela

return SOMAP
endproc

;*******************************************************************************
; Verificando Cheques                                                          *
;*******************************************************************************
Proc Verifica_Cheques()

{Ask} TypeIn Tabela Enter
Moveto [Codigo                 ] TypeIn "_Cod"
{Ask} {\\Sistemas\\CheqRec\\ChequeI}
Moveto [Numero do Lancamento   ] Check
Moveto [Sequencia do Cheque    ] Check
Moveto [Codigo_Cliente         ] Check TypeIn "_Cod"
Moveto [Situacao               ] Check
Moveto [Valor                  ] Check
Moveto [Data Vencimento        ] Check
Do_It!
ClearAll

If IsEmpty("Answer") 
   Then Return
   Else Sort "Answer" On "Codigo_Cliente" 
EndIf

View "Answer"
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Descontados/Liquidados "+BARRA_STRING)
  
  TOTCQAD = 0
  TOTCQAC = 0
  TOTSEMF = 0
  CODIGO  = [Codigo]
  
  Moveto "Answer"
  Moveto [Codigo_Cliente]
  Locate CODIGO
  If RetVal
     Then While [Codigo_Cliente] = CODIGO
            ;---- Cheques Sem Fundo e A Descontar ------------------------------
            If [Situacao]<>"LIQUIDADO" And [Situacao]<>"EM COBRANCA"  And [Situacao]<>"COBRANCAPGTO" And Search("TROCADO",[Situacao])=0
               Then If [Situacao] = "SEM FUNDO"
                       Then TOTSEMF = TOTSEMF + [Valor]
                       Else TOTCQAD = TOTCQAD + [Valor]
                    EndIf
            EndIf
            ;---- Cheques Compensados ------------------------------------------
            If [Situacao]="LIQUIDADO"
               Then Switch
                      Case SYS_CODIGO_CLIENTE="0157" Or
                           SYS_CODIGO_CLIENTE="0130"  : If [Data Vencimento]>=Today()
 										                                       Then TOTCQAC = TOTCQAC+[Valor]
  	 								                                    EndIf
                      OtherWise                       : If [Data Vencimento]>=(Today()-7)
 										                                       Then TOTCQAC=TOTCQAC+[Valor]
 									                                      EndIf
  									EndSwitch
            EndIf
            Skip
            If EOT() Then QuitLoop EndIf
            Locate Next CODIGO
            If Not RetVal Then QuitLoop EndIf
          EndWhile
  EndIf
  Moveto Tabela  

  If TOTCQAC > 0                Then [Cheques_Liquidados] = TOTCQAC          EndIf
  If TOTCQAD > 0 Or TOTSEMF > 0 Then [Cheques_ADescontar] = TOTCQAD+TOTSEMF  EndIf
  
EndScan
Do_It!
ClearAll
    
EndProc ;Verifica_Cheques()

;*******************************************************************************
; Processando Dados                                                            *
;*******************************************************************************
Proc Verifica_FichaCliente()
             
{Ask} TypeIn Tabela Enter
Moveto [Codigo                 ] TypeIn "_Cod"
{Ask} {\\Sistemas\\Cadastro\\FichaCli}
Moveto [Codigo                 ] Check TypeIn "_Cod"
Moveto [Maior Atraso           ] Check
Moveto [Data do Maior Atraso   ] Check
Moveto [Valor do Maior Atraso  ] Check
Moveto [Numero de Atrasos      ] Check
Moveto [Limite de Credito      ] Check
Moveto [Data_Ultima_Consulta   ] Check
Moveto [Situacao_Consulta      ] Check
Do_It!
ClearAll

If IsEmpty("Answer") 
   Then Return
   Else Sort "Answer" On "Codigo" 
EndIf
   
View "Answer"
CoEdit Tabela            
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Dados Financeiros "+BARRA_STRING)
  
  CODIGO  = [Codigo]
  
  Moveto "Answer"
  Moveto [Codigo]
  Locate CODIGO
  If RetVal
     Then ATRASO_MAIOR = [Maior Atraso         ]
          ATRASO_DATA  = [Data do Maior Atraso ]
          ATRASO_VALOR = [Valor do Maior Atraso]
          ATRASO_FREQ  = [Numero de Atrasos    ]
          LIMITE_CRED  = [Limite de Credito    ]
           
          SPC_DAT = [Data_Ultima_Consulta]
          SPC_SIT = [Situacao_Consulta   ]
          
          Moveto Tabela
          ;---- Referˆncia -> "Disponibilidade" do C_CLieC ---------------------
          LIMITE_DISP  = (LIMITE_CRED - ([Valor Nota Fiscal]+[Pedidos_AEntregar]+[Titulos_AVencer]+[Titulos_Vencidos]+([Cheques_ADescontar]+[Cheques_Liquidados])))
          
          [Atraso_Maior     ] = ATRASO_MAIOR
          [Atraso_Data      ] = ATRASO_DATA
          [Atraso_Valor     ] = ATRASO_VALOR
          [Atraso_Frequencia] = ATRASO_FREQ
          [Limite_Credito   ] = LIMITE_CRED
          If LIMITE_DISP <= 0
             Then [Limite_Disponivel  ] = 0
             Else [Limite_Disponivel  ] = LIMITE_DISP
          EndIf   
          [SPC_Data         ] = SPC_DAT
          [SPC_Situacao     ] = SPC_SIT
          UnLockRecord    
  EndIf   
  Moveto Tabela 
EndScan
Do_It!
ClearAll
   
EndProc ;Verifica_FichaCliente()

;*******************************************************************************
; Verifica Limita‡äes de Clientes com Restri‡Æo                                *
;*******************************************************************************
Proc Verifica_Aprovados()

;----- Para Pedidos APROVADOS -------------------------------------------
;- NAO PODE ESTAR COM A SITUACAO "PESSIMO" OU "RECADASTRO"
;- NAO PODE TER TITULOS EM ATRASO
;- NAO PODE TER CHEQUES COMPENSADOS
;- NAO PODE TER TITULOS A VENCERT ATE HOJE + 7 DIAS
;- TEM QUE TER LIMITE DE CREDITO MAIOR QUE ZERO E DIFERENTE DE BLANKNUM()
;------------------------------------------------------------------------ 

CoEdit Tabela            
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Verificando Clientes Aprovados/Restri‡„o "+BARRA_STRING)  
  
  APROVADO        = False
  OCORRENCIA_ERRO = ""
  
  [Aprovados_Restricao] = "A"
  If (([Situacao do Cliente]<>"PESSIMO"  And [Situacao do Cliente]<>"RECADASTRO") And
      ([Titulos_Vencidos   ]=BlankNum()  Or  [Titulos_Vencidos   ]=0)             And 
      ([Cheques_Liquidados ]=BlankNum()  Or  [Cheques_Liquidados ]=0)             And 
      ([Limite_Disponivel  ]<>BlankNum() And [Limite_Disponivel  ]>0)             And
      ([Titulos_AVencer    ]=BlankNum()  Or  [Titulos_AVencer    ]=0)
     )
     Then APROVADO = True
     Else Switch
            Case [Situacao do Cliente]="PESSIMO" Or [Situacao do Cliente]="RECADASTRO" :
                 OCORRENCIA_ERRO = "Situacao do Cliente"
            Case [Titulos_Vencidos]>0                                                  :
                 OCORRENCIA_ERRO = "Titulos Vencidos"
            Case [Titulos_AVencer]>0 And PEDIDOS_AVENCER                               : 
                 OCORRENCIA_ERRO = "Titulos A Vencer (-7 Dias)"
            Case [Cheques_Liquidados]>0                                                :
                 OCORRENCIA_ERRO = "Cheques Compensandos"
            Case [Limite_Disponivel]=BlankNum() OR [Limite_Disponivel]<=0              :
                 OCORRENCIA_ERRO = "Limite Indisponivel"
          EndSwitch
          APROVADO = False
  EndIf
  If APROVADO Then Loop EndIf
    
  If Not PEDIDOS_SITUACAO
     Then If Search("Situacao",OCORRENCIA_ERRO) > 0
             Then Loop
          EndIf
  EndIf
  
  If Not PEDIDOS_VENCIDOS
     Then If Search("Vencidos",OCORRENCIA_ERRO) > 0
             Then Loop
          EndIf
  EndIf             
         
  If Search("A Vencer",OCORRENCIA_ERRO) > 0
     Then If Not PEDIDOS_AVENCER
             Then Loop
             Else If [Titulos_AVencer_7Dias]=""
                     Then Loop
                  EndIf 
          EndIf   
  EndIf          
                      
  If Not PEDIDOS_CHEQUES
     Then If Search("Cheques",OCORRENCIA_ERRO) > 0
             Then Loop
          EndIf
  EndIf
  
  If Not PEDIDOS_LIMITE
     Then If Search("Limite",OCORRENCIA_ERRO) > 0
             Then Loop
          EndIf
  EndIf     
  
  [Aprovados_Restricao ] = "R"
  If OCORRENCIA_ERRO <> ""
     Then [Ocorrencia_Restricao] = OCORRENCIA_ERRO
  EndIf
EndScan
Do_It!
ClearAll
   
EndProc ;Verifica_Aprovados()

;*******************************************************************************
; Verifica Limita‡äes de Clientes com Restri‡Æo                                *
;*******************************************************************************
Proc Ativa_Regra()

Switch
  Case SYS_CODIGO_CLIENTE="0112" : REGRA="SIT_VEN_CHQ_AVE"
  OtherWise                      : REGRA="SIT_VEN_CHQ_LIM"
EndSwitch

PEDIDOS_SITUACAO = True   ;Situa‡Æo Pessimo e Recadastro
PEDIDOS_VENCIDOS = True   ;Titulos Vencidos                                                 
PEDIDOS_CHEQUES  = True   ;Cheques Compensando
PEDIDOS_LIMITE   = True   ;Limite de Cr‚ditos
PEDIDOS_AVENCER  = True   ;Titulos A Vencer
                                              
Switch
  Case REGRA="SIT_VEN_CHQ_AVE" : PEDIDOS_LIMITE    = False
  Case REGRA="SIT_VEN_CHQ_LIM" : PEDIDOS_AVENCER   = False                               
EndSwitch

EndProc ;Ativa_Regra()

;*******************************************************************************
; Mostra Todos os Pedidos ou Apenas o que possuem Restri‡äes                   *
;*******************************************************************************
Proc Mostrar_Pedidos()

{Ask} TypeIn Tabela Enter TypeIn "Fast Delete" Enter
Moveto [Aprovados_Restricao] TypeIn "A"
Do_It!
ClearAll

EndProc ;Mostrar_Pedidos()

;*******************************************************************************
; Processando Dados                                                            *
;*******************************************************************************
Proc Processa()

If VSDGOPCAO[1] Or VSDGOPCAO[2]
   Then View "\\Sistemas\\Vendas\\PedidoC"
        Coedit Tabela
        Scan
          Barra(NR, RecNo())
          
          PEDIDO = [Numero do Pedido]
                    
          GetRecord "\\Sistemas\\Vendas\\PedidoC" PEDIDO To REG_PEDIDOC
          If Not RetVal Then Loop EndIf
          EXECUTA_ROTINA  = False
          BLOQUEIA_PEDIDO = False
             
          Switch
            Case [Aprovados_Restricao]="A" : PROCESSO = "1"
            Case [Aprovados_Restricao]="R" : PROCESSO = "2"
            OtherWise                      : PROCESSO = ""
          EndSwitch  
             
             
          Switch
            Case PROCESSO = "1" And VSDGOPCAO[1] : If REG_PEDIDOC["Situacao do Pedido"]="SUSPENSO"
                                                      Then BLOQUEIA_PEDIDO = True
                                                   EndIf
            Case PROCESSO = "2" And VSDGOPCAO[2] : If REG_PEDIDOC["Situacao do Pedido"]="ABERTO"
                                                      Then BLOQUEIA_PEDIDO = True
                                                   EndIf      
          EndSwitch
          If Not BLOQUEIA_PEDIDO Then Loop EndIf
                                             
          ;---- Bloquear Registro -----------------------------------------
          Moveto "\\Sistemas\\Vendas\\PedidoC"
          Moveto [Numero do Pedido]
          Locate PEDIDO
          If Not RetVal 
             Then Moveto Tabela 
                  Loop
             Else For wi From 1 To 6
                   If IsLockRecord() 
                      Then Loop 
                      Else EXECUTA_ROTINA = True
                           QuitLoop
                    EndIf
                  EndFor     
          EndIf                               
             
          ;---- Alterar Pedidos de SUSPENSO para Pedidos EM ABERTO --------
          If PROCESSO="1" And EXECUTA_ROTINA
             Then If REG_PEDIDOC["Situacao do Pedido"]="SUSPENSO"
                     Then Aguarde("Aguarde, Alterando Pedidos APROVADOS p/ ABERTO "+BARRA_STRING)
                          [Situacao do Pedido]="ABERTO"
                          UnLockRecord
                                  
                          Moveto Tabela
                          [Situacao do Pedido]="ABERTO"
                          UnLockRecord
                  EndIf        
          EndIf   
          
          ;---- Alterar Pedidos com RESTRICOES para Pedidos SUSPENSO ------ 
          If PROCESSO="2" And EXECUTA_ROTINA
             Then If REG_PEDIDOC["Situacao do Pedido"]="ABERTO"
                     Then Aguarde("Aguarde, Alterando Pedidos com RESTRICAO p/ SUSPENSO "+BARRA_STRING)
                          [Situacao do Pedido]="SUSPENSO"
                          UnLockRecord
                                  
                          Moveto Tabela
                          [Situacao do Pedido]="SUSPENSO"
                          UnLockRecord
                  EndIf        
          EndIf  
          Moveto Tabela
        EndScan 
        Do_It!
        ClearAll
EndIf    

EndProc ;Processa()

;*******************************************************************************
; Rotina Principal
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9   : Temp=False
     Case Evento["KeyCode"] = -59 : Dialog_F1() 
     Case Evento["KeyCode"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_GERENCIA"      : Campo="TG_EMPRESA"
            Case Campo="TG_REPRESEN"      : Campo="TG_GERENCIA"
            Case Campo="TG_OPDATA"         : Campo="TG_REPRESEN"
            Case Campo="TG_DTINI"          : Campo="TG_OPDATA"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_SITUACAO"       : Campo="TG_DTFIM"
            Case Campo="TG_OPANALISE"      : Campo="TG_SITUACAO"
            Case Campo="TG_OPCOES"         : Campo="TG_OPANALISE"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13 :
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"     :Campo="TG_GERENCIA"
                    Case Campo="TG_GERENCIA"    :Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"    :Campo="TG_OPDATA" 
                    Case Campo="TG_OPDATA"    : Campo="TG_DTINI"
                         VSDGOPDATA = ControlValue("TG_OPDATA")
                         Switch
                           Case VSDGOPDATA="2" : VSDGNOMOPDATA="DATA DE EMISSAO"
                           Case VSDGOPDATA="3" : VSDGNOMOPDATA="DATA DE ENTREGA"
                           OtherWise           : VSDGOPDATA   ="1"
                                                 VSDGNOMOPDATA="DATA DE INCLUSAO"
                         EndSwitch
                    Case Campo="TG_DTINI"     : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"     : Campo="TG_SITUACAO"
                    
                    Case Campo="TG_SITUACAO"  : Campo="TG_OPANALISE"
                         VSDGSITUACAO = ControlValue("TG_SITUACAO")
                         Switch
                           Case VSDGSITUACAO = "1" : VSDGNOMSITUACAO = "ABERTO"
                           Case VSDGSITUACAO = "2" : VSDGNOMSITUACAO = "SUSPENSO"
                           OtherWise               : VSDGSITUACAO    = "3"  
                                                     VSDGNOMSITUACAO = "ABERTO OU SUSPENSO"
                         EndSwitch                                   
                    Case Campo="TG_OPANALISE" : Campo="TG_OPCOES"
                         VSDGOPANALISE = ControlValue("TG_OPANALISE")
                         Switch
                           Case VSDGOPANALISE="2" : VSDGNOMOPANALISE = "MOSTRAR COM RESTRICAO"
                           OtherWise              : VSDGOPANALISE    = "1"
                                                    VSDGNOMOPANALISE = "MOSTRAR TODOS"
                         EndSwitch  
                    Case Campo="TG_OPCOES"    : Campo="YES"
                  EndSwitch  
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_SITUACAO":
     MSG_CAMPO="Situa‡„o do Pedido: (1)ABERTO  (2)SUSPENSO  (3)ABERTO/SUSPENSO"
  Case Campo="TG_OPANALISE":
     MSG_CAMPO="Mostrar Pedidos: (1)TODOS  (2)COM RESTRICAO"
  Case Campo="TG_OPDATA":
     MSG_CAMPO="Op‡”es de Data: (1)DATA DE INCLUSAO  (2)DATA DE EMISSAO  (3)DATA DE ENTREGA"      
  Case Campo="TG_OPCOES":
       MensagemCheckBoxes()
  Case Campo="":
     MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc

;*******************************************************************************
; Rotina Principal
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"

If Not Isassigned(ROTINA_LIBERADA)   Then ROTINA_LIBERADA   = False  EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO) Then SYS_CHAPA_USUARIO = "9999" EndIf 
LimpAguarde()
SYS_VALOR()

Switch                                                                                      
  Case SYS_CODIGO_CLIENTE="0112" Or SYS_CHAPA_USUARIO="9999" : ROTINA_LIBERADA = True
  Case SYS_CODIGO_CLIENTE="0345" Or SYS_CHAPA_USUARIO="9999" : ROTINA_LIBERADA = True
  Case SYS_CODIGO_CLIENTE="0227" Or SYS_CHAPA_USUARIO="9999" : ROTINA_LIBERADA = True
  Case SYS_CODIGO_CLIENTE="0232" Or SYS_CHAPA_USUARIO="9999" : ROTINA_LIBERADA = True
EndSwitch

If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf   

If SYS_CODIGO_CLIENTE="x0000"
   Then Mensagem("Rotina liberada para avalia‡Æo !//Verificar com o Comercial VISE !")
        Return
EndIf   

         
Array VSDGOPCAO[2]
VSDGOPCAO[1]= False
VSDGOPCAO[2]= False

VSDGEMPRESA      = ""
VSDGNOMEMP       = ""
VSDGREPRESEN     = ""
VSDGNOMREPR      = ""
VSDGGERENCIA     = ""
VSDGDESCGERENCIA = ""
VSDGSITUACAO     = ""
VSDGNOMSITUACAO  = ""
VSDGOPANALISE    = ""
VSDGNOMOPANALISE = ""
VSDGOPDATA       = ""
VSDGNOMOPDATA    = ""
VSDGDTINI        = BlankDate()
VSDGDTFIM        = BlankDate()

While True
  ShowDialog "An lise de Cr‚dito para Pedidos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE","SELECT"  
  Mouse "UP"
  Key "TAB","ReverseTab","F1","ENTER","ESC","TAB",
   -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 19 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A24" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Gerˆncia " For "TG_GERENCIA"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_GERENCIA" To VSDGGERENCIA
    Accept @ 03,09 Width 25 "A10"  Picture "!*!" Tag "TG_DESCGERENCIA" To VSDGDESCGERENCIA

    Label  @ 04,00 "Representante"  For "TG_REPRESEN"
    Accept @ 05,01 Width 07 "A4"  Picture "#*#" Tag "TG_REPRESEN"   To VSDGREPRESEN
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"    To VSDGNOMREPR

    Label  @ 06,00 "Op‡äes de Datas" For "TG_OPDATA"
    Accept @ 07,04 Width 04 "A1"   Picture "1,2,3" Tag "TG_OPDATA" To VSDGOPDATA
    Accept @ 07,09 Width 25 "A27"  Picture "!*!" Tag "TG_NOMOPDATA" To VSDGNOMOPDATA
             
    Label  @ 08,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 09,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,16 "at‚" For "TG_DTFIM"
    Accept @ 09,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
                        
    Label  @ 00,35 "Situa‡„o do Pedido" For "TG_SITUACAO"                                                  
    Accept @ 01,39 Width 04 "A1"  Picture "1,2,3" Tag "TG_SITUACAO" To VSDGSITUACAO       
    Accept @ 01,44 Width 25 "A27"  Picture "!*!" Tag "TG_NOMSITUACAO" To VSDGNOMSITUACAO    
    
    Label  @ 02,35 "Op‡„o de An lise" For "TG_OPANALISE"                                                  
    Accept @ 03,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPANALISE" To VSDGOPANALISE       
    Accept @ 03,44 Width 25 "A29"  Picture "!*!" Tag "TG_NOMOPANALISE" To VSDGNOMOPANALISE
    
    
    Label  @ 11,00 "Op‡”es" For "TG_OPCOES"
    CheckBoxes @12,00 Height 2 Width 56 Tag "TG_OPCOES"
    "Atualizar pedidos aprovados para \"EM ABERTO\""     to VSDGOPCAO[1],
    "Atualizar pedidos com restri‡”es para \"SUSPENSO\"" to VSDGOPCAO[2]

    Pushbutton @ 15,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 15,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog  
  If Not RetVal Then QuitLoop EndIf  
  
  If VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Inv lida !")
          Loop
  EndIf 
  
  MSG = ""
  Switch
    Case VSDGOPCAO[1] And VSDGOPCAO[2] : MSG = "Deseja  atualizar  a situa‡Æo dos pedidos APROVADOS para ABERTO//"+
                                               "e atualizar a situa‡Æo dos pedidos com RESTRICAO para SUSPENSO.//"+
                                               "Continuar com o Processo?                                      "
    Case VSDGOPCAO[1] : MSG="Deseja atualizar a situa‡Æo dos pedidos APROVADOS para ABERTO?"
    Case VSDGOPCAO[2] : MSG="Deseja atualizar a situa‡Æo dos pedidos com RESTRICAO para SUSPENSO?"
    Otherwise         : MSG=""
  EndSwitch  
  
  If MSG<>""
     Then ConfGeral(MSG)
          If OK<>"S"
             Then MSG=""
          EndIf
  EndIf     
  
  DISPOSITIVO()
  If OK="" Then Loop EndIf
  
  AGUARDE("Aguarde, Realizando a An lise de Cr‚dito")
  Tabela=Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Vendas\\RM_0082" Tabela
  Empty Tabela
  
  Analisa()
  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar!")
          Delete Tabela
          Loop
  EndIf
  NR=NRecords(Tabela)
  
  Ativa_Regra()
  Verifica_Pedidos()  
  Verifica_OutrosPedidos()  
  Verifica_Titulos()
  Verifica_Cheques()  
  Verifica_FichaCliente()
  Verifica_Aprovados()
  
  If VSDGOPANALISE="2"
     Then Mostrar_Pedidos()
          If IsEmpty(Tabela)
             Then MENSAGEM("N„o existem registros a processar!")
                  Delete Tabela
                  Loop
          EndIf
  EndIf   

  If MSG<>""
     Then Processa()
  EndIf       
  
  Sort Tabela On "Aprovados_Restricao"
  ClearAll
  
  Impressao_Orientacao="Paisagem"
  Switch
    Case SYS_CODIGO_CLIENTE="0112" : MODELO = "1"
    OtherWise                      : MODELO = "R"
  EndSwitch
  IMPRIREL(Tabela,MODELO)  
  Delete Tabela
    
EndWhile
ClearAll
Release Vars All
Release Procs All
