ProgramFunctions.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.SqlClient;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. namespace crusherScanner
  9. {
  10. public class ProgramFunctions
  11. {
  12. private static string lastBarcodeScanned = "";
  13. public static bool ready = false;
  14. #region Contructor
  15. public ProgramFunctions()
  16. {
  17. Settings tmp = new();
  18. //TODO: remove debug values.
  19. tmp.CrusherNo = 1;
  20. tmp.OreDefInFile = "te";
  21. SettingsHandler.CheckSettings(tmp);
  22. // no initial configuration present
  23. if (Properties.Settings.Default.OreDefInFile == "")
  24. {
  25. if (File.Exists("config.json"))
  26. {
  27. MessageBox.Show("No configuration stored,\nloading configuration from 'config.json'","Settings",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  28. JsonHandler conf = new("config.json", true);
  29. //ImportConfigFile("config.json");
  30. }
  31. else
  32. {
  33. MessageBox.Show("No configuration stored,\nYou will need to enter settings manually.\nThe settings will open now.", "Settings", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  34. SettingsDialog dlg = new();
  35. dlg.ShowDialog();
  36. dlg.Dispose();
  37. }
  38. }
  39. //TODO check if settings are ok to use before setting ready.
  40. }
  41. #endregion
  42. #region Main logic
  43. public static Scan StartChecks(Scan scanned)
  44. {
  45. scanned.messageState = true;
  46. scanned = LimsAccess.IsInLims(scanned);
  47. if (!scanned.isInLims) // Check if this sample exists in LIMS
  48. {
  49. scanned.messageState = false;
  50. scanned.message = $"Sample {scanned.barcode} does not seem to be in LIMS.";
  51. return scanned;
  52. }
  53. scanned = OreDefData.CheckSampleType(scanned);
  54. if (scanned.sampleType == "Error!") // Check if sample prefix needs checking
  55. {
  56. scanned.messageState = false;
  57. scanned.message = "Unable to check sample due to a configuration issue.";
  58. return scanned;
  59. }
  60. if(scanned.sampleType == null) //sample is NOT an OreDef sample
  61. {
  62. scanned.message = $"Sample {scanned.barcode} is not an OreDef sample.";
  63. SerialAccess.SendToPrepmaster(scanned.barcode);
  64. lastBarcodeScanned = scanned.barcode;
  65. return scanned;
  66. }
  67. scanned = OreDefData.CheckContaminates(scanned);
  68. if (!scanned.Contaminated && !scanned.SampleNotFound) // No contamnination and SID found
  69. {
  70. scanned.message = $"Sample {scanned.barcode} is good to go.";
  71. SerialAccess.SendToPrepmaster(scanned.barcode);
  72. lastBarcodeScanned = scanned.barcode;
  73. return scanned;
  74. }
  75. else if (scanned.Contaminated && !scanned.SampleNotFound) // Contaminated sample found
  76. {
  77. scanned.message = "";
  78. if (lastBarcodeScanned == scanned.barcode)
  79. {
  80. SerialAccess.SendToPrepmaster(scanned.barcode);
  81. }
  82. lastBarcodeScanned = scanned.barcode;
  83. return scanned;
  84. }
  85. else // Sample not found in job lists.
  86. {
  87. scanned.messageState = false;
  88. scanned.message = $"Sample {scanned.barcode} is not found in job lists.";
  89. return scanned;
  90. }
  91. }
  92. #endregion
  93. #region Settings functions
  94. public static void ImportConfigFile(string configFile = "config.json")
  95. {
  96. string data = File.ReadAllText(configFile);
  97. using JsonDocument doc = JsonDocument.Parse(data);
  98. JsonElement root = doc.RootElement;
  99. var config = root;
  100. Properties.Settings.Default.CrusherNo = (int)config.GetProperty("CrusherNo").GetInt32();
  101. Properties.Settings.Default.PrepmasterMagazineSerial = config.GetProperty("Serial").ToString();
  102. Properties.Settings.Default.OreDefInFile = config.GetProperty("OreDefInFile").ToString();
  103. Properties.Settings.Default.OreDefWorkFile = config.GetProperty("OreDefWorkFile").ToString();
  104. Properties.Settings.Default.OreDefOutFile = config.GetProperty("OreDefOutFile").ToString();
  105. Properties.Settings.Default.OutputFormat = config.GetProperty("OutputFormat").ToString();
  106. Properties.Settings.Default.Save();
  107. }
  108. /// <summary>
  109. /// Export a Json configuration file.
  110. /// </summary>
  111. /// <param name="configFile">File path and file name to save the config file to.</param>
  112. public static void ExportConfigFile(string configFile = "config.json")
  113. {
  114. using var ms = new MemoryStream();
  115. using var writer = new Utf8JsonWriter(ms);
  116. writer.WriteStartObject();
  117. writer.WriteNumber("CrusherNo", Properties.Settings.Default.CrusherNo);
  118. writer.WriteString("Serial", Properties.Settings.Default.PrepmasterMagazineSerial);
  119. writer.WriteString("OreDefInFile", Properties.Settings.Default.OreDefInFile);
  120. writer.WriteString("OreDefWorkFile", Properties.Settings.Default.OreDefWorkFile);
  121. writer.WriteString("OreDefOutFile", Properties.Settings.Default.OreDefOutFile);
  122. writer.WriteString("OutputFormat", Properties.Settings.Default.OutputFormat);
  123. writer.WriteEndObject();
  124. writer.Flush();
  125. string json = Encoding.UTF8.GetString(ms.ToArray());
  126. File.WriteAllText(configFile, json);
  127. }
  128. #endregion
  129. }
  130. }