Skip to content

Commit

Permalink
#4 - Criado tags entrega e retirada das percadorias. Aplicado validaç…
Browse files Browse the repository at this point in the history
…ões na nota fiscal.
  • Loading branch information
Brunomm committed Nov 2, 2016
1 parent 5530e9a commit 09237e5
Show file tree
Hide file tree
Showing 6 changed files with 311 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ coverage/
.dropbox
**/*.subl*
**/*.~lock.*
dev_load_data.rb
dev/*
br_nfe*.gem
135 changes: 124 additions & 11 deletions lib/br_nfe/product/nota_fiscal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class NotaFiscal < BrNfe::ActiveModelBase
# também para a NFC-e).
# Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
#
# <b>Tipo: </b> _Number_
# <b>Type: </b> _Number_
# <b>Max: </b> _1_
# <b>Required: </b> _Yes_
# <b>Default: </b> _1_
Expand All @@ -38,7 +38,7 @@ def chave_de_acesso
# Resumo: É um código controlado pelo sistema. Pode por exemplo ser
# utilizado o ID da tabela da nota fiscal.
#
# <b>Tipo: </b> _Number_
# <b>Type: </b> _Number_
# <b>Max: </b> _8_
# <b>Required: </b> _Yes_
# <b>Default: </b> _nil_
Expand All @@ -52,7 +52,7 @@ def chave_de_acesso
# (procEmi=2). (v2.0)
# Serie 900-999: uso exclusivo de NF-e emitidas no SCAN. (v2.0)
#
# <b>Tipo: </b> _Number_
# <b>Type: </b> _Number_
# <b>Max: </b> _3_
# <b>Required: </b> _Yes_
# <b>Default: </b> _nil_
Expand All @@ -62,7 +62,7 @@ def chave_de_acesso
# Número do Documento Fiscal.
# Número da nota fiscal -< De fato
#
# <b>Tipo: </b> _Number_
# <b>Type: </b> _Number_
# <b>Max: </b> _9_
# <b>Required: </b> _Yes_
# <b>Default: </b> _nil_
Expand All @@ -77,7 +77,7 @@ def chave_de_acesso
# inciso I, art. 19 do CONVÊNIO S/No, de 15 de dezembro de
# 1970.
#
# <b>Tipo: </b> _String_
# <b>Type: </b> _String_
# <b>Required: </b> _Yes_
# <b>Default: </b> _'Venda'_
#
Expand All @@ -88,7 +88,7 @@ def chave_de_acesso
# 1=Pagamento a prazo;
# 2=Outros.
#
# <b>Tipo: </b> _Number_ OR _String_
# <b>Type: </b> _Number_ OR _String_
# <b>Max: </b> _1_
# <b>Required: </b> _Yes_
# <b>Default: </b> _0_
Expand All @@ -99,7 +99,7 @@ def chave_de_acesso
# 55=NF-e emitida em substituição ao modelo 1 ou 1A; (Default)
# 65=NFC-e, utilizada nas operações de venda no varejo (a critério da UF aceitar este modelo de documento).
#
# <b>Tipo: </b> _Number_ OR _String_
# <b>Type: </b> _Number_ OR _String_
# <b>Max: </b> _2_
# <b>Required: </b> _Yes_
# <b>Default: </b> _55_
Expand All @@ -108,7 +108,7 @@ def chave_de_acesso

# Data e hora de emissão do Documento Fiscal
#
# <b>Tipo: </b> _Time_
# <b>Type: </b> _Time_
# <b>Required: </b> _Yes_
# <b>Default: </b> _Time.current_
#
Expand All @@ -120,7 +120,7 @@ def data_hora_emissao
# Data e hora de Saída ou da Entrada da Mercadoria/Produto
# Campo não considerado para a NFC-e.
#
# <b>Tipo: </b> _Time_
# <b>Type: </b> _Time_
# <b>Required: </b> _Yes_ (apenas para modelo 55)
# <b>Default: </b> _Time.current_
#
Expand All @@ -133,7 +133,7 @@ def data_hora_expedicao
# 0=Entrada;
# 1=Saída (Default)
#
# <b>Tipo: </b> _Number_ OR _String_
# <b>Type: </b> _Number_ OR _String_
# <b>Max: </b> _1_
# <b>Required: </b> _Yes_
# <b>Default: </b> _1_
Expand Down Expand Up @@ -173,7 +173,7 @@ def data_hora_expedicao
#
# Preencher esse campo com true ou false
#
# <b>Tipo: </b> _Boolean_
# <b>Type: </b> _Boolean_
# <b>Required: </b> _Yes_
# <b>Default: </b> _false_
#
Expand Down Expand Up @@ -214,6 +214,74 @@ def consumidor_final
# <b>Default: </b> _0_
#
attr_accessor :versao_aplicativo

# Endereço da retirada da mercadoria
#
# <b>Type: </b> _BrNfe.endereco_class_
# <b>Required: </b> _No_
# <b>Default: </b> _nil_
#
def endereco_retirada
yield(endereco_retirada_force_instance) if block_given?
@endereco_retirada.is_a?(BrNfe.endereco_class) ? @endereco_retirada : nil
end
def endereco_retirada=(value)
if value.is_a?(BrNfe.endereco_class)
@endereco_retirada = value
elsif value.is_a?(Hash)
endereco_retirada_force_instance.assign_attributes(value)
elsif value.blank?
@endereco_retirada = nil
end
end

# CPF ou CNPJ do local de retirada da mercadoria.
# Só é obrigatório se o endereco_retirada for preenchido
#
# <b>Type: </b> _String_
# <b>Required: </b> _No_ (_Yes_ if endereco_retirada is present)
# <b>Default: </b> _nil_
#
attr_accessor :endereco_retirada_cpf_cnpj
def endereco_retirada_cpf_cnpj
return unless @endereco_retirada_cpf_cnpj.present?
BrNfe::Helper::CpfCnpj.new(@endereco_retirada_cpf_cnpj).sem_formatacao
end


# Endereço da entrega da mercadoria
# Informar apenas quando for diferente do endereço do destinatário
#
# <b>Type: </b> _BrNfe.endereco_class_
# <b>Required: </b> _No_
# <b>Default: </b> _nil_
#
def endereco_entrega
yield(endereco_entrega_force_instance) if block_given?
@endereco_entrega.is_a?(BrNfe.endereco_class) ? @endereco_entrega : nil
end
def endereco_entrega=(value)
if value.is_a?(BrNfe.endereco_class)
@endereco_entrega = value
elsif value.is_a?(Hash)
endereco_entrega_force_instance.assign_attributes(value)
elsif value.blank?
@endereco_entrega = nil
end
end

# CPF ou CNPJ do local de entrega da mercadoria.
# Só é obrigatório se o endereco_entrega for preenchido
#
# <b>Type: </b> _String_
# <b>Required: </b> _No_ (_Yes_ if endereco_entrega is present)
# <b>Default: </b> _nil_
#
attr_accessor :endereco_entrega_cpf_cnpj
def endereco_entrega_cpf_cnpj
return unless @endereco_entrega_cpf_cnpj.present?
BrNfe::Helper::CpfCnpj.new(@endereco_entrega_cpf_cnpj).sem_formatacao
end

def default_values
{
Expand Down Expand Up @@ -271,6 +339,17 @@ def default_values
validates :processo_emissao, presence: true
validates :processo_emissao, inclusion: [0, 1, 2, 3, '0', '1', '2', '3']

with_options if: :endereco_retirada do |record|
record.validates :endereco_retirada_cpf_cnpj, presence: true
record.validates :endereco_retirada_cpf_cnpj, length: {maximum: 14}
record.validate :endereco_retirada_validation
end

with_options if: :endereco_entrega do |record|
record.validates :endereco_entrega_cpf_cnpj, presence: true
record.validates :endereco_entrega_cpf_cnpj, length: {maximum: 14}
record.validate :endereco_entrega_validation
end

def nfe?
modelo_nf.to_i == 55
Expand All @@ -289,6 +368,40 @@ def emitente_class
BrNfe.emitente_product_class
end

################################ ENDEREÇO DE RETIRADA ################################
# Utilizado para validar se o endereço de retirada está valido.
# Só irá validar caso o endereço de retirada seja preenchidp.
#
def endereco_retirada_validation
if endereco_retirada.invalid?
endereco_retirada.errors.full_messages.each { |msg| errors.add(:base, "Endereço de retirada: #{msg}") }
end
end
# Instancía um endereço de retirada e seta na variavé @endereco_retirada.
# É utilizado quando setar o endereço em forma da Hash ou Block
#
def endereco_retirada_force_instance
@endereco_retirada = BrNfe.endereco_class.new unless @endereco_retirada.is_a?(BrNfe.endereco_class)
@endereco_retirada
end

################################ ENDEREÇO DE ENTREGA ################################
# Utilizado para validar se o endereço de entrega está valido.
# Só irá validar caso o endereço de entrega seja preenchidp.
#
def endereco_entrega_validation
if endereco_entrega.invalid?
endereco_entrega.errors.full_messages.each { |msg| errors.add(:base, "Endereço de entrega: #{msg}") }
end
end
# Instancía um endereço de entrega e seta na variavé @endereco_entrega.
# É utilizado quando setar o endereço em forma da Hash ou Block
#
def endereco_entrega_force_instance
@endereco_entrega = BrNfe.endereco_class.new unless @endereco_entrega.is_a?(BrNfe.endereco_class)
@endereco_entrega
end

###############################################################################################
# | Código | AAMM da | CNPJ do | Modelo | Série | Número | Cód. tipo | Código | DV |
# | da UF | emissão | Emitente | | | da NF-e | emissão | Numérico | |
Expand Down
11 changes: 11 additions & 0 deletions lib/br_nfe/product/xml/v3_10/_tc_entrega.xml.slim
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
= render_xml('_tc_cpf_cnpj', cpf_cnpj: nfe.endereco_entrega_cpf_cnpj )
xLgr = nf_xml_value_text( nfe.endereco_entrega.logradouro, 60 )
nro = nf_xml_value_text( nfe.endereco_entrega.numero, 60 )

- if nfe.endereco_entrega.complemento.present?
xCpl = nf_xml_value_text( nfe.endereco_entrega.complemento, 60 )

xBairro = nf_xml_value_text( nfe.endereco_entrega.bairro, 60 )
cMun = nf_xml_value_codigo_ibge_municipio( nfe.endereco_entrega.codigo_municipio )
xMun = nf_xml_value_text( nfe.endereco_entrega.nome_municipio, 60 )
UF = nf_xml_value_UF( nfe.endereco_entrega.uf )
11 changes: 11 additions & 0 deletions lib/br_nfe/product/xml/v3_10/_tc_retirada.xml.slim
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
= render_xml('_tc_cpf_cnpj', cpf_cnpj: nfe.endereco_retirada_cpf_cnpj )
xLgr = nf_xml_value_text( nfe.endereco_retirada.logradouro, 60 )
nro = nf_xml_value_text( nfe.endereco_retirada.numero, 60 )

- if nfe.endereco_retirada.complemento.present?
xCpl = nf_xml_value_text( nfe.endereco_retirada.complemento, 60 )

xBairro = nf_xml_value_text( nfe.endereco_retirada.bairro, 60 )
cMun = nf_xml_value_codigo_ibge_municipio( nfe.endereco_retirada.codigo_municipio )
xMun = nf_xml_value_text( nfe.endereco_retirada.nome_municipio, 60 )
UF = nf_xml_value_UF( nfe.endereco_retirada.uf )
5 changes: 5 additions & 0 deletions lib/config/locales/br_nfe/pt-BR/product/nota_fiscal.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pt-BR:
activemodel:
attributes::
br_nfe/product/nota_fiscal:
endereco_retirada_cpf_cnpj: CPF/CNPJ do endereço de retirada
Loading

0 comments on commit 09237e5

Please sign in to comment.