PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/IntelWebImporter/ImportRun.cs

https://github.com/sirivedula/IntelWebPro
C# | 351 lines | 321 code | 27 blank | 3 comment | 26 complexity | ef262faa3a273dfcde10100cbbb912ec MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using IntelWeb;
  7. using System.Reflection;
  8. using IntelWeb.IntelWebObjects;
  9. using System.Web;
  10. namespace IntelWebImporter
  11. {
  12. public class ImportRun
  13. {
  14. private List<ImportError> _importproblems = new List<ImportError>();
  15. private List<ImportedItem> _importeditems = new List<ImportedItem>();
  16. public ImportRun()
  17. {
  18. _startdate = DateTime.Now;
  19. }
  20. public string fullFileName { get; set; }
  21. public string UserName { get; set; }
  22. public string tierCode { get; set; }
  23. private ImportError error = new ImportError();
  24. private ImportedItem iitem;
  25. private int _line;
  26. private DateTime _startdate;
  27. private DateTime _enddate;
  28. private int dataLines
  29. {
  30. get
  31. {
  32. return _line;
  33. }
  34. }
  35. public void doImport(bool preview)
  36. {
  37. if (!File.Exists(fullFileName))
  38. {
  39. error = new ImportError();
  40. error.errorMessage = fullFileName + " does not exist.";
  41. _importproblems.Add(error);
  42. return;
  43. }
  44. CurrentUser cuser = new CurrentUser();
  45. cuser.userName = this.UserName;
  46. cuser.Load();
  47. using (StreamReader sr = File.OpenText(fullFileName))
  48. {
  49. String inputLine;
  50. /* Read Header */
  51. inputLine = sr.ReadLine();
  52. if (inputLine != null)
  53. {
  54. Dictionary<string, string> headers = this.deviceHeaders;
  55. string[] lineHeaders = inputLine.Split('\t');
  56. int col = 0;
  57. foreach (string str in lineHeaders)
  58. {
  59. if (headers.ContainsKey(str))
  60. {
  61. headers[str] = col.ToString();
  62. col++;
  63. }
  64. }
  65. Dictionary<string, string> mapFields = this.fieldsMap;
  66. string deptcode="", sitecode="", panelcode="", alarmcode="", alarmtype="";
  67. _line = 0;
  68. while ((inputLine = sr.ReadLine()) != null)
  69. {
  70. /* Read File Each Line */
  71. string[] lineFields = inputLine.Split('\t');
  72. _line++;
  73. tbl_alarm_time_details alarmDet = new tbl_alarm_time_details(cuser);
  74. foreach(string fieldname in headers.Keys)
  75. {
  76. int idx;
  77. int.TryParse(headers[fieldname], out idx);
  78. object value = lineFields[idx];
  79. PropertyInfo pi = alarmDet.GetType().GetProperty(mapFields[fieldname]);
  80. if (pi != null)
  81. {
  82. value = IntelWebDataConverter.toType(lineFields[idx], pi.PropertyType, "Line: [" + _line.ToString() + "] Field: [" + fieldname + "] Value: [" + (lineFields[idx] ?? "") + "]");
  83. pi.SetValue(alarmDet, value, null);
  84. if (fieldname.Equals("DEPT/REG"))
  85. {
  86. deptcode = value.ToString();
  87. }
  88. if (fieldname.Equals("SITE"))
  89. {
  90. sitecode = value.ToString();
  91. }
  92. if (fieldname.Equals("PANEL"))
  93. {
  94. panelcode = value.ToString();
  95. }
  96. if (fieldname.Equals("ALARM DEVICE"))
  97. {
  98. alarmcode = value.ToString();
  99. }
  100. if (fieldname.Equals("ALARM TYPE"))
  101. {
  102. alarmtype = value.ToString();
  103. }
  104. }
  105. }
  106. UpSert(deptcode, sitecode, panelcode, alarmcode, alarmtype, cuser);
  107. alarmDet.tier_code = tierCode;
  108. alarmDet.LoadSingle();
  109. bool isnew = alarmDet.isNew;
  110. string desc = alarmDet.ChangedFieldsDescription();
  111. if (!alarmDet.save())
  112. {
  113. error = new ImportError();
  114. error.errorMessage = alarmDet.saveErrorText;
  115. error.fieldFQR = alarmDet.friendlySingluarName();
  116. error.lineNumber = _line;
  117. _importproblems.Add(error);
  118. }
  119. else
  120. {
  121. iitem = new ImportedItem(_line, isnew, alarmDet.friendlySingluarName(), desc);
  122. _importeditems.Add(iitem);
  123. }
  124. }
  125. }
  126. }
  127. _enddate = DateTime.Now;
  128. }
  129. private void UpSert(string Dept, string Site, string Panel, string Alarm, string AlarmType, CurrentUser cuser)
  130. {
  131. /* Find If Department Exists or Insert it */
  132. lkup_department dept = new lkup_department(cuser);
  133. dept.department_code = Dept;
  134. dept.LoadSingle();
  135. if (dept.isNew)
  136. {
  137. dept.department_code_description = Dept;
  138. string desc = dept.ChangedFieldsDescription();
  139. if (!dept.save())
  140. {
  141. error = new ImportError();
  142. error.errorMessage = dept.saveErrorText;
  143. error.fieldFQR = dept.friendlySingluarName();
  144. error.lineNumber = _line;
  145. _importproblems.Add(error);
  146. }
  147. else
  148. {
  149. iitem = new ImportedItem(_line, true, dept.friendlySingluarName(), desc);
  150. _importeditems.Add(iitem);
  151. }
  152. }
  153. lkup_site site = new lkup_site(cuser);
  154. site.department_code = Dept;
  155. site.site_code = Site;
  156. site.LoadSingle();
  157. if (site.isNew)
  158. {
  159. site.site_code_description = Site;
  160. string desc = site.ChangedFieldsDescription();
  161. if (!site.save())
  162. {
  163. error = new ImportError();
  164. error.errorMessage = site.saveErrorText;
  165. error.fieldFQR = site.friendlySingluarName();
  166. error.lineNumber = _line;
  167. _importproblems.Add(error);
  168. }
  169. else
  170. {
  171. iitem = new ImportedItem(_line, true, site.friendlySingluarName(), desc);
  172. _importeditems.Add(iitem);
  173. }
  174. }
  175. lkup_panel panel = new lkup_panel(cuser);
  176. panel.panel_code = Panel;
  177. panel.site_code = Site;
  178. panel.LoadSingle();
  179. if (panel.isNew)
  180. {
  181. panel.alarm_device_code = Alarm;
  182. panel.panel_code_description = Panel;
  183. string desc = panel.ChangedFieldsDescription();
  184. if (!panel.save())
  185. {
  186. error = new ImportError();
  187. error.errorMessage = panel.saveErrorText;
  188. error.fieldFQR = panel.friendlySingluarName();
  189. error.lineNumber = _line;
  190. _importproblems.Add(error);
  191. }
  192. else
  193. {
  194. iitem = new ImportedItem(_line, true, panel.friendlySingluarName(), desc);
  195. _importeditems.Add(iitem);
  196. }
  197. }
  198. lkup_alarm_device alarm = new lkup_alarm_device(cuser);
  199. alarm.panel_code = Panel;
  200. alarm.alarm_device_code = Alarm;
  201. alarm.alarm_type_code = AlarmType;
  202. alarm.LoadSingle();
  203. if (alarm.isNew)
  204. {
  205. alarm.alarm_device_code_description = Alarm;
  206. string desc = alarm.ChangedFieldsDescription();
  207. if (!alarm.save())
  208. {
  209. error = new ImportError();
  210. error.errorMessage = alarm.saveErrorText;
  211. error.fieldFQR = alarm.friendlySingluarName();
  212. error.lineNumber = _line;
  213. _importproblems.Add(error);
  214. }
  215. else
  216. {
  217. iitem = new ImportedItem(_line, true, alarm.friendlySingluarName(), desc);
  218. _importeditems.Add(iitem);
  219. }
  220. }
  221. }
  222. private Dictionary<string, string> deviceHeaders
  223. {
  224. get
  225. {
  226. Dictionary<String, String> Results = new Dictionary<string, string>();
  227. Results.Add("DATE", "1");
  228. Results.Add("HOUR","2");
  229. Results.Add("ALARM TIME","3");
  230. Results.Add("ALARM TYPE","4");
  231. Results.Add("ALARM DETAILS","5");
  232. Results.Add("ALARM DEVICE", "6");
  233. Results.Add("PANEL", "7");
  234. Results.Add("SITE", "8");
  235. Results.Add("DEPT/REG", "9");
  236. return Results;
  237. }
  238. }
  239. private Dictionary<string, string> fieldsMap
  240. {
  241. get
  242. {
  243. Dictionary<string, string> Result = new Dictionary<string, string>();
  244. Result.Add("DATE", "alarm_date");
  245. Result.Add("HOUR", "alarm_hour");
  246. Result.Add("ALARM TIME", "alarm_time");
  247. Result.Add("ALARM TYPE", "alarm_comment");
  248. Result.Add("ALARM DETAILS", "alarm_details");
  249. Result.Add("ALARM DEVICE", "alarm_device_code");
  250. Result.Add("PANEL", "panel_code");
  251. Result.Add("SITE", "site_code");
  252. Result.Add("DEPT/REG", "department_code");
  253. return Result;
  254. }
  255. }
  256. public string toHTML()
  257. {
  258. StringBuilder sb = new StringBuilder();
  259. sb.Append(@"<style>
  260. .importresults table{border-collapse:collapse;border-left:1px dotted #CCC;border-right:1px dotted #CCC;border-top:1px dotted #CCC;empty-cells: show;margin-left:26px;}
  261. .importresults table td table{border-right:0px;border-top:0px;}
  262. .importresults table td table td{border-bottom:0px;}
  263. .importresults td{vertical-align:top;border-bottom:1px dotted #CCC;padding-left:8px;padding-right:2px;border-left:1px dotted #EEE;}
  264. .importresults th{vertical-align:top;border-bottom:1px dotted #CCC;text-align:left;background-color:#524F77;color:#FFF;padding-left:8px;padding-right:2px;border-left:1px solid #FFF;border-right:0px solid #CCC;}
  265. .imptotal{text-align:right;}
  266. .importresults h2{width:100%;border-bottom:1px solid #CCC;background-color:#646192;padding:5px;color:#FFF;font-family:Tahoma;font-size:12px;}
  267. #impobjectssummary{border-collapse:collapse;border-spacing:0px;}
  268. #impobjectssummary th{font-style:italic;background-color:#FFF;border-bottom:1px dotted #CCC;}
  269. .importresults tr.Even{background-color:#E0DFEA;}
  270. .importresults tr.Odd{background-color:#A4A2C1;}
  271. .err {border:3px solid #F00;padding:12px;font-weight:bold;font-size:20px;}
  272. #impresultsproperties th { background-color:#524F77; color:#FFF;}
  273. </style>");
  274. sb.AppendLine("<div class=\"importresults\">");
  275. sb.Append("<div class=\"impsummary\"><h2>Import Summary</h2>");
  276. sb.Append("<table id=\"impresultsproperties\">");
  277. sb.Append("<tr><th>Started</th><td>" + HttpUtility.HtmlEncode(_startdate.ToString()) + "</td></tr>");
  278. sb.Append("<tr><th>Finished</th><td>" + HttpUtility.HtmlEncode(_enddate.ToString()) + "</td></tr>");
  279. sb.Append("<tr><th>Lines in File</th><td>" + HttpUtility.HtmlEncode(dataLines.ToString()) + "</td></tr>");
  280. sb.Append("<tr><th>Imported Items</th><td>" + HttpUtility.HtmlEncode(_importeditems.Count.ToString()) + "</td></tr>");
  281. sb.Append("<tr><th>Error Items</th><td>" + HttpUtility.HtmlEncode(_importproblems.Count.ToString()) + "</td></tr>");
  282. sb.Append("</table></div>");
  283. sb.AppendLine("<div class=\"impproblems\"><h2>Import Problems</h2>");
  284. int linecount = 0;
  285. if (_importproblems.Count.Equals(0))
  286. {
  287. sb.Append("<div class=\"success\">There were no problems with the import.</div>");
  288. }
  289. else
  290. {
  291. sb.Append("<table>");
  292. sb.Append(ImportError.toTableRowHeader());
  293. linecount = 0;
  294. foreach (ImportError ie in _importproblems)
  295. {
  296. linecount += 1;
  297. sb.Append(ie.toTableRow(linecount % 2 == 0 ? "Even" : "Odd"));
  298. }
  299. sb.Append("</table>");
  300. }
  301. sb.Append("</div>");
  302. sb.AppendLine("<div class=\"impitems\"><h2>Imported Items</h2>");
  303. if (_importeditems.Count.Equals(0))
  304. {
  305. sb.Append("<div class=\"noimportitems\">There were no items imported.</div>");
  306. }
  307. else
  308. {
  309. sb.Append("<table>");
  310. sb.Append(ImportedItem.toTableRowHeader());
  311. linecount = 0;
  312. foreach (ImportedItem ii in _importeditems)
  313. {
  314. linecount += 1;
  315. sb.Append(ii.toTableRow(linecount % 2 == 0 ? "Even" : "Odd"));
  316. }
  317. sb.Append("</table>");
  318. }
  319. sb.Append("</div>");
  320. sb.Append("</div>");
  321. return sb.ToString();
  322. }
  323. }
  324. }