;** ProdForn *******************************************************************
;*  Relacao de Fornecedores por Item                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 16/10/2002 por Anivel Augusto Rodrigues
;Alterado      em: 12/06/2003 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Alterado      em: 14/07/2003 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao MVA/ICMS UF_ORIGEM
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas (Fun‡oes Pr¢prias)
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS

;*******************************************************************************
;* Rotina para Selecionar Item                                                *
;*******************************************************************************

Proc Selecionar_Item()
Resynckey
While True
  Moveto [Codigo do Item]
 
  TECLA="F1=Tabelas  =Itemñ"
  
  MSGTELA="Informe o item !"
  
  AguardaTeclasPadrao()   
  
  If Retval="F1"
     Then Moveto [Lookup_Item]
          If ConsultaF1()
             Then [Codigo do Item]=[Lookup_Item]
                  RetVal="ENTER"
          EndIf
          Moveto [Codigo do Item]
  EndIf

  Switch  
  Case RetVal=-94 : MsgTeclasPadrao()  
  Case Retval="ESC":
       Return False
  Case Retval="UP"   Or
       Retval="HOME" Or
       Retval=-72     :
       Moveto [Lookup_Item]
       Ativa_Lookup()
       If IsBlank([PrMaster->Codigo do Item]) Or Retval="HOME"
          Then HOME
          Else Moveto [Codigo do Item]
               Locate [PrMaster->Codigo do Item]
               Skip -1
               If BOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo do Item]=[Lookup_Item]
       Resynckey
  Case Retval="DOWN" Or        
       Retval="END"  Or
       Retval=-80     :
       Moveto [Lookup_Item]
       Ativa_Lookup()
       If IsBlank([PrMaster->Codigo do Item]) Or Retval="END"
          Then End
          Else Moveto [Codigo do Item]
               Locate [PrMaster->Codigo do Item]
               Skip
               If EOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo do Item]=[Lookup_Item]
       Resynckey
  Case Retval="ENTER":
       If IsBlank([]) Then Loop EndIf
       []=ALINH()
       ITEM  =[Codigo do ITEM  ]

       Moveto [Lookup_Item  ]
       Ativa_Lookup()
       Moveto [Codigo do Item     ]
       Locate ITEM
       If RetVal
          Then CopyToArray Registro_ITEM
               KeyPress "F2"
               Return True
          Else KeyPress "ESC"

               Mensagem("Item ["+ITEM+"] n„o cadastrado !")
               Moveto "PrMaster"
               [Codigo do Item      ]=""
               [Descricao do Item   ]=""
               [Unidade Interna     ]=""
               [Lookup_Item         ]=""
               Resynckey
       EndIf
  EndSwitch
EndWhile
EndProc  ; (Selecionar_Item)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()
Opcao_Ver=False
While True

  Moveto [Codigo]
  End Down
  While True

      Prompt" Esc=Retornar  F1=Tabelas  F3=Ver Ficha  F7=Paginar  PgDn=Finalizar  "
      SetaCorRegistro("Editar")
      Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F3","F1"

      Switch
      Case RetVal="F1":
           If Field()="Codigo"
              Then CONSULTAF1()
            EndIf
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             PAGINA("Cotacao","MR")
             FORN=[Codigo]
             If EDITAR="S"
                Then CHAVEI=0
                     Controla_EdicaoI()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then Del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F3":
           Del
           Moveto [Codigo]
           If RecordStatus("New")
              Then MENSAGEM("Sem Fornecedor(es) p/ ver !")
                   QuitLoop
           EndIf
           Opcao_Ver=True
           CHAVEI=0
           Home
           FORN=[Codigo]
           Inicia_Registro()
           DigitaI()
           Opcao_Ver=False
           QuitLoop
      Case Retval="ESC":
           If Field()="Codigo"
              Then CHAVEI=9
                   Del
                   Return
              Else Left
           EndIf
      Case Retval="PGDN":
           Executa=False
           CHAVEI=9
           Del
           Return
      Case Retval="ENTER":
           If IsBlank([]) Then Loop EndIf
           FORN=[]
           Del
           Locate FORN
           If Retval
              Then CHAVEI=0
              Else CHAVEI=1
                   End Down
                   [Codigo do Item   ]=ITEM
                   [Codigo           ]=FORN
                   Locate ITEM, FORN
           EndIf
           Return
      EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="I_TpDocto"
        INICIO_DIALOG=False
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Opcao_Ver=True:
           Temp=False
           Switch
             Case Evento["KeyCode"] =  27:
                  CancelDialog
             OtherWise:
               Mover_Reg=True
               Switch
                 Case Evento["KeyCode"] = -71:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Home
                      EndIf
                 Case Evento["KeyCode"] = -79:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else End
                      EndIf
                 Case Evento["KeyCode"] = -73:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Up
                      EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then FORN=[Codigo]
                       Inicia_Registro()
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then Confirma()
                    If OK="S"
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_UN_Item"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="I_UN_Item"           Then Moveto [Unidade Entrada]      EndIf
                    ConsultaF1()

                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    echo Normal
                    echo off

                    If Campo="I_UN_Item"
                       Then VSD_I_UN_Item     =[Unidade Entrada]
                            Campo="I_UN_Item"
                    EndIf
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_TpDocto"        :
                  If CHAVEI=1
                     Then CHAVEI=8
                  EndIf
                  CancelDialog
             Case Campo="I_NoDocto"        : Campo="I_TpDocto"
             Case Campo="I_Data"           : Campo="I_NoDocto"
             Case Campo="I_Quantidade"     : Campo="I_Data"
             Case Campo="I_UN_Item"        : Campo="I_Quantidade"
             Case Campo="I_Preco_Unitario" : Campo="I_UN_Item"
             Case Campo="I_MVA"            : Campo="I_Preco_Unitario"
             Case Campo="I_UFO"            : Campo="I_MVA"
             Case Campo="I_VrUnit_Ult_Cot" : Campo="I_UFO"
             Case Campo="I_Data_Ult_Cot"   : Campo="I_VrUnit_Ult_Cot"
             Case Campo="I_Flag"           : Campo="I_Data_Ult_Cot"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_TpDocto":
                  VSD_I_TpDocto=ControlValue("I_TpDocto")
                  Campo="I_NoDocto"
             Case Campo="I_NoDocto":
                  VSD_I_NoDocto=ControlValue("I_NoDocto")
                  Campo="I_Data"
						 Case Campo="I_Data":
									VSD_I_Data=ControlValue("I_Data")
									Campo="I_Quantidade"
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  Campo="I_UN_Item"
             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Entrada]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  [Unidade Entrada]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else Campo="I_Preco_Unitario"
                  EndIf
             Case Campo="I_Preco_Unitario":
                  VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                  Campo="I_MVA"
             Case Campo="I_MVA":
                  VSD_I_MVA=ControlValue("I_MVA")
                  Campo="I_UFO"
             Case Campo="I_UFO":
                  VSD_I_AICMSUFO=ControlValue("I_UFO")
                  Campo="I_VrUnit_Ult_Cot"
             Case Campo="I_VrUnit_Ult_Cot":
                  VSD_I_VrUnit_Ult_Cot=ControlValue("I_VrUnit_Ult_Cot")
                  Campo="I_Data_Ult_Cot"
             Case Campo="I_Data_Ult_Cot":
                  VSD_I_Data_Ult_Cot=ControlValue("I_Data_Ult_Cot")
                  Campo="I_Flag"
             Case Campo="I_Flag":
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

Selectcontrol Campo

Switch
  Case Campo="I_UN_Item": MSGCAMPO="Unidade Entrada"
  Case Campo="I_MVA"    : MSGCAMPO="Substitui‡Æo, % Margem de Valor Agregado para Base Calculo"
  Case Campo="I_UFO"    : MSGCAMPO="Substitui‡Æo, %ICMS do estado remetente ou %ICMS p/ simples nacional"
  OtherWise             : MSGCAMPO=""
EndSwitch

If CHAVEI=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf
If Campo="I_UN_Item"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
RefreshDialog
Return TEMP
EndProc  ; (Item_Dialog)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Codigo]
Locate ITEM, FORN
CopyToArray RegItem

VSD_I_Flag=""
Registro_Item("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Echo Normal
Echo Off
Showdialog "Dados" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 06,3 height 13 width 73

   Frame Single From 00,00 to 02,70
   @ 00,01 ?? " Fornecedor "

   Accept @ 01,02 Width 07 "A4" picture "!*!" Tag "I_Cod_Forn" to VSD_I_Cod_Forn
   Accept @ 01,10 Width 40 "A40" picture "!*!" Tag "I_Razao" to VSD_I_Razao

   Frame Single From 02,00 to 07,70
   @ 02,01 ?? " Ultima Entrada"

   Label  @ 03,01 "TpDocto" For "I_TpDocto"
   Accept @ 04,02 Width 07 "A4" picture "!*!" Tag "I_TpDocto" to VSD_I_TpDocto
   Label  @ 03,09 "N§ Documento" For "I_NoDocto"
   Accept @ 04,10 Width 13 "A10" picture "!*!" Tag "I_NoDocto" to VSD_I_NoDocto
   Label  @ 03,26 "Data" For "I_Data"
   Accept @ 04,24 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Data" to VSD_I_Data

   Label  @ 05,01 "Quantidade" For "I_Quantidade"
   Accept @ 06,02 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 05,16 "UnC" For "I_UN_Item"
   Accept @ 06,16 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 05,22 "Pr.Unit rio" For "I_Preco_Unitario"
   Accept @ 06,22 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario

   Label  @ 05,34 "%MVA" For "I_MVA"
   Accept @ 06,35 Width 08 "N" picture "#*#.[####]" Tag "I_MVA" to VSD_I_MVA
   Label  @ 05,43 "%ICMS" For "I_UFO"
   Accept @ 06,44 Width 05 "N" picture "#*#" Tag "I_UFO" to VSD_I_AICMSUFO

   Label  @ 05,50 "Custo Calculado" For "I_Custo_Unitario"
   Accept @ 06,51 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   @ 06,63 ?? "/"
   Accept @ 06,64 Width 05 "A2" picture "!*!" Tag "I_UN_Item_Interna" to VSD_I_UN_Item_Interna

   Frame Single From 07,00 to 10,70
   @ 07,01 ?? " Ultima Cota‡„o "

   Label  @ 08,01 "Pr.Unit rio" For "I_VrUnit_Ult_Cot"
   Accept @ 09,02 Width 13 "N" picture "#*#.[#####]" Tag "I_VrUnit_Ult_Cot" to VSD_I_VrUnit_Ult_Cot
   Label  @ 08,18 "Data" For "I_Data_Ult_Cot"
   Accept @ 09,16 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Data_Ult_Cot" to VSD_I_Data_Ult_Cot

   Accept @ 09,31 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc  ;  (DigitaI)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=8
           Then Del
           Else CopyFromArray RegItem
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Data de Compra            ]=VSD_I_Data
       [Numero do Documento       ]=VSD_I_NoDocto
       [Tipo do Documento         ]=VSD_I_TpDocto
       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Entrada           ]=VSD_I_UN_Item
       [Valor Unitario            ]=VSD_I_Preco_Unitario
       [Vr_Unit_Ult_Cotacao       ]=VSD_I_VrUnit_Ult_Cot
       [Data_Ult_Cotacao          ]=VSD_I_Data_Ult_Cot

       [MVA                       ]=VSD_I_MVA
       [ICMS UF_ORIGEM            ]=VSD_I_AICMSUFO
       UnLockRecord

  Case Funcao_Registro="Ler":

       VSD_I_Cod_Forn               =[Codigo                    ]
       VSD_I_Razao                  =[Razao Social              ]

       VSD_I_Data                   =[Data de Compra            ]
       VSD_I_NoDocto                =[Numero do Documento       ]
       VSD_I_TpDocto                =[Tipo do Documento         ]
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Entrada           ]
       VSD_I_Preco_Unitario         =[Valor Unitario            ]
       VSD_I_MVA                    =[MVA                       ]
       VSD_I_AICMSUFO               =[ICMS UF_ORIGEM            ]

       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_UN_Item_Interna        =[Unidade Interna           ]

       VSD_I_VrUnit_Ult_Cot         =[Vr_Unit_Ult_Cotacao       ]
       VSD_I_Data_Ult_Cot           =[Data_Ult_Cotacao          ]

EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;Foi necessario personalizar um novo Menu, e deixando-o parecido com o padrÆo.
;*******************************************************************************
;* Rotina aguarda teclas padrao                                                *
;*******************************************************************************
Proc AguardaTeclasPadrao()

BarraPadrao()

Wait Field
  Until "ESC","ENTER","DOWN","DEL","FIELDVIEW","LEFT","RIGHT",
        "HOME","END","UP","PGDN","PGUP","INS","F35","ZOOM","ZOOMNEXT",
        -94,-33,-22,
        "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12",
        -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140

ClearSpeedBar      

IsTeclaAtalho()
Endproc

;*******************************************************************************
;* Rotina Barra Funcoes                                                        *
;*******************************************************************************
Proc BarraPadrao()
If Not IsAssigned(TECLA) Then TECLA="" EndIf

Prompt TECLA 
SpeedBar "["+Chr(254)+"]"  :"ESC",
         "~?~"            :-94
Endproc

;*******************************************************************************
;* Rotina Mensagem Teclas Padrao                                               *
;*******************************************************************************
Proc MsgTeclasPadrao()
MSG=    "    Esc= Voltar Menu                 "
MsgHelp("Teclas/Fun‡”es",MSG)
Endproc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
SetaCorRegistro("Padrao")
EndProc
 
;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"

CoEdit "PrMaster"
OPCAO_FORM_MASTER="F"
PickForm OPCAO_FORM_MASTER
Executa = True
WV=0

While True
  End
  SeqMaster=[Sequencia]+1
  PgDn
  [Sequencia]=SeqMaster
  LockRecord
  If RetVal Then QuitLoop EndIf
EndWhile

Moveto "Cotacao"  SetaCorRegistro("Padrao")
Moveto "PrMaster" SetaCorRegistro("Editando")
While Executa
  If Not Selecionar_Item() Then QuitLoop EndIf
  While Executa
    Moveto "Cotacao"
    CHAVEI()
    If CHAVEI=9
       Then QuitLoop
    EndIf
    Controla_EdicaoI()
  EndWhile
  SetaCorRegistro("Padrao")
  Moveto "PrMaster"
  PickForm OPCAO_FORM_MASTER
EndWhile

;** Deletando Registro Master **
Moveto "PrMaster"
[Codigo do Item]=""
Del
Do_It!
ClearAll
Release Vars All
Release Procs All
