public P360FormService.Models.Responses.Workpacket ToWorkpacket(IEnumerable <CatalogItem> catalogItems)
        {
            P360FormService.Models.Responses.Workpacket result = new P360FormService.Models.Responses.Workpacket();

            // FolderItems
            result.Folder.FolderItems =
                catalogItems
                .Select(ci => new P360FormService.Models.Responses.FolderItem
            {
                Document = _mapper.Map <P360FormService.Models.Responses.Document>(ci.Document)
            }).ToArray();

            // WorklistAttributes
            result.WorklistAttributes = _mapper.Map <P360FormService.Models.Responses.Attributes>(catalogItems.First().Attributes);
            result.Folder.Attributes  = result.WorklistAttributes;

            return(result);
        }
        /// <summary>
        /// Create SetPropertiesUpdate from new update request and existing workpacket properties
        /// New request will overwrite existing workpacket properties with exception of web_id
        /// </summary>
        /// <param name="request"></param>
        /// <param name="workpacket"></param>
        /// <returns></returns>
        public SetPropertiesUpdate CreateFromDataAndWorkpacket(string workpacketId, UpdateRequest request, P360FormService.Models.Responses.Workpacket workpacket)
        {
            var document_name = new Property {
                Name = "DOCUMENT_NAME", Value = workpacketId.ToString()
            };

            if (workpacket == null)
            {
                return(null);
            }

            var workpacketProperties = workpacket.Folder.Attributes.Properties
                                       .Select(p =>
            {
                var property        = _mapper.Map <Property>(p);
                var requestProperty = request.DataUpdates.FirstOrDefault(r => r.FieldName == property.Name);
                if (requestProperty != null)
                {
                    property.Value = requestProperty.FieldValue;
                }
                return(property);
            });

            var requestProperties = request.DataUpdates
                                    .Where(fd => !workpacket.Folder.Attributes.Properties.Any(p => p.Name == fd.FieldName))
                                    .Select(fd => new Property {
                Name = fd.FieldName, Value = fd.FieldValue
            })
                                    .Concat(new Property[] { document_name });

            // handle request data properties
            IEnumerable <Property> properties = workpacketProperties;

            if (requestProperties != null && requestProperties.Count() > 0)
            {
                properties = workpacketProperties.Concat(requestProperties);
            }

            // handle request files' properties
            var requestFiles = request.GetFiles().AllFiles;
            int folderItems  = workpacket?.Folder?.FolderItems == null ? 1 : workpacket.Folder.FolderItems.Count() + 1;

            if (requestFiles.Count > 0)
            {
                properties = properties.Concat(
                    requestFiles.Select((rf, i) => new Property
                {
                    Name  = $"DOC_{folderItems + i}",
                    Value = rf.FileName
                }
                                        ));
            }

            SetPropertiesUpdate result = new SetPropertiesUpdate
            {
                Properties = properties.ToArray(),
                Target     = PropertyUpdateTarget.FolderAttributes
            };

            return(result);
        }