LogikalSettings.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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 class LogikalMeasurementModel : IExpressionModel<double>
  24. {
  25. public double Value { get; set; }
  26. }
  27. public class LogikalCodeModel : IExpressionModel<string>
  28. {
  29. public string Code { get; set; }
  30. }
  31. public enum LogikalDrawingFormat
  32. {
  33. DXF,
  34. PNG
  35. }
  36. public enum LogikalDrawingView
  37. {
  38. Interior,
  39. Exterior
  40. }
  41. public enum LogikalDrawingType
  42. {
  43. Explosion,
  44. Section,
  45. Elevation,
  46. ElevationWithSectionLines,
  47. SectionLine,
  48. }
  49. public class LogikalSettings : BaseObject, IGlobalConfigurationSettings
  50. {
  51. [EnumLookupEditor(typeof(LogikalProjectType))]
  52. [EditorSequence(1)]
  53. [Caption("Import Projects")]
  54. public LogikalProjectType ImportProjects { get; set; }
  55. [CheckBoxEditor]
  56. [EditorSequence(2)]
  57. public bool UseLogikalProjectNumber { get; set; }
  58. [CodeEditor(Editable=Editable.Enabled)]
  59. [EditorSequence(3)]
  60. [Caption("Job Prefix")]
  61. public string ProjectPrefix { get; set; }
  62. [CheckBoxEditor]
  63. [EditorSequence(4)]
  64. [Caption("Import BOMs")]
  65. public bool ImportBoms { get; set; }
  66. [CheckBoxEditor]
  67. [EditorSequence(5)]
  68. [Caption("Import Requis")]
  69. public bool ImportRequis { get; set; }
  70. [EnumLookupEditor(typeof(LogikalDesignType))]
  71. [EditorSequence(6)]
  72. [Caption("Import Designs")]
  73. public LogikalDesignType ImportDesigns { get; set; }
  74. [EnumLookupEditor(typeof(LogikalDrawingFormat))]
  75. [EditorSequence(7)]
  76. [Caption("Drawing Format")]
  77. public LogikalDrawingFormat DrawingFormat { get; set; } = LogikalDrawingFormat.PNG;
  78. [EnumLookupEditor(typeof(LogikalDrawingView))]
  79. [EditorSequence(8)]
  80. [Caption("Drawing View")]
  81. public LogikalDrawingView DrawingView { get; set; } = LogikalDrawingView.Interior;
  82. [EnumLookupEditor(typeof(LogikalDrawingType))]
  83. [EditorSequence(9)]
  84. [Caption("Drawing Type")]
  85. public LogikalDrawingType DrawingType { get; set; } = LogikalDrawingType.Elevation;
  86. [ExpressionEditor(typeof(LogikalCodeModel))]
  87. [EditorSequence(10)]
  88. [Caption("Image URL")]
  89. public string ImageUrl { get; set; } = "";
  90. [CheckBoxEditor]
  91. [EditorSequence(11)]
  92. public bool SaveFiles { get; set; }
  93. [MemoEditor]
  94. [EditorSequence("1. Groups", 1)]
  95. [Caption("Query")]
  96. public String GroupSQL { get; set; }
  97. private class TreatmentTypeLookup : LookupDefinitionGenerator<TreatmentType, LogikalSettings>
  98. {
  99. public override Filter<TreatmentType> DefineFilter(LogikalSettings[] items)
  100. => new Filter<TreatmentType>().All();
  101. }
  102. [LookupDefinition(typeof(TreatmentTypeLookup))]
  103. [EditorSequence("2. Finishes", 1)]
  104. [Caption("Powdercoated")]
  105. public TreatmentTypeLink PowdercoatedType { get; set; }
  106. [LookupDefinition(typeof(TreatmentTypeLookup))]
  107. [EditorSequence("2. Finishes", 2)]
  108. [Caption("Anodised")]
  109. public TreatmentTypeLink AnodisedType { get; set; }
  110. [LookupDefinition(typeof(TreatmentTypeLookup))]
  111. [EditorSequence("2. Finishes", 3)]
  112. [Caption("Varnished")]
  113. public TreatmentTypeLink VarnishedType { get; set; }
  114. [LookupDefinition(typeof(TreatmentTypeLookup))]
  115. [EditorSequence("2. Finishes", 4)]
  116. [Caption("Taped")]
  117. public TreatmentTypeLink TapedType { get; set; }
  118. [MemoEditor]
  119. [EditorSequence("2. Finishes", 5)]
  120. [Caption("Query")]
  121. public String FinishSQL { get; set; }
  122. private class ProfileUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  123. {
  124. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  125. {
  126. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  127. .And(x=>x.HasWidth).IsEqualTo(false)
  128. .And(x=>x.HasHeight).IsEqualTo(false)
  129. .And(x=>x.HasQuantity).IsEqualTo(false);
  130. }
  131. }
  132. [EditorSequence("3. Profiles", 1)]
  133. [Caption("Unit")]
  134. [LookupDefinition(typeof(ProfileUomLookup))]
  135. public ProductDimensionUnitLink ProfileUom { get; set; }
  136. [EditorSequence("3. Profiles", 2)]
  137. [ExpressionEditor(typeof(LogikalMeasurementModel))]
  138. [Caption("Scale")]
  139. public string ProfileMeasurement { get; set; }
  140. [MemoEditor(Height=200)]
  141. [EditorSequence("3. Profiles", 3)]
  142. [Caption("BOM")]
  143. public String BillOfMaterialsProfileSQL { get; set; }
  144. [MemoEditor(Height=200)]
  145. [EditorSequence("3. Profiles", 4)]
  146. [Caption("Design")]
  147. public String DesignProfileSQL { get; set; }
  148. private class GasketUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  149. {
  150. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  151. {
  152. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  153. .And(x=>x.HasWidth).IsEqualTo(false)
  154. .And(x=>x.HasHeight).IsEqualTo(false)
  155. .And(x=>x.HasQuantity).IsEqualTo(false);
  156. }
  157. }
  158. [EditorSequence("4. Gaskets", 1)]
  159. [LookupDefinition(typeof(GasketUomLookup))]
  160. [Caption("Unit")]
  161. public ProductDimensionUnitLink GasketUom { get; set; }
  162. [EditorSequence("4. Gaskets", 2)]
  163. [ExpressionEditor(typeof(LogikalMeasurementModel))]
  164. [Caption("Scale")]
  165. public string GasketMeasurement { get; set; }
  166. [MemoEditor]
  167. [EditorSequence("4. Gaskets", 3)]
  168. [Caption("Query")]
  169. public string GasketSQL { get; set; }
  170. private class ComponentUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  171. {
  172. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  173. {
  174. return new Filter<ProductDimensionUnit>(x=>x.HasQuantity).IsEqualTo(true)
  175. .And(x => x.HasLength).IsEqualTo(false)
  176. .And(x=>x.HasWidth).IsEqualTo(false)
  177. .And(x=>x.HasHeight).IsEqualTo(false);
  178. }
  179. }
  180. [EditorSequence("5. Components", 1)]
  181. [LookupDefinition(typeof(ComponentUomLookup))]
  182. [Caption("Unit")]
  183. public ProductDimensionUnitLink ComponentUom { get; set; }
  184. [MemoEditor]
  185. [EditorSequence("5. Components", 2)]
  186. [Caption("Query")]
  187. public String ComponentSQL { get; set; }
  188. private class GlassUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  189. {
  190. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  191. {
  192. return new Filter<ProductDimensionUnit>(x=>x.HasWidth).IsEqualTo(true)
  193. .And(x=>x.HasHeight).IsEqualTo(true)
  194. .And(x => x.HasLength).IsEqualTo(false)
  195. .And(x=>x.HasQuantity).IsEqualTo(false);
  196. }
  197. }
  198. [EditorSequence("6. Glass", 1)]
  199. [LookupDefinition(typeof(GlassUomLookup))]
  200. [Caption("Unit")]
  201. public ProductDimensionUnitLink GlassUom { get; set; }
  202. [EditorSequence("6. Glass", 2)]
  203. [ExpressionEditor(typeof(LogikalMeasurementModel))]
  204. [Caption("Scale")]
  205. public string GlassMeasurement { get; set; }
  206. [MemoEditor]
  207. [EditorSequence("6. Glass", 2)]
  208. [Caption("Query")]
  209. public String GlassSQL { get; set; }
  210. [MemoEditor]
  211. [EditorSequence("7. Labour", 1)]
  212. [Caption("Query")]
  213. public String LabourSQL { get; set; }
  214. public bool CanImport<TSecurity>(bool enabled, Job? job) where TSecurity : ISecurityDescriptor, new()
  215. {
  216. if (!enabled)
  217. return false;
  218. if (job is null)
  219. return false;
  220. if (!InABox.Core.Security.IsAllowed<TSecurity>())
  221. return false;
  222. if (UseLogikalProjectNumber)
  223. return (string.IsNullOrWhiteSpace(ProjectPrefix) || job.JobNumber.StartsWith(ProjectPrefix));
  224. return (string.IsNullOrWhiteSpace(job.SourceRef) || job.SourceRef.StartsWith("Logikal:"));
  225. }
  226. }
  227. }