public ImportResultItemModel(GCItem item, GCTemplate template, bool isImportSuccessful, string resultMessage)
 {
     Id = item.Id.ToString();
     IsImportSuccessful = isImportSuccessful;
     ResultMessage      = resultMessage;
     Status             = item.Status.Data;
     Template           = template;
     Title = item.Name;
 }
        /// <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);
        }
        public ImportListItem(GCItem item, GCTemplate template, List <GCItem> items, string dateFormat, IEnumerable <AvailableMapping> mappings)
        {
            Checked = false;

            AvailableMappings = new AvailableMappings();

            Id              = item.Id.ToString();
            Title           = item.Name;
            Status          = item.Status.Data;
            Breadcrumb      = GetBreadcrumb(item, items);
            LastUpdatedInGC = item.Updated.Date.ToString(dateFormat);
            AvailableMappings.Mappings.AddRange(mappings);
            Template = template;
        }
        private List <MappingResultModel> TryMapItems(List <GCItem> items, List <TemplateMapping> templates)
        {
            var result = new List <MappingResultModel>();
            var templatesDictionary = new Dictionary <int, GCTemplate>();

            foreach (GCItem gcItem in items)
            {
                GCTemplate gcTemplate = GetTemplate(gcItem.TemplateId.Value, templatesDictionary);

                MappingResultModel cmsItem;
                TryMapItem(gcItem, gcTemplate, templates, out cmsItem);
                result.Add(cmsItem);
            }

            return(result);
        }
        public List <MappingResultModel> MapItems(List <ImportItemModel> items)
        {
            var result = new List <MappingResultModel>();
            var templatesDictionary = new Dictionary <int, GCTemplate>();

            foreach (var importItem in items)
            {
                var gcItem = ItemsService.GetSingleItem(importItem.Id);

                if (gcItem != null && gcItem.Data != null && gcItem.Data.TemplateId != null)
                {
                    GCTemplate gcTemplate = GetTemplate(gcItem.Data.TemplateId.Value, templatesDictionary);

                    MappingResultModel cmsItem;
                    TryMapItem(gcItem.Data, gcTemplate, importItem.SelectedMappingId, out cmsItem, importItem.DefaultLocation);
                    result.Add(cmsItem);
                }
            }

            return(result);
        }