Solución

@eltamales
·hace 3dTypeScript
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
Respuestas
0

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.
Markdown