Job.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq.Expressions;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. [UserTracking("Project Management")]
  8. public class Job : Entity, IPersistent, IRemotable, IScheduleAction, IOneToMany<Schedule>, IStringAutoIncrement<Job>,
  9. ILicense<ProjectManagementLicense>, IExportable, IImportable, IMergeable, IScannable
  10. {
  11. #region General
  12. [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)]
  13. [EditorSequence(0)]
  14. public string JobNumber { get; set; }
  15. //[Obsolete("Replaced by JobNumber", true)]
  16. //[IntegerEditor(Editable = Editable.Hidden)]
  17. //public int Number { get; set; }
  18. [TextBoxEditor]
  19. [EditorSequence(1)]
  20. public string Name { get; set; }
  21. [SecondaryIndex]
  22. [EnumLookupEditor(typeof(JobType))]
  23. [EditorSequence(2)]
  24. public JobType JobType { get; set; }
  25. [EditorSequence(3)]
  26. public CustomerLink Customer { get; set; }
  27. [EditorSequence(4)]
  28. public Address SiteAddress { get; set; }
  29. [EditorSequence(5)]
  30. public AccountLink Account { get; set; }
  31. #endregion
  32. [NotesEditor]
  33. [EditorSequence("Notes", 1)]
  34. public string[] Notes { get; set; }
  35. #region Other
  36. [TextBoxEditor]
  37. [EditorSequence("Other", 1)]
  38. public string URL { get; set; }
  39. [ColorEditor]
  40. [EditorSequence("Other", 2)]
  41. public string Color { get; set; }
  42. #endregion
  43. #region Project Management
  44. [TextBoxEditor]
  45. [EditorSequence("Project Management", 1)]
  46. public string SetoutsFolder { get; set; }
  47. [Caption("Supervisor")]
  48. [EditorSequence("Project Management", 2)]
  49. public EmployeeLink EmployeeLink { get; set; }
  50. [Caption("Manager")]
  51. [EditorSequence("Project Management", 3)]
  52. public EmployeeLink ManagerLink { get; set; }
  53. [TimeOfDayEditor]
  54. [EditorSequence("Project Management", 4)]
  55. public TimeSpan UsualStart { get; set; }
  56. [TimeOfDayEditor]
  57. [EditorSequence("Project Management", 5)]
  58. public TimeSpan UsualFinish { get; set; }
  59. // This is the Activity to which the Usual Start/Finish Applies
  60. // Other activitiy timesheets are not affected by this
  61. [EditorSequence("Project Management", 6)]
  62. public ActivityLink UsualActivity { get; set; }
  63. [EditorSequence("Project Management", 7)]
  64. public DateTime ExpectedCompletionDate { get; set; }
  65. [EditorSequence("Project Management", 8)]
  66. public DateTime Completed { get; set; }
  67. //[SecondaryIndex]
  68. //[EditorSequence(9)]
  69. //public Boolean Active { get; set; }
  70. [EditorSequence("Project Management", 9)]
  71. public JobStatusLink JobStatus { get; set; }
  72. #endregion
  73. [TimeOfDayEditor(Editable = Editable.Hidden)]
  74. public TimeSpan LabourHours { get; set; }
  75. [NullEditor]
  76. [Obsolete("Why does this even exist?")]
  77. public ProductStyleLink Style { get; set; }
  78. [NullEditor]
  79. [Aggregate(typeof(JobAssignmentCount))]
  80. public int Assignments { get; set; }
  81. [NullEditor]
  82. [Aggregate(typeof(JobOpenAssignmentCount))]
  83. public int OpenAssignments { get; set; }
  84. [NullEditor]
  85. public ScheduleLink ScheduleLink { get; set; }
  86. public Expression<Func<Job, string>> AutoIncrementField()
  87. {
  88. return x => x.JobNumber;
  89. }
  90. public Filter<Job> AutoIncrementFilter()
  91. {
  92. return null;
  93. }
  94. public string AutoIncrementFormat()
  95. {
  96. return "{0:D4}";
  97. }
  98. protected override void Init()
  99. {
  100. base.Init();
  101. Customer = new CustomerLink(() => this);
  102. Account = new AccountLink();
  103. //Designer = new EmployeeLink();
  104. //ProjectManager = new EmployeeLink();
  105. SiteAddress = new Address();
  106. UsualActivity = new ActivityLink();
  107. EmployeeLink = new EmployeeLink();
  108. ManagerLink = new EmployeeLink();
  109. ScheduleLink = new ScheduleLink();
  110. JobStatus = new JobStatusLink();
  111. JobType = JobType.Project;
  112. //Active = true;
  113. Notes = new string[] { };
  114. Customer.Account.PropertyChanged += Account_PropertyChanged;
  115. Customer.Delivery.PropertyChanged += Delivery_PropertyChanged;
  116. Style = new ProductStyleLink();
  117. }
  118. private void Delivery_PropertyChanged(object sender, PropertyChangedEventArgs e)
  119. {
  120. var value = CoreUtils.GetPropertyValue(Customer.Delivery, e.PropertyName);
  121. CoreUtils.SetPropertyValue(SiteAddress, e.PropertyName, value);
  122. }
  123. private void Account_PropertyChanged(object sender, PropertyChangedEventArgs e)
  124. {
  125. if (e.PropertyName.Equals("ID"))
  126. Account.ID = Customer.Account.ID;
  127. else if (e.PropertyName.Equals("Code"))
  128. Account.Code = Customer.Account.Code;
  129. else if (e.PropertyName.Equals("Name"))
  130. Account.Name = Customer.Account.Name;
  131. }
  132. public override string ToString()
  133. {
  134. return string.Format("{0}: {1}", JobNumber, Name);
  135. }
  136. }
  137. }