/// <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); }
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); }