Brunomm/br_nfe

View on GitHub
lib/br_nfe/product/nfe/declaracao_importacao.rb

Summary

Maintainability
A
0 mins
Test Coverage
module BrNfe
    module Product
        module Nfe
            class DeclaracaoImportacao < BrNfe::ActiveModelBase
                # Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) 
                # (NT2011/004)
                # 
                # <b>Type:     </b> _String_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _DOC123_
                # <b>Length:   </b> _max: 12_
                # <b>tag:      </b> nDI
                #
                attr_accessor :numero_documento
                alias_attribute :nDI, :numero_documento


                # Data de Registro do documento
                # 
                # <b>Type:     </b> _Date_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _Date.current_
                # <b>tag:      </b> dDI
                #
                attr_accessor :data_registro
                def data_registro
                    convert_to_date(@data_registro)
                end
                alias_attribute :dDI, :data_registro
                
                # Local de desembaraço
                # 
                # <b>Type:     </b> _String_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _Pier 12_
                # <b>Length:   </b> _max: 60_
                # <b>tag:      </b> xLocDesemb
                #
                attr_accessor :local_desembaraco
                alias_attribute :xLocDesemb, :local_desembaraco

                # UF do desembaraço
                # Sigla da UF onde ocorreu o Desembaraço Aduaneiro
                # 
                # <b>Type:     </b> _String_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _SP_
                # <b>Length:   </b> _max: 2_
                # <b>tag:      </b> UFDesemb
                #
                attr_accessor :uf_desembaraco
                alias_attribute :UFDesemb, :uf_desembaraco

                # Data do Desembaraço Aduaneiro
                # 
                # <b>Type:     </b> _Date_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _Date.current_
                # <b>tag:      </b> dDesemb
                #
                attr_accessor :data_desembaraco
                def data_desembaraco
                    convert_to_date(@data_desembaraco)
                end
                alias_attribute :dDesemb, :data_desembaraco

                # Via de transporte internacional informada na 
                # Declaração de Importação (DI)
                #
                # 1=Marítima;    |   7=Rodoviária;
                # 2=Fluvial;     |   8=Conduto / Rede Transmissão;
                # 3=Lacustre;    |   9=Meios Próprios;
                # 4=Aérea;       |   10=Entrada / Saída ficta.
                # 5=Postal       |   11=Courier;
                # 6=Ferroviária; |   12=Handcarry. (NT 2013/005 v 1.10)
                # 
                # <b>Type:     </b> _Number_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _7_ OR _07_
                # <b>Default:  </b> _1_
                # <b>Length:   </b> _max: 2_
                # <b>tag:      </b> tpViaTransp
                #
                attr_accessor :via_transporte
                def via_transporte
                    @via_transporte.to_i if @via_transporte.present?
                end
                alias_attribute :tpViaTransp, :via_transporte

                # Valor da AFRMM - Adicional ao Frete para Renovação da Marinha Mercante
                # A tag deve ser informada no caso da via de transporte marítima
                # 
                # <b>Type:     </b> _Float_
                # <b>Required: </b> _No_ (Yes if via_transporte == 1)
                # <b>Example:  </b> _1550.00_
                # <b>Length:   </b> _precision: 2_
                # <b>tag:      </b> vAFRMM
                #
                attr_accessor :valor_afrmm
                alias_attribute :vAFRMM, :valor_afrmm

                # Forma de importação quanto a intermediação
                #
                # 1=Importação por conta própria;
                # 2=Importação por conta e ordem;
                # 3=Importação por encomenda;
                # 
                # <b>Type:     </b> _Number_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _2_
                # <b>Default:  </b> _1_
                # <b>Length:   </b> _max: 1_
                # <b>tag:      </b> tpIntermedio
                #
                attr_accessor :tipo_intermediacao
                def tipo_intermediacao
                    @tipo_intermediacao.to_i if @tipo_intermediacao.present?
                end
                alias_attribute :tpIntermedio, :tipo_intermediacao

                # CNPJ do adquirente ou do encomendante
                # Obrigatória a informação no caso de importação por conta e
                # ordem ou por encomenda. Informar os zeros não significativos
                # 
                # <b>Type:     </b> _Number_
                # <b>Required: </b> _No_ (Yes if tipo_intermediacao IN 2, 3)
                # <b>Example:  </b> _07.123.456/0001-88_
                # <b>Length:   </b> _max: 14_
                # <b>tag:      </b> CNPJ
                #
                attr_accessor :cnpj_adquirente
                def cnpj_adquirente
                    return "" unless @cnpj_adquirente.present?
                    BrNfe::Helper::CpfCnpj.new(@cnpj_adquirente).sem_formatacao
                end
                alias_attribute :CNPJ, :cnpj_adquirente

                # Sigla da UF do adquirente ou do encomendante
                # Obrigatória a informação no caso de importação por conta e
                # ordem ou por encomenda. Não aceita o valor "EX".
                # 
                # <b>Type:     </b> _String_
                # <b>Required: </b> _No_ (Yes if tipo_intermediacao IN 2, 3)
                # <b>Example:  </b> _SP_
                # <b>Length:   </b> _max: 2_
                # <b>tag:      </b> UFTerceiro
                #
                attr_accessor :uf_terceiro
                alias_attribute :UFTerceiro, :uf_terceiro

                # Código do Exportador
                # Código do Exportador, usado nos sistemas internos de
                # informação do emitente da NF-e
                # 
                # <b>Type:     </b> _String_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _945123_
                # <b>Length:   </b> _max: 60_
                # <b>tag:      </b> cExportador
                #
                attr_accessor :codigo_exportador
                alias_attribute :cExportador, :codigo_exportador

                # Array com as adicoes utilizadas
                # Pode ser adicionado os dados das adicoes em forma de `Hash` ou
                # O próprio objeto da classe Veiculo.
                #
                # Exemplo com Hash:
                #    self.adicoes = [{numero_adicao: 'XXX6644', sequencial: '3', ...},{numero_adicao: 'XXX6644', sequencial: '4', ...}]
                #    self.adicoes << {numero_adicao: 'XXX6644', sequencial: '5', ...}
                #    self.adicoes << {numero_adicao: 'XXX6644', sequencial: '6', ...}
                #
                # Exemplo com Objetos:
                #    self.adicoes = [BrNfe::Product::Nfe::Transporte::Veiculo.new({numero_adicao: 'XXX6644', sequencial: '7', ...}),{numero_adicao: 'XXX6644', sequencial: '8', ...}]
                #    self.adicoes << BrNfe::Product::Nfe::Transporte::Veiculo.new({numero_adicao: 'XXX6644', sequencial: '9', ...})
                #    self.adicoes << {numero_adicao: 'XXX6644', sequencial: '10', ...}
                #
                # Sempre vai retornar um Array de objetos da class configurada em `BrNfe.adicao_importacao_product_class`
                #
                # <b>Type:     </b> _BrNfe.adicao_importacao_product_class_
                # <b>Required: </b> _Yes_
                # <b>Example:  </b> _{numero_adicao: 123}_
                # <b>Length:   </b> _min: 1, max: 100_
                # <b>tag:      </b> nAdicao
                #
                has_many :adicoes, 'BrNfe.adicao_importacao_product_class'
                alias_attribute :nAdicao, :adicoes
                

                def default_values
                    {
                        via_transporte:     1, # 1=Marítima;
                        tipo_intermediacao: 1, # 1=Importação por conta própria;
                    }
                end

                validates :numero_documento,   presence: true
                validates :numero_documento,   length: {maximum: 12}
                validates :data_registro,      presence: true
                validates :local_desembaraco,  presence: true
                validates :local_desembaraco,  length: {maximum: 60}
                validates :uf_desembaraco,     presence: true
                validates :uf_desembaraco,     inclusion: { in: BrNfe::Constants::SIGLAS_UF}, allow_blank: true
                validates :data_desembaraco,   presence: true
                validates :via_transporte,     presence: true
                validates :valor_afrmm,        presence: true, if: lambda{|r| r.via_transporte == 1}
                validates :via_transporte,     inclusion: { in: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}, allow_blank: true
                validates :tipo_intermediacao, presence: true
                validates :tipo_intermediacao, inclusion: { in: [1, 2, 3]}, allow_blank: true
                validates :cnpj_adquirente,    presence: true, if: lambda{|r| r.tipo_intermediacao.to_i.in?([2,3]) }
                validates :uf_terceiro,        presence: true, if: lambda{|r| r.tipo_intermediacao.to_i.in?([2,3]) }
                validates :uf_terceiro,        inclusion: { in: BrNfe::Constants::SIGLAS_UF-['EX']}, allow_blank: true
                validates :codigo_exportador,  presence: true
                validates :codigo_exportador,  length: {maximum: 60}
                validate_has_many :adicoes,    message: :invalid_adicao
                validates :adicoes,            length: {in: 1..100}

            end
        end
    end
end