diff --git a/server/AyaNova/biz/TagBiz.cs b/server/AyaNova/biz/TagBiz.cs index 315569f0..5f0e0a5f 100644 --- a/server/AyaNova/biz/TagBiz.cs +++ b/server/AyaNova/biz/TagBiz.cs @@ -233,45 +233,54 @@ namespace AyaNova.Biz /// IMPORT v7 implementation public async Task ImportV7Async(JObject j, List importMap, Guid jobId) { - string SourceType=j["V7_TYPE"].Value(); + string SourceType = j["V7_TYPE"].Value(); switch (SourceType) { case "GZTW.AyaNova.BLL.Region": case "GZTW.AyaNova.BLL.UnitModelCategory": { - var name = j["Name"].Value(); - var oldId = new Guid(j["ID"].Value()); + var NewTagName = j["Name"].Value(); + var OldV7Id = new Guid(j["ID"].Value()); //In RAVEN tags can only be 35 characters - name = StringUtil.MaxLength(name, 35); + NewTagName = StringUtil.MaxLength(NewTagName, 35); //There might already be a tag of the same name since so many different types of V7 objects are becoming tags //Weighed the pros and cons of uniquifying by object type versus just using the same name for different object types: //it seems to me at this point that people might desire the same exact name because if they used it that way they probably //intended it that way, so this bit of code will check if it already exists and then use that ID in the importMap instead //for matching other objects imported to tags - if (ct.Tag.Where(m => m.Name == inObj).FirstOrDefault() != null) - - Tag o = await CreateAsync(name); - if (HasErrors) + //Already present? + var AlreadyTag = ct.Tag.Where(m => m.Name == NewTagName).FirstOrDefault(); + if (AlreadyTag != null) { - //If there are any validation errors, log in joblog and move on - JobsBiz.LogJob(jobId, $"TagBiz::ImportV7Async -> import object \"{name}\" of type \"{SourceType}\" source id {oldId.ToString()} failed validation and was not imported: {GetErrorsAsString()} ", ct); - return false; + //map it to the existing tag of same name + var mapItem = new ImportAyaNova7MapItem(OldV7Id, AyaType.Tag, AlreadyTag.Id); } else { - await ct.SaveChangesAsync(); - var mapItem = new ImportAyaNova7MapItem(oldId, AyaType.Tag, o.Id); - //Log - EventLogProcessor.AddEntry(new Event(userId, o.Id, AyaType.Tag, AyaEvent.Created), ct); - await ct.SaveChangesAsync(); + + Tag o = await CreateAsync(NewTagName); + if (HasErrors) + { + //If there are any validation errors, log in joblog and move on + JobsBiz.LogJob(jobId, $"TagBiz::ImportV7Async -> import object \"{NewTagName}\" of type \"{SourceType}\" source id {OldV7Id.ToString()} failed validation and was not imported: {GetErrorsAsString()} ", ct); + return false; + } + else + { + await ct.SaveChangesAsync(); + var mapItem = new ImportAyaNova7MapItem(OldV7Id, AyaType.Tag, o.Id); + //Log + EventLogProcessor.AddEntry(new Event(userId, o.Id, AyaType.Tag, AyaEvent.Created), ct); + await ct.SaveChangesAsync(); + } } } break; - + } //this is the equivalent of returning void for a Task signature with nothing to return