lib/fm_layout/nomina/nomina.rb
require 'fm_layout/nomina/complemento_nomina'
require 'fm_layout/nomina/percepcion'
require 'fm_layout/nomina/deduccion'
require 'fm_layout/nomina/incapacidad'
require 'fm_layout/nomina/horas_extra'
module FmLayout
module Nomina
class Nomina
def initialize
@complemento_nomina = ComplementoNomina.new
@percepciones = []
@deducciones = []
@incapacidades = []
@horas_extras = []
end
def complemento_nomina
if block_given?
yield(@complemento_nomina)
else
@complemento_nomina
end
end
def percepcion
percepcion = Percepcion.new
if block_given?
yield(percepcion)
@percepciones << percepcion
else
percepcion
end
end
def deduccion
deduccion = Deduccion.new
if block_given?
yield(deduccion)
@deducciones << deduccion
else
deduccion
end
end
def incapacidad
incapacidad = Incapacidad.new
if block_given?
yield(incapacidad)
@incapacidades << incapacidad
else
incapacidad
end
end
def horas_extra
horas_extra = HorasExtra.new
if block_given?
yield(horas_extra)
@horas_extras << horas_extra
else
horas_extra
end
end
def to_h
{ 'Nomina' => {}.merge( @complemento_nomina.to_h).merge(obtener_hash_percepciones).merge(obtener_hash_deducciones).merge(obtener_hash_incapacidades).merge(obtener_hash_horas_extra) }
end
def to_s
@complemento_nomina.to_s + @percepciones.map(&:to_s).inject(:+).to_s + @deducciones.map(&:to_s).inject(:+).to_s + @incapacidades.map(&:to_s).inject(:+).to_s + @horas_extras.map(&:to_s).inject(:+).to_s
end
private
def obtener_hash_percepciones
{ 'Percepciones' => @percepciones.map(&:to_h) }
end
def obtener_hash_deducciones
{ 'Deducciones' => @deducciones.map(&:to_h) }
end
def obtener_hash_incapacidades
{ 'Incapacidades' => @incapacidades.map(&:to_h) }
end
def obtener_hash_horas_extra
{ 'InformacionHorasExtra' => @horas_extras.map(&:to_h) }
end
end
end
end