public ActionResult ScanTicket(string wandtarget, int MeetingId, bool?requireMember, bool?requireRegistered) { var d = new ScanTicketInfo { person = new Person() }; int pid = 0; if (wandtarget.StartsWith("M.")) { var a = wandtarget.Split('.'); if (a.Length != 3) { return(View(d.AddError(ScanTicketInfo.Error.noorg))); } var oid = a[1].ToInt2(); pid = a[2].ToInt(); d.person = DbUtil.Db.LoadPersonById(pid); if (!oid.HasValue) { return(View(d.AddError(ScanTicketInfo.Error.noorg))); } var tm = DbUtil.Db.Meetings.Single(mm => mm.MeetingId == MeetingId); var mq = from m in DbUtil.Db.Meetings where m.OrganizationId == a[1].ToInt() where m.MeetingDate.Value.Date == tm.MeetingDate.Value.Date select m; var mo = mq.FirstOrDefault(); if (mo == null) { return(View(d.AddError(ScanTicketInfo.Error.nomeeting))); } d.meeting = mo; MeetingId = mo.MeetingId; d.SwitchOrg = true; d.attended = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == pid && aa.AttendanceFlag == true); } else { pid = wandtarget.ToInt(); var q = from person in DbUtil.Db.People where person.PeopleId == pid let meeting = DbUtil.Db.Meetings.SingleOrDefault(mm => mm.MeetingId == MeetingId) let attended = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == pid && aa.AttendanceFlag == true) let orgmember = DbUtil.Db.OrganizationMembers.SingleOrDefault(om => om.OrganizationId == meeting.OrganizationId && om.PeopleId == pid) select new ScanTicketInfo { person = person, meeting = meeting, attended = attended, orgmember = orgmember, family = from m in person.Family.People where m.PeopleId != pid let att = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == m.PeopleId && aa.AttendanceFlag == true) let orgmem = DbUtil.Db.OrganizationMembers.SingleOrDefault(om => om.OrganizationId == meeting.OrganizationId && om.PeopleId == m.PeopleId) select new FamilyMemberInfo() { PeopleId = m.PeopleId, person = m, attended = att != null, orgmember = orgmem != null, } }; var d2 = q.SingleOrDefault(); if (d2 == null) { return(View(d.AddError(ScanTicketInfo.Error.noperson))); } d = d2; } d.error = ScanTicketInfo.Error.none; if (d.attended != null && d.attended.AttendanceFlag == true) { d.error = ScanTicketInfo.Error.alreadymarked; } else if (requireMember == true && d.orgmember == null) { d.error = ScanTicketInfo.Error.notmember; } else if (requireRegistered == true && (d.attended == null || d.attended.Commitment == AttendCommitmentCode.Attending)) { d.error = ScanTicketInfo.Error.notregistered; } var ret = ""; if (d.error == ScanTicketInfo.Error.none) { ret = Attend.RecordAttendance(DbUtil.Db, pid, MeetingId, true); if (ret.Contains("already")) { d.error = ScanTicketInfo.Error.alreadymarkedelsewhere; d.message = ret; } else { DbUtil.Db.UpdateMeetingCounters(MeetingId); DbUtil.Db.Refresh(RefreshMode.OverwriteCurrentValues, d.meeting); } } return(View(d)); }
public ActionResult ScanTicket(string wandtarget, int MeetingId, bool? requireMember, bool? requireRegistered) { var d = new ScanTicketInfo {person = new Person()}; var pid = 0; if (wandtarget.StartsWith("M.")) { var a = wandtarget.Split('.'); if (a.Length != 3) return View(d.AddError(ScanTicketInfo.Error.noorg)); var oid = a[1].ToInt2(); pid = a[2].ToInt(); d.person = DbUtil.Db.LoadPersonById(pid); if (!oid.HasValue) return View(d.AddError(ScanTicketInfo.Error.noorg)); var tm = DbUtil.Db.Meetings.Single(mm => mm.MeetingId == MeetingId); var mq = from m in DbUtil.Db.Meetings where m.OrganizationId == a[1].ToInt() where m.MeetingDate.Value.Date == tm.MeetingDate.Value.Date select m; var mo = mq.FirstOrDefault(); if (mo == null) return View(d.AddError(ScanTicketInfo.Error.nomeeting)); d.meeting = mo; MeetingId = mo.MeetingId; d.SwitchOrg = true; d.attended = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == pid && aa.AttendanceFlag); } else { pid = wandtarget.ToInt(); var q = from person in DbUtil.Db.People where person.PeopleId == pid let meeting = DbUtil.Db.Meetings.SingleOrDefault(mm => mm.MeetingId == MeetingId) let attended = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == pid && aa.AttendanceFlag) let orgmember = DbUtil.Db.OrganizationMembers.SingleOrDefault(om => om.OrganizationId == meeting.OrganizationId && om.PeopleId == pid) select new ScanTicketInfo { person = person, meeting = meeting, attended = attended, orgmember = orgmember, family = from m in person.Family.People where m.PeopleId != pid let att = DbUtil.Db.Attends.SingleOrDefault(aa => aa.MeetingId == MeetingId && aa.PeopleId == m.PeopleId && aa.AttendanceFlag) let orgmem = DbUtil.Db.OrganizationMembers.SingleOrDefault(om => om.OrganizationId == meeting.OrganizationId && om.PeopleId == m.PeopleId) select new FamilyMemberInfo { PeopleId = m.PeopleId, person = m, attended = att != null, orgmember = orgmem != null } }; var d2 = q.SingleOrDefault(); if (d2 == null) return View(d.AddError(ScanTicketInfo.Error.noperson)); d = d2; } d.error = ScanTicketInfo.Error.none; if (d.attended != null && d.attended.AttendanceFlag) d.error = ScanTicketInfo.Error.alreadymarked; else if (requireMember == true && d.orgmember == null) d.error = ScanTicketInfo.Error.notmember; else if (requireRegistered == true && (d.attended == null || d.attended.Commitment == AttendCommitmentCode.Attending)) d.error = ScanTicketInfo.Error.notregistered; var ret = ""; if (d.error == ScanTicketInfo.Error.none) { ret = Attend.RecordAttendance(DbUtil.Db, pid, MeetingId, true); if (ret.Contains("already")) { d.error = ScanTicketInfo.Error.alreadymarkedelsewhere; d.message = ret; } else { DbUtil.Db.UpdateMeetingCounters(MeetingId); DbUtil.Db.Refresh(RefreshMode.OverwriteCurrentValues, d.meeting); } } return View(d); }