Пример #1
0
        private void UpdateStatus(string cnicNumber, bool isNew = true)
        {
            bool blockedUser = false;
            BlockedPersonInfo blockedPerson = null;

            if (string.IsNullOrEmpty(cnicNumber))
            {
                this.btnCheckIn.Enabled         = false;
                this.btnCheckOut.Enabled        = false;
                this.tbxBlockedBy.ReadOnly      = true;
                this.tbxBlockedReason.ReadOnly  = true;
                this.tbxBlockedBy.BackColor     = System.Drawing.SystemColors.ButtonFace;
                this.tbxBlockedReason.BackColor = System.Drawing.SystemColors.ButtonFace;
                this.lblVisitorStatus.Text      = "Invalid User";
                this.lblVisitorStatus.BackColor = Color.Red;
                this.btnBlock.Enabled           = false;
                this.btnUnBlock.Enabled         = false;
                this.cbxVFCategory.Enabled      = false;
                return;
            }

            if (Form1.mLoggedInUser.IsAdmin)
            {
                this.cbxVFCategory.Enabled      = true;
                this.btnBlock.Visible           = true;
                this.btnUnBlock.Visible         = true;
                this.tbxBlockedBy.ReadOnly      = false;
                this.tbxBlockedReason.ReadOnly  = false;
                this.tbxBlockedBy.BackColor     = System.Drawing.Color.White;
                this.tbxBlockedReason.BackColor = System.Drawing.Color.White;
            }
            else
            {
                if (isNew)
                {
                    this.cbxVFCategory.Enabled = true;
                }
                else
                {
                    this.cbxVFCategory.Enabled = false;
                }
                this.btnBlock.Visible           = false;
                this.btnUnBlock.Visible         = false;
                this.tbxBlockedBy.ReadOnly      = true;
                this.tbxBlockedReason.ReadOnly  = true;
                this.tbxBlockedBy.BackColor     = System.Drawing.SystemColors.ButtonFace;
                this.tbxBlockedReason.BackColor = System.Drawing.SystemColors.ButtonFace;
            }

            this.mCNICNumber = cnicNumber;

            if (this.mBlocks.Exists(blocked => blocked.Blocked && blocked.CNICNumber == this.mCNICNumber))
            {
                blockedUser   = true;
                blockedPerson = this.mBlocks.Find(blocked => blocked.Blocked && blocked.CNICNumber == this.mCNICNumber);

                this.UpdateLayoutForBlockedPerson(blockedPerson);
            }
            else
            {
                this.btnUnBlock.Enabled         = false;
                this.tbxBlockedBy.Text          = string.Empty;
                this.tbxBlockedReason.Text      = string.Empty;
                this.lblVisitorStatus.Text      = "Allowed";
                this.lblVisitorStatus.BackColor = Color.Green;

                this.tbxBlockedBy.ReadOnly     = false;
                this.tbxBlockedReason.ReadOnly = false;

                this.tbxBlockedBy.BackColor     = System.Drawing.Color.White;
                this.tbxBlockedReason.BackColor = System.Drawing.Color.White;

                this.tbxUnBlockedBy.ReadOnly   = true;
                this.tbxUnblockReason.ReadOnly = true;

                this.tbxUnBlockedBy.BackColor   = System.Drawing.SystemColors.ButtonFace;
                this.tbxUnblockReason.BackColor = System.Drawing.SystemColors.ButtonFace;

                if (this.mBlocks.Count > 0)
                {
                    BlockedPersonInfo lastBlockedInfo = this.mBlocks.Last();

                    this.tbxUnBlockedBy.Text   = lastBlockedInfo.UnBlockedBy;
                    this.tbxUnBlockTime.Text   = lastBlockedInfo.UnBlockTime.ToString();
                    this.tbxUnblockReason.Text = lastBlockedInfo.UnBlockedReason;
                }
            }

            if (this.mCheckIns.Exists(checkedIn => checkedIn.CheckedIn && checkedIn.CNICNumber == this.mCNICNumber))
            {
                CheckInAndOutInfo checkedInInfo = this.mCheckIns.Find(checkedIn => checkedIn.CheckedIn && checkedIn.CNICNumber == this.mCNICNumber);
                this.btnCheckIn.Enabled  = false;
                this.btnCheckOut.Enabled = true && !blockedUser;

                this.tbxCheckInCardNumber.Text      = checkedInInfo.CardNumber;
                this.tbxCheckInVehicleNumber.Text   = checkedInInfo.VehicleNmuber;
                this.nuNoOfMaleGuest.Value          = checkedInInfo.NoOfMaleGuest;
                this.nuNoOfFemaleGuest.Value        = checkedInInfo.NoOfFemaleGuest;
                this.numCheckInDurationOfStay.Value = checkedInInfo.DurationOfStay;
                this.nuCheckInNoOfChildren.Value    = checkedInInfo.NoOfChildren;
                this.cbxAreaOfVisit.SelectedItem    = checkedInInfo.AreaOfVisit;
                this.tbxCheckInHostName.Text        = checkedInInfo.HostName;
                this.tbxCheckInDateTimeIn.Text      = checkedInInfo.DateTimeIn.ToString();
                this.tbxCheckInDateTimeOut.Text     = DateTime.Now.ToString();

                this.tbxCheckInCardNumber.ReadOnly     = true;
                this.tbxCheckInVehicleNumber.ReadOnly  = true;
                this.nuNoOfMaleGuest.ReadOnly          = true;
                this.nuNoOfFemaleGuest.ReadOnly        = true;
                this.numCheckInDurationOfStay.ReadOnly = true;
                this.nuCheckInNoOfChildren.ReadOnly    = true;
                this.cbxAreaOfVisit.Enabled            = false;
                this.tbxCheckInHostName.ReadOnly       = true;

                this.tbxCheckInCardNumber.BackColor     = System.Drawing.SystemColors.ButtonFace;
                this.tbxCheckInVehicleNumber.BackColor  = System.Drawing.SystemColors.ButtonFace;
                this.nuNoOfMaleGuest.BackColor          = System.Drawing.SystemColors.ButtonFace;
                this.nuNoOfFemaleGuest.BackColor        = System.Drawing.SystemColors.ButtonFace;
                this.numCheckInDurationOfStay.BackColor = System.Drawing.SystemColors.ButtonFace;
                this.nuCheckInNoOfChildren.BackColor    = System.Drawing.SystemColors.ButtonFace;
                this.tbxCheckInHostName.BackColor       = System.Drawing.SystemColors.ButtonFace;
            }
            else
            {
                if (!blockedUser)
                {
                    List <CategoryInfo> categories = new List <CategoryInfo>();
                    bool isCheckLimit = true;

                    if (this.mCheckIns.Count > 0)
                    {
                        string blockinfo = CategoryBlockCriteria.No.ToString();
                        if (SearchForm.mIsPlant)
                        {
                            categories = (from cat in EFERTDbUtility.mEFERTDb.CategoryInfo
                                          where cat != null && cat.CategoryBlockCriteria == blockinfo && (cat.CategoryLocation == CategoryLocation.Plant.ToString() || cat.CategoryLocation == CategoryLocation.Any.ToString())
                                          select cat).ToList();
                        }
                        else
                        {
                            categories = (from cat in EFERTDbUtility.mEFERTDb.CategoryInfo
                                          where cat != null && cat.CategoryBlockCriteria == blockinfo && (cat.CategoryLocation == CategoryLocation.Colony.ToString() || cat.CategoryLocation == CategoryLocation.Any.ToString())
                                          select cat).ToList();
                        }

                        CheckInAndOutInfo last = this.mCheckIns.Last();

                        bool catExist = categories.Exists(cat => cat.CategoryName == last.Category);

                        if (catExist)
                        {
                            isCheckLimit = !catExist;
                        }
                    }

                    LimitStatus limitStatus = LimitStatus.Allowed;

                    if (isCheckLimit)
                    {
                        limitStatus = EFERTDbUtility.CheckIfUserCheckedInLimitReached(this.mCheckIns, this.mBlocks);
                    }

                    if (limitStatus == LimitStatus.LimitReached)
                    {
                        blockedPerson = this.BlockPerson(EFERTDbUtility.CONST_SYSTEM_BLOCKED_BY, EFERTDbUtility.CONST_SYSTEM_LIMIT_REACHED_REASON);

                        if (blockedPerson != null)
                        {
                            this.UpdateLayoutForBlockedPerson(blockedPerson);

                            blockedUser = true;
                        }
                        //this.btnCheckIn.Enabled = false;
                        //this.btnCheckOut.Enabled = false;
                        //this.tbxBlockedBy.Text = "Admin";
                        //this.tbxBlockedReason.Text = "You have reached maximum limit of temporary check in.";
                        //this.lblVisitorStatus.Text = "Blocked";
                        //this.lblVisitorStatus.BackColor = Color.Red;
                        //this.btnBlock.Enabled = false;

                        //this.tbxBlockedBy.ReadOnly = true;
                        //this.tbxBlockedReason.ReadOnly = true;

                        //this.tbxBlockedBy.BackColor = System.Drawing.SystemColors.ButtonFace;
                        //this.tbxBlockedReason.BackColor = System.Drawing.SystemColors.ButtonFace;
                    }
                    else
                    {
                        if (limitStatus == LimitStatus.EmailAlerted)
                        {
                            if (Form1.mLoggedInUser.IsAdmin)
                            {
                                this.btnDisableAlerts.Visible = true;
                                this.btnDisableAlerts.Tag     = true;
                            }
                        }
                        else if (limitStatus == LimitStatus.EmailAlertDisabled)
                        {
                            if (Form1.mLoggedInUser.IsAdmin)
                            {
                                this.btnDisableAlerts.Visible = true;
                                this.btnDisableAlerts.Text    = "Enable Alert";
                                this.btnDisableAlerts.Tag     = false;
                            }
                        }

                        this.btnCheckIn.Enabled        = true && !blockedUser;
                        this.btnCheckOut.Enabled       = false;
                        this.tbxCheckInDateTimeIn.Text = DateTime.Now.ToString();
                    }
                }
            }

            if (blockedUser)
            {
                this.tbxCheckInCardNumber.ReadOnly     = true;
                this.tbxCheckInVehicleNumber.ReadOnly  = true;
                this.tbxCheckInCardNumber.BackColor    = System.Drawing.SystemColors.ButtonFace;
                this.tbxCheckInVehicleNumber.BackColor = System.Drawing.SystemColors.ButtonFace;

                BlockedPersonNotificationForm blockedForm = null;
                if (blockedPerson == null)
                {
                    blockedForm = new BlockedPersonNotificationForm(this.mVisitor.FirstName, this.mCNICNumber);
                }
                else
                {
                    blockedForm = new BlockedPersonNotificationForm(blockedPerson);
                }


                blockedForm.ShowDialog(this);
            }
        }
Пример #2
0
        public static LimitStatus CheckIfUserCheckedInLimitReached(List <CheckInAndOutInfo> checkIns, List <BlockedPersonInfo> blocks, bool sendEmail = true)
        {
            LimitStatus   limitStatus = LimitStatus.Allowed;
            SystemSetting setting     = EFERTDbUtility.mEFERTDb.SystemSetting.FirstOrDefault();

            int daysToEmailNotification = setting == null ? 70 : setting.DaysToEmailNotification;
            int daysToBlock             = setting == null ? 90 : setting.DaysToBlockUser;

            if (checkIns.Count > 0)
            {
                CheckInAndOutInfo last = checkIns.Last();

                if (last.CheckedIn)
                {
                    limitStatus = LimitStatus.CurrentlyCheckIn;
                }
                else
                {
                    //system deplymenrt date is 1/jan/2017 requirement is get user yearly report
                    DateTime fromDate = new DateTime(2018, 04, 1);
                    DateTime toDate   = DateTime.Now;

                    BlockedPersonInfo lastBlockedPerson = (from block in blocks
                                                           where block != null &&
                                                           block.BlockedTime >= fromDate &&
                                                           block.BlockedTime < toDate &&
                                                           !block.Blocked &&
                                                           block.BlockedBy == CONST_SYSTEM_BLOCKED_BY
                                                           select block).LastOrDefault();

                    if (lastBlockedPerson != null)
                    {
                        fromDate = lastBlockedPerson.UnBlockTime;
                    }

                    checkIns = (from checkin in checkIns
                                where checkin != null && checkin.DateTimeIn >= fromDate && checkin.DateTimeIn < toDate
                                select checkin).ToList();

                    if (checkIns.Count == 0)
                    {
                        return(limitStatus);
                    }

                    string name, cnic = string.Empty;

                    if (last.CardHolderInfos != null)
                    {
                        name = last.CardHolderInfos.FirstName;
                        cnic = last.CardHolderInfos.CNICNumber;
                    }
                    else if (last.Visitors != null)
                    {
                        name = last.Visitors.FirstName;
                        cnic = last.Visitors.CNICNumber;
                    }
                    else
                    {
                        name = last.DailyCardHolders.FirstName;
                        cnic = last.DailyCardHolders.CNICNumber;
                    }

                    List <AlertInfo> chAlertInfos = (from alert in EFERTDbUtility.mEFERTDb.AlertInfos
                                                     where alert != null && alert.CNICNumber == cnic
                                                     select alert).ToList();

                    DateTime  alertEnableDate = DateTime.MaxValue;
                    bool      alertEnabled    = true;
                    AlertInfo lastAlertInfo   = null;

                    if (chAlertInfos != null && chAlertInfos.Count > 0)
                    {
                        lastAlertInfo = chAlertInfos.Last();

                        if (lastAlertInfo.DisableAlert)
                        {
                            alertEnabled = false;
                        }
                        else
                        {
                            alertEnableDate = lastAlertInfo.EnableAlertDate;
                        }
                    }


                    CheckInAndOutInfo previousCheckIn = checkIns[0];
                    bool isSameDay = last.DateTimeIn.Date == DateTime.Now.Date;

                    if (previousCheckIn != null)
                    {
                        int      count = 1;
                        DateTime previousDateTimeIn = previousCheckIn.DateTimeIn;

                        for (int i = 1; i < checkIns.Count; i++)
                        {
                            CheckInAndOutInfo CurrentCheckIn = checkIns[i];

                            DateTime currDateTimeIn = CurrentCheckIn.DateTimeIn;

                            TimeSpan timeDiff = currDateTimeIn.Date - previousDateTimeIn.Date;



                            //bool isContinous = timeDiff.Days == 1 || timeDiff.Days == 2 && currDateTimeIn.DayOfWeek == DayOfWeek.Monday;

                            if (timeDiff.Days >= 1)
                            {
                                count++;
                            }
                            //else
                            //{
                            //    if (currDateTimeIn.Date != previousDateTimeIn.Date)
                            //    {
                            //        count = 1;
                            //    }

                            //}

                            previousDateTimeIn = currDateTimeIn;
                        }

                        if (count >= daysToEmailNotification)
                        {
                            if (count >= daysToBlock && !isSameDay) //== to change >= when add category in checkins
                            {
                                limitStatus = LimitStatus.LimitReached;
                            }
                            else
                            {
                                if (alertEnabled)
                                {
                                    if (sendEmail)
                                    {
                                        List <EmailAddress> toAddresses = new List <EmailAddress>();

                                        if (EFERTDbUtility.mEFERTDb.EmailAddresses != null)
                                        {
                                            toAddresses = (from email in EFERTDbUtility.mEFERTDb.EmailAddresses
                                                           where email != null
                                                           select email).ToList();

                                            foreach (EmailAddress toAddress in toAddresses)
                                            {
                                                SendMail(setting, toAddress.Email, toAddress.Name, name, cnic);
                                            }
                                        }
                                    }


                                    limitStatus = LimitStatus.EmailAlerted;
                                }
                                else
                                {
                                    limitStatus = LimitStatus.EmailAlertDisabled;
                                }
                            }
                        }
                        else
                        {
                            limitStatus = LimitStatus.Allowed;
                        }
                    }
                }
            }

            return(limitStatus);
        }
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            this.mLstCardHolders = new Dictionary <string, List <CardHolderReportInfo> >();

            var lstCheckedInChls = (from checkIn in EFERTDbUtility.mEFERTDb.CheckedInInfos
                                    where checkIn != null
                                    select new {
                CardHolderId = checkIn.CardHolderId,
                DailyCardHolderId = checkIn.DailyCardHolderId,
                VisitorId = checkIn.VisitorId
            }).Distinct().ToList();

            List <int> cardHolderIds = (from checkedInChl in lstCheckedInChls
                                        where checkedInChl != null && checkedInChl.CardHolderId != null
                                        select Convert.ToInt32(checkedInChl.CardHolderId)).ToList();

            List <int> dailyCardHolderIds = (from checkedInChl in lstCheckedInChls
                                             where checkedInChl != null && checkedInChl.DailyCardHolderId != null
                                             select Convert.ToInt32(checkedInChl.DailyCardHolderId)).ToList();

            List <int> visitorIds = (from checkedInChl in lstCheckedInChls
                                     where checkedInChl != null && checkedInChl.DailyCardHolderId != null
                                     select Convert.ToInt32(checkedInChl.DailyCardHolderId)).ToList();

            List <EFERTDb.CardHolderInfo> chls = (from chl in EFERTDbUtility.mEFERTDb.CardHolders
                                                  where chl != null && cardHolderIds.Contains(chl.CardHolderId)
                                                  select chl).ToList();

            List <DailyCardHolder> dailyChls = (from dailychl in EFERTDbUtility.mEFERTDb.DailyCardHolders
                                                where dailychl != null && dailyCardHolderIds.Contains(dailychl.DailyCardHolderId)
                                                select dailychl).ToList();

            List <VisitorCardHolder> visitorChls = (from visitor in EFERTDbUtility.mEFERTDb.Visitors
                                                    where visitor != null && visitorIds.Contains(visitor.VisitorId)
                                                    select visitor).ToList();


            foreach (EFERTDb.CardHolderInfo cardHolder in chls)
            {
                int daysCount = 0;

                LimitStatus limitStatus = EFERTDbUtility.CheckIfUserCheckedInLimitReached(cardHolder.CheckInInfos, cardHolder.BlockingInfos, ref daysCount, false);

                if (limitStatus == LimitStatus.LimitReached || limitStatus == LimitStatus.EmailAlerted)
                {
                    string category = cardHolder.ConstractorInfo;
                    category = string.IsNullOrEmpty(category) ? "Unknown" : category;
                    string firstName     = cardHolder.FirstName;
                    string cnicNumber    = cardHolder.CNICNumber;
                    string companyName   = cardHolder.Company.CompanyName;
                    string blockedStatus = limitStatus == LimitStatus.LimitReached? "Blocked" : "Alarmed";


                    if (this.mLstCardHolders.ContainsKey(category))
                    {
                        this.mLstCardHolders[category].Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });
                    }
                    else
                    {
                        List <CardHolderReportInfo> lstChls = new List <CardHolderReportInfo>();
                        lstChls.Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });


                        this.mLstCardHolders.Add(category, lstChls);
                    }
                }
            }

            foreach (EFERTDb.DailyCardHolder dailyCardHolder in dailyChls)
            {
                int daysCount = 0;

                LimitStatus limitStatus = EFERTDbUtility.CheckIfUserCheckedInLimitReached(dailyCardHolder.CheckInInfos, dailyCardHolder.BlockingInfos, ref daysCount, false);

                if (limitStatus == LimitStatus.LimitReached || limitStatus == LimitStatus.EmailAlerted)
                {
                    string category = dailyCardHolder.ConstractorInfo;
                    category = string.IsNullOrEmpty(category) ? "Unknown" : category;
                    string firstName     = dailyCardHolder.FirstName;
                    string cnicNumber    = dailyCardHolder.CNICNumber;
                    string companyName   = dailyCardHolder.CompanyName;
                    string blockedStatus = limitStatus == LimitStatus.LimitReached ? "Blocked" : "Alarmed";


                    if (this.mLstCardHolders.ContainsKey(category))
                    {
                        this.mLstCardHolders[category].Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });
                    }
                    else
                    {
                        List <CardHolderReportInfo> lstChls = new List <CardHolderReportInfo>();
                        lstChls.Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });


                        this.mLstCardHolders.Add(category, lstChls);
                    }
                }
            }

            foreach (EFERTDb.VisitorCardHolder visitor in visitorChls)
            {
                int daysCount = 0;

                LimitStatus limitStatus = EFERTDbUtility.CheckIfUserCheckedInLimitReached(visitor.CheckInInfos, visitor.BlockingInfos, ref daysCount, false);

                if (limitStatus == LimitStatus.LimitReached || limitStatus == LimitStatus.EmailAlerted)
                {
                    string category = visitor.VisitorInfo;
                    category = string.IsNullOrEmpty(category) ? "Unknown" : category;
                    string firstName     = visitor.FirstName;
                    string cnicNumber    = visitor.CNICNumber;
                    string companyName   = visitor.CompanyName;
                    string blockedStatus = limitStatus == LimitStatus.LimitReached ? "Blocked" : "Alarmed";


                    if (this.mLstCardHolders.ContainsKey(category))
                    {
                        this.mLstCardHolders[category].Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });
                    }
                    else
                    {
                        List <CardHolderReportInfo> lstChls = new List <CardHolderReportInfo>();
                        lstChls.Add(new CardHolderReportInfo()
                        {
                            FirstName       = firstName,
                            CNICNumber      = cnicNumber,
                            BlockedStatus   = blockedStatus,
                            Category        = category,
                            Company         = companyName,
                            TotalDaysCkekin = daysCount
                        });


                        this.mLstCardHolders.Add(category, lstChls);
                    }
                }
            }

            if (this.mLstCardHolders != null && this.mLstCardHolders.Count > 0)
            {
                this.saveFileDialog1.ShowDialog(this);
            }
            else
            {
                MessageBox.Show(this, "No data exist on current selected date range.");
            }
        }