;** DAE ************************************************************************
;*  Digitacao de ST registro 53 sintegra - via DAE
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 14/12/2012 por Anivel Augusto Rodrigues
;Ultima Alteracao: 18/12/2012 por Bruno Carvalho 
;Motivo Alteracao: Adicionado tabela "DaeI" e novos ajustes

;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVEC()
While True
  Moveto [Numero do Lancamento]
  End
  NLANC= [Numero do Lancamento]
  Moveto [Numero do Lancamento]

  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf
  Moveto [Numero do Lancamento]
  
  TECLA=""
  SetaCorRegistro("Editar")
  
While True
  AguardaTeclasPadrao()
  Switch
  Case RetVal=-33 : SemFuncoes()
  Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           If OPCAO_FORM="F"
              Then PAGINA("DAE","MR")
              Else PAGINA("DAE","MT")
           EndIf
           NLANC=[Numero do Lancamento]
           Switch
             Case EDITAR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  CHAVEC=0
                  Controla_EdicaoC()
             Case EXCLUIR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If QuerExcluir("")
                     Then CHAVEC=9
                          EXCLUSAO()
                          ;Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If IsBlank([])
            Then If IsBlank(NLANC)
                    Then []="1"
                    Else []=StrVal(NumVal(NLANC)+1)
                 EndIf
         EndIf
         []=Alinh()
         NLANC=[]
         Del
         PickForm "1"
         Moveto [Numero do Lancamento]
         Locate NLANC
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 End PgDn
                 [Numero do Lancamento ]=NLANC
                 [Codigo da Empresa    ]=SYS_EMPRESA_DEFAULT
                 
                 [Emitente da Nota Fiscal]="P"
         EndIf
         If Not IsLockRecord()
            Then Echo Normal
                 Echo Off
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc  ; (CHAVEC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

If CHAVEC=1
  Then If DIGITAI=True And [Numero do Documento]<>""
          Then Moveto [Codigo Antecipacao]
          Else Moveto [Codigo da Empresa ]
       EndIf   
  Else Moveto [Codigo Antecipacao]
EndIf
  
While True

  TECLA=" Esc=Retornar  " 
  If Field()="Codigo da Empresa"   Or
     Field()="Codigo Antecipacao"  Or
     Field()="Codigo do Documento" Or
     Field()="CFOP" 
     Then TECLA=TECLA+"F1=Tabelas  "
     Else TECLA=TECLA+"            "
  EndIf
  If CHAVEC=0
     Then TECLA=TECLA+"Del=Excluir  "
     Else TECLA=TECLA+"             "
  EndIf
  TECLA=TECLA+"PGDN=Finalizar  " 
  
  Prompt TECLA

  FORMMSGCAMPO=Field()
  Switch
    Case Field()="Emitente da Nota Fiscal" : FORMMSGCAMPO="Pr¢prio, Terceiro"
    Case Field()=""                        : FORMMSGCAMPO=Field()
  EndSwitch

  Wait Field
    Message FORMMSGCAMPO
     Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN"
  Switch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case RetVal="F1":
      Switch 
        case Field()="Codigo Antecipacao":
         ShowPopup " Op‡”es " Centered
          " ~1~ Pagamento de substitui‡Æo tribut ria efetuada pelo Destinat rio, " : " " : "1",
          "   quando nÆo efetuada ou efetuada a menor pelo substituto.           " : " " : "1",
           Separator,
          " ~2~ Antecipa‡Æo tribut ria efetuada pelo Destinat rio,               " : " " : "2",
          "   apenas com complementa‡Æo do diferencial de al¡quota.              " : " " : "2",
           Separator,
          " ~3~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "3",
          "   efetuada pelo Destinat rio,sem encerrar a fase de tributa‡Æo.      " : " " : "3",
           Separator,
          " ~4~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "4",
          "   efetuada pelo Destinat rio encerrando a fase de tributa‡Æo.        " : " " : "4",
           Separator,
          " ~5~ Substitui‡Æo tribut ria interna motivada por regime              " : " " : "5",
          "   especial de tributa‡Æo.                                            " : " " : "5",
           Separator,
          " ~6~ ICMS pago na importa‡Æo.                                         " : " " : "6",
           Separator,
          "~S~air                                                                " : " Ignorar op‡äes " : "CANCELAR"
      
         EndMenu
          To MenuVar
             If MenuVar<>"Esc"
                Then [Codigo Antecipacao]=MenuVar
             EndIf
        OtherWise:
         If Field()="Codigo da Empresa"   Or
            Field()="Codigo do Documento" Or
            Field()="CFOP" 
              Then CONSULTAF1()
         EndIf
       EndSwitch  
  Case RetVal="PGDN":
       CHAVEC=9
       QuitLoop
  Case Retval="DEL":
       If CHAVEC=0 And Checa_Supervisor()
          Then If QuerExcluir("deste lan‡amento")
                  Then ;Del
                       CHAVEC=9
                       EXCLUSAO()
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
         Case Field()="Codigo da Empresa"        :
             If QuerDesfazer("")
              Then If CHAVEC=1
                      Then Del
                      Else Undo
                   EndIf
                   CHAVEC=9
                   QuitLoop
             EndIf
         Case Field()="Emitente da Nota Fiscal"  : Moveto [Codigo da Empresa  ]
         Case Field()="Codigo do Documento"      : Moveto [Codigo da Empresa  ]
         Case Field()="Codigo Antecipacao"       : 
             If CHAVEC=0
                Then If QuerDesfazer("")
                      Then Undo
                           CHAVEC=9
                           QuitLoop
                     EndIf
                Else CHAVEC=9
                     QuitLoop     
                ;Else Moveto [Codigo do Documento]
              EndIf            
         Case Field()="Serie do Documento"       : Moveto [Codigo do Documento]
         Case Field()="CFOP"                     : Moveto [Codigo Antecipacao ]
         OtherWise:
              Left
         EndSwitch
  Case Retval="ENTER": 

       Switch
;      Case Field()="Codigo da Empresa"       : Moveto [Emitente da Nota Fiscal]
       Case Field()="Codigo da Empresa"       : Moveto [Codigo do Documento]
       Case Field()="Codigo do Documento"     : Moveto [Serie do Documento ]
       Case Field()="Serie do Documento"      : Moveto [Numero do Documento]
       Case Field()="Numero do Documento" : 
            If Len([Numero do Documento])>6
               Then Mensagem("O Sintegra s¢ aceita os £ltimos 6 d¡gitos a direita de um documento! // //Corrigir !")
                    Loop
            EndIf   

            UnLockRecord
            FormKey
            
            NfOk=False
             Switch
               Case [Emitente da Nota Fiscal]="P":
                 Moveto "\\Sistemas\\Vendas\\NotaC"
                 Moveto [Codigo da Empresa]
                 Locate [DAE->Codigo da Empresa  ],
                        [DAE->Numero do Documento],
                        [DAE->Serie do Documento ]
                 If RetVal
                    Then nfOk=True
                    Else Mensagem([Tipo do Documento]+" nÆo encontrado, verifque, serie/n£mero !")
                 EndIf   
                         
                 Moveto "DAE"
                 If NfOk
                    Then [Codigo           ]=[\Sistemas\Vendas\NotaC->Codigo         ]       
                         [Data do Documento]=[\Sistemas\Vendas\NotaC->Data de Emissao]
                         [CFOP             ]=[\Sistemas\Vendas\NotaC->CFO            ]
                 EndIf               
               OtherWise :
                ; Moveto "\\Sistemas\\Estoque\\NotaEC"
            EndSwitch 

            
            If Nfok 
               Then Moveto "\\Sistemas\\Vendas\\NotaI"
                    Moveto [Codigo da Empresa]
                    Locate [DAE->Codigo da Empresa  ],
                           [DAE->Numero do Documento],
                           [DAE->Serie do Documento ]
                    If RetVal
                      Then While [DAE->Codigo da Empresa  ]=[Codigo da Empresa]   And
                                 [DAE->Numero do Documento]=[Numero do Documento] And
                                 [DAE->Serie do Documento ]=[Serie do Documento] 
                                 Moveto "DAEI"
                                 End Down
                                 [Numero do Lancamento    ]=[DAE->Numero do Lancamento    ]
                                 [Item do Documento       ]=[\Sistemas\Vendas\NotaI->Item do Documento       ]
                                 [Codigo do Item          ]=[\Sistemas\Vendas\NotaI->Codigo do Item          ]
                                 [Descricao do Item       ]=[\Sistemas\Vendas\NotaI->Descricao do Item       ]
                                 UnLockRecord
                                 Moveto "\\Sistemas\\Vendas\\NotaI"
                                 Skip
                                 If Eot() Then QuitLoop EndIf
                           EndWhile
                    EndIf       
            EndIf
            
            Moveto "DAE"
            UnLockRecord

            FormKey
            LockRecord           

            If Nfok 
               Then Moveto [Codigo Antecipacao ]  
               Else Moveto [Codigo do Documento] 
            EndIf           
            
       Case Field()="Codigo Antecipacao":
            If []<"1" Or []>"6" Then Loop EndIf
            Moveto [CFOP] 
       Case Field()="Despesas": 
            Moveto [Codigo Antecipacao ]  
            DIGITAI=True
            QuitLoop 
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Itens da Nota                                         *
;*******************************************************************************
Proc CHAVEI()
Private TabAnt

Moveto "DAEI"
Opcao_Ver=False

While True
  Exclusao_Cabeca=False

  Moveto [Item do Documento]
  End
  NITEM=[Item do Documento]
  Down
  Moveto [Item do Documento]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  
  SetaCorRegistro("Paginar")
  While True

    Opcao_Ver=False

    MSGCAMPO=""
    Tecla=""
    AguardaTeclasPadraoIt2()

    Switch
    Case RetVal="F3": SemFicha()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal=-33 : SemFuncoes()
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Opcao_Ver=False
           
           PAGINA("Daei","MR")
           NLANC=[Numero do Lancamento]
           NITEM=[Item do Documento]
           Switch
             Case EDITAR="S"  : Controla_EdicaoI()
             Case EXCLUIR="S" : 
             OtherWise        : QuitLoop
           EndSwitch
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC": 
         SetaCorRegistro("Padrao")           
         Del
         CHAVEI=9
         Return
    Case Retval="ENTER": FastMsg("Sem novas inser‡”es !")  
         Del
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc ; (CHAVEI)

;*******************************************************************************
;* Rotina para Digita‡Æo de Notas                                              *
;*******************************************************************************
Proc DIGITAI()

Moveto [BCSubstituicao ICMS]
                                                
While True
  Switch  
    Case Field()="BCSubstituicao ICMS" : MSGCAMPO="BC Substitui‡„o ICMS"
    OtherWise                          : MSGCAMPO=""
  EndSwitch

  Tecla=""
  
  AguardaTeclasPadraoIt()

  Switch     
  Case RetVal="F3": SemFicha()
  Case RetVal=-94 : MsgTeclasPadrao1()
  Case RetVal=-33 : SemFuncoes()                
  Case Retval="ESC":
       Switch
         Case Field()="BCSubstituicao ICMS"  : CHAVEI=9
                                               Return
       EndSwitch
  Case Retval="ENTER": 
       Switch      
         Case Field()="BCSubstituicao ICMS"  : UnLockRecord
                                               Return
       EndSwitch
  EndSwitch

 EndWhile

EndProc ; DIGITAI()

;*******************************************************************************
;* Exclusao de Itens e Lancamento                                              *
;*******************************************************************************
Proc EXCLUSAO()

Moveto "DAEI"
While RecordStatus("New")=False
   Del
EndWhile

Moveto "DAE"
Del
EndProc ;EXCLUSAO()    

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
Private CampAnt
COD_EMPRESA=[DAE->Codigo da Empresa]
DIGITAC=True
DIGITAI=False

While DIGITAC 
  Moveto "DAE"
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf

  If DIGITAI
     Then Moveto "DAEI"
          While True                                      
            CHAVEI()
            If CHAVEI=9
               Then CampoAnt="Codigo Antecipacao"
                    QuitLoop
            EndIf                 
            Controla_EdicaoI()
          EndWhile
   EndIf
EndWhile

Moveto "DAE"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
SaveTables

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()

If RecordStatus("New")
   Then CHAVEI=1 
   Else CHAVEI=0
EndIf                             

DIGITAI()

If RecordStatus("Locked") Then UnLockRecord EndIf         

EndProc ;Controla_EdicaoI()

;*******************************************************************************
;* Rotina aguarda teclas padrao                                                *
;*******************************************************************************
Proc AguardaTeclasPadraoIt()

BarraPadrao()
Wait Field
  Until "ESC","ENTER",
        "HOME","UP","PGUP","PGDN",
        -94,-33,-115,-116,-133,-134,
        "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"
ClearSpeedBar      

Endproc

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

Prompt TECLA 
SpeedBar "["+Chr(17)+"]" :"ESC",
         "~.....~  "      +         ;NÆo faz diferen‡a!
         "~.....~ "      :"DEL",   ;NÆo faz diferen‡a!
         "~Fun‡”es~"      :-33,
         "~Ficha~"  :"F3",
         "~?~"            :-94


Endproc

;*******************************************************************************
;* Rotina Mensagem Teclas Padrao                                               *
;*******************************************************************************
Proc MsgTeclasPadrao1()
MSG=    "    Esc= Voltar Menu                 //"
MSG=MSG+"     F3= Visualizar modo Ficha       //"
MSG=MSG+"  Alt+F= Fun‡”es                     //"
MSG=MSG+"Ctrl+F1= Ajuda/Teclas [?]            "
MsgHelp("Teclas/Fun‡”es",MSG)
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigNed(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
LimpAguarde()

CHAVEC=""

;View NoWinDow "\\Sistemas\\Estoque\\NotaEC"   

View NoWinDow "\\Sistemas\\Vendas\\NotaC"
View NoWinDow "\\Sistemas\\Vendas\\NotaI"
View NoWinDow "DAEI"
Coedit NoWindow "DAE"

PickForm "F"
If NRecords("DAE")>1
   Then Home
        If IsBlank([Numero do Lancamento])
           Then Echo Normal
                Echo Off
                MSG="Existe registro com Erro !// //"
                MSG=MSG+"Verificar numero lan‡amento em branco !// //"
                MSG=MSG+"Excluir o lan‡amento e verificar a origem do mesmo !"
                Mensagem(MSG)
        EndIf
EndIf

OPCAO_FORM="F"
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
