;** NCM ************************************************************************
;*  Tabela NCM                                                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 10/12/2007 por Anivel Ausgusto Rodrigues
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Exclusao Campo MVAÝs
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas  
;Ultima Alteracao: 02/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando")   
;Ultima Alteracao: 29/06/2015 por Kamila Gomes
;Motivo Alteracao: Adicionados campos PIS e COFINS (cst e aliquotas) e atualizaItens()                                         
;Ultima Alteracao: 24/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Estados com FCP
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 25/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao NCMUF                
;Ultima Alteracao: 01/07/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tamanho NVM 8 digitos 
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 05/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grupo NCM                   
;Ultima Alteracao: 06/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualiza_Itens()  
;Ultima Alteracao: 06/10/2020 por Bruno Carvalho
;Motivo Alteracao: Erro de Sintaxe no campo -> "[NCM"  na proc Atualiza_Itens()                

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
   End
   Down 
   Moveto [NCM]
   If OPCAO_FORM="F"
     Then Down
     Else PgDn
   EndIf
   Moveto [NCM]

   SetaCorRegistro("Editar")
   While True

    TECLA=""
    AguardaTeclasPadrao()

    If RetVal=-33 
       Then
          ShowPopup " Fun‡”es " CENTERED
           "~A~tualiza Itens"  : " Aplicar as altera‡”es no cadastro de Itens" : "F5",
           "~C~ancelar"        : " Cancelar a Opera‡„o"                        : "CANCELAR"
          EndMenu
           To MenuVar
          Echo off
    
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
          EndIf
          RetVal=MenuVar
   EndIf
  
   Switch
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVE=5
           Return
  
      Case RetVal="F5":
           ConfGeral("Aplicar as altera‡”es no cadastro de Itens ?")
           If Ok="S"
            Then Atualiza_Itens()
                 CHAVE=5
                 Return  
           EndIf      
      Case RetVal=-94 : MsgTeclasPadrao()
      Case (RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME"):
           While True
             If OPCAO_FORM="F"
                Then PAGINA("NCM","MR")
                Else PAGINA("NCM","MT")
             EndIf
             CODIGO=[NCM]
             If EDITAR="S"
                Then CHAVE=0
                     PickForm "1"
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("deste ncm")
                                Then PickForm "1"
                                     EXCLUSAO("Cabeca")
                                Else UnLockRecord
                             EndIf
                             If OPCAO_FORM="1"
                                Then PickForm "1"
                                Else PickForm "F"
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           quitloop
      Case Retval="ESC":
           CHAVE=9
           Del
           Return
      Case RetVal="ENTER":
            If IsBlank([]) or len([])<8
               Then FastMsg("NCM inv lido ! 8 d¡gitos")
                    Loop
            EndIf

             CODIGO=[]
             Del
             PickForm "1"
             Locate CODIGO
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End Pgdn
                     Moveto [NCM]
                     []=CODIGO
             EndIf
             If IsLockRecord()
                Then If OPCAO_FORM="F"
                        Then PickForm "F"
                             QuitLoop
                     EndIf
             EndIf
             Return
      EndSwitch
  EndWhile
EndWhile

EndProc  ;(Chave)

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

Moveto [Descricao NCM]
While True
        If Field()="PIS_CST"        Or
           Field()="COFINS_CST"     Or            
           Field()="CodigoGrupoNCM"            
           Then TECLA=" F1=Tabelas"
           Else TECLA="          "
        EndIf

      TECLA=TECLA+" Esc=Retornar  "

      If CHAVE=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSGCAMPO=Field()
      ;Switch
      ;  Case Field()="MVA Externo": MSGCAMPO="% Margem de Valor Agregado EXTERNO para Base Calc. Substitui‡Æo"
      ;  Case Field()="MVA Interno": MSGCAMPO="% Margem de Valor Agregado INTERNO para Base Calc. Substitui‡Æo"
      ;EndSwitch 
      
      Switch
        Case Field()="CodigoGrupoNCM"  : MSGCAMPO="Grupo de NCM"
        Case Field()="PIS_CST"         : MSGCAMPO="Codigo da situa‡„o tribut ria/PIS"
        Case Field()="COFINS_CST"      : MSGCAMPO="Codigo da situa‡„o tribut ria/COFINS"
        Case Field()="PIS_Aliquota"    : MSGCAMPO="Aliquota de PIS"
        Case Field()="COFINS_Aliquota" : MSGCAMPO="Aliquota de COFINS"
        Case Field()="Estado FCP"      : MSGCAMPO="UF com Fundo de Combate a Pobreza, Informe TODOS ou exemplo: MG/SP/RJ"
      EndSwitch 
      
      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
        Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","F1"

      Switch
      
      Case RetVal="F1":
           If Field()="PIS_CST"
              Then TribCST=Checa_CST("PIS","S","")
                   If Not IsBlank(TribCST)
                      Then [PIS_CST]=TribCST
                   EndIf
           EndIf            
           If Field()="COFINS_CST"
              Then TribCST=Checa_CST("COFINS","S","")
                   If Not IsBlank(TribCST)
                      Then [COFINS_CST]=TribCST
                   EndIf
           EndIf            
           If Field()="CodigoGrupoNCM"
              Then CONSULTAF1()
           EndIf            
      Case Retval="ESC":
           Switch
             Case Field()="Descricao NCM":
                  If QuerDesfazer("")
                     Then If CHAVE=1
                             Then DEL
                             Else Undo
                          Endif
                          CHAVE=9
                          QuitLoop
                  Endif
             OtherWise: Left     
           EndSwitch
      Case Retval="ENTER":
           Switch
                 Case Field()="COFINS_Aliquota" :  QuitLoop
                 OtherWise                      : Right
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("deste ncm")
                      Then EXCLUSAO("Cabeca")
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Atualizar Itens                                                 *
;*******************************************************************************
Proc Atualiza_Itens()
private ncmant, ncmok

Do_It!
ClearAll

ncmant="???"
ncmok =false

NR = NRecords("Itens")
View   "NCM"
CoEdit "Itens"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Atualizando Itens "+BARRA_STRING)
                           
  if not isblank([NCM])
     then
          if [NCM]<>ncmant
             then
                  ncmant=[NCM]
                  getrecord "NCM" [NCM] to regncm
                  if retval
                     then ncmok=true
                     else ncmok=false
                  endif
          endif
     else ncmok=false                
  endif           

  if ncmok
     then
          if not isblank(regncm["PIS_CST"   ]) then [PIS_CST   ]=regncm["PIS_CST"   ]    [PIS_Aliquota   ]=regncm["PIS_Aliquota"   ]  endif
          if not isblank(regncm["COFINS_CST"]) then [COFINS_CST]=regncm["COFINS_CST"]    [COFINS_Aliquota]=regncm["COFINS_Aliquota"]  endif
  endif   
  
EndScan
Do_It!
ClearAll

Coedit "NCM"

EndProc

;*******************************************************************************
;* Rotina para Localizar Ordem                                                 *
;*******************************************************************************
Proc ChaveI()
While True
  Moveto [UF]
  End
  Down

  SetaCorRegistro("Editar")
  While True

    TECLA= " Esc=Retornar  "
    If Field()="UF"
       Then Tecla=Tecla+"F1=Tabelas  "
    EndIf
    TECLA=TECLA+"  PgDn=Finalizar  "

    MSGCAMPO=Field()

    Prompt TECLA

    Wait Field
        Message MSGCAMPO
         Until "ESC","ENTER","F7","HOME","PGDN","UP","F1"

    Switch
    Case RetVal="F1":
         If Field()="UF"
            Then CONSULTAF1()
         EndIf
    Case RetVal="ESC":
         Del
         CHAVEI=9
         Return
    Case RetVal="PGDN":
         Del
         CHAVEI=8
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("NCMUF","MR")
           NITEM=[UF]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then Del
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop

                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If isBlank([UF])
            Then loop
         EndIf
         NITEM=[UF]
         Del
         Locate CODIGO,NITEM
         If Retval
            Then CHAVEI=0
                 NITEM=[]
            Else CHAVEI=1
                 End
                 Down
                 [NCM            ]=CODIGO
                 [UF             ]=NITEM
                 UnLockRecord
                 Locate CODIGO,NITEM
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAI()
Moveto [FCP_Aliquota]
While True

      TECLA=" Esc=Retornar  "

      If CHAVEI=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      If Field()=""
         Then Tecla=Tecla+"F1=Tabelas  "
      EndIf

      MSGCAMPO=Field()
      if field()="FCP_Aliquota"      then MSGCAMPO="% FCP para ICMS"                 endif
      if field()="FCP_ST_Aliquota"   then MSGCAMPO="% FCP para ICMS Subt.Tribut rio" endif

      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","F1"

      Switch
      Case RetVal="F1":
           If Field()=""
              Then CONSULTAF1()
           EndIf
      Case Retval="ESC":
           If Field()="FCP_Aliquota"
              Then If CHAVEI=1
                      Then Del
                      Else If RecordStatus("Modified")
                              Then Undo
                           EndIf
                   EndIf
                   CHAVEI=9
                   QuitLoop
              Else Left
           EndIf
      Case Retval="ENTER":
           If Field() = "FCP_ST_Aliquota"
              Then QuitLoop
              Else Right
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEI=0
              Then If QuerExcluir("")
                      Then DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc  ; (DigitaI)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO

Switch
Case TIPO="Cabeca":
     Grava_LogEx("NCM")

     Moveto "NCMUF"
     While RecordStatus("New")=False
       Del
     EndWhile
     Moveto "NCM"
     Del
EndSwitch
EndProc  ; (Exclusao)


;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
DIGITAI()
SetaCorRegistro("Padrao")
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
SetaCorRegistro("Padrao")
While CHAVE<>9
  Moveto "NCMUF"
  CHAVEI()
  If CHAVEI=9 Or
     CHAVEI=8
     Then QuitLoop
  EndIf
  Controla_EdicaoI()
EndWhile
Moveto "NCM"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
   Else PickForm "1"
EndIf
EndProc

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

CoEdit "NCM"
PickForm "1"
moveto "NCMUF" 
SetaCorRegistro("Padrao")

moveto "NCM" 
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 "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All
