Method: FifoPP#calcular_fifo

Defined in:
lib/fifo-pp.rb

#calcular_fifoObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fifo-pp.rb', line 15

def calcular_fifo
  for i in 0..@amount.length - 1 # vamos a iterar los arreglos
    if @amount[i] > 0 # si el número es positivo, es un ingreso de inventario
      # ingreso
      inventario.push({ # agregamos el ingreso de material con el costo unitario del mismo
        :costo_unitario => prices[i],
        :cantidad => @amount[i]
      })
    else # si el número es negativo, vamos a descontar del inventario existente
      # venta
      cantidad = @amount[i]
      for k in 0..@inventario.length - 1 # iteramos el arreglo del inventario con el fin de vender primero lo que ingresó primero y a la par iremos calculando el costo de ese material saliente
        if (-1 * cantidad) > @inventario[k][:cantidad] # en caso que la cantidad a descontar sea mayor a la existencia del inventario que primero ingresó
          @cogs = @cogs + @inventario[k][:cantidad] * @inventario[k][:costo_unitario] # en caso que se tenga en el inventario que ingresó primero, se descuenta 
          if @inventario[k][:cantidad] > 0
            cantidad = cantidad + @inventario[k][:cantidad] # en caso que se tenga en el inventario que ingresó sigiuente, se descuenta 
            @inventario[k][:cantidad] = 0 # en caso que se tenga en el inventario que ingresó primero se quedó sin inventario
          end
        else # en caso que se tenga en el inventario que ingresó primero, se descuenta 
          @cogs = @cogs + (-1 * cantidad) * @inventario[k][:costo_unitario] # calculamos el cogs de del descuento
          @inventario[k][:cantidad] = @inventario[k][:cantidad] + cantidad # actualizamos el inventario
          cantidad = 0 
        end
      end
      @ventas = @ventas + @prices[i] * @amount[i] * -1 
    end
  end
end