;** Destin   *******************************************************************
;*  Manutencao Cadastro de Destinacoes de Faturas                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/10/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao Sem Reducao BCICMS
;Ultima Alteracao: 26/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao Observacao_Destinacao
;Ultima Alteracao: 10/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem sem ENTER
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Aliquota de Credito ICMS Substituicao
;Ultima Alteracao: 09/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Calcula Substituicao  
;Ultima Alteracao: 18/12/2009 por Cleber Alves
;Motivo Alteracao: Inclusao Utiliza_Balcao 
;Ultima Alteracao: 23/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes        
;Ultima Alteracao: 02/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes message p/ gera duplicata e venda a vista
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cfop Servico, Formas Redu‡Æo BCIcms
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN 
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido do form o campo [Calcula Substituicao]
;Ultima Alteracao: 27/06/2012 por Bruno Carvalho
;Motivo Alteracao: Add "Calcula_Nota" ,removido e ajustado alguns campos
;Ultima Alteracao: 13/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes de controle
;Ultima Alteracao: 30/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message gera duplicata
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: InclusÆo FinNfe
;Ultima Alteracao: 29/05/2017 por Rafael Matos
;Motivo Alteracao: Incluso Aliquota e motivo ICMS Desonerado e ajustes TECLAS e MSGCAMPO
;Ultima Alteracao: 12/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao indicador de presen‡a         
;Ultima Alteracao: 06/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao ChecaDados()         

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  Moveto [Codigo da Destinacao]
  End
  SEQ = [Codigo da Destinacao]

  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="2"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVE=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             If OPCAO_FORM="F"
                 Then PAGINA("Destin","MR")
                 Else PAGINA("Destin","MT")
             EndIf
             If EDITAR="S"
                 Then CHAVE=0
                      PickForm "2"
                      Controla_EdicaoC()
                 Else If EXCLUIR="S"
                         Then If QuerExcluir("")
                                 Then Del
                                 Else UnLockRecord
                              EndIf
                         Else QuitLoop
                      EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVE=9
           Del
           Return
      Case Retval="ENTER":
           If IsBlank([])
              Then If IsBlank(SEQ)
                      Then SEQ="1"
                      Else SEQ=StrVal(NumVal(SEQ)+1)
                   EndIf
                   []=SEQ
           EndIf
           []=ALINH()
           CODIGO=[]
           Del
           PickForm "2"
           Moveto [Codigo da Destinacao]
           Locate CODIGO
           If Retval
              Then CHAVE=0
              Else CHAVE=1
                   End PgDn
                   [Codigo da Destinacao]=CODIGO
           EndIf
           If IsLockRecord()
              Then If OPCAO_FORM="F"
                      Then PickForm "F"
                   Endif
                   QuitLoop
           EndIf
           Return
    EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()

Moveto [CFO]
While True

      Tecla = " Esc=Retornar  "
      If CHAVE=0
         Then Tecla=Tecla+" Del=Excluir                F5=Observa‡„o  PgDn=Finalizar  " 
         Else Tecla=Tecla+"              F4=Separador  F5=Observa‡„o  PgDn=Finalizar  "
      EndIf

      Prompt TECLA

      MSGCAMPO=""
      MSGCAMPO=Field()
      
      Switch
        Case Field()="Emite Duplicata"         Or
             Field()="Atualiza Estoque"        Or
             Field()="ICMS Aliquota do Estado" Or
             Field()="Atualiza Pedidos"        Or
             Field()="Utiliza_Balcao"          Or
             Field()="Calcula Substituicao"     : MSGCAMPO=Field()+" (Sim/N„o)"
        Case Field()="Gera Duplicata"           : MSGCAMPO="Atualiza Financeiro ? [Contas a Receber, a Pagar e o Caixa] (Sim/NÆo)"
        Case Field()="Tipo Movimento Estoque"   : MSGCAMPO="Tipo de Movimento (Entrada/Saida)"
        Case SubStr(Field(),1,4)="Trib"         : MSGCAMPO="Debitado, Isento, Outros, N„o_Tributado"
                                                  Switch
                                                    Case Field()="Tributacao de ICMS"  : 
                                                         MSGCAMPO=MSGCAMPO+", Substitui‡„o"
                                                    Case Field()="Tributacao de ISSQN" : 
                                                         MSGCAMPO="Tributacao ISSQN: Debitado,N„o tributado,Isenta,Substituta,Retida"
                                                  EndSwitch       
        Case Field()="Aliquota de ICMS"         : MSGCAMPO="Informe a Aliquota a Utilizar"
        Case Field()="Conta Caixa Padrao"       : MSGCAMPO="Informe se necess rio a Conta Caixa p/ esta destina‡„o, [F1]Consultar tabela"
        Case Field()="Sem Reducao BCICMS"       : MSGCAMPO="Op‡äes para Base de C lculo do ICMS [REDU€¶O], [F1]Consultar tabela"
        Case Field()="Aliquota BCSubstituicao"  : MSGCAMPO="Al¡quota de margem de lucro para Base de Calculo Substituicao"
        Case Field()="Aliquota Subst. CredICMS" : MSGCAMPO="Al¡quota de Credito de ICMS no Calculo Vr Substituicao"
        Case Field()="CFO"                      : MSGCAMPO="CFOP padrÆo para a Nota, [F1]Consultar tabela"
        Case Field()="CFOP_Servico"             : MSGCAMPO="CFOP padrÆo para os iten(s) de servi‡o(s) na Nota, [F1]Consultar tabela"
        Case Field()="Calcula_Nota"             : MSGCAMPO="C lculo de Tributa‡„o por Item: A=Autom tico  N=N„o C lcula  L=Livre"
        Case Field()="FinNfe"                   : MSGCAMPO="Finalidade da NF-e, [F1]Consultar tabela"
        Case Field()="IndPres"                  : MSGCAMPO="Indicador de Presen‡a NF-e/NFC-e, [F1]Consultar tabela"
      EndSwitch
      
      Wait Field
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","F3","F4","F5","PGDN"

      Switch
      Case RetVal="F1":
           MSGCAMPO=""
      
           If Field()="CFO"          Or
              Field()="CFOP_Servico" Or
              Field()="Conta Caixa Padrao"
              Then CONSULTAF1()
           EndIf
           
           If Field()="Sem Reducao BCICMS"
              Then Echo Normal
                   Echo Off
                   ShowPopup " Op‡äes para Redu‡Æo BC ICMS " CENTERED
                    "1 = Sem redu‡Æo        " : " NÆo se aplica redu‡Æo                                  " : "1",
                    "2 = Com redu‡Æo padrÆo " : " Aplica redu‡Æo                                         " : "2",
                    "3 = Com redu‡Æo S/DD   " : " Aplica redu‡Æo sem a dedu‡Æo do desconto               " : "3" 
                   ;"4 = Com redu‡Æo D/NF   " : " Aplica redu‡Æo apenas se houver desconto na nota fiscal" : "4" 
                   EndMenu
                   To MenuVar
                   Echo Off
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                       Then Loop
                       Else []=MenuVar
                   EndIf
           EndIf
           If Field()="Calcula_Nota"
              Then Echo Normal
                   Echo Off
                   ShowPopup " Calculo de Tributa‡„o por Item " CENTERED
                    "A = Autom tico    " : " C lculo de imposto autom tico por item  " : "A",
                    "N = N„o Calcular  " : " N„o calcula imposto por item            " : "N",
                    "L = Livre         " : " Valores dos impostos serÆo informados   " : "L" 
                   EndMenu
                   To MenuVar
                   Echo Off
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                       Then Loop
                       Else []=MenuVar
                   EndIf
           EndIf
           If Field()="FinNfe"
              Then 
                   Echo Normal
                   Echo Off
                   ShowPopup " Finalidade da NFe " CENTERED
                    "1 = Normal        " : " Nf-e Normal  "             : "1",
                    "2 = Complementar  " : " Nf-e Complementar        " : "2",
                    "3 = Ajuste        " : " Nf-e de Ajuste           " : "3",
                    "4 = Devolu‡Æo     " : " Nf-e de Devolu‡Æo        " : "4" 
                   EndMenu
                   To MenuVar
                   Echo Off
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                       Then Loop
                       Else []=MenuVar
                   EndIf
           EndIf
           If Field()="IndPres"
              Then IndicadorPresenca()
           EndIf
           
      Case Retval="F5":
           CampoAnterior=Field()
           Edita_Memo("Observacao_Destinacao",10,01,13,76,"Observa‡”es")
           Moveto Field CampoAnterior
      Case Retval="PGDN" And CHAVE=0:
           if ChecaDados() then QuitLoop endif

      Case Retval="F4" And CHAVE=1:
           [Descricao da Destinacao]=Fill("-",30)
           QuitLoop
      Case Retval="ESC":
           Switch
           Case Field()="CFO":
                If QuerDesfazer("")
                   Then If CHAVE=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVE=9
                        QuitLoop
                EndIf
           Case Field()="Sem Reducao BCICMS"  :
                Moveto [ICMS Aliquota do Estado]
           Case Field()="Gera Duplicata"      :
                Moveto [Atualiza Estoque] 
           Case Field()="Emite Duplicata"     :
                Moveto [Gera Duplicata] 
           Case Field()="Atualiza Pedidos"    :
                Moveto [Emite Duplicata] 
           Case Field()="Utiliza_Balcao"      :
                Moveto [Atualiza Pedidos] 
           Case Field()="Conta Caixa Padrao"  :
                Moveto [Utiliza_Balcao]                  
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER": 
           Switch
           Case Field()="CFO":
                If IsBlank([]) then Loop EndIf
                If StrVal(SubStr([],1,1))>"4"
                   Then [Tipo Movimento Estoque]="S"
                   Else [Tipo Movimento Estoque]="E"
                EndIf
                Right
           Case Field()="FinNfe" :
                If IsBlank([FinNfe])
                   Then Loop
                   Else Moveto [Atualiza Estoque]
                EndIf        
           Case Field()="Atualiza Estoque"  :
                If IsBlank([]) 
                   Then Loop 
                   Else Moveto [Gera Duplicata] 
                Endif
           Case Field()="Gera Duplicata"    :
                If IsBlank([]) 
                   Then Loop 
                   Else Moveto [Emite Duplicata] 
                Endif
           Case Field()="Emite Duplicata"   :
                If IsBlank([]) 
                   Then Loop 
                   Else Moveto [Atualiza Pedidos] 
                Endif
           Case Field()="Atualiza Pedidos"  :
                If IsBlank([]) 
                    Then Loop 
                    Else Moveto [Utiliza_Balcao] 
                Endif
           Case Field()="Utiliza_Balcao"    :
                If IsBlank([]) 
                   Then [Utiliza_Balcao]="N"   
                Endif   
                Moveto [Conta Caixa Padrao]
           Case Field()="IndPres"           :
                If IsBlank([]) 
                   Then [IndPres]="9"   
                Endif   
                Moveto [Calcula_Nota]

           Case Field()="Calcula_Nota"      :
                If IsBlank([Calcula_Nota])
                   Then [Calcula_Nota]="A"
                EndIf        
                Right    
           Case Field()="ICMS Aliquota do Estado":
                If Not IsBlank([])
                   Then If []="N"
                           Then Moveto [Aliquota de ICMS]
                           Else Moveto [Sem Reducao BCICMS]
                                [Aliquota de ICMS]=BlankNum()
                        EndIf
                EndIf                    
           Case Field()="Sem Reducao BCICMS":
                If IsBlank([])
                   Then []="1"
                EndIf
                Moveto [Aliquota CredICMS NOSN]
           Case Field()="Aliquota CredICMS NOSN":
                if ChecaDados() then QuitLoop endif

           OtherWise:
               Right
           EndSwitch          
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("")
                      Then Del
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc ChecaDados()
private result

result=true

switch
  case isblank([FinNfe  ]) or searchfrom([FinNfe  ],"1,2,3,4"      ,1)=0 : fastmsg("Finalidade NFe inv lida !"    ) result=false
  case isblank([IndPres ]) or searchfrom([IndPres ],"0,1,2,3,4,5,9",1)=0 : fastmsg("Indicador Presen‡a inv lida !") result=false
endswitch

return result
endproc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Vendas\\Bib_Vend"

CoEdit "Destin"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

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