using System; using System.ComponentModel; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { [UserTracking("Project Management")] public class Job : Entity, IPersistent, IRemotable, IScheduleAction, IOneToMany, IStringAutoIncrement, ILicense, IExportable, IImportable, IMergeable, IScannable { #region General [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)] [EditorSequence(0)] public string JobNumber { get; set; } //[Obsolete("Replaced by JobNumber", true)] //[IntegerEditor(Editable = Editable.Hidden)] //public int Number { get; set; } [TextBoxEditor] [EditorSequence(1)] public string Name { get; set; } [SecondaryIndex] [EnumLookupEditor(typeof(JobType))] [EditorSequence(2)] public JobType JobType { get; set; } [EditorSequence(3)] public CustomerLink Customer { get; set; } [EditorSequence(4)] public Address SiteAddress { get; set; } [EditorSequence(5)] public AccountLink Account { get; set; } #endregion [NotesEditor] [EditorSequence("Notes", 1)] public string[] Notes { get; set; } #region Other [TextBoxEditor] [EditorSequence("Other", 1)] public string URL { get; set; } [ColorEditor] [EditorSequence("Other", 2)] public string Color { get; set; } #endregion #region Project Management [TextBoxEditor] [EditorSequence("Project Management", 1)] public string SetoutsFolder { get; set; } [Caption("Supervisor")] [EditorSequence("Project Management", 2)] public EmployeeLink EmployeeLink { get; set; } [Caption("Manager")] [EditorSequence("Project Management", 3)] public EmployeeLink ManagerLink { get; set; } [TimeOfDayEditor] [EditorSequence("Project Management", 4)] public TimeSpan UsualStart { get; set; } [TimeOfDayEditor] [EditorSequence("Project Management", 5)] public TimeSpan UsualFinish { get; set; } // This is the Activity to which the Usual Start/Finish Applies // Other activitiy timesheets are not affected by this [EditorSequence("Project Management", 6)] public ActivityLink UsualActivity { get; set; } [EditorSequence("Project Management", 7)] public DateTime ExpectedCompletionDate { get; set; } [EditorSequence("Project Management", 8)] public DateTime Completed { get; set; } //[SecondaryIndex] //[EditorSequence(9)] //public Boolean Active { get; set; } [EditorSequence("Project Management", 9)] public JobStatusLink JobStatus { get; set; } #endregion [TimeOfDayEditor(Editable = Editable.Hidden)] public TimeSpan LabourHours { get; set; } [NullEditor] [Obsolete("Why does this even exist?")] public ProductStyleLink Style { get; set; } [NullEditor] [Aggregate(typeof(JobAssignmentCount))] public int Assignments { get; set; } [NullEditor] [Aggregate(typeof(JobOpenAssignmentCount))] public int OpenAssignments { get; set; } [NullEditor] public ScheduleLink ScheduleLink { get; set; } public Expression> AutoIncrementField() { return x => x.JobNumber; } public Filter AutoIncrementFilter() { return null; } public string AutoIncrementFormat() { return "{0:D4}"; } protected override void Init() { base.Init(); Customer = new CustomerLink(() => this); Account = new AccountLink(); //Designer = new EmployeeLink(); //ProjectManager = new EmployeeLink(); SiteAddress = new Address(); UsualActivity = new ActivityLink(); EmployeeLink = new EmployeeLink(); ManagerLink = new EmployeeLink(); ScheduleLink = new ScheduleLink(); JobStatus = new JobStatusLink(); JobType = JobType.Project; //Active = true; Notes = new string[] { }; Customer.Account.PropertyChanged += Account_PropertyChanged; Customer.Delivery.PropertyChanged += Delivery_PropertyChanged; Style = new ProductStyleLink(); } private void Delivery_PropertyChanged(object sender, PropertyChangedEventArgs e) { var value = CoreUtils.GetPropertyValue(Customer.Delivery, e.PropertyName); CoreUtils.SetPropertyValue(SiteAddress, e.PropertyName, value); } private void Account_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName.Equals("ID")) Account.ID = Customer.Account.ID; else if (e.PropertyName.Equals("Code")) Account.Code = Customer.Account.Code; else if (e.PropertyName.Equals("Name")) Account.Name = Customer.Account.Name; } public override string ToString() { return string.Format("{0}: {1}", JobNumber, Name); } } }