/// <summary> /// Creates a new workpacket using request and existing workpacket /// by updating existing workpacket with request into new workpacket /// </summary> /// <param name="sessionTokenHeader">p360 login session</param> /// <param name="workpacket">model workpacket retrieved from p360</param> /// <param name="request">request with updates to apply to workpacket</param> /// <returns></returns> public async Task <Workpacket> CreateFromWorkpacketAsync(SessionTokenHeader sessionTokenHeader, string workpacketId, Workpacket workpacket, UpdateRequest request) { // Create merged request from workpacket and request var fileUpdates = _workpacketUpdateDomainService.CreateFromFiles(new Files(workpacket?.Folder?.FolderItems).Add(request.GetFiles())); var dataUpdates = _workpacketUpdateDomainService.CreateFromDataAndWorkpacket(workpacketId, request, workpacket); // 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); return(response); }
/// <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); }