Class: CFDI::Impuestos

Inherits:
ElementoComprobante show all
Defined in:
lib/impuestos.rb

Defined Under Namespace

Classes: ImpuestoGenerico, Retencion, Traslado

Instance Method Summary collapse

Methods inherited from ElementoComprobante

#cadena_original, data, #to_h

Constructor Details

#initialize(data = {}) ⇒ Impuestos

Returns a new instance of Impuestos.



9
10
11
12
13
14
# File 'lib/impuestos.rb', line 9

def initialize data={}
  self.traslados = data[:traslados] || []
  self.retenciones = data[:retenciones] || []
  self.totalImpuestosTrasladados = data[:totalImpuestosTrasladados] if data[:totalImpuestosTrasladados]
  self.totalImpuestosRetenidos = data[:totalImpuestosRetenidos] if data[:totalImpuestosRetenidos]
end

Instance Method Details

#countInteger

Returns La cantidad de impuestos que tiene.

Returns:

  • (Integer)

    La cantidad de impuestos que tiene.



52
53
54
# File 'lib/impuestos.rb', line 52

def count
  traslados.count + retenciones.count
end

#retenciones=(value) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/impuestos.rb', line 27

def retenciones= value
  @retenciones = value.map { |t|
    t.is_a?(ImpuestoGenerico) ? t : Impuestos::Retencion.new({
      tasa: t[:tasa],
      impuesto: t[:impuesto] || 'IVA',
      importe: t[:importe]
    })
  }
  @totalImpuestosRetenidos = suma(:retenciones) if @retenciones.count > 0
end

#suma(tipo_impuestos) ⇒ Object



56
57
58
# File 'lib/impuestos.rb', line 56

def suma tipo_impuestos
  instance_variable_get("@#{tipo_impuestos}").map(&:importe).reduce(0.0, &:+)
end

#totalFloat

Returns la suma de traslados menos retenciones.

Returns:

  • (Float)

    la suma de traslados menos retenciones



61
62
63
# File 'lib/impuestos.rb', line 61

def total
  suma(:traslados) - suma(:retenciones)
end

#totalImpuestosRetenidos=(valor) ⇒ Object

Asigna el total de impuestos retenidos

Parameters:

  • valor (String, Float, #to_f)

    Cualquier objeto que responda a #to_f



47
48
49
# File 'lib/impuestos.rb', line 47

def totalImpuestosRetenidos= valor
  @totalImpuestosRetenidos = valor.to_f
end

#totalImpuestosTrasladados=(valor) ⇒ Object

Asigna el total de impuestos trasladados

Parameters:

  • valor (String, Float, #to_f)

    Cualquier objeto que responda a #to_f



41
42
43
# File 'lib/impuestos.rb', line 41

def totalImpuestosTrasladados= valor
  @totalImpuestosTrasladados = valor.to_f
end

#traslados=(value) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/impuestos.rb', line 16

def traslados= value
  @traslados = value.map { |t|
    t.is_a?(ImpuestoGenerico) ? t : Impuestos::Traslado.new({
      tasa: t[:tasa],
      impuesto: t[:impuesto] || 'IVA',
      importe: t[:importe]
    })
  }
  @totalImpuestosTrasladados = suma(:traslados) if @traslados.count > 0
end