public void SetModifiedMenuAsDefault(string enterpriseId) { using (var session = _documentStore.OpenSession()) { var enterprise = session.Load <Enterprise>(enterpriseId); var modifiedMenu = session.Include <ModifiedMenu>(m => m.Menu.Categories.SelectMany(p => p.Products)).Load(enterprise.ModifiedMenu); //Get deleted products. Products that exist in Original menu but NOT in the new Modified menu. var deletedProductsIds = GeneralHelper.CompareLists(enterprise.Menu.Categories.SelectMany(c => c.Products).ToList(), modifiedMenu.Menu.Categories.SelectMany(c => c.Products).ToList()); var productsToDelete = session.Load <Product>(deletedProductsIds); foreach (var productToDelete in productsToDelete) { //Delete products if (productToDelete.Id == enterpriseId) { session.Delete(productToDelete); } else { _logger.Warn(string.Format("Was about to delete product ({0}) that not belongs to enterprise ({1}) Code:[bvfgttls]", productToDelete.Id, enterpriseId)); } } if (productsToDelete.Any()) { _logger.Info(string.Format("{0} products deleted for approved modified menu. Enterprise: {1}", productsToDelete.Count(), enterpriseId)); } //Set all updated versions to be the real versions var products = session.Load <Product>(modifiedMenu.Menu.Categories.SelectMany(p => p.Products)); foreach (var p in products.Where(p => p.UpdatedVersion != null)) { var product = ProductHelper.AddUpdatedInfoToProduct(p); product.UpdatedVersion = null; } if (products.Any()) { _logger.Info(string.Format("Updated {0} products for approved modified menu. Enterprise: {1}", products.Count(), enterpriseId)); } enterprise.Menu = modifiedMenu.Menu; enterprise.ModifiedMenu = null; session.Delete(modifiedMenu); session.SaveChanges(); } }
public void DisapproveModifiedMenu(string enterpriseId) { using (var session = _documentStore.OpenSession()) { var enterprise = session.Load <Enterprise>(enterpriseId); var productsInOrginalMenu = enterprise.Menu.Categories.SelectMany(c => c.Products); var modifiedMenu = session.Include <ModifiedMenu>(m => m.Menu.Categories.SelectMany(p => p.Products)).Load(enterprise.ModifiedMenu); var productsInModifiedMenu = modifiedMenu.Menu.Categories.SelectMany(c => c.Products); //Get ids for new products in this modified menu. Products that exist in modified menu but NOT in original menu var IdsForNewProductsInModifiedMenu = GeneralHelper.CompareLists(productsInModifiedMenu.ToList(), productsInOrginalMenu.ToList()); var newProductsToDelete = session.Load <Product>(IdsForNewProductsInModifiedMenu); foreach (var newProduct in newProductsToDelete) { //Delete all new products for this modified menu if (newProduct.Enterprise == enterpriseId) { session.Delete(newProduct); } else { _logger.Warn(string.Format("Was about to delete product ({0}) that not belongs to enterprise ({1}). Code:[iplikhff]", newProduct.Id, enterpriseId)); } } if (newProductsToDelete.Any()) { _logger.Info(string.Format("{0} products deleted for disapproved modified menu. Enterprise: {1}", newProductsToDelete.Count(), enterpriseId)); } session.Delete(modifiedMenu); enterprise.ModifiedMenu = null; enterprise.LockedFromEdit = false; var products = session.Load <Product>(enterprise.Menu.Categories.SelectMany(p => p.Products)); foreach (var p in products.Where(p => p.UpdatedVersion != null)) { p.UpdatedVersion = null; } session.SaveChanges(); } }
public bool UpdateEnterprise(string enterpriseId, Menu menu) { var updated = false; using (var session = _documentStore.OpenSession()) { var enterprise = session.Load <Enterprise>(enterpriseId); try { if (EnterpriseHelper.ValidEditableEnterprise(enterprise, session)) { MenuHelper.ValidateMenu(menu, enterpriseId, session, _logger); if (enterprise.IsNew || enterprise.OwnedByAccount) { var deletedProductsIds = GeneralHelper.CompareLists(enterprise.Menu.Categories.SelectMany(c => c.Products).ToList(), menu.Categories.SelectMany(c => c.Products).ToList()); if (deletedProductsIds.Count > 0) { var deletedProducts = session.Load <Product>(deletedProductsIds); //Delete products that belongs to this enterprise foreach (var deletedProduct in deletedProducts.Where(deletedProduct => deletedProduct != null && deletedProduct.Enterprise == enterpriseId)) { session.Delete(deletedProduct); } } enterprise.Menu = menu; enterprise.LastUpdated = DateTime.Now; } else { var modifiedMenuInDb = session.Load <ModifiedMenu>(MenuHelper.GetModifiedMenuId(enterpriseId)); if (modifiedMenuInDb == null) { var modifiedMenu = new ModifiedMenu { Id = MenuHelper.GetModifiedMenuId(enterpriseId), Menu = menu }; session.Store(modifiedMenu); enterprise.LockedFromEdit = true; enterprise.ModifiedMenu = modifiedMenu.Id; } } session.Store(enterprise); session.SaveChanges(); updated = true; _logger.Info("Updated menu settings for enterprise: " + enterprise.Id); } } catch (Exception ex) { _logger.Fatal(ex.Message, ex); var failedEnterprise = new FailedEnterprise { Enterprise = enterprise, Menu = menu, ErrorMessage = ex.Message }; session.Store(failedEnterprise); session.SaveChanges(); } } return(updated); }