Exemplo n.º 1
0
        /// <summary>
        /// Creates new workpacket based on existing workpacket with property WEB_ID equals to <paramref name="workpacketId"/>
        /// if one exists;
        /// The new workpacket will have all the same attributes as base attributes with whatever changes are in <paramref name="request"/>
        /// </summary>
        /// <param name="sessionTokenHeader"></param>
        /// <param name="workpacketId"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <Workpacket> UpdateFromWorkpacketAsync(SessionTokenHeader sessionTokenHeader, string workpacketId, BaseForm request)
        {
            // search for existing workpacket to update from
            var workpacket = await _workpacketSearchService.SearchAsync(sessionTokenHeader, workpacketId);

            if (workpacket == null)
            {
                workpacket = await _workpacketSearchService.SearchArchiveAsync(sessionTokenHeader, (request.FormName, workpacketId));

                if (workpacket == null)
                {
                    throw new ArgumentException($"{nameof(workpacketId)} could not be found.");
                }
            }

            // map to p360 request
            WorkpacketUpdate[] workpacketUpdates = null;
            var dataUpdates = _workpacketUpdateDomainService.CreateFromData(request);

            if (request.Files != null && request.Files.Count > 0)
            {
                var fileUpdates = _workpacketUpdateDomainService.CreateFromFiles(new Files(request.Files));
                workpacketUpdates = new WorkpacketUpdate[fileUpdates.Length + 1];
                fileUpdates.CopyTo(workpacketUpdates, 0);
                workpacketUpdates[workpacketUpdates.Length - 1] = dataUpdates;
            }
            else
            {
                workpacketUpdates = new WorkpacketUpdate[] { dataUpdates };
            }

            // execute request
            var result = await Service.CreateWorkpacketAsync(
                sessionTokenHeader,
                _p360ServiceData.CurrentValue.ProcessName,
                _p360ServiceData.CurrentValue.NodeName,
                workpacketUpdates
                );

            await Service.ForwardWorkpacketAsync(sessionTokenHeader, result.CreateWorkpacketResult.Id);

            // map
            var response = _mapper.Map <Workpacket>(result.CreateWorkpacketResult);

            return(response);
        }
Exemplo n.º 2
0
        public async Task <Workpacket> CreateAsync(SessionTokenHeader sessionTokenHeader, BaseForm request)
        {
            //-Adds a dummy file if wp doesn't contain file attachments
            if (!request.Files.Any() && _dummyFileInformation.CurrentValue.EnableDummyFile)
            {
                request.Files.Add(CreateDummyFile(_dummyFileInformation.CurrentValue.FileName));
            }
            // convert to p360 input
            var fileUpdates = _workpacketUpdateDomainService.CreateFromFiles(request.GetFiles());
            var dataUpdates = _workpacketUpdateDomainService.CreateFromData(request);

            // create p360 request
            WorkpacketUpdate[] workpacketUpdates = new WorkpacketUpdate[fileUpdates.Length + 1];
            fileUpdates.CopyTo(workpacketUpdates, 0);
            workpacketUpdates[workpacketUpdates.Length - 1] = dataUpdates;

            // execute request
            var result = await Service.CreateWorkpacketAsync(
                sessionTokenHeader,
                _p360ServiceData.CurrentValue.ProcessName,
                _p360ServiceData.CurrentValue.NodeName,
                workpacketUpdates
                );

            await Service.ForwardWorkpacketAsync(sessionTokenHeader, result.CreateWorkpacketResult.Id);

            // map
            var response = _mapper.Map <Workpacket>(result.CreateWorkpacketResult);

            if (response?.Folder?.Attributes?.Properties?.FirstOrDefault(x => x.Name == "DOCUMENT_NAME") != null)
            {
                response.WorkpacketId = response?.Folder?.Attributes?.Properties?.FirstOrDefault(x => x.Name == "DOCUMENT_NAME").Value.ToString();
            }
            else
            {
                response.WorkpacketId = response?.TrackingId.ToString();
            }

            return(response);
        }