Solución
solution.tsTypeScript
interface OrderItem {
price: number;
quantity: number;
}
export function calculateOrderDiscount(articuloPedido: OrderItem[], membresia: string): number {
const VALOR_ERROR = -1;
const MINIMO_PERMITIDO = 10;
let total = 0;
// Sumar el total de todos los items del pedido
for (let indice = 0; indice < articuloPedido.length; indice++) {
total = total + articuloPedido[indice].price * articuloPedido[indice].quantity;
}
// Verificar si el pedido cumple el mínimo requerido
if (total < MINIMO_PERMITIDO) return VALOR_ERROR;
let descuento = 0;
// Calculamos el descuento dependiendo de la membresia
descuento = calculateMembershipDiscount(total, membresia);
return total - descuento;
}
function calculateMembershipDiscount(total: number,membresia: string): number{
const MEMBRESIA_ORO = "gold";
const MEMBRESIA_PLATA = "silver";
const PORCENTAJE_DESCUENTO_ORO_MAX = 0.20;
const PORCENTAJE_DESCUENTO_ORO_MIN = 0.10;
const PORCENTAJE_DESCUENTO_PLATA_MAX = 0.10;
const PORCENTAJE_DESCUENTO_PLATA_MIN = 0.05;
const PEDIDO_GRANDE = 100;
let descuento = 0;
// Aplicar descuento según el tipo de membresía y el monto total
if (membresia === MEMBRESIA_ORO) {
// Pedidos grandes reciben mayor descuento
if (total >= PEDIDO_GRANDE) {
descuento = total * PORCENTAJE_DESCUENTO_ORO_MAX;
} else {
descuento = total * PORCENTAJE_DESCUENTO_ORO_MIN;
}
} else if (membresia === MEMBRESIA_PLATA) {
// Pedidos grandes reciben mayor descuento
if (total >= PEDIDO_GRANDE) {
descuento = total * PORCENTAJE_DESCUENTO_PLATA_MAX;
} else {
descuento = total * PORCENTAJE_DESCUENTO_PLATA_MIN;
}
}
return descuento;
}0respuestas