class SiapExporter::ComprasVentas

Constants

AlicuotaCompra
AlicuotaVenta
Compra
Venta

Public Class Methods

generate(comprobantes) click to toggle source
# File lib/siap_exporter.rb, line 90
def self.generate comprobantes
  new(comprobantes).generate
end
new(comprobantes) click to toggle source
# File lib/siap_exporter.rb, line 94
def initialize comprobantes
  @comprobantes = comprobantes
  @ventas = []
  @alicuotas_ventas = []
  @compras = []
  @alicuotas_compras = []
end

Public Instance Methods

generate() click to toggle source
# File lib/siap_exporter.rb, line 102
def generate
  @comprobantes.each do |comprobante|
    if comprobante[:numero_identificacion_comprador]
      # las alicuotas se deben generar antes que la venta, porque la
      # cantidad se indica en el registro de venta
      alicuotas_venta(comprobante)
      venta(comprobante)
    else
      alicuotas_compra(comprobante)
      compra(comprobante)
    end
  end
  {
    ventas: @ventas.join("\r\n"),
    alicuotas_ventas: @alicuotas_ventas.join("\r\n"),
    compras: @compras.join("\r\n"),
    alicuotas_compras: @alicuotas_compras.join("\r\n")
  }
end

Private Instance Methods

alicuotas_compra(comprobante) click to toggle source
# File lib/siap_exporter.rb, line 160
def alicuotas_compra comprobante
  comprobante[:cantidad_de_alicuotas] = 0
  TIPO_ALICUOTA.each do |id, claves|
    gravado = comprobante[claves[0]]
    if gravado && gravado > 0
      alicuota = comprobante.merge(
        codigo_documento_vendedor: 80,
        tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
        gravado: gravado,
        tipo_alicuota: id,
        impuesto: comprobante[claves[1]])
      @alicuotas_compras << AlicuotaCompra.apply(alicuota)
      comprobante[:cantidad_de_alicuotas] += 1
    end
  end
end
alicuotas_venta(comprobante) click to toggle source
# File lib/siap_exporter.rb, line 124
def alicuotas_venta comprobante
  comprobante[:cantidad_de_alicuotas] = 0
  TIPO_ALICUOTA.each do |id, claves|
    gravado = comprobante[claves[0]]
    if gravado and gravado > 0
      alicuota = comprobante.merge(
        tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
        gravado: gravado,
        tipo_alicuota: id,
        impuesto: comprobante[claves[1]])
      @alicuotas_ventas << AlicuotaVenta.apply(alicuota)
      comprobante[:cantidad_de_alicuotas] += 1
    end
  end
end
compra(comprobante) click to toggle source
# File lib/siap_exporter.rb, line 177
def compra comprobante
  comprobante = comprobante.merge(
    fecha: Date.parse(comprobante[:fecha]).strftime('%Y%m%d'),
    tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
    despacho_importacion: '',
    codigo_documento_vendedor: 80,
    total: total(comprobante),
    a_cuenta_iva: 0,
    impuestos_nacionales: 0,
    ingresos_brutos: 0,
    impuestos_municipales: 0,
    impuestos_internos: 0,
    moneda: 'PES',
    cambio: 1000000,
    codigo_de_operacion: 0,
    credito_fiscal: 0,
    otros_tributos: 0,
    cuit_emisor_corredor: 0,
    denominacion_emisor_corredor: '',
    iva_comision: 0
  )
  @compras << Compra.apply(comprobante)
end
tipo_comprobante(tipo) click to toggle source
# File lib/siap_exporter.rb, line 202
def tipo_comprobante tipo
  TIPO_COMPROBANTE.fetch(tipo)
end
total(comprobante) click to toggle source
# File lib/siap_exporter.rb, line 206
def total comprobante
  comprobante.values_at(:gravado_21, :iva_21, :gravado_10, :iva_10,
                         :no_gravado, :exento).compact.reduce(0, :+)
end
venta(comprobante) click to toggle source
# File lib/siap_exporter.rb, line 140
def venta comprobante
  comprobante = comprobante.merge(
    fecha: comprobante[:fecha].gsub('-', ''),
    tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
    numero_comprobante_hasta: comprobante[:numero_comprobante],
    codigo_documento_comprador: 80,
    total: total(comprobante),
    no_categorizados: 0,
    impuestos_nacionales: 0,
    ingresos_brutos: 0,
    impuestos_municipales: 0,
    impuestos_internos: 0,
    moneda: 'PES',
    cambio: 1000000,
    codigo_de_operacion: 0,
    otros_tributos: 0,
    vencimiento_de_pago: 0)
  @ventas << Venta.apply(comprobante)
end