/// <summary> /// /// </summary> /// <param name="gcItem"></param> /// <param name="gcTemplate"></param> /// <param name="selectedMappingId"></param> /// <param name="result"></param> /// <param name="selectedLocationId"></param> private void TryMapItem(GCItem gcItem, GCTemplate gcTemplate, string selectedMappingId, out MappingResultModel result, string selectedLocationId = null) { bool isUpdate = gcItem is UpdateGCItem; List <Element> gcFields = gcItem.Config.SelectMany(i => i.Elements).ToList(); var template = FactoryRepository.Repositories.MappingRepository.GetMappingById(selectedMappingId); if (template == null) { string errorMessage = isUpdate ? "Update failed: Template not mapped" : "Import failed: Template not mapped"; result = new MappingResultModel(gcItem, null, gcTemplate.Name, null, string.Empty, errorMessage, false, selectedLocationId); return; } List <ImportCMSField> fields; IEnumerable <IGrouping <string, FieldMapping> > groupedFields = template.FieldMappings.GroupBy(i => i.CmsField.TemplateField.FieldId); var files = new List <File>(); if (gcItem.Config.SelectMany(config => config.Elements).Select(element => element.Type).Contains("files")) { foreach (var file in FactoryService.Services.ItemsService.GetItemFiles(gcItem.Id.ToString()).Data) { files.Add(new File { FileName = file.FileName, Url = file.Url, UpdatedDate = file.Updated }); } } TryMapItemState mapState = TryMapFields(gcFields, groupedFields, files, out fields); if (mapState == TryMapItemState.FieldError) { string errorMessage = isUpdate ? "Update failed: Template fields mismatch" : "Import failed: Template fields mismatch"; result = new MappingResultModel(gcItem, null, gcTemplate.Name, null, string.Empty, errorMessage, false, selectedLocationId); return; } string cmsId = string.Empty; string message = "Import Successful"; if (isUpdate) { cmsId = (gcItem as UpdateGCItem).CMSId; message = "Update Successful"; } result = new MappingResultModel(gcItem, fields, gcTemplate.Name, template.CmsTemplate.TemplateId, cmsId, message, true, selectedLocationId); }
private TryMapItemState TryMapFields(List <Element> gcFields, IEnumerable <IGrouping <string, FieldMapping> > fieldsMappig, List <File> files, out List <ImportCMSField> result) { result = new List <ImportCMSField>(); foreach (IGrouping <string, FieldMapping> grouping in fieldsMappig) { ImportCMSField cmsField; TryMapItemState mapState = TryMapField(gcFields, grouping, files, out cmsField); if (mapState == TryMapItemState.FieldError) { return(mapState); } result.Add(cmsField); } return(TryMapItemState.Success); }