private Prize PrizeSomeBooks(CollectionBooks bookList, Prize price = null) { if (price == null) { price = new Prize(0); } if (bookList == null || !bookList.Any()) { return(price); } //separamos los libros en lista de libros distintos var newBookCol = new CollectionBooks(); foreach (var book in bookList.GetCollectionBooks()) { if (!newBookCol.HasBook(book)) { newBookCol.AddBook(book.Clone()); } } //aplicamos el descuento a un grupo de libros distintos ApplyDiscount(newBookCol, _colDiscountRules); //sumamos los precios de los libros con los descuentos price = price.AddPriceBook(newBookCol.SumPrize()); //eliminamos los libros que ya hemos procesado var colRemovedProcesed = bookList.RemoveCollection(newBookCol); //recursividad con libros que faltan por procesar y el precio acumulado return(PrizeSomeBooks(colRemovedProcesed, price)); }
public Prize PrizeBooks(CollectionBooks bookList) { if (bookList.Any()) { return(PrizeSomeBooks(bookList)); } return(new Prize(0)); }