private List <MasterGroupMappingProduct> GetListOfMappedProductsBySourceMasterGroupMapping(MasterGroupMapping productGroup, List <VendorProductInfo> productsPerConnector) { List <MasterGroupMappingProduct> mappedProducts = new List <MasterGroupMappingProduct>(); if (productGroup.SourceMasterGroupMappingID.HasValue && productGroup.SourceMasterGroupMappingID.Value > 0) { if (masterGroupMappingRepo.IsMasterGroupMappingExists(productGroup.SourceMasterGroupMappingID.Value)) { var currentProductsInMasterGroupMapping = masterGroupMappingRepo.GetListOfMappedProductsByMasterGroupMapping(productGroup.SourceMasterGroupMappingID.Value); var mappedProductsInMasterGroupMapping = (from p in productsPerConnector join mp in currentProductsInMasterGroupMapping on p.ProductID equals mp.ProductID select mp) .ToList(); if (mappedProductsInMasterGroupMapping.Count > 0) { mappedProductsInMasterGroupMapping.ForEach(mappedProduct => { MasterGroupMappingProduct toSyncMasterGroupMappingProduct = new MasterGroupMappingProduct() { MasterGroupMappingID = productGroup.MasterGroupMappingID, ProductID = mappedProduct.ProductID, IsApproved = mappedProduct.IsApproved, IsProductMapped = true, ConnectorPublicationRuleID = productsPerConnector.Where(x => x.ProductID == mappedProduct.ProductID).Select(x => x).FirstOrDefault().ConnectorPublicationRuleID }; mappedProducts.Add(toSyncMasterGroupMappingProduct); }); } } } return(mappedProducts); }
public Dictionary <int, List <Content> > GetListOfContentsPerProductGroupByConnector(Connector connector) { Dictionary <int, List <Content> > listOfContentsPerProductGroup = new Dictionary <int, List <Content> >(); List <Content> listOfContents = contentRepo.GetListOfContentsByConnector(connector); var listOfProductGroups = masterGroupMappingRepo.GetListOfProductGroupsByConnector(connector.ConnectorID); listOfProductGroups.ForEach(productGroup => { List <MasterGroupMappingProduct> listOfMappedProducts = masterGroupMappingRepo.GetListOfMappedProductsByMasterGroupMapping(productGroup.MasterGroupMappingID); List <Content> listOfMappedContents = ( from c in listOfContents join p in listOfMappedProducts on c.ProductID equals p.ProductID select c ).ToList(); listOfContentsPerProductGroup.Add(productGroup.MasterGroupMappingID, listOfMappedContents); }); return(listOfContentsPerProductGroup); }
public void MoveProductsToHighestFlattenHierachyProductGroup(List <MasterGroupMapping> listOfHighestFlattenHierachyProductGroups) { listOfHighestFlattenHierachyProductGroups.ForEach(productGroup => { List <MasterGroupMappingProduct> listOfMappedProductsInParentProductGroup = masterGroupMappingRepo.GetListOfMappedProductsByMasterGroupMapping(productGroup.MasterGroupMappingID); List <MasterGroupMapping> listOfProductGroupChildren = masterGroupMappingRepo.GetListOfMasterGroupMappingChildren(productGroup.MasterGroupMappingID); List <MasterGroupMappingProduct> tempListOfMappedProductsInAllProductGroup = new List <MasterGroupMappingProduct>(); tempListOfMappedProductsInAllProductGroup.AddRange(listOfMappedProductsInParentProductGroup); List <MasterGroupMappingProduct> listOfProductsToMove = new List <MasterGroupMappingProduct>(); List <MasterGroupMappingProduct> listOfProductsToDelete = new List <MasterGroupMappingProduct>(); listOfProductGroupChildren.ForEach(masterGroupMapping => { List <MasterGroupMappingProduct> listOfMappedProductsInChildProductGroup = masterGroupMappingRepo.GetListOfMappedProductsByMasterGroupMapping(masterGroupMapping.MasterGroupMappingID); List <MasterGroupMappingProduct> tempListofProductsToMove = (from mcp in listOfMappedProductsInChildProductGroup join mpp in tempListOfMappedProductsInAllProductGroup on mcp.ProductID equals mpp.ProductID into notExistProducts from nep in notExistProducts.DefaultIfEmpty() where nep == null select mcp) .ToList(); listOfProductsToMove.AddRange(tempListofProductsToMove); List <MasterGroupMappingProduct> tempListofProductsToDelete = (from mcp in listOfMappedProductsInChildProductGroup join mpp in tempListOfMappedProductsInAllProductGroup on mcp.ProductID equals mpp.ProductID select mcp) .ToList(); listOfProductsToDelete.AddRange(tempListofProductsToDelete); tempListOfMappedProductsInAllProductGroup.AddRange(tempListofProductsToMove); }); if (listOfProductsToMove.Count > 0) { MoveMappedProducts(listOfProductsToMove, productGroup.MasterGroupMappingID); } if (listOfProductsToDelete.Count > 0) { DeleteMappedProducts(listOfProductsToDelete); } }); }
/// <summary> /// Synchronize Product Groups in Connector Mapping /// </summary> /// <param name="productsToCopy">Dictionary(ProductGroupID, List<VendorProductInfo>)</param> public void SyncProductGroup(Dictionary <int, List <MasterGroupMappingProduct> > productsToSync) { log.DebugFormat(""); log.DebugFormat("------> Start Syncing Product Groups"); int syncedProducts = 0; // var prods = (from p in productsToSync // from c in p.Value // select new MasterGroupMappingBulkModel // { // ConnectorPublicationRuleID = c.ConnectorPublicationRuleID ?? 0, // IsApproved = c.IsApproved, // IsCustom = c.IsCustom, // IsProductMapped = c.IsProductMapped, // ProductID = c.ProductID, // MasterGroupMappingID = p.Key // }).ToList(); // string tableName = string.Format("Temp_Master_Group_Mapping_{0}", connectorID); // petaPoco.Execute(string.Format(@"IF (EXISTS (SELECT * // FROM INFORMATION_SCHEMA.TABLES // WHERE TABLE_SCHEMA = 'dbo' // AND TABLE_NAME = '{0}')) // BEGIN // drop table [{0}] // END // ", tableName)); // petaPoco.Execute(string.Format(@"Create table [{0}]( // MasterGroupMappingID int not null, // ProductID int not null, // IsApproved bit not null, // IsCustom bit not null, // IsProductMapped bit not null, // ConnectorPublicationRuleID int not null // ) // //", tableName)); // using (var connection = new SqlConnection(connectionString)) // { // connection.Open(); // using (SqlBulkCopy copyBulk = new SqlBulkCopy(connection)) // { // copyBulk.BatchSize = 100000; // copyBulk.BulkCopyTimeout = 180; // copyBulk.DestinationTableName = tableName; // copyBulk.NotifyAfter = 100000; // copyBulk.SqlRowsCopied += (s, e) => log.DebugFormat("{0} Records inserted ", e.RowsCopied); // using (var collection = new GenericCollectionReader<MasterGroupMappingBulkModel>(prods)) // { // copyBulk.WriteToServer(collection); // } // } // } // petaPoco.Execute(string.Format(@"merge mastergroupmappingproduct trg //using {0} src //on trg.mastergroupmappingid = src.mastergroupmappingid and trg.productid = src.productid //when not matched by target // then insert (MasterGroupMappingID, ProductID, IsApproved, IsCustom, IsProductMapped, ConnectorPublicationRuleID) // values (src.MasterGroupMappingID, src.ProductID, src.IsApproved, src.IsCustom, src.IsProductMapped, case when src.ConnectorPublicationRuleID = 0 then null else src.ConnectorPublicationRuleID end) //when matched //then update // set trg.ConnectorPublicationRuleID = case when src.ConnectorPublicationRuleID = 0 then null else src.ConnectorPublicationRuleID end //when not matched by source and trg.mastergroupmappingid in (select mastergroupmappingid from mastergroupmapping where connectorid = {1}) // then delete;", tableName, connectorID)); // petaPoco.Execute(string.Format(@"drop table {0}", tableName)); productsToSync.ForEach(productGroup => { var currentProductsInProductGroup = masterGroupMappingRepo.GetListOfMappedProductsByMasterGroupMapping(productGroup.Key); List <MasterGroupMappingProduct> productsToCopy = (from p in productGroup.Value.Distinct() join c in currentProductsInProductGroup on p.ProductID equals c.ProductID into notExistProducts from nep in notExistProducts.DefaultIfEmpty() where nep == null select p) .ToList(); List <MasterGroupMappingProduct> productsToUpdate = ( from p in productGroup.Value.Distinct() join cp in currentProductsInProductGroup on p.ProductID equals cp.ProductID where p.ConnectorPublicationRuleID != cp.ConnectorPublicationRuleID select p ).ToList(); List <MasterGroupMappingProduct> productsToDelete = (from c in currentProductsInProductGroup.Where(x => x.IsCustom == false) join p in productGroup.Value on c.ProductID equals p.ProductID into existProducts from ep in existProducts.DefaultIfEmpty() where ep == null select c) .ToList(); if (productsToCopy.Count() > 0) { CopyProducts(productGroup.Key, productsToCopy); syncedProducts += productsToCopy.Count; } if (productsToUpdate.Count > 0) { UpdateProducts(productGroup.Key, productsToUpdate); syncedProducts += productsToDelete.Count; } if (productsToDelete.Count > 0) { DeleteProducts(productGroup.Key, productsToDelete); syncedProducts += productsToDelete.Count; } }); log.DebugFormat("------> End Syncing Product Groups done. {0} products are synchronized", syncedProducts); }