@Override
	public void aplicarOferta(List<IProducto> productos) {
		Boolean hubo_coincidencias = true;
		List<IProducto> productos_encontrados;
		List<RegistroProducto> copia_registros;

		// productos que coinciden con un registro de la oferta
		productos_encontrados = new ArrayList<IProducto>();
		copia_registros = new ArrayList<RegistroProducto>(registro_productos);
		if (registro_productos.isEmpty()) {
			return;
		}

		while (hubo_coincidencias) {
			/*
			 * Por cada registro de la oferta, busca en todos los productos si
			 * alguno coincide. Si encuentra uno, lo agrega a los productos
			 * encontrados y saca ese registro de la lista copia de registros
			 */
			for (RegistroProducto registro : registro_productos) {
				for (IProducto producto : productos) {
					if (producto.validarRegistroProducto(registro)) {
						if (copia_registros.contains(registro)) {
							productos_encontrados.add(producto);
							copia_registros.remove(registro);
						}
					}
				}
			}

			// Termina si no encuentra combos
			if (!copia_registros.isEmpty()) {
				hubo_coincidencias = false;
			}
			generarCombos(productos, productos_encontrados, copia_registros);

			productos_encontrados.clear();
			copia_registros.clear();
			// copia de los registros de la oferta
			copia_registros.addAll(registro_productos);
		}
	}