| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 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<Schedule>, IStringAutoIncrement<Job>,        ILicense<ProjectManagementLicense>, 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; }        [DoNotPersist]        [DoNotSerialize]        public static String JobNumberPrefix { get; set; }        public Expression<Func<Job, string>> AutoIncrementField() => x => x.JobNumber;        public Filter<Job> AutoIncrementFilter() => null;        public String AutoIncrementPrefix() => JobNumberPrefix;        public string AutoIncrementFormat() => "{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);        }    }}
 |