;** RM_0037 ********************************************************************
;*  RelaÆo de Itens da Lista de Presente                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 21/05/2019 por Bruno Cavarlho               
;Ultima Alteracao: 03/10/2019 por Bruno Cavarlho                 
;Motivo Alteracao: Ajustes p/ verificar lanamentos de devoluÆo realizado em lotes                                 

;*******************************************************************************
; Processa Rotina 
;*******************************************************************************
Proc Processa()

{Ask} {Lpreserq}
Moveto [Numero do Lancamento    ] Check
Moveto [Codigo da Empresa       ] Check TypeIn "_Emp"
Moveto [Nome Fantasia Empresa   ] Check
Moveto [Descricao Tipo Movimento] Check
Moveto [Lancamento_Lista        ]       TypeIn "_Lanc, ~VSDGLPRESENTE.."
Moveto [Numero do Documento     ] Check TypeIn "_NDoc"
Moveto [Serie do Documento      ] Check TypeIn "_SDoc"
Moveto [Numero de Serie Cupom   ] Check
Moveto [Data do Documento       ] Check 
Moveto [Status                  ] Check TypeIn "..DEV.."
Moveto [Justificativa           ] Check TypeIn "Not ..Gerado.."
Moveto [Codigo do Representante ] Check
Moveto [Nome Fantasia Represent ] Check
Moveto [Codigo                  ] Check TypeIn "as Codigo Cliente"
Moveto [Nome Fantasia EmitDest  ] Check TypeIn "as Codigo Nome"
Moveto [Entrega_Codigo          ] Check TypeIn "as Lista Codigo"
Moveto [Entrega_Nome Fantasia   ] Check TypeIn "as Lista Nome"
Moveto [Codigo do Item          ] Check
Moveto [Descricao do Item       ] Check
Moveto [Preco Unitario          ] Check
Moveto [Quantidade              ] Check
Moveto [Valor Desconto Item     ] Check
Moveto [Data_Inclusao           ] Check
{Ask} {LPresenC}
Moveto [Numero do Lancamento    ] Check TypeIn "_Lanc, as Lista"
Moveto [Tipo_Lista              ] Check TypEIn "~VSDGOPLISTAPRESENTE.."                                                        
Moveto [Data                    ] Check TypeIn "as Data Lista"
Moveto [Status                  ]       TypeIn "Not CANCELADO"
Do_it!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf   

RM_0037=Adiciona_Indice_Temp("Numero do Lancamento")
TEMP=Cria_Temp(PrivDir())
Copy RM_0037 TEMP
Empty RM_0037

View TEMP   
View RM_0037
CoEdit "Lpreserq"
Scan For [Status]="DEVOLVIDO"
 Barra(NRecords("Lpreserq"), RecNo())
 Aguarde("Aguarde, verificando dados "+BARRA_STRING)
 
 If VSDGLPRESENTE<>"" And [Lancamento_Lista]<>VSDGLPRESENTE
    Then Loop 
 EndIf 
 
 If (VSDGLPRESENTE="" And ([Data_Inclusao]<DateVal(VSDGDTINI) Or [Data_Inclusao]>DateVal(VSDGDTFIM))) Or
    (Search("Gerado",[Justificativa])=0)
    Then Loop
 EndIf   
 NLANCTO = SubStr([Justificativa],36,6)
 DATA    = [Data_Inclusao]
 
 ;**  atualizado a data da inclusao conforme a data da of de devoluÆo gerada,
 ;   essa data de inclusao seria a data de emissao da of
 Moveto TEMP
 Moveto [Numero do Lancamento]
 Locate NLANCTO
 If RetVal
    Then OF = ""
         PosI = Search(" -> Ordem de Faturamento **]",[Justificativa])
         If Posi>0
            Then OF = SubStr([Justificativa],PosI-6,6)
         EndIf   
         [Data_Inclusao           ] = DATA
         [Descricao Tipo Movimento] = OF    ;Utilizado para receber o numero da of
         [Preco Unitario          ] = [Preco Unitario] - [Valor Desconto Item]
 EndIf
 CopyToArray REG_RM0037
 
 ;**  verificando o periodo informado p/ ser adicionado na tabela
 Moveto RM_0037
 End Down
 CopyFromArray REG_RM0037
 
 Moveto "Lpreserq"
EndScan
Do_it!
ClearAll

;---- VerificaÆo na rotina da devoluÆo de lotes ------------------------------                                           
View TEMP   
View RM_0037
View "Lpresedi"
CoEdit "Lpresedc"
Scan For [Status]="FINALIZADO"
 Barra(NRecords("Lpresedc"), RecNo())
 Aguarde("Aguarde, verificando dados "+BARRA_STRING)
 
 If (VSDGLPRESENTE<>"" And [Lancamento_Lista]<>VSDGLPRESENTE) Or IsBlank([Numero da OF Devolucao])
    Then Loop 
 EndIf 
 
 If VSDGLPRESENTE="" And ([Data_Inclusao]<DateVal(VSDGDTINI) Or [Data_Inclusao]>DateVal(VSDGDTFIM))
    Then Loop
 EndIf
  
 DATA = [Data_Inclusao]
 Moveto "Lpresedi"
 Moveto [Numero do Lancamento]
 Locate [Lpresedc->Numero do Lancamento]
 If RetVal
    Then While [Numero do Lancamento]=[Lpresedc->Numero do Lancamento]
           If Not IsBlank([Codigo de Barras COD128])
              Then LPRESERQ_LANCTO = Ltrim(Rtrim(SubStr([Codigo de Barras COD128],01,06)))
                   Moveto TEMP
                   Moveto [Numero do Lancamento]
                   Locate LPRESERQ_LANCTO
                   If RetVal
                      Then OF = ""
                           PosI = Search(" -> Ordem de Faturamento >>]",[Justificativa])
                           If Posi>0
                              Then OF = SubStr([Justificativa],PosI-6,6)
                           EndIf   
                           [Data_Inclusao           ] = DATA
                           [Descricao Tipo Movimento] = OF    ;Utilizado para receber o numero da of
                           [Preco Unitario          ] = [Preco Unitario] - [Valor Desconto Item]
                           UnLockRecord
                          
                           CopyToArray REG_RM0037
                          
                           Moveto RM_0037
                           End Down
                           CopyFromArray REG_RM0037
                   EndIf
                   Moveto "Lpresedi" 
           EndIf   
           Skip
           If Eot() Then QuitLoop EndIf
         EndWhile
 EndIf      
 
 Moveto "Lpresedc"
EndScan
Do_it!
ClearAll

Copy RM_0037 "Answer"

Delete TEMP
Delete RM_0037

EndProc ;Processa()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
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_LPRESENTE"        : Campo="NO"
            Case Campo="TG_OP_LISTAPRESENTE" : Campo="TG_LPRESENTE"
            Case Campo="TG_DTINI"            : Campo="TG_OP_LISTAPRESENTE"
            Case Campo="TG_DTFIM"            : Campo="TG_DTINI"   
            Case Campo="YES" Or Campo="NO"   : Campo="TG_LPRESENTE"
          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_LPRESENTE"  : Campo="TG_OP_LISTAPRESENTE"
                         If VSDGLPRESENTE<>""
                            Then GetRecord "LPresenC" VSDGLPRESENTE To REG_LPRESENC
                                 VSDGOPLISTAPRESENTE = REG_LPRESENC["Tipo_Lista"]
                                 Switch
                                   Case VSDGOPLISTAPRESENTE = "P" : VSDGOPNOMLISTAPRESENTE = "LISTA DE CHA DE PANELA"
                                   Case VSDGOPLISTAPRESENTE = "N" : VSDGOPNOMLISTAPRESENTE = "LISTA DE CASA NOVA"
                                   Case VSDGOPLISTAPRESENTE = "C" : VSDGOPNOMLISTAPRESENTE = "LISTA DE CASAMENTO"
                                 EndSwitch
                                 VSDGDTINI = BlankDate()
                                 VSDGDTFIM = BlankDate()
                                 Campo="YES"
                            Else VSDGOPLISTAPRESENTE    = ""
                                 VSDGOPNOMLISTAPRESENTE = ""   
                         EndIf       
                    Case Campo="TG_OP_LISTAPRESENTE" : Campo="TG_DTINI"     
                    Case Campo="TG_DTINI"            : Campo="TG_DTFIM"
                         If IsBlank(VSDGDTINI)
                            Then Mensagem("Informe a data inicial!")
                                 Campo="TG_DTINI"
                         EndIf
                    Case Campo="TG_DTFIM"            : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_LPRESENTE":
       MSG_CAMPO="Informe a Lista de Presente" 
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial do Periodo"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final do Periodo"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*****************************************************************************+*
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGLPRESENTE          = ""
VSDGNOMLPRESENTE       = ""
VSDGOPLISTAPRESENTE    = ""
VSDGOPNOMLISTAPRESENTE = ""
VSDGDTINI              = BlankDate()
VSDGDTFIM              = BlankDate()

While True
  ShowDialog "RelaÆo de Itens Devolvidos - Lista de Presente" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,09   Height 11 Width 57

    Label  @ 00,00 "Lista de Presente" For "TG_LPRESENTE"
    Accept @ 01,01 Width 09 "A6"  Picture "#*#" Tag "TG_LPRESENTE" To VSDGLPRESENTE
    Accept @ 01,11 Width 43 "A40" Picture "!*!" Tag "TG_NOMLPRESENTE" To VSDGNOMLPRESENTE
    
    Label  @ 02,00 "Tipo da Lista" For "TG_OP_LISTAPRESENTE"
    Accept @ 03,06 Width 04 "A1"  Picture "C,P,N" Tag "TG_OP_LISTAPRESENTE" To VSDGOPLISTAPRESENTE
    Accept @ 03,11 Width 43 "A40" Picture "!*!" Tag "TG_OP_NOMLISTAPRESENTE" To VSDGOPNOMLISTAPRESENTE

    Label  @ 04,00 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 05,00 "de" For "TG_DTINI"
    Accept @ 05,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,17 "at" For "TG_DTFIM"
    Accept @ 05,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    Pushbutton @ 07,15 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 07,29 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If VSDGLPRESENTE="" And IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  
  If VSDGLPRESENTE="" And IsBlank(VSDGDTINI)
     Then Mensagem("Informe a data inicial!")
          Loop
  EndIf
  
  If VSDGLPRESENTE="" And VSDGDTFIM < VSDGDTINI
     Then Mensagem("Data Final deve ser maior que Data Inicial !")
          Loop
  EndIf

  DISPOSITIVO()
  If OK=""  Then Loop EndIf

  AGUARDE("Aguarde, gerando o relat¢rio")
  Processa()
                 
  If IsEmpty("Answer")
     Then MENSAGEM("No existem registros a processar")
          Delete "Answer"
          Loop
  EndIf
  
  CopyReport "\\Base\\Sistemas\\Vendas\\RM_0037" "R" "Answer" "R"
  IMPRIREL("Answer","R")
  Delete "Answer"
  
EndWhile
ClearAll
Release Vars All
Release Procs All