PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/CmsWeb/Code/StandardExtraValues.cs

https://github.com/vs06/bvcms
C# | 221 lines | 206 code | 15 blank | 0 comment | 46 complexity | 61b84a2efe0906ae746f231af1228dc3 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Xml.Linq;
  7. using CmsData;
  8. using System.Web.Mvc;
  9. using System.Xml.Serialization;
  10. using System.IO;
  11. using Newtonsoft.Json;
  12. using NPOI.SS.Formula.Functions;
  13. using UtilityExtensions;
  14. namespace CmsWeb.Code
  15. {
  16. public class StandardExtraValues
  17. {
  18. [Serializable]
  19. public class Fields
  20. {
  21. [XmlElement("Field")]
  22. public Field[] fields { get; set; }
  23. }
  24. [Serializable]
  25. public class Field
  26. {
  27. [XmlAttribute]
  28. public string name { get; set; }
  29. [XmlAttribute]
  30. public string type { get; set; }
  31. [XmlAttribute]
  32. public string location { get; set; }
  33. [XmlAttribute]
  34. public string VisibilityRoles { get; set; }
  35. public List<string> Codes { get; set; }
  36. internal int order;
  37. public int peopleid;
  38. public bool nonstandard;
  39. internal PeopleExtra extravalue;
  40. internal static Field AddField(Field f, PeopleExtra v)
  41. {
  42. if (f == null)
  43. {
  44. f = new Field
  45. {
  46. name = v.Field,
  47. nonstandard = true,
  48. peopleid = v.PeopleId,
  49. extravalue = v,
  50. };
  51. f.type = v.StrValue.HasValue() ? "Code"
  52. : v.Data.HasValue() ? "Data"
  53. : v.DateValue.HasValue ? "Date"
  54. : v.IntValue.HasValue ? "Int"
  55. : v.BitValue.HasValue ? "Bit"
  56. : "Code";
  57. }
  58. f.extravalue = v;
  59. return f;
  60. }
  61. public bool UserCanView()
  62. {
  63. if (!VisibilityRoles.HasValue())
  64. return true;
  65. var a = VisibilityRoles.SplitStr(",");
  66. var user = HttpContext.Current.User;
  67. foreach (var role in a)
  68. if (user.IsInRole(role.Trim()))
  69. return true;
  70. return false;
  71. }
  72. public bool UserCanEdit()
  73. {
  74. var user = HttpContext.Current.User;
  75. return user.IsInRole("Edit");
  76. }
  77. public override string ToString()
  78. {
  79. if (extravalue == null && type != "Bits")
  80. return "Click to edit";
  81. switch (type)
  82. {
  83. case "Code":
  84. return extravalue.StrValue;
  85. case "Data":
  86. return extravalue.Data;
  87. case "Date":
  88. return extravalue.DateValue.FormatDate();
  89. case "Bit":
  90. return extravalue.BitValue.ToString();
  91. case "Bits":
  92. {
  93. var q = from e in DbUtil.Db.PeopleExtras
  94. where e.BitValue == true
  95. where e.PeopleId == peopleid
  96. where Codes.Contains(e.Field)
  97. select e.Field;
  98. return string.Join(",", q);
  99. }
  100. case "Int":
  101. if (extravalue.IntValue2.HasValue)
  102. return "{0} {1}".Fmt(extravalue.IntValue, extravalue.IntValue2);
  103. return extravalue.IntValue.ToString();
  104. }
  105. return null;
  106. }
  107. }
  108. public static IEnumerable<Field> GetExtraValues()
  109. {
  110. if (DbUtil.Db.Setting("UseStandardExtraValues", "false") != "true")
  111. return new List<Field>();
  112. var xml = DbUtil.StandardExtraValues();
  113. var sr = new StringReader(xml);
  114. var fields = (new XmlSerializer(typeof(Fields)).Deserialize(sr) as Fields).fields;
  115. if (fields == null)
  116. return new List<Field>();
  117. return fields;
  118. }
  119. public static IEnumerable<Field> GetExtraValues(int PeopleId, string location = "default")
  120. {
  121. var fields = GetExtraValues();
  122. var n = 1;
  123. foreach (var f in fields)
  124. {
  125. f.order = n++;
  126. f.peopleid = PeopleId;
  127. if (f.location == null)
  128. f.location = "default";
  129. }
  130. var exvalues = DbUtil.Db.PeopleExtras.Where(ee => ee.PeopleId == PeopleId).ToList();
  131. var qfields = from f in fields
  132. join v in exvalues on f.name equals v.Field into j
  133. from v in j.DefaultIfEmpty()
  134. where f.location == location || location == null
  135. orderby f.order
  136. select Field.AddField(f, v);
  137. if (location == "default")
  138. {
  139. var qvalues = from v in exvalues
  140. join f in fields on v.Field equals f.name into j
  141. from f in j.DefaultIfEmpty()
  142. where f == null
  143. where !fields.Any(ff => ff.Codes.Any(cc => cc == v.Field))
  144. orderby v.Field
  145. select Field.AddField(f, v);
  146. return qfields.Concat(qvalues);
  147. }
  148. return qfields;
  149. }
  150. public static List<SelectListItem> ExtraValueCodes()
  151. {
  152. var q = from e in DbUtil.Db.PeopleExtras
  153. where e.StrValue != null || e.BitValue != null
  154. group e by new { e.Field, val = e.StrValue ?? (e.BitValue == true ? "1" : "0") }
  155. into g
  156. select g.Key;
  157. var list = q.ToList();
  158. var ev = GetExtraValues();
  159. var q2 = from e in list
  160. let f = ev.SingleOrDefault(ff => ff.name == e.Field)
  161. where f == null || f.UserCanView()
  162. orderby e.Field, e.val
  163. select new SelectListItem()
  164. {
  165. Text = e.Field + ":" + e.val,
  166. Value = e.Field + ":" + e.val,
  167. };
  168. return q2.ToList();
  169. }
  170. public static List<SelectListItem> FamilyExtraValueCodes()
  171. {
  172. var q = from e in DbUtil.Db.FamilyExtras
  173. where e.StrValue != null || e.BitValue != null
  174. group e by new { e.Field, val = e.StrValue ?? (e.BitValue == true ? "1" : "0") }
  175. into g
  176. select g.Key;
  177. var list = q.ToList();
  178. var ev = GetExtraValues();
  179. var q2 = from e in list
  180. let f = ev.SingleOrDefault(ff => ff.name == e.Field)
  181. where f == null || f.UserCanView()
  182. orderby e.Field, e.val
  183. select new SelectListItem()
  184. {
  185. Text = e.Field + ":" + e.val,
  186. Value = e.Field + ":" + e.val,
  187. };
  188. return q2.ToList();
  189. }
  190. public static Dictionary<string, string> Codes(string name)
  191. {
  192. var f = GetExtraValues().Single(ee => ee.name == name);
  193. return f.Codes.ToDictionary(ee => ee, ee => ee);
  194. }
  195. public static Dictionary<string, bool> ExtraValueBits(string name, int PeopleId)
  196. {
  197. var f = GetExtraValues().Single(ee => ee.name == name);
  198. var list = DbUtil.Db.PeopleExtras.Where(pp => pp.PeopleId == PeopleId && f.Codes.Contains(pp.Field)).ToList();
  199. var q = from c in f.Codes
  200. join e in list on c equals e.Field into j
  201. from e in j.DefaultIfEmpty()
  202. select new { value = c, selected = (e != null && (e.BitValue ?? false)) };
  203. return q.ToDictionary(ee => ee.value, ee => ee.selected);
  204. }
  205. }
  206. }