Job.cs 5.0 KB

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