Class: Cfdi40::DoctoRelacionado
- Defined in:
- lib/cfdi40/docto_relacionado.rb
Instance Attribute Summary
Attributes inherited from Node
#children_nodes, #element_name, #parent_node, #readonly, #xml_document, #xml_parent
Instance Method Summary collapse
-
#add_impuestos ⇒ Object
Add nodes for ‘traslado_dr’ and/or ‘retencion_dr’ and intermediate nodes.
- #add_traslado ⇒ Object
- #calculate! ⇒ Object
- #impuestos_dr ⇒ Object
- #load_impuestos_dr(impuestos_dr_node) ⇒ Object
- #traslados_dr ⇒ Object
-
#traslados_summary ⇒ Object
Return a hash.
Methods inherited from Node
#add_attributes_to, #add_child_node, #add_children_to, #add_namespaces_to, #attibute_is_null?, attributes, #clean_cached_xml, #create_xml_node, #current_namespace, default_values, define_attribute, define_element_name, define_namespace, define_reader, define_writer, #delete_child, element_name, #expanded_element_name, formats, #formatted_value, #initialize, #load_from_ng_node, #lock, namespaces, #set_defaults, verify_class_variables
Constructor Details
This class inherits a constructor from Cfdi40::Node
Instance Method Details
#add_impuestos ⇒ Object
Add nodes for ‘traslado_dr’ and/or ‘retencion_dr’ and intermediate nodes
22 23 24 |
# File 'lib/cfdi40/docto_relacionado.rb', line 22 def add_impuestos add_traslado if objeto_imp_dr == "02" end |
#add_traslado ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/cfdi40/docto_relacionado.rb', line 26 def add_traslado return unless objeto_imp_dr == "02" # Taxes values for IVA rate 0.16 assumming that all 'conceptos' in the realted document # has the same tax rate. This could not be true but the is the most common case. traslado_dr = TrasladoDR.new traslado_dr.monto_pago = imp_pagado.round(2) traslado_dr.calculate! traslados_dr.add_child_node(traslado_dr) traslado_dr end |
#calculate! ⇒ Object
16 17 18 19 |
# File 'lib/cfdi40/docto_relacionado.rb', line 16 def calculate! self.imp_saldo_insoluto = (imp_saldo_ant - imp_pagado).round(2) add_impuestos end |
#impuestos_dr ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/cfdi40/docto_relacionado.rb', line 59 def impuestos_dr return @impuestos_dr if defined?(@impuestos_dr) @impuestos_dr = ImpuestosDR.new @impuestos_dr.parent_node = self @children_nodes << @impuestos_dr @impuestos_dr end |
#load_impuestos_dr(impuestos_dr_node) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/cfdi40/docto_relacionado.rb', line 68 def load_impuestos_dr(impuestos_dr_node) @impuestos_dr = ImpuestosDR.new @impuestos_dr.load_from_ng_node(impuestos_dr_node) @impuestos_dr.parent_node = self @children_nodes << @impuestos_dr tr_dr_node = impuestos_dr_node.xpath("//pago20:TrasladosDR", Cfdi40::Pagos::NG_NAMESPACE).first @impuestos_dr.load_traslados_dr(tr_dr_node) unless tr_dr_node.nil? @impuestos_dr end |
#traslados_dr ⇒ Object
53 54 55 56 57 |
# File 'lib/cfdi40/docto_relacionado.rb', line 53 def traslados_dr return @traslados_dr if defined?(@traslados_dr) @traslados_dr = impuestos_dr.traslados_dr end |
#traslados_summary ⇒ Object
Return a hash. The key is an array [impuesto, tipo_factor, tasa_o_cuot] and the value is another hash with the keys :base, :importe
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/cfdi40/docto_relacionado.rb', line 40 def traslados_summary return {} unless defined?(@traslados_dr) summary = {} @traslados_dr.children_nodes.each do |traslado_dr| key = [traslado_dr.impuesto_dr, traslado_dr.tipo_factor_dr, traslado_dr.tasa_o_cuota_dr] summary[key] ||= { base: 0, importe: 0 } summary[key][:base] += traslado_dr.base_dr.to_f summary[key][:importe] += traslado_dr.importe_dr.to_f end summary end |