;** PegaCFOP *******************************************************************
;*  Pega CFOP para os Itens do Documento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 08/01/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 16/12/2009 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Tipo Tributacao 000/010 Fundicao Sao Geraldo
;Ultima Alteracao: 26/04/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP 5405 EletroG                           
;Ultima Alteracao: 23/02/2011 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP 5405 Construbel                        
;Ultima Alteracao: 01/02/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP Item Auditoria/Todos                   
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP INDUSTRIA, COMERCIO        
;Ultima Alteracao: 02/08/2012 por Kamila Gomes
;Motivo Alteracao: AAjustes CFOP 5405 Cotta loja
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP 6101 para 6401 ST        
;Ultima Alteracao: 06/05/2014 por Bruno/Kamila
;Motivo Alteracao: Ajustes CFOP 5405 #0321# 
;Ultima Alteracao: 03/09/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes CFOP 5405 e 6405 #0313# 
;Ultima Alteracao: 17/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP 1202 para 1411 ST        
;Ultima Alteracao: 02/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP 5405 e 6405 #0294# 
;Ultima Alteracao: 26/02/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes CFOP 6404 #0294# 
;Ultima Alteracao: 28/02/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes CFOP 5411, 5202 #0294# 
;Ultima Alteracao: 26/11/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servi‡o pegar da destina‡Æo 
;Ultima Alteracao: 20/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP #0346
;Ultima Alteracao: 04/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP #0438
;Ultima Alteracao: 24/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP #0438

;*******************************************************************************
;* Rotina para Entradas                                                        *
;*******************************************************************************
Proc CFOP_Entrada() 

Switch
  Case CFOP_TPITEM="C":          ;*** SERVICO ***
    Switch
      Case Len(CFO_C)=4:
        Switch
          Case CFO_C="2925" : CFO_C="2125"
          Case CFO_C="2902" : CFO_C="2124"
          Case CFO_C="1902" : CFO_C="1124"
          Case CFO_C="1407" : CFO_C="1933"
          Case CFO_C="1933" : CFO_C="1933"
          Case CFO_C="2933" : CFO_C="2933"
          OtherWise         :
           If CFO_C<>"1949" And CFO_C<>"2949" And
              CFO_C<>"1252" And CFO_C<>"1302" And CFO_C<>"1303" And CFO_C<>"1124" And
              CFO_C<>"1350" And CFO_C<>"1351" And CFO_C<>"1352" And CFO_C<>"1353" And
              CFO_C<>"2350" And CFO_C<>"2351" And CFO_C<>"2352" And CFO_C<>"2353"
              Then If SubStr(CFO_C,1,1)="1"
                      Then CFO_C="1949"
                      Else CFO_C="2949"
                   EndIf
           EndIf
        EndSwitch
    EndSwitch

  Case CFOP_TPITEM<>"C":         ;*** PRODUTO ***
    Switch
      Case CFOP_TRIBICMS="S":      ;*** PRODUTO C/ SUBSTITUICAO TRIBUTARIA ***
        Switch
          Case Len(CFO_C)=4:
            Switch
              Case CFO_C="1101": CFO_C="1551" 
              Case CFO_C="2101": CFO_C="2551" 

              Case CFO_C="1102": CFO_C="1403" 
              Case CFO_C="2102": CFO_C="2403" 

              Case CFO_C="1933": CFO_C="1407" 

              Case CFO_C="1201": CFO_C="1410" 
              Case CFO_C="1202": CFO_C="1411" 
            EndSwitch
        EndSwitch

        If SYS_CODIGO_CLIENTE="0167"
           Then If CFOP_TRIBICMS="S" And CFOP_TPTRIB="000" Then CFOP_TPTRIB="010" EndIf
                If CFOP_TRIBICMS="D" And CFOP_TPTRIB="010" Then CFOP_TPTRIB="000" EndIf
        EndIf

      Case CFOP_TRIBICMS="D":     ;*** PRODUTO C/ DEBITO ICMS ***
        Switch
          Case Len(CFO_C)=4:
            Switch
              Case CFO_C="1551": CFO_C="1101" 
              Case CFO_C="2551": CFO_C="2101" 
              Case CFO_C="1403": CFO_C="1102" 
              Case CFO_C="2403": CFO_C="2102" 
              Case CFO_C="2125": CFO_C="2925" 
              Case CFO_C="1124": CFO_C="1902" 
              Case CFO_C="2124": CFO_C="2902" 
            EndSwitch
        EndSwitch    

        If SYS_CODIGO_CLIENTE="0167"
           Then If CFOP_TRIBICMS="S" And CFOP_TPTRIB="000" Then CFOP_TPTRIB="010" EndIf
                If CFOP_TRIBICMS="D" And CFOP_TPTRIB="010" Then CFOP_TPTRIB="000" EndIf
        EndIf

      Case CFOP_TRIBICMS="O":     ;*** PRODUTO S/ DEBITO ICMS ***
        Switch
          Case Len(CFO_C)=4:
            Switch
              Case CFO_C="2125": CFO_C="2925" 
              Case CFO_C="1124": CFO_C="1902" 
              Case CFO_C="2124": CFO_C="2902" 
            EndSwitch
        EndSwitch
    EndSwitch
    
    Switch
      Case Search("COMERCIO",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="1101": CFO_C="1102"
      Case Search("COMERCIO",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="2101": CFO_C="2102"

      Case Search("INDUSTRIA",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="1102": CFO_C="1101"
      Case Search("INDUSTRIA",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="2102": CFO_C="2101"
    EndSwitch

    Switch
      Case SYS_CODIGO_CLIENTE="0227" And CFOP_EMPRESA="0002" And CFOP_TPITEM="P" And CFO_C="1101": CFO_C="1102"
      Case SYS_CODIGO_CLIENTE="0227" And CFOP_EMPRESA="0002" And CFOP_TPITEM="P" And CFO_C="2101": CFO_C="2102"
    EndSwitch

EndSwitch
EndProc

;*******************************************************************************
;* Rotina para Saidas                                                          *
;*******************************************************************************
Proc CFOP_Saida()

Switch
  Case CFOP_TPITEM="C":            ;*** SERVICO ***
    Switch
      Case Len(CFO_C)=4:
       ;If CFO_C<>"5949" And CFO_C<>"6949"
       ;   Then If SubStr(CFO_C,1,1)="5"
       ;           Then CFO_C="5949"
       ;           Else CFO_C="6949"
       ;        EndIf
       ;EndIf
    EndSwitch

  Case CFOP_TPITEM<>"C":            ;*** PRODUTO ***
  
    Switch
      Case CFOP_TPITEM="P" And CFOP_TRIBICMS="S":
        Switch
          Case CFO_C="5101": CFO_C="5401"
          Case CFO_C="6101": CFO_C="6401"
          Case CFO_C="5102": 
               Switch
                 Case SYS_CODIGO_CLIENTE="0175" Or
                      SYS_CODIGO_CLIENTE="0321"  : CFO_C="5405"

                 Case SYS_CODIGO_CLIENTE="0438"  : CFO_C="5401"
                      
                 OtherWise                       : CFO_C="5403"
               EndSwitch  
          Case CFO_C="6102": CFO_C="6403"
        EndSwitch

        If SYS_CODIGO_CLIENTE="0167"
           Then If CFOP_TRIBICMS="S" And CFOP_TPTRIB="000" Then CFOP_TPTRIB="010" EndIf
                If CFOP_TRIBICMS="D" And CFOP_TPTRIB="010" Then CFOP_TPTRIB="000" EndIf
        EndIf

      Case CFOP_TPITEM="P" And CFOP_TRIBICMS="D":
        Switch
          Case CFO_C="5102": CFO_C="5101"
          Case CFO_C="6102": CFO_C="6101"
        EndSwitch

        If SYS_CODIGO_CLIENTE="0167"
           Then If CFOP_TRIBICMS="S" And CFOP_TPTRIB="000" Then CFOP_TPTRIB="010" EndIf
                If CFOP_TRIBICMS="D" And CFOP_TPTRIB="010" Then CFOP_TPTRIB="000" EndIf
        EndIf

      Case CFOP_TPITEM="T" And CFOP_TRIBICMS="D":
        Switch
          Case CFO_C="5405":
						Switch
              Case SYS_CODIGO_CLIENTE="0229": CFO_C="5102"								
						  OtherWise                     : CFO_C="5101"
						EndSwitch
          Case CFO_C="6404": 
            Switch
              Case SYS_CODIGO_CLIENTE="0294": CFO_C="6102"								
						  OtherWise                     : CFO_C="6101"
						EndSwitch
          Case CFO_C="5403": CFO_C="5102"
          Case CFO_C="6403": CFO_C="6102"
          Case CFO_C="5101":
            If SYS_CODIGO_CLIENTE<>"0051"
               Then CFO_C="5102"
            EndIf
          Case CFO_C="6101":
            If SYS_CODIGO_CLIENTE<>"0051"
               Then CFO_C="6102"
            EndIf

          Case CFO_C="5411": CFO_C="5202"
          Case CFO_C="6411": CFO_C="6202"

        EndSwitch

      Case CFOP_TPITEM="T" And CFOP_TRIBICMS="S":
        Switch
          Case CFO_C="5102" or
               CFO_C="5101": 
						Switch
              Case SYS_CODIGO_CLIENTE="0229" Or								
                   SYS_CODIGO_CLIENTE="0286" Or
                   SYS_CODIGO_CLIENTE="0321" Or 
                   SYS_CODIGO_CLIENTE="0313" Or
                   SYS_CODIGO_CLIENTE="0294" Or
                   SYS_CODIGO_CLIENTE="0346" Or
                   SYS_CODIGO_CLIENTE="0438" Or
                   SYS_CODIGO_CLIENTE="0175"  : CFO_C="5405"								

						  OtherWise                       : CFO_C="5403"
						EndSwitch
          Case CFO_C="6102":
						Switch
              Case SYS_CODIGO_CLIENTE="0229" or 								
                   SYS_CODIGO_CLIENTE="0294" or	
                   SYS_CODIGO_CLIENTE="0286" or	
                   SYS_CODIGO_CLIENTE="0313" : CFO_C="6404"								

						  OtherWise                      : CFO_C="6403"
						EndSwitch

          Case CFO_C="5202": CFO_C="5411"
          Case CFO_C="6202": CFO_C="6411"

        EndSwitch
    EndSwitch

    Switch
      Case CFOP_TPITEM="T" And CFO_C="5101": CFO_C="5102"
      Case CFOP_TPITEM="T" And CFO_C="6101": CFO_C="6102"
      Case CFOP_TPITEM="P" And CFO_C="5102": CFO_C="5101"
      Case CFOP_TPITEM="P" And CFO_C="6102": CFO_C="6101"
    EndSwitch


    Switch
      Case Search("COMERCIO",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="5101": CFO_C="5102"
      Case Search("COMERCIO",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="6101": CFO_C="6102"

      Case Search("INDUSTRIA",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="5102": CFO_C="5101"
      Case Search("INDUSTRIA",CFOP_ATIVEMPRESA)>0 And CFOP_TPITEM="P" And CFO_C="6102": CFO_C="6101"

    EndSwitch

    Switch
      Case SYS_CODIGO_CLIENTE="0227" And CFOP_EMPRESA="0002" And CFOP_TPITEM="P" And CFO_C="5101": CFO_C="5102"
      Case SYS_CODIGO_CLIENTE="0227" And CFOP_EMPRESA="0002" And CFOP_TPITEM="P" And CFO_C="6101": CFO_C="6102"
    EndSwitch

EndSwitch

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

;* Setar Variaveis abaixo ao chamar
;Checa_CFOP=?
;CFO_C=?       
;CFOP_TPITEM=?
;CFOP_TRIBICMS=?
;CFOP_EMPRESA=?
;CFOP_ATIVEMPRESA=?

If Not IsAssigned(CFOP_EMPRESA)        Then CFOP_EMPRESA=""        EndIf
If Not IsAssigned(CFOP_ATIVEMPRESA)    Then CFOP_ATIVEMPRESA=""    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

Switch
  Case Checa_CFOP="E": CFOP_Entrada()
  Case Checa_CFOP="S": CFOP_Saida()
EndSwitch

If CFOP_EMPRESA=""     Then Release Vars CFOP_EMPRESA     EndIf
If CFOP_ATIVEMPRESA="" Then Release Vars CFOP_ATIVEMPRESA EndIf
