;** RM_0005 ********************************************************************
;* Relat¢rio de Requisi‡”es de Mercadoria/Almoxarifado                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 18/07/2016 por Bruno Carvalho
;Ultima Alteracao: 23/08/2016 por Anivel Auguto Rodrigues
;Motivo Alteracao: Ajustes novos procedimentos
;Ultima Alteracao: 18/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 29/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog e empresa destino 
;Ultima Alteracao: 01/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Observacao no report         
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes c¢cigos modelo de relatorios
;Ultima Alteracao: 12/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado 2 novos tipos de movimento "Etiqueta" e "Procura"
;Ultima Alteracao: 25/04/2018 por Bruno Carvalho  
;Motivo Alteracao: Ajustes p/ verificar requisi‡äes de mercadoria no FechaMˆs  
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()
;Ultima Alteracao: 14/08/2018 por Bruno Carvalho
;Motivo Alteracao: Separado os filtros para tipo de RM e para opera‡Æo (Cancelados, Insuficiente, confirmados, nÆo confirmados)
;Ultima Alteracao: 27/08/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes no tipo NOTIFICACAO

;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc Processa()

If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"Rqtrf")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"Rqtrf" Enter Check
        Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
        Moveto [Data_Inclusao          ] TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
        Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
        Moveto [Codigo do Item         ] TypeIn "~VSDGITEM.."
        switch
          case VSDGFINALIDADE="T" : Moveto [Tipo de Movimento   ] TypeIn "TRA"
          case VSDGFINALIDADE="R" : Moveto [Tipo de Movimento   ] TypeIn "TRA"
          case VSDGFINALIDADE="A" : Moveto [Tipo de Movimento   ] TypeIn "AVA"
          case VSDGFINALIDADE="D" : Moveto [Tipo de Movimento   ] TypeIn "DEV"
          case VSDGFINALIDADE="N" : Moveto [Tipo de Movimento   ] TypeIn "..NO.."
          case VSDGFINALIDADE="X" : Moveto [Tipo de Movimento   ] TypeIn "CX"
          case VSDGFINALIDADE="S" : Moveto [Tipo de Movimento   ] TypeIn "RES"
          case VSDGFINALIDADE="P" : Moveto [Tipo de Movimento   ] TypeIn "RUP"
          case VSDGFINALIDADE="E" : Moveto [Tipo de Movimento   ] TypeIn "ETQ Or ETI"
        EndSwitch
        If VSDGOPERACAO<>""
           Then Switch
                  case VSDGOPERACAO="1" : Moveto [Status              ] TypeIn "CANCELADO"
                  case VSDGOPERACAO="2" : Moveto [Status              ] TypeIn "INSUFICIENTE"
                  case VSDGOPERACAO="3" : Moveto [Status              ] TypeIn "Not Blank, Not CANCELADO, Not INSUFICIENTE"
                  case VSDGOPERACAO="4" : Moveto [Status              ] TypeIn "Blank"
                EndSwitch
                
                If VSDGOPERACAO="3" Or VSDGOPERACAO="4"
                   Then If VSDGFINALIDADE<>"" 
                           Then Switch
                                  Case VSDGFINALIDADE="P" : Moveto [Tipo de Movimento   ] TypeIn ", Not ..NO.."
                                  Case VSDGFINALIDADE="N" : Moveto [Tipo de Movimento   ] TypeIn ", Not RUP"
                                  OtherWise               : Moveto [Tipo de Movimento   ] TypeIn ", Not RUP, Not ..NO.."
                                EndSwitch    
                           Else Moveto [Tipo de Movimento   ] TypeIn "Not RUP"
                        EndIf
                EndIf     
        EndIf
        Moveto [Codigo da EmpresaTrf   ] TypeIn "~VSDGEMPRESA2.."
        Do_It!
        ClearAll
        
        If IsEmpty("Answer")
           Then Return
        EndIf
                
        codemp   ="****"
        codemptrf="****"
        
        Sort "Answer" On "Codigo da Empresa", "Codigo da EmpresaTrf"
        ClearAll
        
        View Tabela
        CoEdit "Answer"
        scan
        
        
          if [Codigo da Empresa       ]<>codemp
             then codemp   =[Codigo da Empresa       ] 
                  getrecord "\\sistemas\\cadastro\\empresas" codemp    to regempresas
                  if retval
                     then nfemp   =regempresas["Nome Fantasia Empresa"]
                     else nfemp   =""
                  endif
          endif        
        
          if [Codigo da Empresa       ]<>codemptrf
             then codemptrf=[Codigo da EmpresaTrf    ] 
                  getrecord "\\sistemas\\cadastro\\empresas" codemptrf to regempresas
                  if retval
                     then nfemptrf=regempresas["Nome Fantasia Empresa"]
                     else nfemptrf=""
                  endif
          endif        
        
          moveto Tabela
          End
          Down
        
          [Numero do Lancamento    ]=[Answer->Numero do Lancamento    ]
          [Sequencia do Lancamento ]=[Answer->Sequencia do Lancamento ] 
          [Codigo da Empresa       ]=[Answer->Codigo da Empresa       ]
          [Nome Fantasia Empresa   ]=nfemp
          [Tipo de Movimento       ]=[Answer->Tipo de Movimento       ]
          [Codigo do Item          ]=[Answer->Codigo do Item          ]
          [Descricao do Item       ]=[Answer->Descricao do Item       ]
          [Unidade Interna         ]=[Answer->Unidade Interna         ]
          [Quantidade              ]=[Answer->Quantidade              ]
          [Codigo_Usuario          ]=[Answer->Codigo_Usuario          ]
          [Data_Inclusao           ]=[Answer->Data_Inclusao           ]
          [Hora_Inclusao           ]=[Answer->Hora_Inclusao           ]
          [Codigo da EmpresaTrf    ]=[Answer->Codigo da EmpresaTrf    ]
          [Nome Fantasia EmpresaTrf]=nfemptrf
          [QuantidadeTrf           ]=[Answer->QuantidadeTrf           ]
          [Codigo_UsuarioTrf       ]=[Answer->Codigo_UsuarioTrf       ]
          [Data_Trf                ]=[Answer->Data_Trf                ]
          [Hora_Trf                ]=[Answer->Hora_Trf                ]
          If [Answer->Status]="F"
             Then [Status          ]="FINALIZADO"
             Else [Status          ]=[Answer->Status                  ]
          EndIf   
          [Justificativa           ]=[Answer->Justificativa           ]
          [Codigo do Representante ]=[Answer->Codigo do Representante ]  
          [Nome Fantasia Represent ]=[Answer->Nome Fantasia Represent ]         
          [Observacao              ]=[Answer->Observacao              ]         
        
          if [Tipo de Movimento       ]="TRA"  then [DescricaoTipodeMovimento]= "TRANSFERENCIA" endif       
          if [Tipo de Movimento       ]="AVA"  then [DescricaoTipodeMovimento]= "AVARIA"        endif        
          if [Tipo de Movimento       ]="DEV"  then [DescricaoTipodeMovimento]= "DEVOLUCAO"     endif        
          if [Tipo de Movimento       ]="NOT"  then [DescricaoTipodeMovimento]= "NOTIFICACAO"   endif        
          if [Tipo de Movimento       ]="CX"   then [DescricaoTipodeMovimento]= "CAIXA"         endif
          if [Tipo de Movimento       ]="RES"  then [DescricaoTipodeMovimento]= "RESERVA"       endif
          if [Tipo de Movimento       ]="RUP"  then [DescricaoTipodeMovimento]= "RUPTURA"       endif
          if [Tipo de Movimento       ]="ETQ"  then [DescricaoTipodeMovimento]= "ETIQUETA"      endif
          if [Tipo de Movimento       ]="ETI"  then [DescricaoTipodeMovimento]= "ETIQUETA"      endif
          
          Moveto "Answer"
        
        endscan
        Do_It!
        ClearAll
EndIf

Endproc ;Processa()

;*******************************************************************************
;* Tipos de Movimentos                                                         *
;*******************************************************************************
proc pegatiposfinalidade()

switch
  case VSDGFINALIDADE="T" : VSDGNOMFINALIDADE="TRANSFERENCIA"
  case VSDGFINALIDADE="R" : VSDGNOMFINALIDADE="REQUISICAO"
  case VSDGFINALIDADE="A" : VSDGNOMFINALIDADE="AVARIA"
  case VSDGFINALIDADE="D" : VSDGNOMFINALIDADE="DEVOLU€¶O"
  case VSDGFINALIDADE="N" : VSDGNOMFINALIDADE="NOTIFICA€¶O"
  case VSDGFINALIDADE="X" : VSDGNOMFINALIDADE="CAIXA"
  case VSDGFINALIDADE="S" : VSDGNOMFINALIDADE="RESERVA"
  case VSDGFINALIDADE="E" : VSDGNOMFINALIDADE="ETIQUETA"
  case VSDGFINALIDADE="P" : VSDGNOMFINALIDADE="RUPTURA"
  otherwise:                VSDGNOMFINALIDADE="TODAS"
                            VSDGFINALIDADE   =""
endswitch

endproc

;*******************************************************************************
;* Tipos de Movimentos                                                         *
;*******************************************************************************
proc pegatiposoperacao()

switch
  case VSDGOPERACAO="1" : VSDGNOMOPERACAO="CANCELADA"
  case VSDGOPERACAO="2" : VSDGNOMOPERACAO="INSUFICIENTE"
  case VSDGOPERACAO="3" : VSDGNOMOPERACAO="CONFIRMADA"
  case VSDGOPERACAO="4" : VSDGNOMOPERACAO="N¶O CONFIRMADA"
  otherwise:              VSDGNOMOPERACAO="TODAS"
                          VSDGOPERACAO   =""
endswitch

endproc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Anal¡tico")
ModeloRelatoriosAdd("02  Sint‚tico")
ModeloRelatoriosAdd("03  Analitico/Vendedor")
ModeloRelatoriosAdd("Fim")

EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* 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: 
     
       switch
         case Campo="TG_FINALIDADE":
            LimpaRodape(0)
    
            ShowPopup " Opera‡äes " CENTERED
            "~R~equisi‡„o    " : "" : "R",
            "~A~varia        " : "" : "A",
            "~D~evolu‡Æo     " : "" : "D",
            "~N~otifica‡Æo   " : "" : "N",
            "Cai~x~a         " : "" : "X",
            "Re~s~erva       " : "" : "S",
            "Ru~p~tura       " : "" : "P",
            "~E~tiqueta      " : "" : "E"
            EndMenu
             To opcaofinalidade
            
            if opcaofinalidade<>"Esc"
              then VSDGFINALIDADE=opcaofinalidade
                   pegatiposfinalidade()
            endif
         case Campo="TG_OPERACAO":
            LimpaRodape(0)
    
            ShowPopup " Opera‡äes " CENTERED
            "~1~ Cancelada     " : "" : "1",
            "~2~ Insuficiente  " : "" : "2",
            "~3~ Confirmada    " : "" : "3",
            "~4~ NÆo Confirmada" : "" : "4"
            EndMenu
             To opcaooperacao
            
            if opcaooperacao<>"Esc"
              then VSDGOPERACAO=opcaooperacao
                   pegatiposoperacao()
            endif
            
         otherwise: Dialog_F1()
       endswitch
     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"    : Campo="NO"
            Case Campo="TG_EMPRESA2"   : Campo="TG_EMPRESA"
            Case Campo="TG_ITEM"       : Campo="TG_EMPRESA2"
            Case Campo="TG_REPRESEN"   : Campo="TG_ITEM"
            Case Campo="TG_DTINI"      : Campo="TG_REPRESEN"
            Case Campo="TG_DTFIM"      : Campo="TG_DTINI"
            Case Campo="TG_FINALIDADE" : Campo="TG_DTFIM"
            Case Campo="TG_OPERACAO"   : Campo="TG_FINALIDADE"
            Case Campo="TG_CODMODELO"  : Campo="TG_OPERACAO"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_EMPRESA2"
                    Case Campo="TG_EMPRESA2"   : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"       : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"   : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_FINALIDADE"
                    Case Campo="TG_FINALIDADE" : Campo="TG_OPERACAO"
                         VSDGFINALIDADE=ControlValue("TG_FINALIDADE")
                         pegatiposfinalidade()
                    Case Campo="TG_OPERACAO"   : Campo="TG_CODMODELO"
                         VSDGOPERACAO=ControlValue("TG_OPERACAO")
                         pegatiposoperacao()
                    Case Campo="TG_CODMODELO"  : Campo = "YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_FINALIDADE" Or Campo="TG_OPERACAO" :
       MSG_CAMPO="Em Branco = Todas, [F1]Consultar tabela"
  Case Campo="":
       MSG_CAMPO=""
       
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

Switch
  Case Upper(Substr(Directory(),1,1))="N" : ROTINA_LIBERADA = True
  Case SYS_CODIGO_CLIENTE="0294"          : ROTINA_LIBERADA = True
  OtherWise                               : ROTINA_LIBERADA = False
EndSwitch  

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

VSDGEMPRESA  = ""
VSDGNOMEMP   = ""
VSDGFINAL    = ""
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()

ModeloRelatoriosCarregaLista()

While True
  ShowDialog "Movimenta‡Æo por Requisi‡„o de Mercadoria" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
    -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 03,08 Height 19 Width 72

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

    Label  @ 02,00 "Empresa Destino"  For "TG_EMPRESA2"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA2"    To VSDGEMPRESA2
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA2" To VSDGNOMEMP2

    Label  @ 04,00 "Item"  For "TG_ITEM"
    Accept @ 05,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM"    To VSDGITEM
    Accept @ 06,01 Width 33 "A30" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM

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

    Label  @ 09,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 10,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 10,16 "at‚" For "TG_DTFIM"
    Accept @ 10,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 00,35 "Tipo"  For "TG_FINALIDADE"
    Accept @ 01,39 Width 04 "A1"  Picture "!*!" Tag "TG_FINALIDADE"    To VSDGFINALIDADE
    Accept @ 01,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMFINALIDADE" To VSDGNOMFINALIDADE

    Label  @ 02,35 "Opera‡Æo"  For "TG_OPERACAO"
    Accept @ 03,39 Width 04 "A1"  Picture "1,2,3,4" Tag "TG_OPERACAO"    To VSDGOPERACAO
    Accept @ 03,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMOPERACAO"   To VSDGNOMOPERACAO

    Label  @ 12,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 13,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 13,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  if not ValidarModelosRelatorios() then loop endif         

  DISPOSITIVO()
  If OK="" Then Loop EndIf

  Tabela=Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Estoque\\RM_0005" Tabela
  Empty(Tabela)

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Processa()
  EndWhile

  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Delete Tabela
          Loop
  EndIf
  
  Impressao_Orientacao="Paisagem"
  switch
    case VSDGCODMODELO="01" : IMPRIREL(Tabela,"R")  
    case VSDGCODMODELO="02" : IMPRIREL(Tabela,"1")  
    case VSDGCODMODELO="03" : IMPRIREL(Tabela,"3")  
  endswitch

  Delete Tabela
EndWhile
ClearAll
Release Vars All
Release Procs All
