;** Lentreg ********************************************************************
;*  Lista de Entrega de Presentes                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 22/04/2019 por Bruno Carvalho
;Ultima Alteracao: 16/10/2019 por Bruno Carvalho               
;Motivo Alteracao: Adicionado processo para incluir quantidade_entregue a partir do leitor do c¢digo de barra 

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()                                                
private AUX                                     
NOVO = False
 
While True
  Moveto "LPresenP"
  End
  Moveto [Numero do Lancamento]
  NLANC = [Numero do Lancamento]
  
  If OPCAO_FORM="F"
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Numero do Lancamento]
  
  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()
  
  Switch
  Case RetVal="F3": If OPCAO_FORM="F"
                       Then OPCAO_FORM="1"
                       Else OPCAO_FORM="F"
                    EndIf
                    Del
                    CHAVEC=5
                    Return
  Case RetVal=-94 : MsgTeclasPadrao()
  Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME": 
        While True
          Finalizar=False
          If OPCAO_FORM="F"
             Then PAGINA("LPresenP","MR")
             Else PAGINA("LPresenP","MT")
          EndIf
          NLANC = [Numero do Lancamento]
          Switch
            Case EDITAR="S"  : PickForm "1"
                               Echo Normal
                               Echo Off
                               CHAVEC=0
                               Controla_EdicaoC()
                               UnLockRecord
                               If Finalizar Then QuitLoop EndIf  
            Case EXCLUIR="S" : If [Nome Fantasia EmitDest]<>""
                                  Then FastMsg("NÆo foi poss¡vel excluir este registro!")
                               EndIf       
            OtherWise        : QuitLoop
          EndSwitch
          SetaPosForm()
        EndWhile
        QuitLoop         
   Case Retval="ESC":
        CHAVEC=9
        Del
        Return
   Case Retval="ENTER" : 
        If Numero_Lancamento("","F")
           Then NLANC = PROXLANCTO_NLANC
                Release Vars PROXLANCTO_NLANC
           Else QuitLoop
        EndIf
        PickForm "1"
        Moveto [Numero do Lancamento]
        If PROXIMO_LANCTO_REG_ACHOU
           Then CHAVEC=0
                If Checa_Controle([Numero_Controle_Dia])
                   Then Return
                EndIf
           Else CHAVEC=1
                If Not Checa_Controle(SYS_CONTROLE_DIA)
                   Then OPCAO_FORM="F"
                   Else Return 
                EndIf         
        EndIf 
        If CHAVEC=1
           Then Del
        EndIf
        If OPCAO_FORM="F"
           Then PickForm "F"
        EndIf
        QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc ;CHAVE()

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAC()

If [Status]="FINALIZADO" Or [Status]="CANCELADO"
   Then If Not Checa_Supervisor() Or [Status]="CANCELADO"
           Then Mensagem("Lan‡amento "+[Status]+", altera‡Æo nÆo permitida!")
                UnLockRecord
                CHAVEC=9
                Return
        EndIf   
EndIf
 
FACA_CHAVE = True

Switch
  Case IsBlank([Lancamento_Lista]): Moveto [Lancamento_Lista]  
  OtherWise                       : ;CHAVEC=9
                                    FACA_CHAVEI = True
                                    Return
EndSwitch

While True
  Switch
    Case Field()="Lancamento_Lista"        : MSGCAMPO = "Informe o lan‡amento da lista de Casamento/Ch  de Panela/Casa Nova"
    Case Field()="Data"                    : MSGCAMPO = "Data do Lan‡amento"
    OtherWise                              : MSGCAMPO = Field()
  EndSwitch  
  If Field()="Lancamento_Lista" 
     Then TECLA = " Esc=Retornar  F1=Tabela  "
     Else TECLA = " Esc=Retornar             " 
  EndIf
  
  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field 
       Until "ESC","ENTER","DEL","FIELDVIEW","F35","F5",-33,"F1"

  Switch
  Case RetVal="F1": 
       If Field()="Lancamento_Lista"
          Then CONSULTAF1()
       EndIf  
  Case Retval="ESC":
       Switch
         Case Field()="Lancamento_Lista" :
              If QuerDesfazer("")
                 Then If CHAVEC=1
                         Then Moveto "LPresenE"
                              If RecordStatus("New")=False
                                 Then While RecordStatus("New")=False
                                        Del
                                      EndWhile
                              EndIf
                              Moveto "LPresenP"
                              Del
                         Else If RecordStatus("Modified")
                                 Then Undo
                              EndIf
                      EndIf
                      CHAVEC=9
                      QuitLoop
               EndIf
         Case Field()="Data" : Moveto [Lancamento_Lista]
         OtherWise : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
         Case Field()="Lancamento_Lista" : 
              If Not Isblank([]) 
                 Then While True
                        MSG = ""
                        LANCTO_LISTA = [Lancamento_Lista]
                        Moveto [Lancamento_Lista]
                        Home
                        Locate LANCTO_LISTA
                        If ReTval
                           Then While [Lancamento_Lista] = LANCTO_LISTA
                                  If [Numero do Lancamento]<>NLANC And [Status]<>"FINALIZADO" And [Status]<>"CANCELADO"
                                     Then MSG =       Completa("Lan‡amento  da Lista "+LANCTO_LISTA+" j  foi adicionado no lan‡amento "+[Numero do Lancamento],66," ")+"//"
                                          MSG = MSG + Completa("e consta com o status em ABERTO.",66," ")+"////"
                                          MSG = MSG + Completa("Para inserir o mesmo lan‡amento da lista ser  necess rio FINALIZAR",66," ")+"//" 
                                          MSG = MSG + Completa("o lan‡amento "+[Numero do Lancamento]+"!",66," ")
                                          QuitLoop
                                  EndIF       
                                  Skip
                                  If Eot() Then QuitLoop EndIf
                                  Locate Next LANCTO_LISTA
                                  If Not RetVal Then QuitLoop EndIf
                                EndWhile
                        EndIf
                        Moveto [Numero do Lancamento]
                        Locate NLANC
                        If MSG <> ""
                           Then Moveto [Lancamento_Lista]
                                Mensagem(MSG)
                                QuitLoop
                        EndIf
                        
                        GetRecord "LPresenC" [Lancamento_Lista] To REG_LPRESENC
                        If Not RetVal
                           Then [Codigo                ] = ""
                                [Nome Fantasia EmitDest] = "" 
                                [Status                ] = ""
                                FastMsg("Lan‡amento da Lista de Casamento/Ch  de Panela/Casa Nova nÆo localizado!")
                           Else If REG_LPRESENC["Status"]="FINALIZADO" Or REG_LPRESENC["Status"]="CANCELADO"
                                  Then Mensagem("Lan‡amento "+[LPresenP->Lancamento_Lista]+" da Lista de Casamento/Ch  de Panela/Casa Nova//encontra "+
                                                REG_LPRESENC["Status"]+"!")
                                       Moveto [Lancamento_Lista]         
                                  Else If CHAVEC=1
                                          Then Moveto "LPresenE"
                                               If RecordStatus("New")=False
                                                  Then While RecordStatus("New")=False
                                                         Del
                                                       EndWhile
                                               EndIf
                                       EndIf
                                       Moveto "LPresenP"
                                       [Codigo                ] = REG_LPRESENC["Codigo"]
                                       [Nome Fantasia EmitDest] = REG_LPRESENC["Nome Fantasia EmitDest"] 
                                       [Status                ] = "ABERTO"
                                       
                                       Achou_Item=False
                                       Moveto "LPresenI"
                                       Scan For [Numero do Lancamento]=[LPresenP->Lancamento_Lista]
                                         GetRecord "LPresenI" [Numero do Lancamento],[Sequencia] To REG_LPRESENI
                                        
                                        If IsBlank(REG_LPRESENI["Quantidade_Conferida"]) Then Loop EndIf
                                        
                                        QTD_A_ENTREGAR = REG_LPRESENI["Quantidade_Compra"] - REG_LPRESENI["Quantidade_Entregue"]  - REG_LPRESENI["Quantidade_Devolvida"]
                                        If QTD_A_ENTREGAR > 0
                                           Then If REG_LPRESENI["Quantidade_Conferida"] < QTD_A_ENTREGAR
                                                   Then QTD_A_ENTREGAR = REG_LPRESENI["Quantidade_Conferida"]
                                                EndIf
                                                If Not Achou_Item Then Achou_Item=True EndIf   
                                           Else Loop
                                         EndIf   
                                         Aguarde("Aguarde, adicionado itens do la‡amento "+[Numero do Lancamento])
                                                   
                                         Moveto "LPresenE" 
                                         End Down
                                         [Sequencia          ] = REG_LPRESENI["Sequencia"        ]
                                         [Codigo do Item     ] = REG_LPRESENI["Codigo do Item"   ]
                                         [Descricao do Item  ] = REG_LPRESENI["Descricao do Item"]
                                         [Unidade            ] = REG_LPRESENI["Unidade"          ]
                                         [Codigo de Barras   ] = REG_LPRESENI["Codigo de Barras" ]
                                         [Quantidade         ] = QTD_A_ENTREGAR
                                         [Preco_Unitario     ] = REG_LPRESENI["Preco_Unitario"   ]
                                         UnLockRecord
                                         
                                         Moveto "LPresenI" 
                                       EndScan
                                       SaveTables
                                        
                                       Moveto "LPresenP"
                                       If Not Achou_Item
                                          Then Mensagem("NÆo h  itens do lan‡amento "+[LPresenP->Lancamento_Lista]+
                                                        " da Lista de Presentes ser entregue!")
                                               Moveto [Lancamento_Lista]         
                                          Else Moveto [Data]
                                       EndIf 
                                EndIf
                        EndIf
                        QuitLoop
                      EndWhile
              EndIf      
         Case Field()="Data"    :
              If IsBlank([])Then []=Today() EndIf
              CHAVEI=0
              FACA_CHAVEI = True
              QuitLoop    
         OtherWise:
              Right
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       FastMsg("NÆo foi poss¡vel excluir este registro!")
       ;If CHAVEC=0
       ;   Then If QuerExcluir("")
       ;           Then DEL
       ;                QuitLoop
       ;        EndIf
       ;EndIf
  EndSwitch
EndWhile

EndProc ;DIGITAC()

;*******************************************************************************
;* Rotina para Localizar Registro Item - LPresenE                              *
;*******************************************************************************
Proc CHAVEI()

MSGCAMPO=""
While True
  Moveto "LPresenE"

  Moveto "LPresenE"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "LPresenE"
        Moveto [Sequencia]

        Prompt " Esc=Retornar  F7=Paginar  Alt+F=Fun‡äes  "

        Wait Field
             Until "ESC","PGDN","ENTER","F3","F4","F7","HOME","UP","PGUP","F2","F6","F5","F8","F9","F10",-68,-33,-115,-116,-68,-133

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                 "[F5]  ~O~bserva‡Æo          " : "Observa‡Æo                             " : "F5",
                 "[F6]  ~I~mprimir            " : "ImpressÆo da Lista de Itens            " : "F6",
                 "[F9]  ~M~odo                " : " Ativa/Desativa modo c¢digo de barras  " : "F9",
                 "[F10] ~F~inalizar Lan‡amento" : "Finalizar Lan‡amento                   " : "F10",
                 "[F11] ~C~ancelar            " : "Cancela a Lista de Presentes           " : "F11",
                 Separator,
                 "~C~ancelar" : " Cancelar a Opera‡„o                                 " : "CANCELAR"
                EndMenu
                To MenuVar
                Echo Off
      
                If MenuVar="CANCELAR" or MenuVar="Esc"
                   Then Loop
                EndIf
                
                If MenuVar=""
                   Then QuitLoop
                   Else RetVal=MenuVar
                EndIf
        EndIf

        Switch
        Case Retval="F5" : 
             If [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" 
                Then If [LPresenP->Status]="CANCELADO"
                        Then FastMsg("Lan‡amento CANCELADO!")
                        Else If ConfGeral("Lan‡amento j  foi finalizado, deseja realmente alterar a observa‡Æo:") 
                                Then Moveto "LPresenP"
                                     OBSERVACAO()
                                     Moveto "LPresenE" 
                             EndIf
                     EndIf 
                Else Moveto "LPresenP"
                     OBSERVACAO()
                     Moveto "LPresenE"
             EndIf
        Case RetVal="F6":  
             Del         
             Switch
               Case [LPresenP->Status]="CANCELADO" :
                    Mensagem("Lan‡amento CANCELADO!")
                    QuitLoop      
               Case [LPresenP->Status]<>"FINALIZADO" :
                    Mensagem("Este lan‡amento nÆo foi FINALIZADO!")
                    QuitLoop
             EndSwitch
             If RecordStatus("New")=False 
                Then ConfGeral("Deseja imprimir em PDF a lista de presentes ?")
                     If OK="S"
                        Then ORDENACAO       = "ORD_PR"
                             OPCAO_IMPRESSAO = "ITENS_ENTREGUES"

                             DispositivoI("FAT")
                             If OK<>""
                                Then Seta_Lista_Itens()
                             EndIf   
                     EndIf
                Else Mensagem("NÆo h  itens na rela‡Æo do cliente!")       
             EndIf     
             QuitLoop 
        Case Retval="F9":
             Del
             If [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" 
                Then FastMsg("Lan‡amento "+[LPresenP->Status]+", fun‡Æo nÆo permitida!")
                     OPCHAVEI="CDC" 
                     Quitloop
             EndIf
             OPCHAVEI="CDB"
             CHAVEI=7
             Return               
        Case Retval="F10" Or RetVal=-68 : 
             Del
             If [LPresenP->Status]="CANCELADO"
                Then Mensagem("Lan‡amento CANCELADO!")
                     QuitLoop
             EndIf        
             If [LPresenP->Status]<>"FINALIZADO" 
                Then If ConfGeral("Deseja realmente FINALIZAR este lan‡amento?")
                        Then DispositivoI("FAT")
                             If OK=""
                                Then QuitLoop
                             EndIf   
                             If Ajusta_Item_ListaPresentes("")
                                Then Moveto "LPresenP"
                                                                     
                                     ORDENACAO       = "ORD_PR"
                                     OPCAO_IMPRESSAO = "ITENS_ENTREGUES"
                                     Seta_Lista_Itens()
                                     
                                     Moveto "LPresenP"
                                     UnLockRecord
                                     FormKey
                                           
                                     Moveto "LPresenE"
                                     Moveto [Numero do Lancamento]
                                     Locate NLANC
                                     If RetVal
                                        Then While [Numero do Lancamento] = NLANC
                                               If [Codigo de Barras COD128]<>""
                                                  Then Moveto "Lpreserq"
                                                       Moveto [Codigo de Barras COD128]
                                                       Locate [LPresenE->Codigo de Barras COD128]
                                                       If ReTval
                                                          Then If [Status]<>"" Then [Status] = [Status] + "/" EndIf
                                                               [Status] = [Status] + "ENT"
                                                               If [Justificativa]<>"" Then [Justificativa] = [Justificativa] + "\n" EndIf
                                                               [Justificativa] = [Justificativa] + "[<< Lote de Entrega: "+NLANC+" >>]"
                                                               UnLockRecord 
                                                               SaveTables
                                                       EndIf
                                                       Moveto "LPresenE"
                                               EndIf
                                               Skip
                                               If Eot() Then QuitLoop EndIf
                                             EndWhile          
                                     EndIf
                                     
                                     Moveto "LPresenP" 
                                     [Status]="FINALIZADO"                     
                                     
                                     Mensagem("Lan‡amento Finalizado!")
                                     
                                     FACA_CHAVE  = False
                                     FACA_CHAVEI = False
                                     CHAVEC=9
                                     CHAVEI=9
                                     Return  
                             EndIf
                     EndIf
                     Moveto "LPresenE"
               Else FastMsg("Lan‡amento j  foi FINALIZADO!")      
             EndIf   
             QuitLoop
        Case Retval="F11" Or RetVal=-133 : 
             Del
             Switch
               Case [LPresenP->Status]="CANCELADO" : 
                    Mensagem("Lan‡amento j  foi CANCELADO!")
                    QuitLoop
               Case Not Checa_Supervisor()         :
                    Mensagem("Permiss„o para CANCELAMENTO apenas para o supervisor!")
                    QuitLoop
             EndSwitch  
             GetRecord "LPresenC" [LPresenP->Lancamento_Lista] To REG_LPRESENC
             If REG_LPRESENC["Status"]="FINALIZADO"
                Then Mensagem("Lista de Presentes "+[LPresenP->Lancamento_Lista]+" j  foi FINALIZADO!")  
                     QuitLoop
             EndIf
             If [LPresenP->Status]="FINALIZADO"
                Then MSG = "Deseja realmente CANCELAR este lan‡amento?"
                     If ConfGeral(MSG) 
                       Then Moveto "LPresenP"
                            UnLockRecord
                            FormKey
                            
                            ;---- Ajusta a Lista de Presente -------------------
                            Moveto "LPresenE"
                            Moveto [Numero do Lancamento]
                            Locate [LPresenP->Numero do Lancamento]
                            If ReTval
                               Then  While [Numero do Lancamento]=[LPresenP->Numero do Lancamento]
                                      If [Quantidade_Entregue]>0
                                         Then AUX_ITEM = [Codigo do Item] 
                                              Moveto "Lpreseni"
                                              Moveto [Numero do Lancamento]
                                              Locate [LPresenP->Lancamento_Lista]
                                              If Retval
                                                 Then While [Numero do Lancamento]=[LPresenP->Lancamento_Lista]
                                                        If [Codigo do Item]=AUX_ITEM
                                                           Then [Quantidade_Entregue]=[Quantidade_Entregue]-1  
                                                                If [Quantidade_Entregue]=0 Then [Quantidade_Entregue]=BlankNum() EndIf
                                                                If IsBlank([Quantidade_Entregue]) 
                                                                   Then [Data da Entrega] = BlankDate()
                                                                EndIf
                                                                [Status]="CONFERIDO"   
                                                                UnLockRecord
                                                                QuitLoop
                                                        EndIf
                                                        Skip
                                                        If Eot() Then QuitLoop EndIf
                                                      EndWhile
                                              EndIf
                                                                                                    
                                              Moveto "Lpreserq"
                                              Moveto [Codigo de Barras COD128]
                                              Locate [Lpresene->Codigo de Barras COD128]
                                              If ReTval
                                                 Then PosI=Search("ENT",[Status])
                                                      If PosI>0
                                                         Then [Status] = SubStr([Status],1,PosI-2)+SubStr([Status],PosI+4,Len([Status]))
                                                      EndIf
                                                      PosI=Search("[<< Lote ",[Justificativa])
                                                      PosF=Search(">>]",[Justificativa])
                                                      If PosI>0
                                                         Then [Justificativa] = SubStr([Justificativa],1,PosI-1)+
                                                                                SubStr([Justificativa],PosF+4,Len([Justificativa]))
                                                              If SubStr([Justificativa],Len([Justificativa]),Len([Justificativa])) = "\n" 
                                                                 Then [Justificativa] = SubStr([Justificativa],1,Len([Justificativa])-1)
                                                              EndIf
                                                      EndIf
                                                      UnLockRecord
                                              EndIf                                                         
                                      EndIf
                                      Moveto "Lpresene"                                           
                                      Skip
                                      If Eot() Then QuitLoop EndIf
                                    EndWhile 
                            EndIf               
                            
                            Moveto "LPresenP" 
                            [Status ] = "CANCELADO"    
                                                        
                            Mensagem("Lan‡amento Cancelado!")
                            
                            FACA_CHAVE  = False
                            FACA_CHAVEI = False
                            CHAVEC=9
                            CHAVEI=9
                            Return
                     EndIf        
                Else FastMsg("Lan‡amento nÆo foi FINALIZADO para realizar o CANCELAMENTO!")      
             EndIf   
             QuitLoop               
        Case RetVal="PGDN":    
             Del
             If RecordStatus("New")=True 
                Then MENSAGEM("O lan‡amento deve ter pelo menos 1(um) item!")
                Else FACA_CHAVE  = False
                     FACA_CHAVEI = False
                     CHAVEC=9
                     CHAVEI=9
                     Return
             EndIf
        Case Retval="ESC": 
             Del
             If CHAVEC=1
                Then FACA_CHAVE  = True
                     FACA_CHAVEI = False  
                Else If ConfGeral("Deseja sair desta rotina ?")
                        Then CHAVEC=9
                             CHAVEI=9
                             FACA_CHAVE  = False
                             FACA_CHAVEI = False
                        Else QuitLoop      
                     EndIf        
             EndIf
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("LPresenE","MR")
               ITEM = [Sequencia]
               
               
               Switch                                    
                 Case EDITAR="S" : Switch
                                      Case [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" :
                                           ImageRights ReadOnly
                                           SetaCorRegistro("Paginar")
                                           FastMsg("Lan‡amento "+[LPresenP->Status]+", edi‡Æo nÆo permitida!")
                                      Case [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" : FastMsg("Edi‡Æo nÆo permitida!")
                                      OtherWise : If [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" 
                                                     Then ImageRights ReadOnly
                                                          SetaCorRegistro("Paginar")
                                                          FastMsg("Lan‡amento FINALIZADO, edi‡Æo nÆo permitida!")
                                                     Else FastMsg("Edi‡Æo nÆo permitida!")        
                                                  EndIf                            
                                    EndSwitch  
                                    UnLockRecord
                 Case EXCLUIR="S" : Switch
                                      Case [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" : FastMsg("ExclusÆo nÆo permitida!")
                                                                                                               UnLockRecord
                                      OtherWise : If QuerExcluir("")
                                                     Then Del
                                                          QuitLoop  
                                                  EndIf
                                    EndSwitch                                   
                 OtherWise        : QuitLoop
               EndSwitch
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate NLANC,ITEM
             If Retval
                Then CHAVEI=0
                     CopyToArray REG_DIGITA_PESSOA_ITEM
                Else CHAVEI=1
                     End Down Down
                     [Sequencia              ] = ITEM
                     UnLockRecord
                     Locate NLANC,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile      

EndProc ;CHAVEI()   

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Private etiqok

Dados_QTD = 1

While True
  Moveto "Lpresene"

  Moveto "Lpresene"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  CHAVEI=1
  Opcao_Ver = False
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False

    MSGCAMPO=""
    AUX_CAMPO = Field()
        
    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else If Dados_QTD<=0
               Then Mensagem("Quantidade tem que ser > ou = 1 !")
                    Loop
               Else CDBarras()
                    QuitLoop
            EndIf
    EndIf    
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina Dialog Leitura_Codigo_Barras                                         *
;*******************************************************************************
Proc SD_DialogLerCodBarra(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=" Esc=Retornar "

If Disparo="OPEN"
   Then INICIO_DIALOG=False
        Campo="TG_CODIGO"
        
        Dynarray WinArray_CDBarras[]
        Window handle Dialog To WinCDBarras
        Window GetAttributes WinCDBarras To WinArray_CDBarras
        WinArray_CDBarras["HASSHADOW"] = False
        WinArray_CDBarras["HASFRAME" ] = False
        Window SetAttributes WinCDBarras From WinArray_CDBarras

        Release vars WinCDBarras, WinArray_CDBarras
EndIf     

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:                                        
          Temp=False
          Switch
             Case Campo="TG_CODIGO"       : CancelDialog 
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="TG_CODIGO"        : 
                  Dados_Item=ControlValue("TG_CODIGO")
								  AcceptDialog
           EndSwitch
   EndSwitch
EndIf
RefreshDialog

Switch
 Case Campo="TG_CODIGO"  : MSGCAMPO=" Informe somente o c¢digo de barras"
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)
If Campo="TG_CODIGO"
   Then KeyPress "RIGHT"
EndIf
Return Temp

EndProc  ; (Sd_Dialog)

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc Ler_CDBarras(l,c)
Private l,c,Past,Pos

If Not IsAssigned(PARAM_QTD_CDBAR) Then PARAM_QTD_CDBAR="" EndIf

TIT = "C¢digo de Barras -> Entrega"

While True                  
      INICIO_DIALOG=True
      
      Echo Normal      
      Dados_Item=""               
      
      ShowDialog "C¢digo de Barras" Proc "SD_DialogLerCodBarra"
      Trigger "OPEN","ARRIVE"
      Key "ESC","ENTER"
       @ 21,00 Height 04 Width 82
       
        Label  @ 00,00 TIT for "TG_CODIGO"
        Accept @ 01,01 Width 77 "A32" Tag "TG_CODIGO" To Dados_Item
      EndDialog
      Mouse Show
      
      If Not RetVal
         Then SAIR_ROTINA  = True
              Return False
      EndIf
      

      If Rtrim(Dados_Item)="" 
         Then Mensagem("Informe o C¢digo de Barras ou C¢digo do Item!")
              Loop
      EndIf
      
      Past=SearchFrom("*",Dados_Item,1)
      If Past>0 
         Then Mensagem("Informe apenas o c¢digo de barras!")
              Loop
      EndIf
      Echo Off
      
      If RetVal="ESC"
         Then Return False
         Else Return True                
      EndIf
EndWhile

EndProc ; Ler_CDBarras()   

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private FRACIONADO,ITEM_FRACIONADO,AUX_QTD,AUX_ITEM,AUX_CAMPO,LANCTOP
                   
;---- Verifica se c¢digo de barra j  foi lan‡ado anteriormente -----------------                   

MSG = ""
Del
Moveto "LPresenE"
UnLockRecord

Moveto "LPresenP"
LANCTOP = [Numero do Lancamento]
UnLockRecord
FormKey                   

Moveto "LPresenE" 
Moveto [Codigo de Barras COD128] 
Locate Dados_Item 
If RetVal  
   Then While [Codigo de Barras COD128] = Dados_Item
          If LANCTOP<>[Numero do Lancamento]  
             Then GetRecord "LPresenP" [Numero do Lancamento] To REG_LANCTOP
                  If RetVal And REG_LANCTOP["Status"]<>"CANCELADO"
                     Then MSG = "C¢digo de Barras j  foi lan‡ado para o item "+[Codigo do Item]+" referente ao lan‡amento "+[Numero do Lancamento]+"!"
                          QuitLoop
                  EndIf 
             Else MSG = "C¢digo de Barras j  foi lan‡ado para o item "+[Codigo do Item]+" localizado na sequˆncia "+Strval([Sequencia])+" desta rela‡Æo de itens!"
                  QuitLoop       
          EndIf
          Skip
          If Eot() Then Quitloop EndIf
          Locate Next  Dados_Item
          If Not RetVal Then QuitLoop EndIf
        EndWhile         
EndIf

Moveto "LPresenE" 
Moveto [Numero do Lancamento]
Locate LANCTOP 

Moveto "LPresenP"
FormKey

Moveto "LPresenE"
If MSG<>"" 
   Then Mensagem(MSG)
        Return False
EndIf              
                   
ACHOU_LANCTO       = True
CDBAR_LANCTO       = Ltrim(Rtrim(SubStr(Dados_Item,01,06)))
CDBAR_CODBARRA     = Ltrim(Rtrim(SubStr(Dados_Item,08,13)))
CDBAR_DOCTO_NUMERO = Ltrim(Rtrim(SubStr(Dados_Item,22,06))) 
CDBAR_DOCTO_SERIE  = Upper(Ltrim(Rtrim(SubStr(Dados_Item,29,04))))

GetRecord "Lpreserq" CDBAR_LANCTO To REG_LANCTO
If RetVal
   Then SetaCorRegistro("Paginar")
        MSG=""
        Switch
          Case Search("[** Gerado",REG_LANCTO["Justificativa"])>0 :
               MSG = "Este lan‡amento nÆo pode ser ENTREGUE//Verifique o lan‡amento original!"    
          Case REG_LANCTO["Status"]="CANCELADO" :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente j  foi//CANCELADO"
          Case REG_LANCTO["Status"]="ENTREGUE" Or Search("DEV",REG_LANCTO["Status"])>0 :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente j  foi//ENTREGUE!"
          Case REG_LANCTO["Status"]<>"CONFERIDO" And REG_LANCTO["Status"]<>"DEVOLVIDO"  And Search("CF",REG_LANCTO["Status"])=0 And Search("DEV",REG_LANCTO["Status"])=0 :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente ainda nÆo foi CONFERIDO!"     
        EndSwitch

        If MSG<>""
           Then If Search("[** Gerado",REG_LANCTO["Justificativa"])=0
                   Then MSG = "NÆo ‚ poss¡vel realizar a entrega.//" + MSG
                EndIf
                Mensagem(MSG)
                Return False
        EndIf

        If CDBAR_DOCTO_NUMERO = REG_LANCTO["Numero do Documento"] And
           CDBAR_DOCTO_SERIE  = REG_LANCTO["Serie do Documento"]  And
           CDBAR_CODBARRA     = REG_LANCTO["Codigo de Barras"]    
           Then PROCESSO="0"
                Moveto "LPresenE"
                Home
                Moveto [Codigo do Item]
                Locate REG_LANCTO["Codigo do Item"]
                If Retval
                   Then While [Codigo do Item] = REG_LANCTO["Codigo do Item"]
                          If [Quantidade]-[Quantidade_Entregue]>0
                             Then PROCESSO="1"
                                  [Quantidade_Entregue   ]=[Quantidade_Entregue]+1
                                  [Codigo de Barras COD128]=DADOS_ITEM
                                  QuitLoop
                             Else PROCESSO="2"     
                          EndIf
                          Skip
                          If Eot() Then QuitLoop EndIf
                          Locate Next REG_LANCTO["Codigo do Item"]
                          If Not RetVal Then QuitLoop EndIf
                        EndWhile
                EndIf 
                DADOS_ITEM = ""
                Switch
                  Case PROCESSO="0" : Mensagem("Item "+ REG_LANCTO["Codigo do Item"]+" referente ao lan‡amento "+
                                               REG_LANCTO["Numero do Lancamento"]+" nÆo foi localizado nesta rela‡Æo!")
                  Case PROCESSO="2" : Mensagem("Item "+ REG_LANCTO["Codigo do Item"]+" referente ao lan‡amento "+
                                               REG_LANCTO["Numero do Lancamento"]+" sem quantidade dispon¡vel para entrega nesta rela‡Æo!")                                 
                EndSwitch
                
                If PROCESSO<>"1"
                   Then Return False
                EndIf
                
           Else MSG = ""
                Switch
                  Case CDBAR_DOCTO_NUMERO <> REG_LANCTO["Numero do Documento"] : 
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente nÆo corresponde ao n£mero do documento "+CDBAR_DOCTO_NUMERO+"!"
                  Case CDBAR_DOCTO_SERIE  <> REG_LANCTO["Serie do Documento"]  :
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente nÆo corresponde … s‚rie do documento "+CDBAR_DOCTO_SERIE+"!"
                  Case CDBAR_CODBARRA     <> REG_LANCTO["Codigo de Barras"]    :
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente nÆo corresponde ao c¢digo de barras "+CDBAR_CODBARRA+"!"
                EndSwitch
                Mensagem(MSG)
                Return False
        EndIf
   Else Mensagem("Lan‡amento "+CDBAR_LANCTO+" nÆo foi localizado nas requisi‡äes da lista de presente!")
        Return False      
EndIf

Return True

EndProc ;CDBarras()

;*******************************************************************************
;* Rotina para Digitacao das Cidades                                           *
;*******************************************************************************
Proc DIGITAI()
Private AUX_QTD_ENT

If IsBlank([Codigo do Item])
   Then FastMsg("NÆo ‚ poss¡vel inclusÆo de item!")
        Del
        CHAVEI=8
        Return
EndIf   

Moveto "LPresenP"
SetaCorRegistro("Padrao")    

Moveto "LPresenE"       
SetaCorRegistro("Editar")   

Moveto [Quantidade_Entregue]
AUX_QTD_ENT = [Quantidade_Entregue]

While True
  TECLA=" Esc=Retornar  "

  Switch
    Case Field()="Quantidade_Entregue" : MSGCAMPO="Quantidade a ser entregue do item"
    OtherWise                          : MSGCAMPO=Field() 
  EndSwitch
    
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33
  
  Switch 
  Case RetVal="F1": If Field()="Codigo do Item" Then CONSULTAF1() EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEI=0
          Then Mensagem("N„o ‚ poss¡vel excluir este registro!")
               Loop
       EndIf
  Case Retval="ESC" :   
       Switch     
         Case Field()="Quantidade_Entregue"   : If CHAVEI=1 
                                                   Then CHAVEI=8
                                                        Del
                                                        QuitLoop
                                                   Else [Quantidade_Entregue]=AUX_QTD_ENT
                                                        CHAVEI=8
                                                        QuitLoop         
                                                EndIf  
       EndSwitch
  Case Retval="ENTER" :
       Switch
         Case Field()="Quantidade_Entregue"  : 
              Switch
                Case AUX_QTD_ENT>0 And IsBlank([Quantidade_Entregue]) :
                     MSG =       Completa("QUANTIDADE ANTERIOR.: "+Format("W8",AUX_QTD_ENT),64," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE INFORMADA: ",64," ")+"//"
                     MSG = MSG + Completa("Deseja continuar sem informar quantidade entregue deste item?",64," ")  
                     If Not ConfGeral(MSG)
                        Then [Quantidade_Entregue] = AUX_QTD_ENT
                     EndIf
                     CHAVEI=8   
                     QuitLoop
                Case [Quantidade_Entregue]>[Quantidade] :
                     MSG =       Completa("QUANTIDADE DE COMPRA.: "+Format("W8",[Quantidade]),72," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE A ENTREGAR: "+Format("W8",[Quantidade_Entregue]),72," ")+"////"
                     MSG = MSG + Completa("A quantidade a ser entregue ‚ maior que quantidade de compra deste item!",72," ")
                     Mensagem(MSG)
                     [Quantidade_Entregue] = AUX_QTD_ENT
                     Loop
                 OtherWise :
                     CHAVEI=8   
                     QuitLoop    
              EndSwitch
       EndSwitch
  EndSwitch
EndWhile

EndProc ;DIGITA_PESSOA_ITEM() 

;*******************************************************************************
;* Rotina para ajustar a quantidade do item na lista de presentes              *
;*******************************************************************************
Proc Ajusta_Item_ListaPresentes(PARAM)
Private SEQ,COD_ITEM,ATUALIZOU_ITEM

ATUALIZOU_ITEM=False

Moveto "LPresenE"
Scan For [Quantidade_Entregue]>0
  SEQ        = [Sequencia          ]
  COD_ITEM   = [Codigo do Item     ]
  QUANTIDADE = [Quantidade_Entregue] 

  Moveto "LPresenI"
  Moveto [Numero do Lancamento]
  Locate [LPresenP->Lancamento_Lista],SEQ
  If RetVal
     Then If Not ATUALIZOU_ITEM Then ATUALIZOU_ITEM=True EndIf
          If PARAM="Estorno"
             Then [Quantidade_Entregue] = [Quantidade_Entregue] - QUANTIDADE
                  If [Quantidade_Entregue] = 0
                     Then [Quantidade_Entregue] = BlankNum()
                  EndIf    
             Else If QUANTIDADE>0
                     Then [Quantidade_Entregue] = [Quantidade_Entregue] + QUANTIDADE
                     Else [Quantidade_Entregue] = BlankNum()
                  EndIf
          EndIf
          If [Quantidade_Compra]>0 And [Quantidade_Compra]=[Quantidade_Entregue]
             Then [Data da Entrega    ] = [LPresenP->Data]
                  [Status             ] = "ENTREGUE"
             Else [Data da Entrega    ] = BlankDate()
                  [Status             ] = ""
          EndIf
          UnLockRecord
  EndIf
  Moveto "LPresenE"
  If PARAM="Estorno"
     Then [Quantidade_Entregue] = BlankNum()
  EndIf
EndScan  

If ATUALIZOU_ITEM
   Then If PARAM<>"Estorno"
           Then Moveto "LPresenE"
                Home
                While True
                  If [Quantidade_Entregue]=BlankNum()
                     Then Del
                     Else Skip
                  EndIf     
                  If Eot() Then QuitLoop EndIf
                EndWhile
        EndIf
        Moveto "LPresenP"
        Return True
   Else Moveto "LPresenE"
        If PARAM="Estorno"
           Then Mensagem("NÆo h  itens a ser estornados nesta rela‡Æo!")
                Return True
           Else Mensagem("NÆo h  itens a ser entregue nesta rela‡Æo!")
                Return False
        EndIf   
EndIf    

EndProc ;Ajusta_Item_ListaPresentes()

;*******************************************************************************
;* Rotina para Digitacao da Observacao do Cliente                              *
;*******************************************************************************
Proc OBSERVACAO()
Private CampAnt

CampAnt=Field()
Prompt " Esc=Cancelar  F2=Gravar "

Moveto [Observacao]
Edita_Memo("Observacao",09,01,13,76,"Observa‡äes")

If IsBlank([Observacao])
    Then Del
    Else UnLockRecord
EndIf

Moveto Field CampAnt

EndProc    ; (Observacao)

;*******************************************************************************
;* Carrega Array Lista de Itens da Cliente                                     *
;*******************************************************************************
Proc Imprimir_Item_Lista_Presente()
Private ii,CONTADOR,Conta_Array,AUX_ARRAY

If ORDENACAO="ORD_PR"
   Then LEN_TITULO_INICIAL = 4
        LEN_TITULO_FINAL   = 36
   Else LEN_TITULO_INICIAL = 1
        LEN_TITULO_FINAL   = 20
EndIf   

Conta_Array = 0
Array AUX_ARRAY[ArraySize(ARRAY_ITEM)]

For ui From 1 To DynArraySize(ARRAY_DEPARTAMENTO)
  DEPARTAMENTO = ARRAY_DEPARTAMENTO[ui]
  For ii From 1 To ArraySize(ARRAY_ITEM)
    If DEPARTAMENTO=Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],1,LEN_TITULO_FINAL)))
       Then Conta_Array = Conta_Array + 1 
            AUX_ARRAY[Conta_Array] = ARRAY_ITEM[ii]
    EndIf        
  Endfor
EndFor  

Release Vars ARRAY_ITEM
Array ARRAY_ITEM[ArraySize(AUX_ARRAY)]
For ii From 1 To ArraySize(AUX_ARRAY)
  ARRAY_ITEM[ii] = AUX_ARRAY[ii]
EndFor

Release Vars AUX_ARRAY
DynArray ARRAY_IMPRESSAO[]

If ORDENACAO="ORD_PR"
   Then LEN_TITULO_FINAL = LEN_TITULO_FINAL - 3 
EndIf

MUDOU_DEPARTAMENTO = "***"
CONTA_LINHA_ITEM   = 0
For ii From 1 To ArraySize(ARRAY_ITEM)
  If MUDOU_DEPARTAMENTO<>Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL,LEN_TITULO_FINAL)))
     Then If MUDOU_DEPARTAMENTO<>"***"
             Then CONTA_LINHA_ITEM = CONTA_LINHA_ITEM + 1
                  ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+""
          EndIf
          MUDOU_DEPARTAMENTO = Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL,LEN_TITULO_FINAL)))
          CONTA_LINHA_ITEM   = CONTA_LINHA_ITEM + 1
          ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+"DEP:"+Format("W"+StrVal(LEN_TITULO_FINAL),MUDOU_DEPARTAMENTO)
  EndIf
  CONTA_LINHA_ITEM = CONTA_LINHA_ITEM+1       
  ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL+1,Len(ARRAY_ITEM[ii]))   
EndFor

Imprimir_Pagina()

EndProc ;Imprimir_Item_Lista_Presente()

;*******************************************************************************
;* Imprime Cabe‡alho                                                           *
;*******************************************************************************
Proc Cabecalho(PARAM)

;ENTREGA_LANCTO_LISTA
;ENTREGA_CODIGO
;ENTREGA_NOME
;ENTREGA_DATA
;ENTREGA_STATUS
;ENTREGA_OBS
 
Print File ARQIMP Chr(27)+Chr(77) + "\n"
Print File ARQIMP "\014"+CI_INEG+Spaces(32)+""+Format("W14,AL","ENTREGA "+NLANC)+CI_FNEG+"\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES
Print File ARQIMP Chr(27)+Chr(77) + "\n\n\n"
Print File ARQIMP Spaces(14)+Format("W20",NLANC)+Spaces(24)+Format("W21",ENTREGA_LANCTO_LISTA)+Format("D13",ENTREGA_DATA)+"\n\n"
Print File ARQIMP Spaces(14)+Format("W25",ENTREGA_CODIGO+" "+ENTREGA_NOME)+"\n\n"
If PARAM = "Itens"
   Then Print File ARQIMP Spaces(14)+Format("W20",ENTREGA_STATUS)+"\n\n"
        Print File ARQIMP Spaces(14)+Format("W77",ENTREGA_OBS)+"\n\n" 
EndIf
Print File ARQIMP Chr(27)+Chr(77) + "\n\n\n\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES

LINHA_CABECALHO = 0

EndProc ;Cabecalho()

;*******************************************************************************
;* Imprime Lista Presente                                                      *
;*******************************************************************************
Proc Imprimir_Pagina()

Cabecalho("Itens")

CONTA_LINHA = 0
CONTADOR    = 0
DEPARTAMENTO=False
For ii From 1 To DynArraySize(ARRAY_IMPRESSAO)
  If DEPARTAMENTO Then DEPARTAMENTO =  False EndIf
  LINHA = Substr(ARRAY_IMPRESSAO[ii],4,Len(ARRAY_IMPRESSAO[ii]))
  If SubStr(LINHA,1,4)="DEP:"
     Then DEPARTAMENTO =  True
          LINHA_DEP = Substr(ARRAY_IMPRESSAO[ii],8,Len(ARRAY_IMPRESSAO[ii]))
  EndIf    
  If DEPARTAMENTO 
     Then If CONTADOR+2>(45-LINHA_CABECALHO)
             Then CONTADOR    = 0
                  Print File ARQIMP Spaces(82)+CI_INEG+">> Continua"+CI_FNEG
                  Print File ARQIMP "\f"
                  Cabecalho("Itens")
          EndIf
          CONTADOR    = CONTADOR + 1
          CONTA_LINHA = CONTA_LINHA + 1
          Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
     Else CONTA_LINHA = CONTA_LINHA + 1
          LINHA       = Substr(ARRAY_IMPRESSAO[ii],LEN_TITULO_FINAL+3,Len(ARRAY_IMPRESSAO[ii]))
          Print File ARQIMP LINHA+"\n"
  EndIf 
  CONTADOR = CONTADOR + 1
  If CONTADOR>(45-LINHA_CABECALHO)
     Then CONTADOR     = 0
          Print File ARQIMP Spaces(82)+CI_INEG+">> Continua"+CI_FNEG
          Print File ARQIMP "\f"
          Cabecalho("Itens")
          
          IMPRIME_DEPARTAMENTO=True
          If IsAssigned(ARRAY_IMPRESSAO[ii+1])
             Then AUX_LINHA = Substr(ARRAY_IMPRESSAO[ii+1],4,Len(ARRAY_IMPRESSAO[ii+1]))
                  If SubStr(AUX_LINHA,1,4)="DEP:"
                     Then IMPRIME_DEPARTAMENTO=False
                  EndIf    
          EndIf
          
          If IMPRIME_DEPARTAMENTO
             Then CONTADOR    = CONTADOR + 1
                  CONTA_LINHA = CONTA_LINHA + 1
                  Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
          EndIf        
  EndIf   
Endfor

If TOTAL_ITEM>1
   Then CONTA_LINHA = CONTA_LINHA + 2
        Print File ARQIMP "\n"
        Print File ARQIMP CI_INEG + Format("W59",StrVal(TOTAL_ITEM)+" Itens") + Format("W5",TOTAL_QTD) +" "+ Format("W10.2,EIC",TOTAL_PRECO)  + CI_FNEG + "\n"
EndIf

;Print File ARQIMP "\f"
                                   
EndProc ;Imprimir_Pagina()

;*******************************************************************************
;* Seta Lista Presente                                                         *
;*******************************************************************************
Proc Seta_Lista_Itens()  
Private TabAnt,AUX_CODIGO,AUX_EMPRESA,AUX_NUMERO,AUX_SERIE,AUX_NLANCTO

PARAM_NITENS = 25

ARQIMP = PrivDir()+"LPRESE.Txt"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

DynArray ARRAY_DEPARTAMENTO[]

AUX_DEPART   = "***"
PULA_PAGINA  = False
PAGINA       = 1 
CONTA_DEPART = 0

ENTREGA_LANCTO_LISTA = [LPresenP->Lancamento_Lista    ] 
ENTREGA_DATA         = [LPresenP->Data                ] 
ENTREGA_STATUS       = [LPresenP->Status              ] 
ENTREGA_OBS          = [LPresenP->Observacao          ]

GetRecord "LPresenC" ENTREGA_LANCTO_LISTA To REG_LPRESENC
If RetVal
   Then ENTREGA_CODIGO = REG_LPRESENC["Codigo"]
   Else ENTREGA_CODIGO = ""
EndIf

GetRecord "\\Sistemas\\Cadastro\\Destinat" ENTREGA_CODIGO To REG_DESTINAT
If RetVal
   Then ENTREGA_ENDERECO = REG_DESTINAT["Endereco"]
   Else ENTREGA_ENDERECO = "NAO LOCALIZADO NO CADASTRO" 
EndIf

GetRecord "LPresenC" ENTREGA_LANCTO_LISTA To REG_LPRESENC
If RetVal
   Then ENTREGA_NOME           = REG_LPRESENC["Nome Fantasia EmitDest" ]
        ENTREGA_COD_VEND       = REG_LPRESENC["Codigo do Representante"]
        ENTREGA_NOM_VEND       = REG_LPRESENC["Nome Fantasia Represent"]
        ENTREGA_DATA_EVENTO    = REG_LPRESENC["Data_Evento"            ]
   Else ENTREGA_NOME           = ""          
        ENTREGA_COD_VEND       = ""
        ENTREGA_NOM_VEND       = ""
        ENTREGA_DATA_EVENTO    = BlankDate()
EndIf  

Do_it!
ClearAll

{Ask} {LPresenE} Check
Moveto [Numero do Lancamento] TypeIn "~NLANC"
Do_it!
ClearAll

CRIAR_TABELA = False
Adiciona_Campo("Answer","Ordena(A36)")

Tabela=Cria_Temp(PrivDir())
Copy "Answer" Tabela 
          
If ORDENACAO="ORD_PR"
   Then Coedit Tabela
        Scan
          Switch
            Case [Preco_Unitario]<=50                          : [Ordena] = "01 GRUPO: ATE R$ 50,00"
            Case [Preco_Unitario]>50 And [Preco_Unitario]<=100 : [Ordena] = "02 GRUPO: DE  R$ 50,00 ATE R$ 100,00"
            OtherWise                                          : [Ordena] = "03 GRUPO: ACIMA DE R$ 100,00"     
          EndSwitch  
        EndScan
        Do_it!
        ClearAll     
        
        {Ask} TypeIn Tabela Enter
        Moveto [Ordena] Check
        Do_it!
        ClearAll
        
        CONTA_ITEM = 0
        View "Answer"
        Scan
          CONTA_ITEM = CONTA_ITEM + 1
          ARRAY_DEPARTAMENTO[CONTA_ITEM] = [Ordena]
        EndScan
        ClearAll
        
   Else {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item           ] typeIn "_Ite"
        Moveto [Descricao do Departamento] TypeIn "_Dep"
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo do Item           ] typeIn "_Ite"
        Moveto [Ordena                   ] TypeIn "Changeto _Dep"
        Do_it!
        ClearAll        
EndIf   

If OPCAO_IMPRESSAO="ITENS_A_SER_ENTREGUES"
   Then {Ask} TypeIn Tabela Enter Check
        Moveto [Quantidade_Entregue] TypEIn "Blank"
        Do_it!
        ClearAll
   Else {Ask} TypeIn Tabela Enter Check
        Moveto [Quantidade_Entregue] TypeIn ">0"
        Do_it!
        ClearAll 
EndIf

If IsEmpty("Answer")
   Then Mensagem("NÆo h  registros a processar!")
        Abre_Tabelas()
        PickForm "1"
        Moveto [Numero do Lancamento]
        Locate NLANC
        Return
   Else Copy "Answer" Tabela
        Sort Tabela On "Ordena"
        ClearAll
EndIf   

TOTAL_ITEM  = 0
TOTAL_QTD   = 0
TOTAL_PRECO = 0

CONTA_ITEM = 0
Array ARRAY_ITEM[NRecords(Tabela)]

View "LPresenE"
CoEdit Tabela
Scan 
  Barra(NRecords(Tabela), RecNo())
  Aguarde("Aguarde, imprimindo lista de itens "+BARRA_STRING)
  
  GetRecord "LPresenE" [Numero do Lancamento],[Sequencia] To REG_LPresenE
  If Not RetVal Then Loop EndIf
  
  ;---- Dados do Item -------------------------------------------------
  LPresenE_SEQ         = REG_LPresenE["Sequencia"           ]
  LPresenE_ITEM        = REG_LPresenE["Codigo do Item"      ]
  LPresenE_ITEM_DESC   = REG_LPresenE["Descricao do Item"   ]
  LPresenE_ITEM_UN     = REG_LPresenE["Unidade"             ]
  LPresenE_CDBARRA     = REG_LPresenE["Codigo de Barras"    ]
  LPresenE_QTD         = REG_LPresenE["Quantidade"          ]
  LPresenE_QTD_ENT     = REG_LPresenE["Quantidade_Entregue" ]
  LPresenE_PRECO       = REG_LPresenE["Preco_Unitario"      ]
  
  GetRecord "\\Sistemas\\Estoque\\Itens" LPresenE_ITEM To REG_ITEM
  If Not RetVal
     Then Mensagem("Item "+LPresenE_ITEM+" nÆo localizado no cadastro de itens!")
          Loop
     Else DEPARTAMENTO = Ltrim(Rtrim(REG_ITEM["Descricao do Departamento"]))
          GRUPO        = REG_ITEM["Descricao do Grupo"]
  EndIf

  If DEPARTAMENTO="" Then DEPARTAMENTO = "OUTROS" EndIf

  ;----- Verifica os Departamentos ----------------------------------
  If AUX_DEPART<>DEPARTAMENTO And  ORDENACAO<>"ORD_PR" ;Ordena por Faixa de Pre‡o
     Then ACHOU_DEPART = False
          AUX_DEPART = DEPARTAMENTO
          For ii From 1 To DynArraySize(ARRAY_DEPARTAMENTO)
            If ARRAY_DEPARTAMENTO[ii]=DEPARTAMENTO
               Then ACHOU_DEPART = True
                    QuitLoop
            EndIf
          EndFor
          If Not ACHOU_DEPART
             Then CONTA_DEPART = CONTA_DEPART + 1
                  ARRAY_DEPARTAMENTO[CONTA_DEPART] = DEPARTAMENTO
          EndIf
  Endif
  
  If ORDENACAO="ORD_PR"
     Then DEPARTAMENTO = [Ordena]
  EndIf       

 ;Item                                      UN  Cod.Barras     Qtd        Qtd Entregue PrUnitario 
 ;----------------------------------------- -- ------------- ------------ ------------ ---------- 
 ;1234567890_123456789012345678901234567890_12_1234567890123_9.999.999.99_9.999.999.99_999.999.99 
   
  If OPCAO_IMPRESSAO="ITENS_A_SER_ENTREGUES"
     Then LPresenE_QTD_ENT = LPresenE_QTD
  EndIf    
  
  CONTA_ITEM = CONTA_ITEM + 1
  If ORDENACAO="ORD_PR"
     Then ARRAY_ITEM[CONTA_ITEM] = Format("W36",DEPARTAMENTO)
     Else ARRAY_ITEM[CONTA_ITEM] = Format("W20",DEPARTAMENTO)
  EndIf
  ARRAY_ITEM[CONTA_ITEM] = ARRAY_ITEM[CONTA_ITEM] +   Format("W10",LPresenE_ITEM)+" "+
                                                      Format("W30",LPresenE_ITEM_DESC)+" "+
                                                      Format("W2",LPresenE_ITEM_UN)+" "+
                                                      Format("W13",LPresenE_CDBARRA)+" "+
                                                      Format("W5",LPresenE_QTD_ENT)+" "+
                                                      Format("W10.2,EIC",LPresenE_PRECO)
                                                      ;Format("W5",LPresenE_QTD_COMPRA)+" "+
                                                      ;Format("W5",LPresenE_QTD_DEVOL)+" "+
                                                      ;Format("W5",LPresenE_QTD_ENT)+" "+
                                                      ;Format("W5",LPresenE_QTD_CONF)+" "+
                                                      ;Format("W13",LPresenE_ITEM_STATUS)+" "+
                                                      ;Format("D13",LPresenE_DATA_ENT) 
                                                      ;Format("W8",LPresenE_ITEM_STATUS)
  TOTAL_ITEM  = TOTAL_ITEM + 1
  TOTAL_QTD   = TOTAL_QTD + LPresenE_QTD_ENT
  TOTAL_PRECO = TOTAL_PRECO + LPresenE_PRECO
  
  Moveto Tabela
EndScan
Do_it!
ClearAll

If TOTAL_ITEM=0  Then TOTAL_ITEM=BlankNum()  EndIf
If TOTAL_QTD=0   Then TOTAL_QTD=BlankNum()   EndIf
If TOTAL_PRECO=0 Then TOTAL_PRECO=BlankNum() EndIf

Imprimir_Item_Lista_Presente()
If CONTA_LINHA+3<=PARAM_NITENS
   Then IMPRIME_COMPROVANTE_QUEBRA=False
        Copia_Imagem("Entrega_Comprovante")
        For ii From CONTA_LINHA To PARAM_NITENS
          Print File ARQIMP "\n"
        EndFor  
        Imprimir_Comprovante("")
   Else IMPRIME_COMPROVANTE_QUEBRA=True 
        Copia_Imagem("Entrega")     
EndIf   
ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

If IMPRIME_COMPROVANTE_QUEBRA
   Then Imprimir_Comprovante("QUEBRA_PAGINA")
        ImpriArq(ARQIMP)
        Deleta_Arquivo(ARQIMP)        
EndIf

Abre_Tabelas()
PickForm "1"
Moveto [Numero do Lancamento]
Locate NLANC

Moveto "LPresenP"
SetaCorRegistro("Editar")

Release Vars PRESENTE_CODIGO,LPresenE_CODIGO,LPresenE_SEQ,LPresenE_ITEM,LPresenE_ITEM_DESC,LPresenE_ITEM_UN,
             LPresenE_CDBARRA,LPresenE_QTD,LPresenE_QTD_COMPRA,LPresenE_QTD_DEVOL,LPresenE_QTD_ENT,LPresenE_QTD_CONF,
             LPresenE_DATA_ENT,LPresenE_ITEM_STATUS,PRESENTE_NOME,PRESENTE_DATA,PRESENTE_STATUS,ENTREGA_OBS,PRESENTE_USUARIO
                       
EndProc ;Seta_Lista_Itens()

;*******************************************************************************
;* Imprime Comprovante                                                         *
;*******************************************************************************
Proc Imprimir_Comprovante(PARAM)
Private PARAM

;18 Linhas

If PARAM="QUEBRA_PAGINA"
   Then ARQIMP = PrivDir()+"LCOMP.Txt"
        If IsFile(ARQIMP)
           Then Deleta_Arquivo(ARQIMP)
        EndIf
        
        Copia_Imagem("Comprovante")
        Cabecalho("Comprovante")
EndIf

Print File ARQIMP CI_INEG+"\n\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES
Print File ARQIMP Spaces(4)+"     Total Itens... "+Format("W10",TOTAL_ITEM)+"\n"
Print File ARQIMP Spaces(4)+"Total Quantidade... "+Format("W10",TOTAL_QTD)+"\n"
Print File ARQIMP Spaces(4)+"     Total Pre‡o... "+Format("W10.2,EIC",TOTAL_PRECO)+"\n"
Print File ARQIMP "\n\n\n\n\n"

Print File ARQIMP Format("W95,AC",Completa("Eu,  _________________________________________________, RG n§ ______________________",84," "))+ "\n"
Print File ARQIMP Format("W95,AC",Completa("recebi de Divina Panela Ltda ME ___________ volume(s) e conferi os produtos, estando",84," "))+ "\n"
Print File ARQIMP Format("W95,AC",Completa("todos sem nenhum defeito ou faltando alguma pe‡a. Por ser verdade, firmo presente.",84," "))+ "\n\n\n\n"
Print File ARQIMP Format("W95,AC","______________________________________________          ______ /______ /______")+ "\n"
Print File ARQIMP Format("W95,AC","            NOME RESPONSµVEL (LEGÖVEL)                                        ")+ "\n"  
Print File ARQIMP CI_FNEG

Print File ARQIMP "\f"
           
EndProc ;Imprimir_Comprovante()

;*******************************************************************************
;* Copia Imagem para Raiz                                                      *
;*******************************************************************************
Proc Copia_Imagem(PARAM)
Private VSDGDRIVE,VSDGPASTA

VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA = "\\Sistemas\\IMAGENS\\IMG_FUN\\"

Switch
  Case PARAM = "Entrega"             : IMAGEM_FUNDO = "LP_ENT" 
  Case PARAM = "Entrega_Comprovante" : IMAGEM_FUNDO = "LP_ENTC"
  Otherwise                          : IMAGEM_FUNDO = "LP_ECOMP"
EndSwitch  

If IsFile(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG")
   Then Copia_Arquivo(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG c:\\vise\\"+IMAGEM_FUNDO+".JPG")
EndIf

EndProc ;Copia_Imagem()

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

ITEM=[Sequencia]
DIGITAI()
If CHAVEI=1 Or CHAVEI=0
   Then UnlockRecord
        Moveto "LPresenE"
EndIf
SetaCorRegistro("Padrao")

EndProc ;Controla_EdicaoI()

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

FACA_CHAVE  = True
FACA_CHAVEI = False
OPCHAVEI    = "CDB"

While FACA_CHAVE
  ;If CHAVEC=1
  ;   Then DIGITAC()
  ;        If CHAVEC = 9 Then QuitLoop EndIf      
  ;        SetaCorRegistro("Padrao")
  ;        
  ;        If CHAVEC=1 Then Controle_Dia() EndIf
  ;   Else FACA_CHAVEI = True
  ;EndIf        
  
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf      
  SetaCorRegistro("Padrao")
  If CHAVEC=1 Then Controle_Dia() EndIf
  If [LPresenP->Status]="FINALIZADO" Or [LPresenP->Status]="CANCELADO" Then OPCHAVEI="CDC" EndIf
  
  While FACA_CHAVEI
    If OPCHAVEI="CDB" 
       Then CHAVECDBAR()
            If CHAVEI=9 Then Quitloop EndIf
            If CHAVEI=7 Then     Loop EndIf
       Else CHAVEI()
            If CHAVEI=9 Then QuitLoop EndIf
            If CHAVEI=7 Then     Loop EndIf
            If CHAVEI<>8 Then DIGITAI() EndIf
            If CHAVEI<>8
               Then Controla_EdicaoI() 
            EndIf
    EndIf
  EndWhile
  SetaCorRegistro("Padrao")

  Moveto "LPresenP"
  If CHAVEI=8 Then QuitLoop EndIf      
EndWhile

If RecordStatus("Locked") Then UnLockRecord EndIf

If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina para abrir tabelas de trabalho                                       *
;*******************************************************************************
Proc Abre_Tabelas()

View NOWINDOW "Lpreserq"
View NOWINDOW "Lpreseni"
View NoWindow "LPresenE"     SetaCorRegistro("Padrao")  
CoEdit NoWindow "LPresenP"

EndProc ;Abre_Tabelas()

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

Abre_Tabelas()

PickForm "F"
OPCAO_FORM="F"
AUX=""
While True
  CHAVE()
  If CHAVEC=9 Then QuitLoop EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All
