Ejemplo n.º 1
0
        private void btnDisableAlerts_Click(object sender, EventArgs e)
        {
            bool disableAlert = Convert.ToBoolean(this.btnDisableAlerts.Tag);

            AlertInfo alertInfo = (from alert in EFERTDbUtility.mEFERTDb.AlertInfos
                                   where alert != null && alert.CNICNumber == this.mCNICNumber
                                   select alert).FirstOrDefault();

            if (alertInfo == null)
            {
                alertInfo            = new AlertInfo();
                alertInfo.CNICNumber = this.mCNICNumber;

                if (disableAlert)
                {
                    alertInfo.DisableAlert     = true;
                    alertInfo.DisableAlertDate = DateTime.Now;
                    alertInfo.EnableAlertDate  = DateTime.MaxValue;
                }
                else
                {
                    alertInfo.DisableAlert    = false;
                    alertInfo.EnableAlertDate = DateTime.Now;
                }

                EFERTDbUtility.mEFERTDb.AlertInfos.Add(alertInfo);
            }
            else
            {
                if (disableAlert)
                {
                    alertInfo.DisableAlert     = true;
                    alertInfo.DisableAlertDate = DateTime.Now;
                }
                else
                {
                    alertInfo.DisableAlert    = false;
                    alertInfo.EnableAlertDate = DateTime.Now;
                }

                EFERTDbUtility.mEFERTDb.Entry(alertInfo).State = System.Data.Entity.EntityState.Modified;
            }

            try
            {
                EFERTDbUtility.mEFERTDb.SaveChanges();
            }
            catch (Exception ex)
            {
                EFERTDbUtility.RollBack();

                MessageBox.Show(this, "Some error occurred.\n\n" + EFERTDbUtility.GetInnerExceptionMessage(ex));
                return;
            }
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 3
0
        private void UpdateStatus(string cnicNumber)
        {
            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;
                return;
            }

            if (Form1.mLoggedInUser.IsAdmin)
            {
                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
            {
                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;

            BlockedPersonInfo blockedPerson = null;
            bool blockedUser = false;

            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.tbxCheckInDateTimeIn.Text    = checkedInInfo.DateTimeIn.ToString();
                this.tbxCheckInDateTimeOut.Text   = DateTime.Now.ToString();

                this.tbxCheckInCardNumber.ReadOnly     = true;
                this.tbxCheckInVehicleNumber.ReadOnly  = true;
                this.tbxCheckInCardNumber.BackColor    = System.Drawing.SystemColors.ButtonFace;
                this.tbxCheckInVehicleNumber.BackColor = System.Drawing.SystemColors.ButtonFace;



                if (Form1.mLoggedInUser.IsAdmin)
                {
                    AlertInfo chAlertInfos = (from alert in EFERTDbUtility.mEFERTDb.AlertInfos
                                              where alert != null && alert.CNICNumber == this.mCNICNumber
                                              select alert).FirstOrDefault();

                    bool alertDisabled = false;

                    if (chAlertInfos != null)
                    {
                        alertDisabled = chAlertInfos.DisableAlert;
                    }

                    if (alertDisabled)
                    {
                        this.btnDisableAlerts.Visible = true;
                        this.btnDisableAlerts.Text    = "Enable Alert";
                        this.btnDisableAlerts.Tag     = false;
                    }
                    else
                    {
                        this.btnDisableAlerts.Visible = true;
                        this.btnDisableAlerts.Tag     = true;
                    }
                }
            }
            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.mCardHolderInfo.FirstName, this.mCNICNumber);
                }
                else
                {
                    blockedForm = new BlockedPersonNotificationForm(blockedPerson);
                }


                blockedForm.ShowDialog(this);
            }
        }