public PipelinePosition GeneratePipelinePosition(Application application) { if(application.IsArchived()) return PipelinePosition.Archived; if (application.MasterTenant.IsNull()) return PipelinePosition.Unknown; switch (application.Status) { case Status.Live: return application.TenancyIsEnding() ? PipelinePosition.TenancyEnding : PipelinePosition.Let; case Status.Ended: return PipelinePosition.TenancyEnded; } switch (application.MasterTenant.Status) { case Status.Approved: { if(application.Properties.Any(x => x.Status == Status.Taken)) return PipelinePosition.InProgress; if(application.Properties.Any(x => x.Status == Status.Viewing)) return PipelinePosition.Viewing; if (application.Properties.Any(x => x.Status == Status.AwaitingViewing)) return PipelinePosition.AwaitingViewing; return application.Properties.Any(x => x.Status == Status.Interested) ? PipelinePosition.Interested : PipelinePosition.Approved; } case Status.Cancelled: return PipelinePosition.Cancelled; } if (application.Guarantors.Any()) { if (application.Guarantors.All(x => x.Status == Status.Declined)) { return PipelinePosition.ApplicantComplete; } if (application.Guarantors.Any(x => x.Status == Status.Approved)) { if (application.Properties.Any(x => x.Status == Status.Taken)) return PipelinePosition.InProgress; if (application.Properties.Any(x => x.Status == Status.Viewing)) return PipelinePosition.Viewing; if (application.Properties.Any(x => x.Status == Status.AwaitingViewing)) return PipelinePosition.AwaitingViewing; return application.Properties.Any(x => x.Status == Status.Interested) ? PipelinePosition.Interested : PipelinePosition.Approved; } return PipelinePosition.GuarantorComplete; } return PipelinePosition.ApplicantComplete; }