DatabaseUpdateScripts.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace PRS.Shared
  10. {
  11. public static class DatabaseUpdateScripts
  12. {
  13. public static void RegisterScripts()
  14. {
  15. DataUpdater.RegisterUpdateScript("6.31", Update_6_31);
  16. DataUpdater.RegisterUpdateScript("6.37", Update_6_37);
  17. DataUpdater.RegisterUpdateScript("6.38", Update_6_38);
  18. DataUpdater.RegisterUpdateScript("6.39", Update_6_39);
  19. DataUpdater.RegisterUpdateScript("6.43", Update_6_43);
  20. }
  21. private static Dictionary<string, Tuple<string, string>> _6_31_module_map = new()
  22. {
  23. { "Assignments", new("Assignments", "Assignments") },
  24. { "Daily Report", new("Daily Report", "Assignments") },
  25. { "Delivered On Site", new("Delivered On Site", "Delivery Items") },
  26. { "Deliveries", new("Deliveries", "Deliveries") },
  27. { "Digital Forms", new("Digital Forms", "DigitalForm") },
  28. { "Employee List", new("Employees", "Employee") },
  29. { "Equipment List", new("Equipment", "Equipment") },
  30. { "Factory Floor", new("Factory", "Manufacturing Packets") },
  31. { "Incoming Consignments", new("Consignments", "Consignment") },
  32. { "Manufacturing Status", new("Manufacturing Packets", "Manufacturing Packets") },
  33. { "Product List", new("Products", "Products") },
  34. { "Projects", new("Job Details", "Job Details") },
  35. { "Purchase Orders", new("Purchase Orders", "PurchaseOrder") },
  36. { "Quotes", new("Quotes", "Quotes") },
  37. { "Rack List", new("Shipping", "Shipments") },
  38. { "Site Requisitions", new("Requisitions", "Requisition") },
  39. { "Staff TimeSheets", new("Timesheets", "TimeSheet") },
  40. { "Stock Locations", new("Stock Locations", "StockLocation") },
  41. { "Stock Movements", new("Stock Movements", "StockMovement") },
  42. { "Task List", new("Tasks By Status", "Kanban") },
  43. };
  44. private static bool Update_6_31()
  45. {
  46. var modules = DbFactory.Provider.Query(new Filter<CustomModule>().All())
  47. .Rows.Select(x => x.ToObject<CustomModule>()).ToList();
  48. foreach(var module in modules)
  49. {
  50. if (!string.IsNullOrWhiteSpace(module.Section))
  51. {
  52. if (_6_31_module_map.TryGetValue(module.Section, out var map))
  53. {
  54. module.Section = map.Item1;
  55. module.DataModel = map.Item2;
  56. module.AllRecords = true;
  57. }
  58. else
  59. {
  60. Logger.Send(LogType.Error, "", $"Custom Module '{module.Name}' has section name '{module.Section}' and will no longer be visible!");
  61. }
  62. }
  63. }
  64. DbFactory.Provider.Save(modules);
  65. return true;
  66. }
  67. private static bool Update_6_37()
  68. {
  69. Logger.Send(LogType.Information, "", "Recreating views");
  70. DbFactory.Provider.ForceRecreateViews();
  71. return true;
  72. }
  73. private static bool Update_6_38()
  74. {
  75. Logger.Send(LogType.Information, "", "Converting Job Requisition Dates to Due Dates");
  76. List<JobRequisition> updates = new List<JobRequisition>();
  77. var columns = new Columns<JobRequisition>(x => x.ID);
  78. columns.Add("Date");
  79. CoreTable requis = DbFactory.Provider.Query<JobRequisition>(null, columns);
  80. foreach (var row in requis.Rows)
  81. {
  82. var requi = row.ToObject<JobRequisition>();
  83. requi.Approved = row.Get<DateTime>("Date");
  84. updates.Add(requi);
  85. }
  86. DbFactory.Provider.Save(updates);
  87. return true;
  88. }
  89. private static bool Update_6_39()
  90. {
  91. void ConvertJobDocumentIssuedDates()
  92. {
  93. Logger.Send(LogType.Information, "", "Converting Job Document Issued Dates");
  94. List<JobDocumentSetMileStone> updates = new List<JobDocumentSetMileStone>();
  95. var columns = new Columns<JobDocumentSetMileStone>(x => x.ID).Add(x => x.Submitted).Add(x => x.Status);
  96. columns.Add("Issued");
  97. CoreTable milestones = DbFactory.Provider.Query<JobDocumentSetMileStone>(null, columns);
  98. foreach (var row in milestones.Rows)
  99. {
  100. var milestone = row.ToObject<JobDocumentSetMileStone>();
  101. if (milestone.Status == JobDocumentSetMileStoneStatus.Unknown)
  102. milestone.Status = JobDocumentSetMileStoneStatus.Submitted;
  103. milestone.Submitted = row.Get<DateTime>("Issued");
  104. updates.Add(milestone);
  105. }
  106. DbFactory.Provider.Save(updates);
  107. }
  108. void ConvertProductUnitsOfMeasure()
  109. {
  110. Logger.Send(LogType.Information, "", "Converting Product Units of Measure");
  111. List<ProductDimensionUnit> updates = new List<ProductDimensionUnit>();
  112. var columns = new Columns<ProductDimensionUnit>(x => x.ID).Add(x => x.Description);
  113. CoreTable units = DbFactory.Provider.Query<ProductDimensionUnit>(new Filter<ProductDimensionUnit>(x=>x.Code).IsEqualTo(""), columns);
  114. foreach (var row in units.Rows)
  115. {
  116. var unit = row.ToObject<ProductDimensionUnit>();
  117. unit.Code = unit.Description;
  118. updates.Add(unit);
  119. }
  120. DbFactory.Provider.Save(updates);
  121. }
  122. void ConvertQuoteUnitsOfMeasure()
  123. {
  124. Logger.Send(LogType.Information, "", "Converting Quote Units of Measure");
  125. List<QuoteTakeOffUnit> updates = new List<QuoteTakeOffUnit>();
  126. var columns = new Columns<QuoteTakeOffUnit>(x => x.ID).Add(x => x.Description);
  127. CoreTable units = DbFactory.Provider.Query<QuoteTakeOffUnit>(new Filter<QuoteTakeOffUnit>(x=>x.Code).IsEqualTo(""), columns);
  128. foreach (var row in units.Rows)
  129. {
  130. var unit = row.ToObject<QuoteTakeOffUnit>();
  131. unit.Code = unit.Description;
  132. updates.Add(unit);
  133. }
  134. DbFactory.Provider.Save(updates);
  135. }
  136. ConvertJobDocumentIssuedDates();
  137. ConvertProductUnitsOfMeasure();
  138. ConvertQuoteUnitsOfMeasure();
  139. return true;
  140. }
  141. private static bool Update_6_43()
  142. {
  143. void ConvertSupplierProductLinks()
  144. {
  145. Logger.Send(LogType.Information, "", "Converting Supplier/Product Links");
  146. List<SupplierProduct> updates = new List<SupplierProduct>();
  147. var columns = new Columns<SupplierProduct>(x => x.ID).Add(x=>x.Product.ID);
  148. columns.Add("ProductLink.ID");
  149. CoreTable products = DbFactory.Provider.Query<SupplierProduct>(null, columns);
  150. foreach (var row in products.Rows)
  151. {
  152. Guid id = row.Get<SupplierProduct,Guid>(x=>x.ID);
  153. Guid oldid = row.Get<Guid>("ProductLink.ID");
  154. Guid newid = row.Get<SupplierProduct,Guid>(x=>x.Product.ID);
  155. if ((oldid != Guid.Empty) && (newid == Guid.Empty))
  156. {
  157. var update = new SupplierProduct() { ID = id };
  158. update.CommitChanges();
  159. update.Product.ID = oldid;
  160. updates.Add(update);
  161. }
  162. }
  163. DbFactory.Provider.Save(updates);
  164. }
  165. ConvertSupplierProductLinks();
  166. return true;
  167. }
  168. }
  169. }