Class: Cfdi40::Pagos
- Inherits:
-
Node
- Object
- Node
- Cfdi40::Pagos
show all
- Defined in:
- lib/cfdi40/pagos.rb
Constant Summary
collapse
- NG_NAMESPACE =
{ "pago20" => "http://www.sat.gob.mx/Pagos20" }
Instance Attribute Summary
Attributes inherited from Node
#children_nodes, #element_name, #parent_node, #readonly, #xml_document, #xml_parent
Instance Method Summary
collapse
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_pago(attributes = {}) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/cfdi40/pagos.rb', line 14
def add_pago(attributes = {})
pago = Pago.new
pago.parent_node = self
attributes_doc_rel = { imp_pagado: attributes[:monto] }
doc_rel_keys = [:uuid, :serie, :folio, :num_parcialidad, :importe_saldo_anterior, :objeto_impuestos]
attributes.each do |key, value|
if doc_rel_keys.include?(key)
attributes_doc_rel[key] = value
else
method_name = "#{key}=".to_sym
raise Error, ":#{key} no se puede asignar al nodo Pago" unless pago.respond_to?(method_name)
pago.public_send(method_name, value)
end
end
pago.monto = pago.monto.round(2)
pago.add_docto_relacionado(attributes_doc_rel)
pago.add_impuestos_p
@children_nodes << pago
update_totales
true
end
|
#add_splitted_pago(attributes = {}) ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/cfdi40/pagos.rb', line 37
def add_splitted_pago(attributes = {})
pago = Pago.new
pago.parent_node = self
docs = attributes.delete(:docs)
attributes.each do |key, value|
method_name = "#{key}=".to_sym
raise Error, ":#{key} no se puede asignar al nodo Pago" unless pago.respond_to?(method_name)
pago.public_send(method_name, value)
end
docs.each { |doc_attributes| pago.add_docto_relacionado(doc_attributes) }
pago.monto = docs.map { |doc_attributes| doc_attributes[:imp_pagado].to_f }.sum.round(2)
pago.add_impuestos_p
@children_nodes << pago
update_totales
end
|
#load_pago(pago_node) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/cfdi40/pagos.rb', line 103
def load_pago(pago_node)
pago = Pago.new
pago.load_from_ng_node(pago_node)
add_child_node pago
pago_node.xpath("//pago20:DoctoRelacionado", { "pago20" => "http://www.sat.gob.mx/Pagos20" }).each do |dr_node|
pago.load_dr(dr_node)
end
imp_p_node = pago_node.xpath("//pago20:ImpuestosP", { "pago20" => "http://www.sat.gob.mx/Pagos20" }).first
pago.load_impuestos_p(imp_p_node) if imp_p_node
pago
end
|
#load_totales(totales_node) ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/cfdi40/pagos.rb', line 115
def load_totales(totales_node)
cp_totales = CpTotales.new
cp_totales.load_from_ng_node(totales_node)
cp_totales.parent_node = self
@children_nodes << cp_totales
cp_totales
end
|
#pago_nodes ⇒ Object
99
100
101
|
# File 'lib/cfdi40/pagos.rb', line 99
def pago_nodes
@children_nodes.select { |node| node.instance_of?(::Cfdi40::Pago) }
end
|
#remove_pago(index) ⇒ Object
54
55
56
57
58
|
# File 'lib/cfdi40/pagos.rb', line 54
def remove_pago(index)
@children_nodes.delete(pago_nodes[index])
update_totales
true
end
|
#totales_node ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/cfdi40/pagos.rb', line 91
def totales_node
return @totales_node if defined?(@totales_node)
@totales_node = CpTotales.new
add_child_node @totales_node
@totales_node
end
|
#traslados_summary ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/cfdi40/pagos.rb', line 77
def traslados_summary
@traslados_summary if defined?(@traslados_summary)
summary = {}
pago_nodes.each do |pago|
pago.traslados_summary.each do |key, data|
summary[key] ||= { base: 0, importe: 0 }
summary[key][:base] += data[:base]
summary[key][:importe] += data[:importe]
end
end
@traslados_summary = summary
end
|
#update_total_monto ⇒ Object
73
74
75
|
# File 'lib/cfdi40/pagos.rb', line 73
def update_total_monto
totales_node.monto_total = pago_nodes.map(&:monto).sum
end
|
#update_totales ⇒ Object
60
61
62
63
|
# File 'lib/cfdi40/pagos.rb', line 60
def update_totales
update_totales_traslado_iva16
update_total_monto
end
|
#update_totales_traslado_iva16 ⇒ Object
65
66
67
68
69
70
71
|
# File 'lib/cfdi40/pagos.rb', line 65
def update_totales_traslado_iva16
key = ["002", "Tasa", 0.160000]
return if traslados_summary[key].nil?
totales_node.base_iva16 = traslados_summary[key][:base]
totales_node.importe_iva16 = traslados_summary[key][:importe]
end
|