LogikalSettings.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using System;
  2. using InABox.Configuration;
  3. using InABox.Core;
  4. namespace Comal.Classes
  5. {
  6. public enum LogikalProjectType
  7. {
  8. None,
  9. Quote,
  10. Project
  11. }
  12. public enum LogikalDesignType
  13. {
  14. None,
  15. Approved,
  16. NotApproved
  17. }
  18. public enum LogikalMeasurement
  19. {
  20. Millimetres,
  21. Metres
  22. }
  23. public enum LogikalDrawingFormat
  24. {
  25. DXF,
  26. PNG
  27. }
  28. public enum LogikalDrawingView
  29. {
  30. Interior,
  31. Exterior
  32. }
  33. public enum LogikalDrawingType
  34. {
  35. Explosion,
  36. Section,
  37. Elevation,
  38. ElevationWithSectionLines,
  39. SectionLine,
  40. }
  41. public class LogikalSettings : BaseObject, IGlobalConfigurationSettings
  42. {
  43. [EnumLookupEditor(typeof(LogikalProjectType))]
  44. [EditorSequence(1)]
  45. [Caption("Import Projects")]
  46. public LogikalProjectType ImportProjects { get; set; }
  47. [CheckBoxEditor]
  48. [EditorSequence(2)]
  49. public bool UseLogikalProjectNumber { get; set; }
  50. [CodeEditor(Editable=Editable.Enabled)]
  51. [EditorSequence(3)]
  52. [Caption("Job Prefix")]
  53. public string ProjectPrefix { get; set; }
  54. [CheckBoxEditor]
  55. [EditorSequence(4)]
  56. [Caption("Import BOMs")]
  57. public bool ImportBoms { get; set; }
  58. [CheckBoxEditor]
  59. [EditorSequence(5)]
  60. [Caption("Import Requis")]
  61. public bool ImportRequis { get; set; }
  62. [EnumLookupEditor(typeof(LogikalDesignType))]
  63. [EditorSequence(6)]
  64. [Caption("Import Designs")]
  65. public LogikalDesignType ImportDesigns { get; set; }
  66. [EnumLookupEditor(typeof(LogikalDrawingFormat))]
  67. [EditorSequence(7)]
  68. [Caption("Drawing Format")]
  69. public LogikalDrawingFormat DrawingFormat { get; set; } = LogikalDrawingFormat.PNG;
  70. [EnumLookupEditor(typeof(LogikalDrawingView))]
  71. [EditorSequence(8)]
  72. [Caption("Drawing View")]
  73. public LogikalDrawingView DrawingView { get; set; } = LogikalDrawingView.Interior;
  74. [EnumLookupEditor(typeof(LogikalDrawingType))]
  75. [EditorSequence(9)]
  76. [Caption("Drawing Type")]
  77. public LogikalDrawingType DrawingType { get; set; } = LogikalDrawingType.Elevation;
  78. [CheckBoxEditor]
  79. [EditorSequence(10)]
  80. public bool SaveFiles { get; set; }
  81. [MemoEditor]
  82. [EditorSequence("1. Finishes", 1)]
  83. [Caption("Query")]
  84. public String FinishSQL { get; set; }
  85. private class ProfileUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  86. {
  87. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  88. {
  89. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  90. .And(x=>x.HasWidth).IsEqualTo(false)
  91. .And(x=>x.HasHeight).IsEqualTo(false)
  92. .And(x=>x.HasQuantity).IsEqualTo(false);
  93. }
  94. }
  95. [EditorSequence("2. Profiles", 1)]
  96. [Caption("Unit")]
  97. [LookupDefinition(typeof(ProfileUomLookup))]
  98. public ProductDimensionUnitLink ProfileUom { get; set; }
  99. [EditorSequence("2. Profiles", 2)]
  100. [EnumLookupEditor(typeof(LogikalMeasurement))]
  101. [Caption("Scale")]
  102. public LogikalMeasurement ProfileMeasurement { get; set; }
  103. [MemoEditor(Height=200)]
  104. [EditorSequence("2. Profiles", 3)]
  105. [Caption("BOM")]
  106. public String BillOfMaterialsProfileSQL { get; set; }
  107. [MemoEditor(Height=200)]
  108. [EditorSequence("2. Profiles", 4)]
  109. [Caption("Design")]
  110. public String DesignProfileSQL { get; set; }
  111. private class GasketUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  112. {
  113. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  114. {
  115. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  116. .And(x=>x.HasWidth).IsEqualTo(false)
  117. .And(x=>x.HasHeight).IsEqualTo(false)
  118. .And(x=>x.HasQuantity).IsEqualTo(false);
  119. }
  120. }
  121. [EditorSequence("3. Gaskets", 1)]
  122. [LookupDefinition(typeof(GasketUomLookup))]
  123. [Caption("Unit")]
  124. public ProductDimensionUnitLink GasketUom { get; set; }
  125. [EditorSequence("3. Gaskets", 2)]
  126. [EnumLookupEditor(typeof(LogikalMeasurement))]
  127. [Caption("Scale")]
  128. public LogikalMeasurement GasketMeasurement { get; set; }
  129. [MemoEditor]
  130. [EditorSequence("3. Gaskets", 3)]
  131. [Caption("Query")]
  132. public string GasketSQL { get; set; }
  133. private class ComponentUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  134. {
  135. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  136. {
  137. return new Filter<ProductDimensionUnit>(x=>x.HasQuantity).IsEqualTo(true)
  138. .And(x => x.HasLength).IsEqualTo(false)
  139. .And(x=>x.HasWidth).IsEqualTo(false)
  140. .And(x=>x.HasHeight).IsEqualTo(false);
  141. }
  142. }
  143. [EditorSequence("4. Components", 1)]
  144. [LookupDefinition(typeof(ComponentUomLookup))]
  145. [Caption("Unit")]
  146. public ProductDimensionUnitLink ComponentUom { get; set; }
  147. [MemoEditor]
  148. [EditorSequence("4. Components", 2)]
  149. [Caption("Query")]
  150. public String ComponentSQL { get; set; }
  151. private class GlassUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  152. {
  153. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  154. {
  155. return new Filter<ProductDimensionUnit>(x=>x.HasWidth).IsEqualTo(true)
  156. .And(x=>x.HasHeight).IsEqualTo(true)
  157. .And(x => x.HasLength).IsEqualTo(false)
  158. .And(x=>x.HasQuantity).IsEqualTo(false);
  159. }
  160. }
  161. [EditorSequence("5. Glass", 1)]
  162. [LookupDefinition(typeof(GlassUomLookup))]
  163. [Caption("Unit")]
  164. public ProductDimensionUnitLink GlassUom { get; set; }
  165. [EditorSequence("5. Glass", 2)]
  166. [EnumLookupEditor(typeof(LogikalMeasurement))]
  167. [Caption("Scale")]
  168. public LogikalMeasurement GlassMeasurement { get; set; }
  169. [MemoEditor]
  170. [EditorSequence("5. Glass", 2)]
  171. [Caption("Query")]
  172. public String GlassSQL { get; set; }
  173. [MemoEditor]
  174. [EditorSequence("6. Labour", 1)]
  175. [Caption("Query")]
  176. public String LabourSQL { get; set; }
  177. public bool CanImport<TSecurity>(bool enabled, Job? job) where TSecurity : ISecurityDescriptor, new()
  178. {
  179. if (!enabled)
  180. return false;
  181. if (job is null)
  182. return false;
  183. if (!Security.IsAllowed<TSecurity>())
  184. return false;
  185. if (UseLogikalProjectNumber)
  186. return (string.IsNullOrWhiteSpace(ProjectPrefix) || job.JobNumber.StartsWith(ProjectPrefix));
  187. return (string.IsNullOrWhiteSpace(job.SourceRef) || job.SourceRef.StartsWith("Logikal:"));
  188. }
  189. }
  190. }