;** Notaac *********************************************************************
;*  Digitacao de Nota Fiscal/acerto                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/01/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 05/06/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 13/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Observacao
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Esclusao ESTQPRM            
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito]
;Ultima Alteracao: 14/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes parametros                    
;Ultima Alteracao: 22/01/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1()                    

;*******************************************************************************
;* Rotina para Controlar Chave da Nota Fiscal                                  *
;*******************************************************************************
Proc CHAVEC()
COPIOU_REGISTRO=False
FACA_DIGITAC =True
NF_Cancelada =False
While True
  Moveto "Notac"
  End
  Moveto [Codigo da Empresa]
  
  If OPCAO_FORM="4"
     Then Down
     Else PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Codigo da Empresa]
  [Codigo da Empresa       ]=PARAM_EMPRESA
  SetaCorRegistro("Editar")
  While True

  MSGCAMPO=Field()

  If Field()="Codigo do Documento" Or
     Field()="Codigo da Empresa"
     Then TECLA="F1=Tabelas"
     Else TECLA=""
  Endif

  AguardaTeclasPadrao()

    Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F1":
             If Field()="Codigo do Documento" Or
                Field()="Codigo da Empresa"
                Then CONSULTAF1()
             Endif
        Case RetVal="F3":
             If OPCAO_FORM="4"
                Then OPCAO_FORM="5"
                Else OPCAO_FORM="4"
             EndIf
             Del
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               COPIOU_REGISTRO=False
               FACA_DIGITAC =True
               NF_Cancelada =False

               If OPCAO_FORM="4"
                  Then PAGINA("NotaC","MR")
                  Else PAGINA("NotaC","MT")
               EndIf
               EMPRESA=[Codigo da Empresa  ]
               NUMDOC =[Numero do Documento]
               SERIE  =[Serie do Documento ]
               Switch
                 Case EDITAR="S":
                      PickForm "5"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CHAVEC=0
                              Controla_EdicaoC()
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      UnLockRecord
                      MENSAGEM("Fun‡„o Invalida")
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="4"
                  Then PickForm "4"
                  Else PickForm "5"
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             If Field()="Codigo da Empresa"
                Then CHAVEC=9
                     Del
                     Return
                Else Left
             EndIf
        Case Retval="ENTER":
             If IsBlank([])
                Then Loop
             EndIf
             Switch
                  Case Field()="Codigo da Empresa":
                       EMPRESA=[Codigo da Empresa]
                       Moveto [Numero do Documento]
                  Case Field()="Numero do Documento":
                       []=ALINH()
                       NUMDOC=[Numero do Documento]
                       Moveto [Codigo do Documento]
                  Case Field()="Codigo do Documento":
                       SERIE =[Serie do Documento]
                       CODDOC=[Codigo do Documento]
                       Del
                       PickForm "5"
                       Moveto [Codigo da Empresa]
                       Locate EMPRESA,NUMDOC,SERIE
                       If Retval
                          Then CHAVEC=0
                               If Not IsLockRecord()
                                  Then Echo Normal
                                       Echo Off
                                       If Checa_Controle([Numero_Controle_Dia])
                                          Then Return
                                       EndIf
                               EndIf
                          Else Mensagem("Lan‡amento n„o encontrado !")
                       EndIf
                       If OPCAO_FORM="4"
                          Then PickForm "4"
                       EndIf
                       QuitLoop
             EndSwitch
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
FACA_CHAVEI   = False
Moveto "NotaC"
If [Situacao]="C"
   Then Mensagem("Nota Fiscal Cancelada !")
        CHAVEC=9
        Return
EndIf
If Not Carrega_Parametros()
   Then CHAVEC=9
        Return
   Else If Not Checa_Supervisor()
           Then CHAVEC=9
                Return
        EndIf
EndIf

FACA_CHAVEI   = True
Moveto [Data de Acerto]
While True

      TECLA=" Esc=Retornar  PgDn  "

      If Field()="Codigo da Empresa"        Or
         Field()="Condicao de Pagamento"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      TECLA=TECLA+"F8=Observa‡„o  "

      Prompt TECLA

      MSGCAMPO=Field()

      If Field()="Comissao Paga"
         Then MSGCAMPO="Comiss„o Paga (Sim/N„o)"
      EndIf

    ;;If Field()="Data de Acerto" And IsBlank([Data de Acerto])
    ;;   Then [Data de Acerto]=Today()
    ;;EndIf

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F8"

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="Codigo da Transportadora" Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"
              Then CONSULTAF1()
            EndIf
      Case RetVal="PGDN" And Not Isblank([Data de Acerto]):
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="F8":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
      Case Retval="ESC":
           Switch
           Case Field()="Data de Acerto":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEC=9
                        QuitLoop
                Endif
           Case Field()="Comissao do Representante":
                Moveto [Comissao Paga]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           Switch
           Case Field()="Data de Acerto":
                Right
           Case Field()="Comissao Paga":
                If []="N" Then []="" EndIf
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, TRIB_ICMS, KM_FRETE,
        TAXA_FRETE, VRMINIMO_FRETE, CHAVEC

Private CAMPOS_OK, NCAMPO

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
;;Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  OtherWise: CAMPOS_OK=True
EndSwitch

If Not CAMPOS_OK
  Then Moveto "NotaC"
       Moveto Field NCAMPO
       Return False
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [NotaC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
KeyPress "ESC"

;*** Aliquota/Tributacao/Observacao da Destinacao ***
TRIB_ICMS=""

Moveto [Codigo da Destinacao]
Ativa_Lookup()
Moveto [Codigo da Destinacao]
Locate [NotaC->Codigo da Destinacao]
If RetVal
   Then If [ICMS Aliquota do Estado]<>"S"
           Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
        EndIf
        TRIB_ICMS=[Tributacao de ICMS]
EndIf
KeyPress "ESC"
;;;;;[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [NotaC->Codigo]
If RetVal
   Then If IsBlank([Km Frete])
           Then KM_FRETE=0
           Else KM_FRETE=[Km Frete]
        EndIf
   Else KM_Frete=0
EndIf
KeyPress "ESC"

TAXA_FRETE=0
VRMINIMO_FRETE=0

If Not IsBlank([Aliquota de ICMS Frete]) And
   [Frete Incluso na Nota]="+" Or
   [Frete Incluso na Nota]=":"
   Then [Aliquota de ICMS Frete]=[Aliquota de ICMS]
        [CFO Frete             ]=[CFO             ]
EndIf

Moveto "NotaC"
Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
Moveto "NotaI"
FACA_DIGITAF  = True
TEM_DEVOLUCAO = True
While True

  Moveto [Preco Total]
  TOTM=ImageCSum()
  Moveto "NotaC"
  [Valor DebitoCredito]=TOTM
  Moveto "NotaI"

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

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver     = False

  While True

    TECLA= " Esc=Retornar  F7=Paginar  PgDn/PgUp  "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP"

    Switch
    Case Retval="PGDN":
         Del
         If RecordStatus("New")=True
            Then TEM_DEVOLUCAO=False
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         PAGINA("NotaI","MR")
         UnLockRecord
         QuitLoop
    Case Retval="ENTER":
         Del
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
CHAVEF=0
CHAVEV=1
COPIOU_REGISTRO=False

Moveto "NotaC"
Moveto [Forma de Pagamento]
While True

      MSGCAMPO=Field()

      If Field()="Forma de Pagamento"
         Then TECLA=" Esc=Retornar  F1=Tabelas  "
         Else TECLA=" Esc=Retornar  "
      EndIf
      TECLA=TECLA+"PgDn=Finalizar  PgUp  "

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","PGDN","PGUP","F1"

    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           QuitLoop
      Case RetVal="ESC":
        Switch
           Case Field()="Forma de Pagamento":
                CHAVEF=9
                QuitLoop
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
                QuitLoop
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

If not GetP_Fatura([NotaC->Codigo da Empresa])
   then Return False
EndIf

return true
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc, PARAM_CONSIGNACAO, PARAM_RELAT_NF

View NOWINDOW "NotaI"
View NOWINDOW "NotaIDV"
View NOWINDOW "NotaV"

View NOWINDOW "\\Sistemas\\Estoque\\NotaEC"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEI"
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"

View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeI"

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
    EndWhile
    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=0
         Then FACA_DIGITAC=False
              FACA_CHAVEI =False
      EndIf
      QuitLoop
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="4"
   Then PickForm "4"
EndIf


SaveTables
Endproc

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Parm"

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE ="" EndIf
PARAM_EMPRESA=SYS_EMPRESA_DEFAULT
PARAM_CONSIGNACAO="N"
Carrega_Tabelas()

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

PickForm "5"
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetHighLight Current Record 51  Field 51
Moveto "NotaC"
PickForm "4"
OPCAO_FORM="4"

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