' aquí primero se verifican si se cumple alguna de las reglas.
' hay una 4ª regla deducible que señala si las promociones son adicionales o no. Es decir si puede darse más de 1 a la vez o no.
' como no se indica nada en contra se supone que sí.
Private Sub CmdTotalizar_Click()
Dim k As Byte, cantidad As Integer, precio As Single, Descuento As Single
' desactivamos posibilidades de cambios antes de empezar a calcular... Se activa de nuevo al borrar.
FraAdquirir.Enabled = False
ArtiNocomputar = True ' los cambios aplicados ahora al marcar artículos no ejecutan el código asociado en los checkbox...
' 1º determinar si se aplica regalo del 5º (regalo por variedad).
' 1 + 2 + 4 + 8 + 16 =31, el regalo se aplica cuando: ArtiElegidos = 31 - sólo 1 de esos sumandos
' Casos posibles para 5 artículos: 31-16=15 ;; 31-8=23 ;; 31-4=27 ;; 31-2=29 ;; 31-1=30
' y también si se eligió los 5 en cuyo caso se regala el de menor cuantía ? 31-0=31
Select Case ArtiElegidos
Case 0 ' no hay adquisiciones
Call cmdBorrar_Click
Exit Sub
Case 15, 23, 27, 29, 30, 31 ' se eligieron 4 artículos (o 5)
RegaloVariedad = True
ChePromociones(1).Value = 1
If ArtiElegidos < 31 Then ' si se eleigieron 4 artículos, regalar el 5º
Select Case ArtiElegidos
Case 15: k = 4 ' activamos el artículo 4 que es el que falta
Case 23: k = 3
Case 27: k = 2
Case 29: k = 1
Case 30: k = 0
End Select
' se regala este artículo. el 'K' avo de la matrizde artículos.
CheArticulos(k).Value = 1 'lo marcamos,
txtCantidades(k) = "1" ' señalamos en cantidad 1
RegalarArticuloX = Val(txtPrecioUnidad(k).Text) ' tomamos el valor que al totalizar se cuenta, pero al final se debe descontar.
Else ' el que adquiere compra todos los artículos (al menos 1 cantidad), se regala el de menor cuantía de los existentes...
' buscamos el precio de menor cuantía de los 5 artículos.
RegalarArticuloX = Val(txtPrecioUnidad(0).Text)
For k = 1 To 4
If Val(txtPrecioUnidad(k).Text) < RegalarArticuloX Then
RegalarArticuloX = Val(txtPrecioUnidad(k).Text)
End If
Next
End If
Case Else ' no hay promoción de regalar un 5º por tener 4 artículos.
RegaloVariedad = False
ChePromociones(1).Value = 0
RegalarArticuloX = 0
End Select
' 2º Determinar si se puede hacer un regalo por fidelidad
' esto se mira revisando la cantidad para cada artículo si tiene al menos 4 se le regala 1 más (se supone que por cada artículo que cumpla dicho requisito)
For k = 0 To 4
If Val(txtCantidades(k).Text) > 3 Then
RegaloFidelidad(k) = True ' activamos para tenerlo en cuenta al totalizar,
ChePromociones(2).Value = 1 ' marcamos la promoción
txtCantidades(k).Text = Val(txtCantidades(k).Text) + 1 ' sumamos 1 para asegurarse que sea entregado...
End If
Next
' 3º Descuento por volumen: (se suponen que las promociones son acumulables), este paso serealiza en 2
' en el primero se tiene calcula el total adquirido originalmente por el comprador + el regalo del 5º (si existe se desceunta al final).
' en el segundo se comprueba si se aplica el descuento por volummmmen de compra.
' 3ºA) totaliza las cantidades, descontando regalos_por_Fidelidad (la cantidad ya se sumó pero es gratis).
For k = 0 To 4
cantidad = Val(txtCantidades(k).Text)
precio = Val(txtPrecioUnidad(k).Text)
If RegaloFidelidad(k) = True Then ' aquí hay un regalo por variedad, se descuenta una unidad.
cantidad = cantidad - 1
End If
If cantidad > 0 Then
' total = total + (precio_1 * cantidad_del_Artículo)
Totales = Totales + (precio * cantidad)
End If
Next
' 1ºB, aplicar el descuento del 5º artículo, sino existe este valor es 0 y por tanto no cambia.
' NOTA: este regalo no puede constar como 'factura total', porque es regalado, no entra en factura ni en totales, y por tanto su valor no entra en desceuntos.
Totales = Totales - RegalarArticuloX
' se supone que las promociones son acumulables.
' 3ºB se verifica si se cumple la 3ª promoción
If Totales > VolumenParaDescuento Then
Descuento = ((Totales / 100) * DescuentoPorcentaje)
Totales = Totales - Descuento
AplicarDescuento = True
ChePromociones(0).Value = 1
Else
AplicarDescuento = False
ChePromociones(0).Value = 0
End If
' marcamos el valor total, las promociones aplicadas quedan reflejadas en el frame gratificaciones...
TxtTotales.Text = Totales
LabDescuento.Caption = "Descontado: " & CStr(Descuento)
End Sub