lifo-pp 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/fifo-pp.rb +52 -0
- data/lib/lifo-pp.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9b16f602be394e6098fe0ea7e23b7c54d23c5ce30e4a2ae00f1aaa5545d4e4a4
|
|
4
|
+
data.tar.gz: 193f3d425459f1fc49e095f1976c1dc01c53fd2f90d28be6f8138a47715685fb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 61661d44ffd2a6c0771e6390846a65a56618391bcafc94e53600ee01f9e305f260330a018e6ed09093d9456b8a1c64045b33de47b53d9366a702638aaafaf068
|
|
7
|
+
data.tar.gz: 751a3a89ae3396b440ca82548af594ff27d28dbc735888b47a458faf948687b26d6f8859bc42e62fde0cd1069cdda4ff6b4676f9db537bfc81895a55f38aa860
|
data/lib/fifo-pp.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class FifoPP
|
|
2
|
+
# atributos de la clase LifoPP
|
|
3
|
+
attr_accessor :prices, :amount, :inventario, :ventas, :unidades_vendidas, :cogs
|
|
4
|
+
|
|
5
|
+
# constructor de la clase, los parámetros los precios y la unidades de compra/venta
|
|
6
|
+
def initialize(prices, amount)
|
|
7
|
+
@prices = prices # arreglo de los precios
|
|
8
|
+
@amount = amount # arreglo de unidades compra/venta
|
|
9
|
+
@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
|
|
10
|
+
@ventas = 0 # acumulador de las ventas realizadas
|
|
11
|
+
@unidades_vendidas = 0 # acumulador de las unidades vendidas
|
|
12
|
+
@cogs = 0 # costo del stock
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def calcular_fifo
|
|
16
|
+
for i in 0..@amount.length - 1 # vamos a iterar los arreglos
|
|
17
|
+
if @amount[i] > 0 # si el número es positivo, es un ingreso de inventario
|
|
18
|
+
# ingreso
|
|
19
|
+
inventario.push({ # agregamos el ingreso de material con el costo unitario del mismo
|
|
20
|
+
:costo_unitario => prices[i],
|
|
21
|
+
:cantidad => @amount[i]
|
|
22
|
+
})
|
|
23
|
+
else # si el número es negativo, vamos a descontar del inventario existente
|
|
24
|
+
# venta
|
|
25
|
+
cantidad = @amount[i]
|
|
26
|
+
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
|
|
27
|
+
if (-1 * cantidad) > @inventario[k][:cantidad] # en caso que la cantidad a descontar sea mayor a la existencia del inventario que primero ingresó
|
|
28
|
+
@cogs = @cogs + @inventario[k][:cantidad] * @inventario[k][:costo_unitario] # en caso que se tenga en el inventario que ingresó primero, se descuenta
|
|
29
|
+
if @inventario[k][:cantidad] > 0
|
|
30
|
+
cantidad = cantidad + @inventario[k][:cantidad] # en caso que se tenga en el inventario que ingresó sigiuente, se descuenta
|
|
31
|
+
@inventario[k][:cantidad] = 0 # en caso que se tenga en el inventario que ingresó primero se quedó sin inventario
|
|
32
|
+
end
|
|
33
|
+
else # en caso que se tenga en el inventario que ingresó primero, se descuenta
|
|
34
|
+
@cogs = @cogs + (-1 * cantidad) * @inventario[k][:costo_unitario] # calculamos el cogs de del descuento
|
|
35
|
+
@inventario[k][:cantidad] = @inventario[k][:cantidad] + cantidad # actualizamos el inventario
|
|
36
|
+
cantidad = 0
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
@ventas = @ventas + @prices[i] * @amount[i] * -1
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# cálculo de utilidad luego de FIFO
|
|
45
|
+
def get_utlidad
|
|
46
|
+
@ventas - @cogs
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def print
|
|
50
|
+
"prices #{@prices} \namount #{@amount}\ninventario #{@inventario}\nventas #{@ventas}\ncogs #{cogs}"
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/lifo-pp.rb
CHANGED
|
@@ -17,7 +17,7 @@ class LifoPP
|
|
|
17
17
|
if @amount[i] > 0
|
|
18
18
|
# actualizamos el inventario (cantidad y consto unitario)
|
|
19
19
|
inventario.push({
|
|
20
|
-
:costo_unitario =>
|
|
20
|
+
:costo_unitario => prices[i],
|
|
21
21
|
:cantidad => @amount[i]
|
|
22
22
|
})
|
|
23
23
|
end
|
|
@@ -27,7 +27,7 @@ class LifoPP
|
|
|
27
27
|
def calcular_ventas
|
|
28
28
|
for i in 0..@amount.length - 1
|
|
29
29
|
if @amount[i] <= 0
|
|
30
|
-
@ventas = @ventas + @prices[i] # acumulamos los precios de venta
|
|
30
|
+
@ventas = @ventas + @prices[i] * @amount[i] * -1 # acumulamos los precios de venta
|
|
31
31
|
@unidades_vendidas = @unidades_vendidas + (-1 * @amount[i]) # acumulamos las cantidades
|
|
32
32
|
end
|
|
33
33
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lifo-pp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pepe Valdivia
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-02-
|
|
11
|
+
date: 2022-02-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Algoritmo LIFO (Último en entrar, primero en salir)
|
|
14
14
|
email: pepe.valdivia.caballero@gmail.com
|
|
@@ -16,6 +16,7 @@ executables: []
|
|
|
16
16
|
extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
|
18
18
|
files:
|
|
19
|
+
- lib/fifo-pp.rb
|
|
19
20
|
- lib/lifo-pp.rb
|
|
20
21
|
homepage: https://rubygems.org/gems/lifo-pp
|
|
21
22
|
licenses:
|