V6Settings.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using System;
  2. using InABox.Configuration;
  3. using InABox.Core;
  4. namespace Comal.Classes
  5. {
  6. public enum V6ProjectType
  7. {
  8. None,
  9. Quote,
  10. Project
  11. }
  12. public enum V6DesignType
  13. {
  14. None,
  15. Approved,
  16. NotApproved
  17. }
  18. public enum V6Measurement
  19. {
  20. Millimetres,
  21. Metres,
  22. Inches
  23. }
  24. public class V6Settings : BaseObject, IGlobalConfigurationSettings
  25. {
  26. [TextBoxEditor]
  27. [EditorSequence(1)]
  28. public string Server { get; set; }
  29. [TextBoxEditor]
  30. [EditorSequence(2)]
  31. public string Database { get; set; }
  32. [TextBoxEditor]
  33. [EditorSequence(3)]
  34. public string UserID { get; set; }
  35. [PasswordEditor]
  36. [EditorSequence(4)]
  37. public string Password { get; set; }
  38. public string AsConnectionString() => String.IsNullOrWhiteSpace(UserID) && String.IsNullOrWhiteSpace(Password)
  39. ? $"server={Server};database={Database};integrated security=SSPI;"
  40. : $"server={Server};database={Database};integrated security=false;user id={UserID};password={Password}";
  41. [EnumLookupEditor(typeof(V6ProjectType))]
  42. [EditorSequence(5)]
  43. [Caption("Import Projects")]
  44. public V6ProjectType ImportProjects { get; set; }
  45. [CheckBoxEditor]
  46. [EditorSequence(6)]
  47. public bool UseV6QuoteNumber { get; set; }
  48. [CodeEditor(Editable=Editable.Enabled)]
  49. [EditorSequence(7)]
  50. [Caption("Job Prefix")]
  51. public string ProjectPrefix { get; set; }
  52. [CheckBoxEditor]
  53. [EditorSequence(8)]
  54. [Caption("Import BOMs")]
  55. public bool ImportBoms { get; set; }
  56. [CheckBoxEditor]
  57. [EditorSequence(9)]
  58. [Caption("Import Requis")]
  59. public bool ImportRequis { get; set; }
  60. [EnumLookupEditor(typeof(V6DesignType))]
  61. [EditorSequence(10)]
  62. [Caption("Import Designs")]
  63. public V6DesignType ImportDesigns { get; set; }
  64. [CodeEditor(Visible=Visible.Default, Editable=Editable.Enabled)]
  65. [EditorSequence(11)]
  66. public String PacketTemplate { get; set; }
  67. private class ProfileUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  68. {
  69. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  70. {
  71. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  72. .And(x=>x.HasWidth).IsEqualTo(false)
  73. .And(x=>x.HasHeight).IsEqualTo(false)
  74. .And(x=>x.HasQuantity).IsEqualTo(false);
  75. }
  76. }
  77. [EditorSequence("1. Profiles", 1)]
  78. [Caption("Unit")]
  79. [LookupDefinition(typeof(ProfileUomLookup))]
  80. public ProductDimensionUnitLink ProfileUom { get; set; }
  81. [EditorSequence("1. Profiles", 2)]
  82. [EnumLookupEditor(typeof(V6Measurement))]
  83. [Caption("Scale")]
  84. public V6Measurement ProfileMeasurement { get; set; }
  85. [MemoEditor(Height=200)]
  86. [EditorSequence("1. Profiles", 3)]
  87. [Caption("BOM")]
  88. public String BOMProfilesSQL { get; set; }// = V6Profile.SQL;
  89. [MemoEditor(Height=200)]
  90. [EditorSequence("1. Profiles", 4)]
  91. [Caption("Design")]
  92. public String DesignProfilesSQL { get; set; }// = V6Profile.SQL;
  93. private class GasketUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  94. {
  95. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  96. {
  97. return new Filter<ProductDimensionUnit>(x => x.HasLength).IsEqualTo(true)
  98. .And(x=>x.HasWidth).IsEqualTo(false)
  99. .And(x=>x.HasHeight).IsEqualTo(false)
  100. .And(x=>x.HasQuantity).IsEqualTo(false);
  101. }
  102. }
  103. [EditorSequence("2. Gaskets", 1)]
  104. [LookupDefinition(typeof(GasketUomLookup))]
  105. [Caption("Unit")]
  106. public ProductDimensionUnitLink GasketUom { get; set; }
  107. [EditorSequence("2. Gaskets", 2)]
  108. [EnumLookupEditor(typeof(V6Measurement))]
  109. [Caption("Scale")]
  110. public V6Measurement GasketMeasurement { get; set; }
  111. [MemoEditor]
  112. [EditorSequence("2. Gaskets", 3)]
  113. [Caption("Query")]
  114. public string GasketSQL { get; set; }
  115. private class ComponentUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  116. {
  117. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  118. {
  119. return new Filter<ProductDimensionUnit>(x=>x.HasQuantity).IsEqualTo(true)
  120. .And(x => x.HasLength).IsEqualTo(false)
  121. .And(x=>x.HasWidth).IsEqualTo(false)
  122. .And(x=>x.HasHeight).IsEqualTo(false);
  123. }
  124. }
  125. [EditorSequence("3. Components", 1)]
  126. [LookupDefinition(typeof(ComponentUomLookup))]
  127. [Caption("Unit")]
  128. public ProductDimensionUnitLink ComponentUom { get; set; }
  129. [MemoEditor]
  130. [EditorSequence("3. Components", 2)]
  131. [Caption("Query")]
  132. public String ComponentSQL { get; set; }// = V6Component.SQL;
  133. private class GlassUomLookup : LookupDefinitionGenerator<ProductDimensionUnit, LogikalSettings>
  134. {
  135. public override Filter<ProductDimensionUnit> DefineFilter(LogikalSettings[] items)
  136. {
  137. return new Filter<ProductDimensionUnit>(x=>x.HasHeight).IsEqualTo(true)
  138. .And(x=>x.HasWidth).IsEqualTo(true)
  139. .And(x => x.HasLength).IsEqualTo(false)
  140. .And(x=>x.HasQuantity).IsEqualTo(false);
  141. }
  142. }
  143. [EditorSequence("4. Glass", 1)]
  144. [LookupDefinition(typeof(GlassUomLookup))]
  145. [Caption("Unit")]
  146. public ProductDimensionUnitLink GlassUom { get; set; }
  147. [EditorSequence("4. Glass", 2)]
  148. [EnumLookupEditor(typeof(V6Measurement))]
  149. [Caption("Scale")]
  150. public V6Measurement GlassMeasurement { get; set; }
  151. [MemoEditor]
  152. [EditorSequence("4. Glass", 2)]
  153. [Caption("Query")]
  154. public String GlassSQL { get; set; }// = V6Glass.SQL;
  155. [MemoEditor]
  156. [EditorSequence("5. Labour", 1)]
  157. [Caption("Query")]
  158. public String LabourSQL { get; set; }// = V6Labour.SQL;
  159. public bool CanImport<TSecurity>(bool enabled, Job? job) where TSecurity : ISecurityDescriptor, new()
  160. {
  161. if (!enabled)
  162. return false;
  163. if (job is null)
  164. return false;
  165. if (!Security.IsAllowed<TSecurity>())
  166. return false;
  167. if (UseV6QuoteNumber)
  168. return (string.IsNullOrWhiteSpace(ProjectPrefix) || job.JobNumber.StartsWith(ProjectPrefix));
  169. return (string.IsNullOrWhiteSpace(job.SourceRef) || job.SourceRef.StartsWith("V6:"));
  170. }
  171. }
  172. }