Class: FifoPP

Inherits:
Object
  • Object
show all
Defined in:
lib/fifo-pp.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(prices, amount) ⇒ FifoPP

constructor de la clase, los parámetros los precios y la unidades de compra/venta


6
7
8
9
10
11
12
13
# File 'lib/fifo-pp.rb', line 6

def initialize(prices, amount)
  @prices = prices # arreglo de los precios
  @amount = amount # arreglo de unidades compra/venta
  @inventario = [] # arreglo donde se irá guardando los ingresos de materiales con su respectivo costo que sería igual al precio total / la cantidad a ingresar
  @ventas = 0 # acumulador de las ventas realizadas
  @unidades_vendidas = 0 # acumulador de las unidades vendidas
  @cogs = 0 # costo del stock
end

Instance Attribute Details

#amountObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def amount
  @amount
end

#cogsObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def cogs
  @cogs
end

#inventarioObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def inventario
  @inventario
end

#pricesObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def prices
  @prices
end

#unidades_vendidasObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def unidades_vendidas
  @unidades_vendidas
end

#ventasObject

atributos de la clase LifoPP


3
4
5
# File 'lib/fifo-pp.rb', line 3

def ventas
  @ventas
end

Instance Method Details

#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

#get_utlidadObject

cálculo de utilidad luego de FIFO


45
46
47
# File 'lib/fifo-pp.rb', line 45

def get_utlidad
  @ventas - @cogs
end

49
50
51
# File 'lib/fifo-pp.rb', line 49

def print
  "prices #{@prices} \namount #{@amount}\ninventario #{@inventario}\nventas #{@ventas}\ncogs #{cogs}"
end