using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using LCU.Library.Internal.ApiResponse.Models; using LCU.Library.Internal.DispatcherModels.Enums; using LCU.Library.Internal.DispatcherModels.Models; namespace LCU.Library.Internal.DispatcherModels.Entities; public class Job : Errorable { public int JobId { get; set; } [Required] [StringLength(200, ErrorMessage = "Requesting Application Max Length is 200")] public string RequestingApplication { get; set; } [Required] [StringLength(200, ErrorMessage = "Name Max Length is 200")] public string Name { get; set; } [StringLength(8000, ErrorMessage = "Description Max Length is 8000")] public string Description { get; set; } [Required] [StringLength(200, ErrorMessage = "Created by Max Length is 200")] public string CreatedBy { get; set; } public DateTime CreatedAt { get; set; } [StringLength(200, ErrorMessage = "Modified by Max Length is 200")] public string ModifiedBy { get; set; } public DateTime? ModifiedDate { get; set; } public string CronSchedule { get; set; } public DateTime? NextRunTime { get; set; } public DateTime? SoftDeleteDate { get; set; } public bool SkipHolidays { get; set; } = false; public JobStatus JobStatus { get; set; } = JobStatus.Inactive; [ForeignKey("JobId")] public ICollection JobErrorRecipients { get; set; } = new List(); [ForeignKey("JobId")] public ICollection JobTags { get; set; } = new List(); [Required] [ForeignKey("JobId")] public ICollection WorkItems { get; set; } = new List(); [NotMapped] public bool IsNewJob { get { return JobId <= 0; } } public void ResetRunTimeAndStatus() { NextRunTime = null; JobStatus = JobStatus.Inactive; } [NotMapped] public bool IsPending { get { return WorkItems.All(workItem => workItem.CurrentWorkItemExecution == null); } } [NotMapped] public StatusType CurrentStatus { get { if (NextRunTime == null) { return StatusType.Inactive; } var currentWorkItem = WorkItems.FirstOrDefault(workItem => workItem.CurrentWorkItemExecution != null); return IsPending || currentWorkItem == null ? StatusType.Pending : currentWorkItem.CurrentWorkItemExecution.Status; } } [NotMapped] public ReturnResponse ReturnResponse { get; set; } }