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); } }
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."); } }