;** RM_0011L *******************************************************************
;*  Registro de Inventario - Controle por Lote                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 27/07/2020 por Bruno Carvalho                
;Ultima Alteracao:   /  /     por                          
;Motivo Alteracao: 

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

{Ask} TypeIn "\\Sistemas\\Estoque\\SdLote" Enter
Moveto [Codigo da Empresa    ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item       ] Check TypeIn "~VSDGITEM.."
Moveto [Codigo               ]       TypeIn  "~VSDGDESTINAT.."
If VSDGCODMODELO<>"01"
   Then Moveto [LoteNumero            ] Check  
        Moveto [Data_Inclusao         ] Check
        Moveto [Data de Entrada       ] Check
        Moveto [LoteDataValidade      ] Check
        Moveto [LoteDataFabricacao    ] Check 
        Moveto [Codigo do Documento   ] Check
        Moveto [Tipo do Documento     ] Check
        Moveto [Numero do Documento   ] Check      
        Moveto [Serie do Documento    ] Check
        Moveto [SubSerie do Documento ] Check
        Moveto [Codigo                ] Check
        Moveto [Nome Fantasia EmitDest] Check
        Moveto [LoteQuantidade        ] Check
        Moveto [Sistema Gerador       ] Check
        Moveto [LoteStatus            ] Check TypeIn  "Not C"                   ;TypeIn  "Not E, Not C"      
EndIf  
Switch
  Case VSDGOPDATA="1" : Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDATA="2" : Moveto [Data de Entrada ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDATA="3" : Moveto [LoteDataValidade] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
EndSwitch
Switch                         
  Case VSDGZERADO="1" : Moveto [LoteSaldo      ] Check TypeIn "not blank, not 0"      ;Sem Estoque Zeradp
  Case VSDGZERADO="2" : Moveto [LoteSaldo      ] Check TypeIn "blank or 0"            ;SĒ Estoque Zerado
EndSwitch
If VSDGCODMODELO="01"
   Then Moveto [LoteSaldo     ] Check TypeIn ", Calc Sum as LoteSaldo"
EndIf         
Do_it!
ClearAll

CRIAR_TABELA = False
Adiciona_Campo("Answer","Nome Fantasia Empresa(A20),"+
                        "Descricao do Item(A30)")
        
If VSDGEMPRESA="0000"
   Then {Ask} {Answer} TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
   Else {Ask} {\\Sistemas\\Cadastro\\Empresas}
        Moveto [Codigo da Empresa      ] TypeIn "_Emp"
        Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
        {Ask} {Answer}
        Moveto [Codigo da Empresa      ] TypeIn "_Emp"
        Moveto [Nome Fantasia Empresa  ] TypeIn "Changeto _NomE"
        Do_It!
        ClearAll       
EndIf

{Ask} {\\Sistemas\\Estoque\\Itens} 
Moveto [Codigo do Item   ] TypeIn "_CodI"
Moveto [Descricao do Item] TypeIn "_DesI"
{Ask} {Answer} TypeIn "Fast"
Moveto [Codigo do Item   ] TypeIn "_CodI"
Moveto [Descricao do Item] TypeIn "Changeto _DesI"
Do_It!           
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa     ] TypeIn "_CodE" 
Moveto [Codigo do Item        ] TypeIn "_CodI" 
If VSDGCODMODELO<>"01"
   Then Moveto [Data_Inclusao         ] TypeIn "_DtI"
        Moveto [Data de Entrada       ] TypeIn "_DtE"
        Moveto [LoteDataValidade      ] TypeIn "_DtV"
        Moveto [LoteDataFabricacao    ] TypeIn "_DtF"
        Moveto [LoteNumero            ] TypeIn "_LtN"
        Moveto [Codigo                ] TypeIn "_Cod" 
        Moveto [Nome Fantasia EmitDest] TypeIn "_NomC"
        Moveto [Sistema Gerador       ] TypeIn "_SitG"
EndIf                       
Moveto [LoteSaldo             ] TypeIn "_LtS"       
{Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
Moveto [Codigo da Empresa     ] TypeIn "_CodE" 
Moveto [Codigo do Item        ] TypeIn "_CodI" 
If VSDGCODMODELO<>"01"
   Then Moveto [Data_Inclusao         ] TypeIn "_DtI"
        Moveto [Data de Entrada       ] TypeIn "_DtE"
        Moveto [LoteDataValidade      ] TypeIn "_DtV"
        Moveto [LoteDataFabricacao    ] TypeIn "_DtF"
        Moveto [LoteNumero            ] TypeIn "_LtN"
        Moveto [Codigo                ] TypeIn "_Cod" 
        Moveto [Nome Fantasia EmitDest] TypeIn "_NomC"
        Moveto [Sistema Gerador       ] TypeIn "_SitG"
EndIf                       
Moveto [LoteSaldo             ] TypeIn "_LtS"       
Do_It!
ClearAll

If VSDGCODMODELO<>"01"
   Then Tabela=Adiciona_Indice_Temp("Codigo da Empresa,Codigo do Item,LoteDataValidade,LoteNumero")
EndIf   

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_EMPRESA"     : Campo="NO"
            Case Campo="TG_DESTINAT"    : Campo="TG_EMPRESA"
            Case Campo="TG_ITEM"        : Campo="TG_DESTINAT"
            Case Campo="TG_EMITEZERADO" : Campo="TG_ITEM"
            Case Campo="TG_OPDATA"      : Campo="TG_EMITEZERADO"     
            Case Campo="TG_DTINI"       : Campo="TG_OPDATA"
            Case Campo="TG_DTFIM"       : Campo="TG_DTINI"
            Case Campo="TG_CODMODELO"   : Campo="TG_DTFIM"
            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_DESTINAT"
                    Case Campo="TG_DESTINAT"    : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"        : Campo="TG_EMITEZERADO"
                    Case Campo="TG_EMITEZERADO" : Campo="TG_OPDATA"
                         VSDGZERADO=ControlValue("TG_EMITEZERADO")
                         Switch
                           Case VSDGZERADO="2" : VSDGDESCZERADO="EMITE Sā ZERADO"
                           OtherWise:
                                VSDGZERADO="1"  VSDGDESCZERADO="NAO EMITE ZERADO"
                         EndSwitch
                    Case Campo="TG_OPDATA"      : Campo="TG_DTINI"
                         VSDGOPDATA=ControlValue("TG_OPDATA")
                         Switch
                           Case VSDGOPDATA="2": VSDGNOMOPDATA="DATA DE ENTRADA"
                           Case VSDGOPDATA="3": VSDGNOMOPDATA="DATA DE VALIDADE"
                           OtherWise:
                                VSDGOPDATA="1"  VSDGNOMOPDATA="DATA DE INCLUSAO"
                         EndSwitch     
                    Case Campo="TG_DTINI"       : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"       : Campo="TG_CODMODELO"
                    Case Campo="TG_CODMODELO"   : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMITEZERADO":
     MSG_CAMPO="(1)SEM ESTOQUE ZERADO  (2)Sā ESTOQUE ZERADO"
  Case Campo="TG_DTFIM":
     MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_OPDATA":
     MSG_CAMPO="(1)DATA DE INCLUSAO  (2)DATA DE ENTRADA  (3)DATA DE VALIDADE"
  Case Campo="TG_EMITEZERADO" :
     MSG_CAMPO="Em Branco=Todas, [F1]Consultar tabela"   
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc

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

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Invent rio")
ModeloRelatoriosAdd("02  Invent rio/Lote")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista

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

SYS_VALOR()

VSDGEMPRESA    = ""
VSDGNOMEMP     = ""
VSDGDESTINAT   = ""
VSDGNOMDEST    = ""
VSDGITEM       = ""
VSDGNOMITEM    = ""
VSDGOPDATA     = ""
VSDGNOMOPDATA  = ""
VSDGZERADO     = ""
VSDGDESCZERADO = ""   
VSDGDTINI      = BlankDate()
VSDGDTFIM      = BlankDate()

ModeloRelatoriosCarregaLista()
                                                                    
While True
  ShowDialog "Invent rio do Lote" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 05,12   Height 15 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP
    
    Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST    

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

    Label  @ 00,35 "Opo do Estoque" For "TG_EMITEZERADO"
    Accept @ 01,39 Width 04 "A1"  Picture "1,2,3" Tag "TG_EMITEZERADO" To VSDGZERADO
    Accept @ 01,44 Width 25 "A25"  Picture "!*!" Tag "TG_DESCZERADO" To VSDGDESCZERADO
    
    Label  @ 02,35 "Opäes de Datas" For "TG_OPDATA"
    Accept @ 03,39 Width 04 "A1"   Picture "1,2,3" Tag "TG_OPDATA" To VSDGOPDATA
    Accept @ 03,44 Width 25 "A27"  Picture "!*!" Tag "TG_NOMOPDATA" To VSDGNOMOPDATA
        
    Label  @ 04,35 "PerĄodo Referente de" For "TG_DTINI"
    Accept @ 05,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,51 "at" For "TG_DTFIM"
    Accept @ 05,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    Label  @ 08,00  "Modelo de ~R~elatĒrio"  For "TG_CODMODELO"
    Accept @ 09,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 09,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO 

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf
  
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  DISPOSITIVO()
  If OK=""  Then Loop EndIf

  AGUARDE("Aguarde, gerando o relatĒrio")
  Tabela=Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Estoque\\RM_0011L" Tabela
  
  Processa()
  
  If IsEmpty(Tabela)
     Then MENSAGEM("No existem registros a processar")
          Delete Tabela
          Loop
  EndIf
  
  Switch
    Case VSDGCODMODELO="01" : CopyReport "\\Base\\Sistemas\\Estoque\\RM_0011L" "R" Tabela "R"
    Case VSDGCODMODELO="02" : CopyReport "\\Base\\Sistemas\\Estoque\\RM_0011L" "1" Tabela "R"
  EndSwitch       
  
  IMPRIREL(Tabela,"R")
  Delete Tabela
  
EndWhile
ClearAll
Release Vars All
Release Procs All