Ejemplo n.º 1
0
        public ActionResult RespondToBackupRequest(BackupResponse model, List <BackupRequestShiftAndDate> BackupDatesAndShifts)
        {
            var retvalue = true;

            using (var db = new MTCDbContext())
            {
                model.CreatedOn  = DateTime.Now;
                model.CreatedBy  = HttpContext.User.Identity.Name;
                model.ModifiedOn = DateTime.Now;
                model.ModifiedBy = HttpContext.User.Identity.Name;

                db.BackupResponses.Add(model);

                if (model.BackupResponseStatus == BackupResponseStatus.Qualified)
                {
                    if (BackupDatesAndShifts != null)
                    {
                        foreach (var item in BackupDatesAndShifts)
                        {
                            var baDs = db.BackupRequestShiftsAndDates.Find(item.Id);
                            if (baDs == null)
                            {
                                continue;
                            }

                            if (item.AMRequested)
                            {
                                baDs.AMSatisfied = item.AMSatisfied;
                            }

                            if (item.MIDRequested)
                            {
                                baDs.MIDSatisfied = item.MIDSatisfied;
                            }

                            if (item.PMRequested)
                            {
                                baDs.PMSatisfied = item.PMSatisfied;
                            }
                        }
                    }
                }


                db.SaveChanges();

                var br = db.BackupRequests.Find(model.BackupRequestId);
                var backupProviders = db.BackupProviders.ToList();
                var ba = db.BackupAssignments.FirstOrDefault(p => p.BeatId == br.BeatId);

                var toContractor = EmailManager.GetContractorById(br.ContractorId);

                var primaryContractorId   = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.PrimaryBackupBeatId).ContractorId;
                var primaryContractor     = EmailManager.GetContractorById(primaryContractorId);
                var secondaryContractorId = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.SecondaryBackupBeatId).ContractorId;
                var secondaryContractor   = EmailManager.GetContractorById(secondaryContractorId);
                var tertiaryContractorId  = backupProviders.FirstOrDefault(c => c.BackupBeatId == ba.TertiaryBackupBeatId).ContractorId;
                var tertiaryContractor    = EmailManager.GetContractorById(tertiaryContractorId);

                var ccRecipients = new List <MTCEmailRecipient>();
                var toRecipients = new List <MTCEmailRecipient>();

                if (model.BackupResponseStatus == BackupResponseStatus.Declined || model.BackupResponseStatus == BackupResponseStatus.Qualified)
                {
                    #region

                    if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Primary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.PrimaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.PrimaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = secondaryContractorId;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.Secondary;
                    }
                    else if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Secondary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.SecondaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.SecondaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = tertiaryContractorId;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.Tertiary;
                    }
                    else if (br.CurrentBackupContractorAssignmentLevel == BackupAssignmentLevel.Tertiary)
                    {
                        if (model.BackupResponseStatus == BackupResponseStatus.Declined)
                        {
                            br.TertiaryBackupResponseTimeExpiredOrDeclined   = true;
                            br.TertiaryBackupResponseTimeExpiredOrDeclinedOn = DateTime.Now;
                        }

                        br.CurrentBackupContractorId = null;
                        br.CurrentBackupContractorAssignmentLevel = BackupAssignmentLevel.AllBackupOperators;

                        foreach (var backupProvider in backupProviders)
                        {
                            var backupProviderContractor = EmailManager.GetContractorById(backupProvider.ContractorId);
                            ccRecipients.Add(new MTCEmailRecipient
                            {
                                Email = backupProviderContractor.Email,
                                Name  = backupProviderContractor.ContractCompanyName
                            });
                        }
                    }

                    #endregion

                    br.ModifiedBy = HttpContext.User.Identity.Name;
                    br.ModifiedOn = DateTime.Now;

                    if (model.BackupResponseStatus == BackupResponseStatus.Qualified)
                    {
                        //check if maybe now all shifts have been covered. then set status to accepted.

                        var backupDatesAndShifts = db.BackupRequestShiftsAndDates.Where(p => p.BackupRequestId == br.Id).ToList();
                        var allShiftsSatisfied   = true;

                        foreach (var item in backupDatesAndShifts)
                        {
                            if (item.AMSatisfied == false || item.MIDSatisfied == false || item.PMSatisfied == false)
                            {
                                allShiftsSatisfied = false;
                            }
                        }

                        if (allShiftsSatisfied)
                        {
                            model.BackupResponseStatus = BackupResponseStatus.Accepted;
                        }
                    }

                    db.SaveChanges();
                }

                toRecipients.Add(new MTCEmailRecipient
                {
                    Email = toContractor.Email,
                    Name  = toContractor.ContractCompanyName
                });

                ccRecipients.Add(new MTCEmailRecipient {
                    Email = primaryContractor.Email, Name = primaryContractor.ContractCompanyName
                });
                ccRecipients.Add(new MTCEmailRecipient {
                    Email = secondaryContractor.Email, Name = secondaryContractor.ContractCompanyName
                });
                ccRecipients.Add(new MTCEmailRecipient {
                    Email = tertiaryContractor.Email, Name = tertiaryContractor.ContractCompanyName
                });
                ccRecipients.Add(new MTCEmailRecipient
                {
                    Email = Utilities.GetApplicationSettingValue("MTCContactEmail"),
                    Name  = Utilities.GetApplicationSettingValue("MTCContactName")
                });

                EmailManager.SendEmail(toRecipients, EmailManager.BuildBackupResponseSubject(br, model), EmailManager.BuildBackupResponseEmail(br, model), ccRecipients);
            }
            return(Json(retvalue, JsonRequestBehavior.AllowGet));
        }