Пример #1
0
        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));
        }
Пример #2
0
        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);
        }