;** ItpEstq ********************************************************************
;*  Atualiza Itens Estoque Minimo/Maximo/Ponto Reposicao                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/07/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 19/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nova op‡Ćo de form          
;Ultima Alteracao: 18/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sele‡Ćo nota de entrada     
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/04/2020 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Ćo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()

;*******************************************************************************
;* Rotina Processa                                                             *
;*******************************************************************************
Proc Processa()
AGUARDE("Selecionando Registros")

switch
  Case Not IsBlank(VSDGNE) :
    {Ask} {\\Sistemas\\Estoque\\NotaEC}
    Moveto [Numero do Lancamento   ] TypeIn "_nl, ~VSDGNE.."
    Moveto [Codigo da Empresa      ] Check
    {Ask} {\\Sistemas\\Estoque\\NotaEI}
    Moveto [Numero do Lancamento   ] TypeIn "_nl"
    Moveto [Codigo do Item         ] Check
    Ask_Estoque("Tipo do Item","")
    Do_It!
    ClearAll

    {Ask} {Answer}
    Moveto [Codigo da Empresa      ]       Example "emp!"
    Moveto [Codigo do Item         ] Check Example "ite!"
    {Ask} {Estqprm}
    Moveto [Codigo da Empresa      ] Example "emp"
    Moveto [Codigo do Item         ] Example "ite"
    Moveto [Estoque Minimo         ] Check
    Moveto [Estoque Maximo         ] Check
    Moveto [Ponto de Reposicao     ] Check
    Do_It!
    ClearAll

    {Ask} {Answer}
    Moveto [Codigo do Item         ]       Example "ite" 
    Moveto [Estoque Minimo         ] Check
    Moveto [Estoque Maximo         ] Check
    Moveto [Ponto de Reposicao     ] Check
    {Ask} {Itens}
    Moveto [Codigo do Item         ] Check Example "ite" 
    Moveto [Descricao do Item      ] Check
    Moveto [Unidade Interna        ] Check
    Moveto [Codigo de Barras       ] Check
    Do_It!
    ClearAll

  otherwise:
    {Ask} {Estqprm}
    Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
    Moveto [Codigo do Item         ] Check TypeIn "~VSDGITEM.."
    Moveto [Estoque Minimo         ] Check
    Moveto [Estoque Maximo         ] Check
    Moveto [Ponto de Reposicao     ] Check
    Do_It!
    ClearAll

    {Ask} {Answer}
    Moveto [Codigo do Item         ] Example "ite"
    Moveto [Estoque Minimo         ] Check
    Moveto [Estoque Maximo         ] Check
    Moveto [Ponto de Reposicao     ] Check
    {Ask} {Itens}
    Moveto [Codigo do Item         ] Check Example "ite" TypeIn "!, ~VSDGITEM.."
    Moveto [Descricao do Item      ] Check
    Moveto [Unidade Interna        ] Check
    Moveto [Codigo de Barras       ] Check
    Ask_Estoque("Tipo do Item","Opcao")
    Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
    Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
    Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
    Moveto [Inativo                ] TypeIn "Not S"
    Do_It!
    ClearAll

endswitch


LIMPAGUARDE()
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar()

{Tools} {Copy} {JustFamily} {\\Base\\Sistemas\\Estoque\\Itpestq} {Answer} {Replace}

If VSDGOPRELCODALF="1"
   Then Sort "Answer" on "Codigo do Item"
   Else Sort "Answer" on "Descricao do Item"
EndIf

CoEditKey
if VSDGOPVERFORM="2" 
   then PickForm "1"
   else PickForm "F"
endif   

Moveto "\\Sistemas\\Cadastro\\Empresas"   SetaCorRegistro("Padrao")
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA

Moveto "Answer" SetaCorRegistro("Editar")
Moveto [Descricao do Item]
While True

      Switch
        Case Field()="Estoque Minimo" Or
             Field()="Estoque Maximo" Or
             Field()="Ponto de Reposicao":
             ImageRights
        OtherWise:
             ImageRights ReadOnly
      EndSwitch

      TECLA=" Esc=Retornar  Del=Excluir  Ctrl+Z=Pesquisar  Alt+Z=PesqPr˘ximo"
      MSGCAMPO=Field()

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","UP","DOWN",
                 "PGUP","PGDN","HOME","END","DEL","RIGHT","LEFT",
                 "ZOOM","ZOOMNEXT"

      Switch
      Case Retval="ZOOM":
           PESQUISA()
      Case Retval="ZOOMNEXT":
           PESQUISACON()
      Case Retval="ESC":
           CHAVEI=9
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If QuerExcluir("do item desta rela‡„o")
              Then ImageRights
                   DEL
           EndIf
      OtherWise:
           TECLAPRESS=RetVal

           If TECLAPRESS="LEFT" And Field()="Codigo do Item"
              Then Loop
           EndIf
           If (TECLAPRESS="ENTER" or  TECLAPRESS="RIGHT") And Field()="Ponto de Reposicao"
              Then Down
                   Moveto [Estoque Minimo]
              Else KeyPress TECLAPRESS
            EndIf
            If RecordStatus("New")
               Then Del
            EndIf
      EndSwitch
EndWhile
Do_It!
ClearAll
EndProc ; (Editar)

;*******************************************************************************
;* Rotina para Atualizar Dados                                                 *
;*******************************************************************************
Proc Atualizar()

NR = NRecords("Answer")
View "Estqprm"
Coedit "Answer"
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, atualizando "+BARRA_STRING)

   While True
     Moveto "Estqprm"
     Moveto [Codigo da Empresa]
     Locate VSDGEMPRESA, [Answer->Codigo do Item]
     If Not RetVal
        Then End
             Down
             [Codigo da Empresa]=VSDGEMPRESA
             [Codigo do Item   ]=[Answer->Codigo do Item]
             If IsLockRecord()
                Then Del
             EndIf
             Loop
     EndIf
     If Not IsLockRecord()
        Then [Estoque Minimo         ]=[Answer->Estoque Minimo         ]
             [Estoque Maximo         ]=[Answer->Estoque Maximo         ]
             [Ponto de Reposicao     ]=[Answer->Ponto de Reposicao     ]
             UnLockRecord
             QuitLoop
     EndIf
   EndWhile
   Moveto "Answer"
EndScan
Do_It!
ClearAll
Mensagem("Dados atualizados !")
Endproc

;*******************************************************************************
;* 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_TIPOEST"       : Campo="TG_EMPRESA"
            Case Campo="TG_ITEM"          : Campo="TG_TIPOEST"
            Case Campo="TG_FAMI"          : Campo="TG_ITEM"
            Case Campo="TG_GRP"           : Campo="TG_FAMI"
            Case Campo="TG_MARCA"         : Campo="TG_GRP"
            Case Campo="TG_NE"            : Campo="TG_MARCA"
            Case Campo="TG_OPRELCODALF"   : Campo="TG_NE"
            Case Campo="TG_OPVERFORM"     : Campo="TG_OPRELCODALF"
            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_TIPOEST"
                    Case Campo="TG_TIPOEST" : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"    : Campo="TG_FAMI"
                    Case Campo="TG_FAMI"    : Campo="TG_GRP"
                    Case Campo="TG_GRP"     : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"   : Campo="TG_NE"
                    Case Campo="TG_NE"      : Campo="TG_OPRELCODALF"
                    Case Campo="TG_OPRELCODALF": Campo="TG_OPVERFORM"
                    Case Campo="TG_OPVERFORM"   : Campo="YES"
                         VSDGOPVERFORM=ControlValue("TG_OPVERFORM")
                         Switch
                           Case VSDGOPVERFORM="2": VSDGNOMOPVERFORM="CODIGO BARRAS/DESCRICAO"
                           OtherWise             : VSDGOPVERFORM="1"
                                                   VSDGNOMOPVERFORM="ITEm/DESCRICAO"
                         EndSwitch
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe a Empresa"
  Case Campo="TG_OPVERFORM":
       MSG_CAMPO="Visualiza‡Ćo: 1=Item/Descri‡Ćo  2=C˘digo de Barras/Descri‡Ćo "
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc
;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Proc"
LimpAguarde()

VSDGEMPRESA     = ""
VSDGTIPOEST     = ""
VSDGDESCTIPOEST = ""
VSDGITEM        = ""
VSDGFAMI        = ""
VSDGMARCA       = ""
VSDGGRP         = ""
VSDGOPRELCODALF = ""
VSDGOPVERFORM   = ""
VSDGNOMOPVERFORM= ""

COR_MENSAGEM="1"
MSG="- Antes de efetuar esta opera‡„o de altera‡„o de dados,     //"
MSG=MSG+"  recomendamos que seja feito um backup do sistema.         //"
MSG=MSG+"- Caso a altera‡„o de dados fique errada ‚ possˇvel retornar//"
MSG=MSG+"  aos valores anteriores com a restaura‡„o do backup.       //"
MSG=MSG+"- Recomendamos tamb‚m que durante este processo ningu‚m     //"
MSG=MSG+"  esteja usando o sistema.                                  //"
Mensagem(MSG)


While True
  ShowDialog "Editar Estoque Mˇnimo/M ximo/Ponto Reposi‡„o" 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 18 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 "Tipo Estoque"  For "TG_TIPOEST"
    Accept @ 03,04 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
    Accept @ 03,09 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

    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 "Familia"  For "TG_FAMI"
    Accept @ 08,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 08,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 09,00 "Grupo"  For "TG_GRP"
    Accept @ 10,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 10,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 11,00 "Marca"  For "TG_MARCA"
    Accept @ 12,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 12,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 00,35 "Nota Entrada"  For "TG_NE"
    Accept @ 01,36 Width 09 "A6"  Picture "#*#" Tag "TG_NE" To VSDGNE
    Accept @ 01,44 Width 25 "A22" Picture "#*#" Tag "TG_NOMNE" To VSDGNOMNE

    Label  @ 02,35 "Op‡„o de Ordem" For "TG_OPRELCODALF"
    Accept @ 03,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSDGOPRELCODALF
    Accept @ 03,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSDGNOMOPRELCODALF

    Label  @ 04,35 "Op‡„o de Visualiza‡Ćo" For "TG_OPVERFORM"
    Accept @ 05,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPVERFORM" To VSDGOPVERFORM
    Accept @ 05,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPVERFORM" To VSDGNOMOPVERFORM

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If VSDGEMPRESA=""
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf

  Processa()
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf
  While True
    Editar()
    CONFGERAL("Desejar atualizar estes dados ?")
    If OK="S"
       Then Atualizar()
            QuitLoop
       Else CONFGERAL("Desejar desfazer estas altera‡”es ?")
            If OK="S"
               Then QuitLoop
            EndIf
    EndIf
  EndWhile

  Echo Normal
  Echo Off

EndWhile
ClearAll
Release Vars All
Release Procs All
