PageRenderTime 52ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/CmsData/MemberRules.cs

https://bitbucket.org/mahalowe/bvcms
C# | 290 lines | 110 code | 7 blank | 173 comment | 22 complexity | e48aacac926009732907d4762e35d806 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0, BSD-3-Clause, LGPL-2.1, MPL-2.0-no-copyleft-exception, AGPL-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UtilityExtensions;
  6. using System.Text.RegularExpressions;
  7. using System.Data.Linq;
  8. using System.Xml.Linq;
  9. using System.Data.Linq.SqlClient;
  10. using IronPython.Hosting;
  11. using System.IO;
  12. using CmsData.Codes;
  13. using System.Web;
  14. namespace CmsData
  15. {
  16. public partial class Person
  17. {
  18. public bool FamilyHasPrimaryMemberForMoreThanDays(int days)
  19. {
  20. return Family.People.Any(p =>
  21. p.PositionInFamilyId == PositionInFamily.PrimaryAdult
  22. && p.MemberStatusId == MemberStatusCode.Member
  23. && SqlMethods.DateDiffDay(p.JoinDate, Util.Now) >= days);
  24. }
  25. public void DropAllMemberships(CMSDataContext Db)
  26. {
  27. var list = (from om in Db.OrganizationMembers
  28. where om.PeopleId == PeopleId
  29. select om).ToList();
  30. foreach (var om in list)
  31. om.Drop(Db, true);
  32. }
  33. public string errorReturn;
  34. public string MemberProfileAutomation(CMSDataContext Db)
  35. {
  36. if (Db.Setting("UseMemberProfileAutomation", "true") != "true")
  37. return "ok";
  38. var script = Db.Content("MemberProfileAutomation");
  39. if (script == null)
  40. return "ok";
  41. var path = HttpContext.Current.Server.MapPath("/");
  42. #if DEBUG
  43. var options = new Dictionary<string, object>();
  44. options["Debug"] = true;
  45. var engine = Python.CreateEngine(options);
  46. var paths = engine.GetSearchPaths();
  47. paths.Add(path);
  48. engine.SetSearchPaths(paths);
  49. var sc = engine.CreateScriptSourceFromFile(HttpContext.Current.Server.MapPath("/MembershipAutomation2.py"));
  50. #else
  51. var engine = Python.CreateEngine();
  52. var paths = engine.GetSearchPaths();
  53. paths.Add(path);
  54. engine.SetSearchPaths(paths);
  55. var sc = engine.CreateScriptSourceFromString(script.Body);
  56. #endif
  57. // try
  58. // {
  59. var code = sc.Compile();
  60. var scope = engine.CreateScope();
  61. code.Execute(scope);
  62. dynamic MembershipAutomation = scope.GetVariable("MembershipAutomation");
  63. dynamic m = MembershipAutomation();
  64. var ret = m.Run(Db, this);
  65. //var m = scope.GetVariable("MembershipAutomation");
  66. //dynamic instance = engine.Operations.CreateInstance(m);
  67. //var value = instance.Run(Db, this);
  68. return errorReturn;
  69. // }
  70. // catch (Exception ex)
  71. // {
  72. // return "MemberProfileAutomation script error: " + ex.StackTrace;
  73. // }
  74. }
  75. //public void MemberProfileAutomation0(CMSDataContext Db)
  76. //{
  77. // if (DecisionTypeIdChanged)
  78. // switch (DecisionTypeId ?? 0)
  79. // {
  80. // case DecisionCode.ProfessionForMembership:
  81. // MemberStatusId = MemberStatusCode.Pending;
  82. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  83. // NewMemberClassStatusId = NewMemberClassStatusCode.Pending;
  84. // if (Age <= 12 && Family.People.Any(p =>
  85. // p.PositionInFamilyId == PositionInFamily.PrimaryAdult
  86. // && p.MemberStatusId == MemberStatusCode.Member
  87. // && SqlMethods.DateDiffMonth(p.JoinDate, Util.Now) >= 12))
  88. // BaptismTypeId = BaptismTypeCode.Biological;
  89. // else
  90. // BaptismTypeId = BaptismTypeCode.Original;
  91. // BaptismStatusId = BaptismStatusCode.NotScheduled;
  92. // break;
  93. // case DecisionCode.ProfessionNotForMembership:
  94. // MemberStatusId = MemberStatusCode.NotMember;
  95. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  96. // NewMemberClassStatusId = NewMemberClassStatusCode.NotSpecified;
  97. // if (BaptismStatusId != BaptismStatusCode.Completed)
  98. // {
  99. // BaptismTypeId = BaptismTypeCode.NonMember;
  100. // BaptismStatusId = BaptismStatusCode.NotScheduled;
  101. // }
  102. // break;
  103. // case DecisionCode.Letter:
  104. // MemberStatusId = MemberStatusCode.Pending;
  105. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  106. // NewMemberClassStatusId = NewMemberClassStatusCode.Pending;
  107. // if (BaptismStatusId != BaptismStatusCode.Completed)
  108. // {
  109. // BaptismTypeId = BaptismTypeCode.NotSpecified;
  110. // BaptismStatusId = BaptismStatusCode.NotSpecified;
  111. // }
  112. // break;
  113. // case DecisionCode.Statement:
  114. // MemberStatusId = MemberStatusCode.Pending;
  115. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  116. // NewMemberClassStatusId = NewMemberClassStatusCode.Pending;
  117. // if (BaptismStatusId != BaptismStatusCode.Completed)
  118. // {
  119. // BaptismTypeId = BaptismTypeCode.NotSpecified;
  120. // BaptismStatusId = BaptismStatusCode.NotSpecified;
  121. // }
  122. // break;
  123. // case DecisionCode.StatementReqBaptism:
  124. // MemberStatusId = MemberStatusCode.Pending;
  125. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  126. // NewMemberClassStatusId = NewMemberClassStatusCode.Pending;
  127. // if (BaptismStatusId != BaptismStatusCode.Completed)
  128. // {
  129. // BaptismTypeId = BaptismTypeCode.Required;
  130. // BaptismStatusId = BaptismStatusCode.NotScheduled;
  131. // }
  132. // break;
  133. // case DecisionCode.Cancelled:
  134. // MemberStatusId = MemberStatusCode.NotMember;
  135. // if (NewMemberClassStatusId != NewMemberClassStatusCode.Attended)
  136. // NewMemberClassStatusId = NewMemberClassStatusCode.NotSpecified;
  137. // if (BaptismStatusId != BaptismStatusCode.Completed)
  138. // if (BaptismStatusId != BaptismStatusCode.Completed)
  139. // {
  140. // BaptismTypeId = BaptismTypeCode.NotSpecified;
  141. // BaptismStatusId = BaptismStatusCode.Canceled;
  142. // }
  143. // EnvelopeOptionsId = EnvelopeOptionCode.None;
  144. // break;
  145. // }
  146. // // This section sets join codes
  147. // if (NewMemberClassStatusIdChanged || BaptismStatusIdChanged)
  148. // switch (DecisionTypeId ?? 0)
  149. // {
  150. // case DecisionCode.ProfessionForMembership:
  151. // if (DiscClassStatusCompletedCodes.Contains(NewMemberClassStatusId ?? 0)
  152. // && BaptismStatusId == BaptismStatusCode.Completed)
  153. // {
  154. // MemberStatusId = MemberStatusCode.Member;
  155. // if (BaptismTypeId == BaptismTypeCode.Biological)
  156. // JoinCodeId = JoinTypeCode.BaptismBIO;
  157. // else
  158. // JoinCodeId = JoinTypeCode.BaptismPOF;
  159. // if (NewMemberClassDate.HasValue && BaptismDate.HasValue)
  160. // JoinDate = NewMemberClassDate.Value > BaptismDate.Value ?
  161. // NewMemberClassDate.Value : BaptismDate.Value;
  162. // }
  163. // break;
  164. // case DecisionCode.Letter:
  165. // if (NewMemberClassStatusIdChanged)
  166. // if (DiscClassStatusCompletedCodes.Contains(NewMemberClassStatusId ?? 0)
  167. // || NewMemberClassStatusId == NewMemberClassStatusCode.AdminApproval)
  168. // {
  169. // MemberStatusId = MemberStatusCode.Member;
  170. // JoinCodeId = JoinTypeCode.Letter;
  171. // JoinDate = NewMemberClassDate.HasValue ? NewMemberClassDate : DecisionDate;
  172. // }
  173. // break;
  174. // case DecisionCode.Statement:
  175. // if (NewMemberClassStatusIdChanged)
  176. // if (DiscClassStatusCompletedCodes.Contains(NewMemberClassStatusId ?? 0))
  177. // {
  178. // MemberStatusId = MemberStatusCode.Member;
  179. // JoinCodeId = JoinTypeCode.Statement;
  180. // JoinDate = NewMemberClassDate.HasValue ? NewMemberClassDate : DecisionDate;
  181. // }
  182. // break;
  183. // case DecisionCode.StatementReqBaptism:
  184. // if (DiscClassStatusCompletedCodes.Contains(NewMemberClassStatusId ?? 0)
  185. // && BaptismStatusId == BaptismStatusCode.Completed)
  186. // {
  187. // MemberStatusId = MemberStatusCode.Member;
  188. // JoinCodeId = JoinTypeCode.BaptismSRB;
  189. // if (NewMemberClassDate.HasValue)
  190. // JoinDate = NewMemberClassDate.Value > BaptismDate.Value ?
  191. // NewMemberClassDate.Value : BaptismDate.Value;
  192. // else
  193. // JoinDate = BaptismDate;
  194. // }
  195. // break;
  196. // }
  197. // if (DeceasedDateChanged)
  198. // {
  199. // if (DeceasedDate.HasValue)
  200. // DeceasePerson(Db);
  201. // }
  202. // else if (DropCodeIdChanged)
  203. // {
  204. // switch (DropCodeId)
  205. // {
  206. // case DropTypeCode.Administrative:
  207. // DropMembership(Db);
  208. // break;
  209. // case DropTypeCode.AnotherDenomination:
  210. // DropMembership(Db);
  211. // break;
  212. // case DropTypeCode.Duplicate:
  213. // DropMembership(Db);
  214. // MemberStatusId = MemberStatusCode.NotMember;
  215. // break;
  216. // case DropTypeCode.LetteredOut:
  217. // DropMembership(Db);
  218. // break;
  219. // case DropTypeCode.Other:
  220. // DropMembership(Db);
  221. // break;
  222. // case DropTypeCode.Requested:
  223. // DropMembership(Db);
  224. // break;
  225. // }
  226. // }
  227. // if (NewMemberClassStatusIdChanged
  228. // && NewMemberClassStatusId == NewMemberClassStatusCode.Attended)
  229. // {
  230. // var q = from om in Db.OrganizationMembers
  231. // where om.PeopleId == PeopleId
  232. // where om.Organization.OrganizationName == "Step 1"
  233. // select om;
  234. // foreach (var om in q)
  235. // om.Drop(Db, addToHistory: true);
  236. // }
  237. //}
  238. private void DropMembership(CMSDataContext Db)
  239. {
  240. dropMembership(false, Db);
  241. }
  242. private void DeceasePerson(CMSDataContext Db)
  243. {
  244. dropMembership(true, Db);
  245. }
  246. private void dropMembership(bool Deceased, CMSDataContext Db)
  247. {
  248. if (MemberStatusId == MemberStatusCode.Member)
  249. {
  250. if (Deceased)
  251. DropCodeId = DropTypeCode.Deceased;
  252. MemberStatusId = MemberStatusCode.Previous;
  253. DropDate = Util.Now.Date;
  254. }
  255. if (Deceased)
  256. {
  257. EmailAddress = null;
  258. DoNotCallFlag = true;
  259. DoNotMailFlag = true;
  260. DoNotVisitFlag = true;
  261. }
  262. if (SpouseId.HasValue)
  263. {
  264. var spouse = Db.LoadPersonById(SpouseId.Value);
  265. if (Deceased)
  266. {
  267. spouse.MaritalStatusId = MaritalStatusCode.Widowed;
  268. if (spouse.EnvelopeOptionsId.HasValue)
  269. if (spouse.EnvelopeOptionsId != EnvelopeOptionCode.None)
  270. spouse.EnvelopeOptionsId = EnvelopeOptionCode.Individual;
  271. spouse.ContributionOptionsId = EnvelopeOptionCode.Individual;
  272. }
  273. if (spouse.MemberStatusId == MemberStatusCode.Member)
  274. if (spouse.EnvelopeOptionsId == EnvelopeOptionCode.Joint)
  275. spouse.EnvelopeOptionsId = EnvelopeOptionCode.Individual;
  276. }
  277. EnvelopeOptionsId = EnvelopeOptionCode.None;
  278. var list = OrganizationMembers.ToList();
  279. foreach (var om in list)
  280. om.Drop(Db, addToHistory: true);
  281. }
  282. }
  283. }