using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.ComponentModel.DataAnnotations; using Sleis.Validation.Attribute; using Sleis.Utility; using NHibernate; using NHibernate.Linq; namespace Sleis.Models { public class AgencyReport : BaseIdentityModel { public virtual int Number { get; set; } public virtual int FacilityId { get; set; } public virtual DateTime DueDate { get; set; } //TODO: submittedDate needs to be pulled from PublicReport public virtual DateTime? SubmittedDate { get; set; } public virtual DateTime StartDate { get; set; } public virtual DateTime EndDate { get; set; } public virtual ReportStatus Status { get; set; } public virtual decimal IsPublished { get; set; } public virtual DateTime? LoadDate { get; set; } public virtual DateTime? ReceivedDate { get; set; } public virtual DateTime? CompleteDate { get; set; } public virtual DateTime? EisSubmissionDate { get; set; } public virtual PublicReportModel PublicReport { get; set; } public virtual bool IsPublishedBool { get { return IsPublished == 1; } set { IsPublished = value ? 1 : 0; } } public virtual string StatusName { get { return EnumUtility.GetDefaultDescriptionAsString(new ReportStatus[] { Status }); } } public virtual int HasStartDatePassed { get { TimeSpan span = DateTime.Now - StartDate; return (span.TotalMinutes > 0) ? 1 : 0; } } public virtual bool IsInProcess { get { return Status == ReportStatus.InProcess; } } public override void SetContext(string parentContext) { ValidationContxt = String.Format("{0} Report:{1}", parentContext, Number); } public static void LoadReportStatus(ISession session, AgencyReport reportModel) { PublicReportModel publicReportModel = (from d in session.Query() where d.ReportId == reportModel.Id select d).FirstOrDefault(); if (SessionUtility.CurrentUser.IsAgencyUser()) { if (reportModel.CompleteDate.HasValue && reportModel.ReceivedDate.HasValue && reportModel.LoadDate.HasValue) { reportModel.Status = ReportStatus.Completed; return; } if (!reportModel.ReceivedDate.HasValue && publicReportModel == null && !reportModel.IsPublishedBool) { reportModel.Status = ReportStatus.NotPublished; return; } if (!reportModel.ReceivedDate.HasValue && publicReportModel == null) { reportModel.Status = ReportStatus.NotStarted; return; } if (reportModel.ReceivedDate.HasValue && publicReportModel == null) { reportModel.Status = ReportStatus.UnderReview; return; } reportModel.SubmittedDate = publicReportModel.ReportSubmissionDate; if (reportModel.ReceivedDate.HasValue && !reportModel.LoadDate.HasValue && publicReportModel.ReportSubmissionDate.HasValue) { reportModel.Status = ReportStatus.Submitted; } if (!reportModel.ReceivedDate.HasValue && !reportModel.LoadDate.HasValue && !publicReportModel.ReportSubmissionDate.HasValue) { reportModel.Status = ReportStatus.InProcess; } if (reportModel.ReceivedDate.HasValue && !reportModel.LoadDate.HasValue && !publicReportModel.ReportSubmissionDate.HasValue) { reportModel.Status = ReportStatus.BeingAmended; } if (reportModel.ReceivedDate.HasValue && reportModel.LoadDate.HasValue && publicReportModel.ReportSubmissionDate.HasValue && !reportModel.CompleteDate.HasValue) { reportModel.Status = ReportStatus.UnderReview; } } else { if (publicReportModel == null) { reportModel.Status = ReportStatus.NotStarted; } else { reportModel.SubmittedDate = publicReportModel.ReportSubmissionDate; if (publicReportModel.ReportSubmissionDate.HasValue) { reportModel.Status = ReportStatus.Submitted; } else { reportModel.Status = ReportStatus.InProcess; } } } } } }