private static async Task <WitsmlTrajectory> GetTrajectory(IWitsmlClient client, TrajectoryReference trajectoryReference)
        {
            var trajectoryQuery = TrajectoryQueries.QueryById(trajectoryReference.WellUid, trajectoryReference.WellboreUid, trajectoryReference.TrajectoryUid);
            var result          = await client.GetFromStoreAsync(trajectoryQuery, OptionsIn.All);

            return(!result.Trajectories.Any() ? null : result.Trajectories.First());
        }
Exemple #2
0
        public override async Task <(WorkerResult, RefreshAction)> Execute(CopyTrajectoryJob job)
        {
            var(trajectory, targetWellbore) = await FetchData(job);

            var trajectoryToCopy = TrajectoryQueries.CopyWitsmlTrajectory(trajectory, targetWellbore);
            var copyLogResult    = await witsmlClient.AddToStoreAsync(trajectoryToCopy);

            if (!copyLogResult.IsSuccessful)
            {
                var errorMessage = "Failed to copy trajectory.";
                Log.Error(
                    "{ErrorMessage} Source: UidWell: {SourceWellUid}, UidWellbore: {SourceWellboreUid}, Uid: {SourceTrajectoryUid}. " +
                    "Target: UidWell: {TargetWellUid}, UidWellbore: {TargetWellboreUid}",
                    errorMessage,
                    job.Source.WellUid, job.Source.WellboreUid, job.Source.TrajectoryUid,
                    job.Target.WellUid, job.Target.WellboreUid);
                return(new WorkerResult(witsmlClient.GetServerHostname(), false, errorMessage, copyLogResult.Reason), null);
            }

            Log.Information("{JobType} - Job successful. Trajectory copied", GetType().Name);
            var refreshAction = new RefreshWellbore(witsmlClient.GetServerHostname(), job.Target.WellUid, job.Target.WellboreUid, RefreshType.Update);
            var workerResult  = new WorkerResult(witsmlClient.GetServerHostname(), true, $"Trajectory {trajectory.Name} copied to: {targetWellbore.Name}");

            return(workerResult, refreshAction);
        }
        public async Task CreateTrajectory_BasedOnExisting()
        {
            const string wellUid              = "";
            const string wellboreUid          = "";
            const string trajectoryUid        = "";
            var          queryExisting        = TrajectoryQueries.QueryById(wellUid, wellboreUid, trajectoryUid);
            var          existingTrajectories = await client.GetFromStoreAsync(queryExisting, OptionsIn.All);

            var existing = existingTrajectories.Trajectories.First();

            var createTrajectoryQuery = CreateTrajectoryQuery(
                existing.UidWell,
                existing.NameWell,
                existing.UidWellbore,
                existing.NameWellbore,
                existing.Name + " (copy)",
                existing.TrajectoryStations,
                existing.CommonData,
                existing.AziRef,
                existing.MdMin,
                existing.MdMax,
                existing.DTimTrajStart,
                existing.DTimTrajEnd
                );

            var result = await client.AddToStoreAsync(createTrajectoryQuery);

            Assert.True(result.IsSuccessful);
            output.WriteLine("Created trajectory with uid: " + createTrajectoryQuery.Trajectories.First().Uid);
        }
        public async Task <IEnumerable <Trajectory> > GetTrajectories(string wellUid, string wellboreUid)
        {
            var witsmlTrajectory = TrajectoryQueries.GetWitsmlTrajectoryByWellbore(wellUid, wellboreUid);
            var result           = await WitsmlClient.GetFromStoreAsync(witsmlTrajectory, new OptionsIn(ReturnElements.Requested));

            return(result.Trajectories.Select(trajectory =>
                                              new Trajectory
            {
                Uid = trajectory.Uid,
                WellUid = trajectory.UidWell,
                WellboreUid = trajectory.UidWellbore,
                Name = trajectory.Name,
                MdMin = StringHelpers.ToDecimal(trajectory.MdMin?.Value),
                MdMax = StringHelpers.ToDecimal(trajectory.MdMax?.Value),
                AziRef = trajectory.AziRef,
                DTimTrajStart = StringHelpers.ToDateTime(trajectory.DTimTrajStart),
                DTimTrajEnd = StringHelpers.ToDateTime(trajectory.DTimTrajEnd),
                DateTimeCreation = StringHelpers.ToDateTime(trajectory.CommonData?.DTimCreation),
                DateTimeLastChange = StringHelpers.ToDateTime(trajectory.CommonData?.DTimLastChange)
            }).OrderBy(trajectory => trajectory.Name));
        }
        public override async Task <(WorkerResult, RefreshAction)> Execute(DeleteTrajectoryJob job)
        {
            var wellUid       = job.TrajectoryReference.WellUid;
            var wellboreUid   = job.TrajectoryReference.WellboreUid;
            var trajectoryUid = job.TrajectoryReference.TrajectoryUid;

            var witsmlTrajectory = TrajectoryQueries.GetWitsmlTrajectoryById(wellUid, wellboreUid, trajectoryUid);
            var result           = await witsmlClient.DeleteFromStoreAsync(witsmlTrajectory);

            if (result.IsSuccessful)
            {
                Log.Information("{JobType} - Job successful", GetType().Name);
                var refreshAction = new RefreshWellbore(witsmlClient.GetServerHostname(), wellUid, wellboreUid, RefreshType.Update);
                return(new WorkerResult(witsmlClient.GetServerHostname(), true, $"Deleted trajectory: ${trajectoryUid}"), refreshAction);
            }

            Log.Error("Failed to delete trajectory. WellUid: {WellUid}, WellboreUid: {WellboreUid}, Uid: {TrajectoryUid}",
                      wellUid,
                      wellboreUid,
                      trajectoryUid);

            witsmlTrajectory = TrajectoryQueries.GetWitsmlTrajectoryById(wellUid, wellboreUid, trajectoryUid);
            var queryResult = await witsmlClient.GetFromStoreAsync(witsmlTrajectory, new OptionsIn(ReturnElements.IdOnly));

            var trajectory = queryResult.Trajectories.First();
            EntityDescription description = null;

            if (trajectory != null)
            {
                description = new EntityDescription
                {
                    WellName     = trajectory.NameWell,
                    WellboreName = trajectory.NameWellbore,
                    ObjectName   = trajectory.Name
                };
            }
            return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to delete trajectory", result.Reason, description), null);
        }
        public async Task <List <TrajectoryStation> > GetTrajectoryStations(string wellUid, string wellboreUid, string trajectoryUid)
        {
            var trajectoryToQuery = TrajectoryQueries.GetWitsmlTrajectoryById(wellUid, wellboreUid, trajectoryUid);
            var result            = await WitsmlClient.GetFromStoreAsync(trajectoryToQuery, new OptionsIn(ReturnElements.All));

            var witsmlTrajectory = result.Trajectories.FirstOrDefault();

            if (witsmlTrajectory == null)
            {
                return(null);
            }
            return(witsmlTrajectory.TrajectoryStations.Select(tStation => new TrajectoryStation
            {
                Uid = tStation.Uid,
                DTimStn = StringHelpers.ToDateTime(tStation.DTimStn),
                TypeTrajStation = tStation.TypeTrajStation,
                Md = StringHelpers.ToDecimal(tStation.Md?.Value),
                Tvd = StringHelpers.ToDecimal(tStation.Tvd?.Value),
                Incl = StringHelpers.ToDecimal(tStation.Incl?.Value),
                Azi = StringHelpers.ToDecimal(tStation.Azi?.Value)
            })
                   .OrderBy(tStation => tStation.Md)
                   .ToList());
        }