public bool ExecuteSet() { bool found = false; IList <Garment> garmentsA = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.A) select g).ToList(); IList <Garment> garmentsC = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) select g).ToList(); IList <Garment> garmentsD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.D) select g).ToList(); IList <Garment> garmentsAii = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.Aii) select g).ToList(); IList <Garment> garmentsAi = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.Ai) select g).ToList(); IList <Garment> garmentsB = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.B) select g).ToList(); IList <Garment> garmentsCD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) || g.Tags.Silouhette.Layers.Contains(LayerCode.D) select g).ToList(); IList <Garment> garmentsBCD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) || g.Tags.Silouhette.Layers.Contains(LayerCode.D) || g.Tags.Silouhette.Layers.Contains(LayerCode.B) select g).ToList(); // A + B, A+C, A+D IEnumerable <Combination> comb = Combine(2, garmentsA, garmentsBCD, null, null, null); // Ai + Aii IEnumerable <Combination> combAiAii = Combine(2, garmentsAi, garmentsAii, null, null, null); // A+B+C, A+B+D IEnumerable <Combination> combABC_D = Combine(3, garmentsA, garmentsB, garmentsCD, null, null); // A+C+D IEnumerable <Combination> combACD = Combine(3, garmentsA, garmentsC, garmentsD, null, null); // Ai + Aii + B, Ai + Aii + C, Ai + Aii + D IEnumerable <Combination> combAii = Combine(3, garmentsAi, garmentsAii, garmentsBCD, null, null); // A+B+C+D IEnumerable <Combination> combABCD = Combine(4, garmentsA, garmentsB, garmentsC, garmentsD, null); // Ai + Aii + B + C, Ai + Aii + C + D IEnumerable <Combination> combAiAiiBC = Combine(4, garmentsAi, garmentsAii, garmentsB, garmentsC, null); IEnumerable <Combination> combAiAiiCD = Combine(4, garmentsAi, garmentsAii, garmentsC, garmentsD, null); // Ai + Aii + B + C + D IEnumerable <Combination> combAiAiiBCD = Combine(5, garmentsAi, garmentsAii, garmentsB, garmentsC, garmentsD); // Find accesories List <Garment> linqAccesories1 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC1) select g).ToList(); List <Garment> linqAccesories2 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC2) select g).ToList(); List <Garment> linqAccesories3 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC3) select g).ToList(); List <Garment> linqAccesories4 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC4) select g).ToList(); List <Garment> linqAccesories5 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC5) select g).ToList(); List <Garment> linqAccesories6 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC6) select g).ToList(); List <Garment> linqAccesories7 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC7) select g).ToList(); List <Garment> linqAccesories8 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC8) select g).ToList(); accesories1 = Combine(1, linqAccesories1, null, null, null, null); accesories2 = Combine(2, linqAccesories1, linqAccesories2, null, null, null); accesories23 = Combine(2, linqAccesories1, linqAccesories3, null, null, null); accesories24 = Combine(2, linqAccesories1, linqAccesories4, null, null, null); accesories25 = Combine(2, linqAccesories1, linqAccesories5, null, null, null); accesories26 = Combine(2, linqAccesories1, linqAccesories6, null, null, null); accesories27 = Combine(2, linqAccesories1, linqAccesories7, null, null, null); accesories28 = Combine(2, linqAccesories1, linqAccesories8, null, null, null); accesories3 = Combine(3, linqAccesories1, linqAccesories2, linqAccesories3, null, null); accesories4 = Combine(4, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, null); accesories5 = Combine(5, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5); accesories6 = Combine(6, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, null, null); accesories7 = Combine(7, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, linqAccesories7, null); accesories8 = Combine(8, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, linqAccesories7, linqAccesories8); if (createRecords) { _closetRepository.DbContext.BeginTransaction(); Closet.StartProcessing(); _closetRepository.SaveOrUpdate(Closet); _closetRepository.DbContext.CommitTransaction(); } foreach (FashionFlavor fv in currentFlavors) { logger.DebugFormat("Started Flavor {0}.", fv.Name); currentFlavor = fv; IEnumerable <StyleRule> styleRule = from s in lstStyleRules where s.FashionFlavor.Id == fv.Id select s; currentStyleRule = styleRule.First(); for (int i = currentStyleRule.MinimumLayers; i <= currentStyleRule.MaximumLayers; i++) { bool recordsFound = false; logger.DebugFormat("Started Layers {0}", i); switch (i) { case 2: recordsFound = ExcludeCombinations(currentStyleRule, comb); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAiAii); break; case 3: recordsFound = ExcludeCombinations(currentStyleRule, combABC_D); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combACD); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAii); break; case 4: recordsFound = ExcludeCombinations(currentStyleRule, combABCD); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAiAiiBC); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAiAiiCD); break; case 5: recordsFound = ExcludeCombinations(currentStyleRule, combAiAiiBCD); break; } // No need to continue to check. if (!createRecords && recordsFound) { return(recordsFound); } found = found || recordsFound; } } if (createRecords) { _closetRepository.DbContext.BeginTransaction(); if (found && Closet.FavoriteOutfit == null) { logger.DebugFormat("Setting default favorite"); int outfitId = _closetRepository.GetBestEditorRatedClosetOutfitId(Closet.Id); Closet.SetFavoriteOutfit(new ClosetOutfit(outfitId)); } Closet.MarkAsProcessed(); _closetRepository.SaveOrUpdate(Closet); _closetRepository.DbContext.CommitTransaction(); if (found) { logger.DebugFormat("Adding outfit updaters"); _outfitUpdaterService.MatchOutfitUpdatersForCloset(Closet.Id); logger.DebugFormat("Finish adding outfit updaters"); } } return(found); }
public bool ExecuteSet() { bool found = false; IList <Garment> garmentsA = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.A) select g).ToList <Garment>(); IList <Garment> garmentsC = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) select g).ToList <Garment>(); IList <Garment> garmentsD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.D) select g).ToList <Garment>(); IList <Garment> garmentsAii = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.Aii) select g).ToList <Garment>(); IList <Garment> garmentsAi = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.Ai) select g).ToList <Garment>(); IList <Garment> garmentsB = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.B) select g).ToList <Garment>(); IList <Garment> garmentsCD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) || g.Tags.Silouhette.Layers.Contains(LayerCode.D) select g).ToList <Garment>(); IList <Garment> garmentsBCD = (from g in lstGarments where g.Tags.Silouhette.Layers.Contains(LayerCode.C) || g.Tags.Silouhette.Layers.Contains(LayerCode.D) || g.Tags.Silouhette.Layers.Contains(LayerCode.B) select g).ToList <Garment>(); // A + B, A+C, A+D IEnumerable <Combination> comb = Combine(2, garmentsA, garmentsBCD, null, null, null); // A+B+C, A+B+D IEnumerable <Combination> combABC_D = Combine(3, garmentsA, garmentsB, garmentsCD, null, null); // A+C+D IEnumerable <Combination> combACD = Combine(3, garmentsA, garmentsC, garmentsD, null, null); // Ai + Aii + B, Ai + Aii + C, Ai + Aii + D IEnumerable <Combination> combAii = Combine(3, garmentsAi, garmentsAii, garmentsBCD, null, null); // A+B+C+D IEnumerable <Combination> combABCD = Combine(4, garmentsA, garmentsB, garmentsC, garmentsD, null); // Ai + Aii + B + C, Ai + Aii + C + D IEnumerable <Combination> combAiAiiBC = Combine(4, garmentsAi, garmentsAii, garmentsB, garmentsC, null); IEnumerable <Combination> combAiAiiCD = Combine(4, garmentsAi, garmentsAii, garmentsC, garmentsD, null); // Ai + Aii + B + C + D IEnumerable <Combination> combAiAiiBCD = Combine(5, garmentsAi, garmentsAii, garmentsB, garmentsC, garmentsD); // Find accesories var linqAccesories1 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC1) select g).ToList <Garment>(); var linqAccesories2 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC2) select g).ToList <Garment>(); var linqAccesories3 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC3) select g).ToList <Garment>(); var linqAccesories4 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC4) select g).ToList <Garment>(); var linqAccesories5 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC5) select g).ToList <Garment>(); var linqAccesories6 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC6) select g).ToList <Garment>(); var linqAccesories7 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC7) select g).ToList <Garment>(); var linqAccesories8 = (from g in lstAccesories where g.Tags.Silouhette.Layers.Contains(LayerCode.ACC8) select g).ToList <Garment>(); accesories1 = Combine(1, linqAccesories1, null, null, null, null); accesories2 = Combine(2, linqAccesories1, linqAccesories2, null, null, null); accesories3 = Combine(3, linqAccesories1, linqAccesories2, linqAccesories3, null, null); accesories4 = Combine(4, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, null); accesories5 = Combine(5, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5); accesories6 = Combine(6, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, null, null); accesories7 = Combine(7, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, linqAccesories7, null); accesories8 = Combine(8, linqAccesories1, linqAccesories2, linqAccesories3, linqAccesories4, linqAccesories5, linqAccesories6, linqAccesories7, linqAccesories8); foreach (FashionFlavor fv in currentFlavors) { logger.DebugFormat("Started Flavor {0}.", fv.Name); this.currentFlavor = fv; var styleRule = from s in lstStyleRules where s.FashionFlavor.Id == fv.Id select s; currentStyleRule = styleRule.First <StyleRule>(); for (int i = currentStyleRule.MinimumLayers; i <= currentStyleRule.MaximumLayers; i++) { bool recordsFound = false; logger.DebugFormat("Started Layers {0}", i); switch (i) { case 2: recordsFound = ExcludeCombinations(currentStyleRule, comb); break; case 3: recordsFound = ExcludeCombinations(currentStyleRule, combABC_D); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combACD); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAii); break; case 4: recordsFound = ExcludeCombinations(currentStyleRule, combABCD); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAiAiiBC); recordsFound = recordsFound || ExcludeCombinations(currentStyleRule, combAiAiiCD); break; case 5: recordsFound = ExcludeCombinations(currentStyleRule, combAiAiiBCD); break; } // No need to continue to check. if (!createRecords && recordsFound) { return(recordsFound); } found = found || recordsFound; } } if (createRecords && found) { logger.DebugFormat("Adding outfit updaters"); outfitUpdaterService.MatchOutfitUpdatersForCloset(Closet.Id); logger.DebugFormat("Finish adding outfit updaters"); } return(found); }