;** RQ_LOTE ********************************************************************
;*  Requisi‡Æo de Itens do Lote                                                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)                        
;Desenvolvido em : 28/07/2020 por Bruno Carvalho             
;Ultima Alteracao:   /  /     por Bruno Carvalho                         
;Motivo Alteracao:

;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC  = True
INICIO_PAGINA = True                    

While True
  Switch
    Case ORDENARPOR="LOTE" :  
      Moveto [Codigo da Empresa]
      Menu {Image} {OrderTable} Enter {LoteNumero}  
    OtherWise              :
      Moveto [Codigo do Item]
      Menu {Image} {OrderTable} Enter {Codigo do Item}  
  EndSwitch
  End                
  Moveto [Sequencia]
  SEQ=[Sequencia]
     
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn
  EndIf
  Moveto [Sequencia]

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao() 
  
  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "[F6] Visualizar a rela‡„o por numero do ~l~ote"  : " Visualizar a rela‡„o por n£mero do lote" : "F6",
           "[F7] Visualizar a rela‡„o por codigo do ~i~tem"  : " Visualizar a rela‡„o por codigo do item" : "F7",
           Separator,
           "~C~ancelar               ": " Cancelar a Opera‡„o              " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off

          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
          EndIf                                         
          
          Switch
            Case MenuVar="F6"  : ORDENARPOR="LOTE"
            Case MenuVar="F7"  : ORDENARPOR="CODIGO"  
          EndSwitch
          
          FileWrite PrivDir()+"RQLOTE.ini" From GravaExpressao("VSDGORDEM","S",ORDENARPOR)
          RetVal=MenuVar
          
          If MenuVar="F6" Or MenuVar="F7" 
             Then QuitLoop
          EndIf
   EndIf
  
   Switch
        Case Retval="F6"  : ORDENARPOR="LOTE"      QuitLoop  
        Case Retval="F7"  : ORDENARPOR="CODIGO"    QuitLoop                  
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If OPCAO_FORM="F" 
                Then OPCAO_FORM="1"
                Else OPCAO_FORM="F"
             EndIf
             Del                    
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               FACA_DIGITAC  = True
               INICIO_PAGINA = True
               If OPCAO_FORM="F"
                  Then PAGINA("RqLote","MR")
                  Else PAGINA("RqLote","MT")
               EndIf
               SEQ=[Sequencia]
               Switch
                 Case EDITAR="S": 
                      PickForm "1"
                      Moveto "\\Sistemas\\Estoque\\SdLote" SetaCorRegistro("Invisivel")
                      Moveto "RqLote"
                      Echo Normal
                      Echo Off
                      CHAVEC=0
                      Controla_EdicaoC()
                 Case EXCLUIR="S":
                      FastMsg("ExclusÆo nÆo permitida!")
                 OtherWise       : 
                      QuitLoop
               EndSwitch
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEC=9
             Del
             Return             
        Case Retval="ENTER":  
             If IsBlank([])
                Then If IsBlank(SEQ)
                        Then SEQ = 1
                        Else Moveto [Sequencia] SEQ=ImageCMax()
                            SEQ = SEQ + 1
                     EndIf
                     []=SEQ
             EndIf
             SEQ=[]
             Del
             If OPCAO_FORM="F"
                Then PickForm "1"
             Endif 
             Moveto [Sequencia]
             Locate SEQ
             If Retval
                Then CHAVEC=0
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf     
                Else If Checa_Controle(SYS_CONTROLE_DIA)
                        Then Moveto "\\Sistemas\\Estoque\\SdLote" SetaCorRegistro("Invisivel")
                             Moveto "RqLote"
                             CHAVEC=1                      
                             End
                             CtrlPgDn
                             If SYS_EMPRESA_DEFAULT<>""
                                Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                             EndIf   
                             [Sequencia]=SEQ
                             Controle_Dia() 
                        Else Return
                      EndIf         
             EndIf       
             If IsLockRecord()
                Then If OPCAO_FORM="F"
                        Then PickForm "F"
                     Endif
                     QuitLoop
             EndIf
             Return  
        EndSwitch
  EndWhile
EndWhile          

EndProc   ;CHAVEC()  

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc DIGITAC()

Moveto "RqLote"

If CHAVEC=0
   Then Moveto [Flag]    
   Else Moveto [Tipo de Movimento]
EndIf   

While True
  TECLA=" Esc=Retornar  "
  TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finalizar/Sair  "
       
  Prompt TECLA
  MSGCAMPO=Field()
  Switch
    Case Field()="LoteQuantidade"            : If [Tipo de Movimento]="E"
                                                  Then MSGCAMPO = "Quantidade a ser deduzida do lote "+[LoteNumero]
                                                  Else MSGCAMPO = "Quantidade a ser adicionada no lote"+[LoteNumero]
                                               EndIf   
    Case Field()="Flag"                      : MSGCAMPO="Pausa para conferir dados !"  
  EndSwitch
                     
  Wait Field
   Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F3","F4","F5","F6","F7","F9",-33

   If RetVal=-33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
            "[F5] ~O~bserva‡Æo       " : " Observa‡Æo         " : "F5",
            Separator,
            "~C~ancelar              " : " Cancelar a Opera‡„o" : "CANCELAR"
           EndMenu
           To MenuVar
           Echo Off
           If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
           EndIf
           RetVal=MenuVar
    EndIf 
 
   Switch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()     
      Case RetVal="F1":
           If Field()="Codigo da Empresa" Or
              Field()="Codigo do Item" 
              Then CONSULTAF1()
           EndIf                                                              
      Case Retval="F5":
           CampoAnt=Field()
           Edita_Memo("Observacao",08,01,15,76,"Observa‡Æo")
           Moveto Field CampoAnt
           Prompt TECLA           
      Case RetVal="PGDN":
           If Not [LoteQuantidade]>0        
              Then If [Tipo de Movimento]="E"
                      Then Mensagem("N„o h  quantidade a ser deduzida no lote "+[LoteNumero]+"!")
                      Else Mensagem("N„o h  quantidade a ser adicionada no lote "+[LoteNumero]+"!")
                   EndIf
                   Loop     
           EndIf
           CHAVEC=9
           Return
      Case Retval="ESC":
           Switch
           Case Field()="Tipo de Movimento" : 
                If QuerExcluir("")
                   Then CHAVEC=9
                        Del
                        QuitLoop
                EndIf
           Case Field()="Codigo da Empresa" : Moveto [Tipo de Movimento]                                                                  
           Case Field()="Codigo do Item"    : Moveto [Codigo da Empresa]
           Case Field()="LoteNumero"        : Moveto [Codigo do Item]
           Case Field()="LoteQuantidade"    : 
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf        
                   Else Moveto [LoteNumero]              
                EndIf
           Case Field()="Flag"  : If CHAVEC=1
                                    Then Moveto [LoteQuantidade]
                                    Else CHAVEC=9
                                         QuitLoop
                                  EndIf       
           EndSwitch

      Case Retval="ENTER" :  
           If IsBlank([])
              Then If Field()="LoteQuantidade"    Or
                      Field()="LoteNumero"        Or
                      Field()="Codigo da Empresa" Or 
                      Field()="Codigo do Item"
                      Then Loop
                   EndIf
           EndIf
           Switch
           Case Field()="Tipo de Movimento" : Moveto [Codigo da Empresa]
                Switch
                  Case [Tipo de Movimento]="S" : [Descricao Tipo Movimento] = "SAIDA"
                  OtherWise                    : [Tipo de Movimento       ] = "E" 
                                                 [Descricao Tipo Movimento] = "ENTRADA"  
                EndSwitch
           Case Field()="Codigo da Empresa" : Moveto [Codigo do Item]
           Case Field()="Codigo do Item"    : Moveto [LoteNumero]
           Case Field()="LoteNumero"        :
                ACHOU_LOTE=False
                ACHOU_ITEM=False
                Moveto "\\Sistemas\\Estoque\\SdLote"
                Moveto [LoteNumero]
                Locate [RqLote->LoteNumero]
                If RetVal
                   Then ACHOU_LOTE=True
                        While [LoteNumero] = [LoteNumero]
                          If [Codigo da Empresa] = [RqLote->Codigo da Empresa] And
                             [Codigo do Item]=[RqLote->Codigo do Item] 
                             Then CopyToArray REG_LOTE
                                  ACHOU_ITEM=True
                                  QuitLoop
                          EndIf 
                          Skip
                          If Eot() Then QuitLoop EndIf
                          Locate Next [RqLote->LoteNumero]
                          If Not RetVal Then QuitLoop EnDIf 
                        Endwhile  
                EndIf                                   
                Moveto "RqLote"
                MSG = ""
                Switch
                  Case Not ACHOU_LOTE And Not ACHOU_ITEM :
                       MSG = "NÆo foi localizado o Lote "+[LoteNumero]+"!" 
                  Case NOt ACHOU_ITEM                    :
                       MSG = "NÆo foi localizado no lote "+[LoteNumero]+" o item "+[Codigo do Item]+"//referente … empresa "+[Codigo da Empresa]+"!"
                EndSwitch
                If MSG<>""
                   Then [LoteDataFabricacao  ] = BlankDate()
                        [LoteDataValidade    ] = BlankDate()
                        [Data de Entrada     ] = BlankDate()
                        [Numero do Lancamento] = BlankNum()
                        Mensagem(MSG)
                   Else [LoteDataFabricacao  ] = REG_LOTE["LoteDataFabricacao"]
                        [LoteDataValidade    ] = REG_LOTE["LoteDataValidade"]
                        [Data de Entrada     ] = REG_LOTE["Data de Entrada"]
                        [Numero do Lancamento] = REG_LOTE["Numero do Lancamento"]
                        Moveto [LoteQuantidade]  
                EndIf
           Case Field()="LoteQuantidade"    : ;If ConfGeral("Deseja finalizar essa requisi‡Æo?") 
                                              ;   Then If Ajusta_Lote()
                                              ;           Then CHAVEC=9
                                              ;                QuitLoop
                                              ;        EndIf
                                              ;   Else CHAVEC=9
                                              ;        QuitLoop      
                                              ;EndIf       
                                              Moveto [Flag]        
           Case Field()="Flag"  : If Ajusta_Lote()
                                     Then CHAVEC=9
                                          QuitLoop
                                  EndIf
                                              
           EndSwitch
      EndSwitch
EndWhile

EndProc ;DIGITAC()

;*******************************************************************************
;* Rotina p/ Ajusta Saldo do Lote                                              *
;*******************************************************************************
Proc Ajusta_Lote()
              
MSG = ""
Moveto "\\Sistemas\\Estoque\\SdLote"
Moveto [Numero do Lancamento]
Locate [RqLote->Numero do Lancamento]
If RetVal
   Then Switch
          Case [RqLote->Tipo de Movimento]="E" : [LoteQuantidade] = [LoteQuantidade] + [RqLote->LoteQuantidade]
                                                 [LoteSaldo     ] = [LoteSaldo     ] + [RqLote->LoteQuantidade]   
                                                 UnLockRecord
          Case [RqLote->Tipo de Movimento]="S" : If [LoteQuantidade] - [RqLote->LoteQuantidade] < 0
                                                    Then MSG = "Quantidade informada na requisi‡Æo extrapola o limite para a dedu‡Æo na quantidade do lote!" 
                                                    Else If [LoteQuantidade] - [RqLote->LoteQuantidade] >= [LoteSaldo]
                                                            Then [LoteQuantidade] = [LoteQuantidade] - [RqLote->LoteQuantidade]
                                                                 [LoteSaldo     ] = [LoteSaldo     ] - [RqLote->LoteQuantidade]
                                                                 UnLockRecord
                                                            Else MSG = "Quantidade informada na requisi‡Æo extrapola o limite"+
                                                                       " para a dedu‡Æo na quantidade/saldo do lote!"
                                                        EndIf   
                                                 EndIf                               
        EndSwitch    
EndIf
Moveto "RqLote"
If MSG=""
   Then CHAVEC=9
        Return True
   Else Mensagem(MSG)
        Return False
EndIf

EndProc ;Ajusta_Lote()

;*******************************************************************************
;* Rotina p/ Carregar Parƒmetros do Cliente                                    *
;*******************************************************************************
Proc Carrega_Parametros_Cliente()

If IsFile(PrivDir()+"RQLOTE.ini")
   Then LeiaINI(PrivDir()+"RQLOTE.ini","VSDGORDEM.S.1")
        Switch
          Case VSDGORDEM="CODIGO" : ORDENARPOR="CODIGO"
          Case VSDGORDEM="LOTE"   : ORDENARPOR="LOTE"
        EndSwitch              
   Else ORDENARPOR="LOTE"      
EndIf

EndProc ;Carrega_Parametros_Cliente()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()

While FACA_DIGITAC
  MSGCAMPO = ""
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
EndWhile

If RecordStatus("Locked") Then UnLockRecord EndIf
PickForm "R"

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina p/ Abrir Tabelas                                                     *
;*******************************************************************************
Proc Abre_Tabelas()
                  
OPCAO_FORM="F"
CoEdit "RqLote"
PickForm OPCAO_FORM 

EndProc ;Abre_Tabelas()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
SYS_VALOR()         

Carrega_Parametros_Cliente()
Abre_Tabelas()

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then PickForm "1"
          Loop                                                        
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All