PageRenderTime 37ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/MContracts/MCDomain/Importer/ImportingScheme.cs

#
C# | 383 lines | 269 code | 53 blank | 61 comment | 48 complexity | 8134b76a4f3d8e3961f9343c426cebb1 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Diagnostics.Contracts;
  6. using System.ComponentModel;
  7. using MCDomain.DataAccess;
  8. namespace MCDomain.Importer
  9. {
  10. public class ImportingSchemeItem : INotifyPropertyChanged
  11. {
  12. public event PropertyChangedEventHandler PropertyChanged;
  13. public void SendPropertyChanged(string propertyName)
  14. {
  15. if (PropertyChanged != null)
  16. {
  17. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  18. }
  19. }
  20. private double _dbid;
  21. /// <summary>
  22. /// идентификатор элемента схемы в БД
  23. /// </summary>
  24. public double DbId
  25. {
  26. get { return _dbid; }
  27. set
  28. {
  29. if (_dbid == value) return;
  30. _dbid = value;
  31. }
  32. }
  33. private int _col = -1;
  34. /// <summary>
  35. /// столбец привязки (пока считаем что схема накладывается на таблицы,
  36. /// в которых для каждого элемента данных выделена одна строка)
  37. /// </summary>
  38. public int Col
  39. {
  40. get { return _col; }
  41. set
  42. {
  43. Contract.Ensures(_col == value);
  44. if (_col == value) return;
  45. if (value != -1)
  46. {
  47. _iscolchanged = true;
  48. }
  49. else if ((_col != -1)&&(value == -1))
  50. {
  51. _iscolchanged = false;
  52. }
  53. _col = value;
  54. DefaultCol = value;
  55. SendPropertyChanged("Col");
  56. }
  57. }
  58. private int _defaultcol = -1;
  59. /// <summary>
  60. /// столбец по умолчанию - устанавливается один раз при добавлении
  61. /// </summary>
  62. public int DefaultCol
  63. {
  64. get { return _defaultcol; }
  65. set
  66. {
  67. if (_defaultcol != -1) return;
  68. _defaultcol = value;
  69. }
  70. }
  71. public void SetDefaultCol ()
  72. {
  73. _col = _defaultcol;
  74. }
  75. private bool _iscolchanged;
  76. /// <summary>
  77. /// менялось ли значение для столбца в схеме
  78. /// </summary>
  79. /// <returns></returns>
  80. public bool IsColChanged()
  81. {
  82. return _iscolchanged;
  83. }
  84. private string _code;
  85. /// <summary>
  86. /// код колонки
  87. /// коды прописаны в схеме по умолчанию
  88. /// каждый код уникален
  89. /// и определяет какому свойству конвертируемого объекта
  90. /// будут приписываться данные
  91. /// </summary>
  92. public string Code
  93. {
  94. get { return _code; }
  95. set
  96. {
  97. Contract.Ensures(_code == value);
  98. if (_code == value) return;
  99. _code = value;
  100. }
  101. }
  102. /// <summary>
  103. /// наименование колонки - для отображения в интерфейсе
  104. /// </summary>
  105. private string _name;
  106. public string Name
  107. {
  108. get { return _name; }
  109. set
  110. {
  111. Contract.Ensures(_name == value);
  112. if (_name == value) return;
  113. _name = value;
  114. }
  115. }
  116. public override string ToString()
  117. {
  118. return Name;
  119. }
  120. private bool _isrequired;
  121. /// <summary>
  122. /// является поле обязательным или нет
  123. /// </summary>
  124. public bool IsRequired
  125. {
  126. get { return _isrequired; }
  127. set
  128. {
  129. Contract.Ensures(_isrequired == value);
  130. if (_isrequired == value) return;
  131. _isrequired = value;
  132. }
  133. }
  134. }
  135. public class ImportingSchemeItems : List<ImportingSchemeItem>
  136. {
  137. public void SetDefaultCols()
  138. {
  139. foreach (ImportingSchemeItem r in this)
  140. {
  141. r.SetDefaultCol();
  142. }
  143. }
  144. /// <summary>
  145. /// добавить новый элемент схемы
  146. /// </summary>
  147. /// <param name="name">наименование элемента</param>
  148. /// <param name="code">код элемента</param>
  149. /// <param name="col">столбец</param>
  150. /// <returns></returns>
  151. public ImportingSchemeItem AddNewItem(double dbid, string name, string code, double col, bool isrequired)
  152. {
  153. ImportingSchemeItem r = this[code];
  154. if (r == null)
  155. {
  156. r = new ImportingSchemeItem();
  157. r.DbId = dbid;
  158. r.Name = name;
  159. r.Code = code;
  160. r.Col = (int)col;
  161. r.DefaultCol = (int)col;
  162. r.IsRequired = isrequired;
  163. Add(r);
  164. }
  165. return r;
  166. }
  167. /// <summary>
  168. /// поиск в коллекции по коду
  169. /// </summary>
  170. /// <param name="code">код</param>
  171. /// <returns>элемент схемы, код которого совпадает с параметром</returns>
  172. public ImportingSchemeItem GetItemByCode(string code)
  173. {
  174. return Find(x => x.Code == code);
  175. }
  176. /// <summary>
  177. /// искать в коллекции по имени
  178. /// </summary>
  179. /// <param name="name">имя</param>
  180. /// <returns>элемент схемы, имя которого совпадает с параметром</returns>
  181. public ImportingSchemeItem GetItemByName(string name)
  182. {
  183. return Find(x => x.Name == name);
  184. }
  185. public ImportingSchemeItem GetItemByColumn(int col)
  186. {
  187. return Find(x => x.Col == col);
  188. }
  189. /// <summary>
  190. /// дополнительный индексатор по коду
  191. /// </summary>
  192. /// <param name="code">код</param>
  193. /// <returns>элемент схемы</returns>
  194. public ImportingSchemeItem this[string code]
  195. {
  196. get { return GetItemByCode(code); }
  197. }
  198. public bool IsAllRequiredFieldsFilled()
  199. {
  200. List<ImportingSchemeItem> lst = FindAll(x => x.IsRequired);
  201. return lst.All(x => x.IsColChanged());
  202. }
  203. public int MaxCol()
  204. {
  205. int m = 0;
  206. for (int i = 0; i < Count; i++)
  207. {
  208. if (this[i].Col > m) m = this[i].Col;
  209. }
  210. return m;
  211. }
  212. public void RestoreDefaultCols()
  213. {
  214. for (int i = 0; i < Count; i++)
  215. {
  216. this[i].Col = this[i].DefaultCol;
  217. }
  218. }
  219. }
  220. public class ImportingScheme : INotifyPropertyChanged
  221. {
  222. public event PropertyChangedEventHandler PropertyChanged;
  223. public void SendPropertyChanged(string propertyName)
  224. {
  225. if (PropertyChanged != null)
  226. {
  227. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  228. }
  229. }
  230. private double _dbid;
  231. /// <summary>
  232. /// идентификатор схемы в БД
  233. /// </summary>
  234. public double DbId
  235. {
  236. get { return _dbid; }
  237. set
  238. {
  239. if (_dbid == value) return;
  240. _dbid = value;
  241. }
  242. }
  243. private string _schemename;
  244. /// <summary>
  245. /// наименование схемы
  246. /// </summary>
  247. public string SchemeName
  248. {
  249. get { return _schemename; }
  250. set {
  251. Contract.Ensures(_schemename == value);
  252. if (_schemename == value) return;
  253. _schemename = value;
  254. SendPropertyChanged("SchemeName");
  255. }
  256. }
  257. private ImportingSchemeItems _items;
  258. public ImportingSchemeItems Items
  259. {
  260. get
  261. {
  262. Contract.Ensures(_items != null);
  263. if (_items == null) _items = new ImportingSchemeItems();
  264. return _items;
  265. }
  266. }
  267. public override string ToString()
  268. {
  269. return SchemeName;
  270. }
  271. private int _startcol = 1;
  272. /// <summary>
  273. /// начальный столбец в схеме
  274. /// </summary>
  275. public int StartCol
  276. {
  277. get
  278. {
  279. return _startcol;
  280. }
  281. set
  282. {
  283. if (_startcol == value) return;
  284. _startcol = value;
  285. }
  286. }
  287. private int _finishcol = 15;
  288. /// <summary>
  289. /// конечный столбец в схеме
  290. /// </summary>
  291. public int FinishCol
  292. {
  293. get
  294. {
  295. return _finishcol;
  296. }
  297. set
  298. {
  299. if (_finishcol == value) return;
  300. _finishcol = value;
  301. }
  302. }
  303. }
  304. public class DefaultImportingScheme : ImportingScheme
  305. {
  306. private DefaultImportingScheme()
  307. {
  308. SchemeName = "Схема по умолчанию";
  309. Items.AddNewItem(0, "Номер этапа", "num", 0, true);
  310. Items.AddNewItem(0, "Наименование работ", "subject", 2, true);
  311. Items.AddNewItem(0, "Начало", "startsat", 3, false);
  312. Items.AddNewItem(0, "Окончание", "endsat", 4, false);
  313. Items.AddNewItem(0, "Стоимость работ", "price", 5, false);
  314. Items.AddNewItem(0, "Код объекта", "objectcode", -1, false);
  315. Items.AddNewItem(0, "Результаты", "result", -1, false);
  316. Items.AddNewItem(0, "Начало - окончание", "dateinterval", -1, false);
  317. Items.AddNewItem(0, "Соисполнитель", "contributor", -1, false);
  318. }
  319. private static DefaultImportingScheme _scheme;
  320. public static DefaultImportingScheme Scheme
  321. {
  322. get
  323. {
  324. if (_scheme == null)
  325. _scheme = new DefaultImportingScheme();
  326. return _scheme;
  327. }
  328. }
  329. }
  330. }