From 102cb69dfb732431e1f74631cde5e20966ca396b Mon Sep 17 00:00:00 2001 From: Dmitriy Benyuk Date: Fri, 24 Jan 2025 12:58:04 +0200 Subject: [PATCH] 22941-Fix EcomAssortmentPermissions import --- ...aIntegration.Providers.EcomProvider.csproj | 2 +- src/EcomDestinationWriter.cs | 34 +++++++++++++++---- src/EcomProvider.cs | 4 +-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/Dynamicweb.DataIntegration.Providers.EcomProvider.csproj b/src/Dynamicweb.DataIntegration.Providers.EcomProvider.csproj index bda430d..fedc1b9 100644 --- a/src/Dynamicweb.DataIntegration.Providers.EcomProvider.csproj +++ b/src/Dynamicweb.DataIntegration.Providers.EcomProvider.csproj @@ -1,6 +1,6 @@  - 10.8.3 + 10.8.4 1.0.0.0 Ecom Provider Ecom Provider diff --git a/src/EcomDestinationWriter.cs b/src/EcomDestinationWriter.cs index 72f4b38..eaaa803 100644 --- a/src/EcomDestinationWriter.cs +++ b/src/EcomDestinationWriter.cs @@ -1134,10 +1134,9 @@ public void Write(Dictionary row, Mapping mapping, bool discardD case "EcomDetails": WriteDetails(row, columnMappings, dataRow); break; - case "EcomAssortmentPermissions": - if (!WriteAssortments(row, columnMappings, dataRow)) + case "EcomAssortmentPermissions": + if (!WriteAssortments(row, columnMappings, dataRow, mappingColumns, mapping)) { - DataRowsToWrite[GetTableName(mapping.DestinationTable.Name, mapping)].Add(RowAutoId++.ToString(), new List() { dataRow }); return; } break; @@ -1638,7 +1637,7 @@ private string HandleProductId(Dictionary row, Mapping mapping, return productID; } - private bool WriteAssortments(Dictionary row, Dictionary columnMappings, DataRow dataRow) + private bool WriteAssortments(Dictionary row, Dictionary columnMappings, DataRow dataRow, ColumnMappingCollection mappingColumns, Mapping mapping) { ColumnMapping? assortmentIdColumn = null; if (columnMappings.TryGetValue("AssortmentPermissionAssortmentID", out assortmentIdColumn)) @@ -1674,10 +1673,31 @@ private bool WriteAssortments(Dictionary row, Dictionary Converter.ToString(r["AccessUserID"]))); } } - foreach (string userID in userIDs.Distinct()) + userIDs = userIDs.Distinct().ToList(); + if (userIDs.Count > 0) { - dataRow["AssortmentPermissionAssortmentID"] = assortmentID; - dataRow["AssortmentPermissionAccessUserID"] = userID; + if (userIDs.Count > 1) + { + if (duplicateRowsHandler is not null && duplicateRowsHandler.IsRowDuplicate(mappingColumns.Where(cm => cm.Active), mapping, dataRow, row)) + { + return false; + } + var rows = new List(); + foreach (string userID in userIDs) + { + DataRow relation = GetDataTableNewRow("EcomAssortmentPermissions"); + relation["AssortmentPermissionAssortmentID"] = assortmentID; + relation["AssortmentPermissionAccessUserID"] = userID; + rows.Add(relation); + } + DataRowsToWrite[dataRow.Table.TableName].Add(RowAutoId++.ToString(), rows); + } + else + { + dataRow["AssortmentPermissionAssortmentID"] = assortmentID; + dataRow["AssortmentPermissionAccessUserID"] = userIDs[0]; + return true; + } } return false; } diff --git a/src/EcomProvider.cs b/src/EcomProvider.cs index b69afa7..0ea79f3 100644 --- a/src/EcomProvider.cs +++ b/src/EcomProvider.cs @@ -408,8 +408,8 @@ internal Schema GetDynamicwebSourceSchema() Table? ecomAssortmentPermissionsTable = tables?.Find(t => t.Name == "EcomAssortmentPermissions"); if (ecomAssortmentPermissionsTable != null) { - ecomAssortmentPermissionsTable.AddColumn(new SqlColumn(("AssortmentPermissionCustomerNumber"), typeof(string), SqlDbType.NVarChar, ecomAssortmentPermissionsTable, -1, false, false, true)); - ecomAssortmentPermissionsTable.AddColumn(new SqlColumn(("AssortmentPermissionExternalID"), typeof(string), SqlDbType.NVarChar, ecomAssortmentPermissionsTable, -1, false, false, true)); + ecomAssortmentPermissionsTable.AddColumn(new SqlColumn(("AssortmentPermissionCustomerNumber"), typeof(string), SqlDbType.NVarChar, ecomAssortmentPermissionsTable, -1, false, true, true)); + ecomAssortmentPermissionsTable.AddColumn(new SqlColumn(("AssortmentPermissionExternalID"), typeof(string), SqlDbType.NVarChar, ecomAssortmentPermissionsTable, -1, false, true, true)); } return result;