public static IDictionary <string, string> GetConfigurationSetting()
        {
            IDictionary <string, string> Configurations = new Dictionary <string, string>();

            try
            {
                using (var context = new PickeringsContext())
                {
                    var ConfigurationSetting = context.ConfigurationSettings.ToList <ConfigurationSetting>();
                    Configurations.Add("PickeringsEmailID", ConfigurationSetting.Where(p => p.Name == "PickeringsEmailID").FirstOrDefault().Value);
                    Configurations.Add("PickeringsEmailPassword", ConfigurationSetting.Where(p => p.Name == "PickeringsEmailPassword").FirstOrDefault().Value);
                    Configurations.Add("ToAddress", ConfigurationSetting.Where(p => p.Name == "ToAJGEmailAddress").FirstOrDefault().Value);
                    Configurations.Add("SmtpClient", ConfigurationSetting.Where(p => p.Name == "SmtpClient").FirstOrDefault().Value);
                    Configurations.Add("PortId", ConfigurationSetting.Where(p => p.Name == "PortId").FirstOrDefault().Value);
                    Configurations.Add("EmailToAJGrecoveryPath", ConfigurationSetting.Where(p => p.Name == "EmailToAJGrecoveryPath").FirstOrDefault().Value);
                    Configurations.Add("EmailToInitiatorRecoveryPath", ConfigurationSetting.Where(p => p.Name == "EmailToInitiatorRecoveryPath").FirstOrDefault().Value);
                    Configurations.Add("DatabaseRecoveryPath", ConfigurationSetting.Where(p => p.Name == "DatabaseRecoveryPath").FirstOrDefault().Value);
                }
            }

            catch (Exception ex)
            {
                WriteCustomErrorLog.WriteLog("Database error while fetching configuration settings");
                throw new Exception(ex.Message);
            }

            return(Configurations);
        }
        public static ClaimAdvice StoreClaimAdvice(ClaimAdvice claimAdvice, List <string> filePaths, string databaseRecoveryPath)
        {
            try
            {
                int isSaved;
                using (var context = new PickeringsContext())
                {
                    context.ClaimAdvices.Add(claimAdvice);
                    isSaved = context.SaveChanges();
                    claimAdvice.ReferenceNumber = "PCAF" + claimAdvice.id;
                    context.SaveChanges();
                }

                if (isSaved == 0)
                {
                    WriteCustomErrorLog.WriteLog("An error occured while saving claim advice - Email-" + claimAdvice.ContactEmail.ToString());
                    CsvGenerator.SaveAsCsV(claimAdvice, @databaseRecoveryPath, filePaths, true);
                }
            }
            catch (Exception ex)
            {
                WriteCustomErrorLog.WriteLog("An error occured while saving claim advice - Email-" + claimAdvice.ContactEmail.ToString());
                CsvGenerator.SaveAsCsV(claimAdvice, @databaseRecoveryPath, filePaths, true);

                if (filePaths.Count > 0)
                {
                    string serverPath = Path.GetDirectoryName(filePaths[0]);
                    new FileHandler().DeleteFiles(serverPath);
                }

                throw new Exception(ex.Message);
            }

            return(claimAdvice);
        }
        public void SendMail(List <string> attachmentFilesPath, ClaimAdvice claimAdvice, IDictionary <string, string> Configurations)
        {
            string[] emailBodys     = HtmlTableGenerator.CreateHtmlMail(claimAdvice);
            bool     mailSentStatus = EmailSender.SendMail(Configurations, emailBodys[0], "Pickerings Claim Submission – Reference Number " + claimAdvice.ReferenceNumber, attachmentFilesPath);

            if (!mailSentStatus)
            {
                WriteCustomErrorLog.WriteLog("Email failed to AJG - Ref # : " + claimAdvice.ReferenceNumber.ToString());
                CsvGenerator.SaveAsCsV(claimAdvice, @Configurations["EmailToAJGrecoveryPath"], attachmentFilesPath);
            }

            Configurations["ToAddress"] = claimAdvice.ContactEmail;
            mailSentStatus = EmailSender.SendMail(Configurations, emailBodys[1], "Pickerings Claim Submission – Reference Number " + claimAdvice.ReferenceNumber);
            if (!mailSentStatus)
            {
                WriteCustomErrorLog.WriteLog("Email failed to initiator - Ref # : " + claimAdvice.ReferenceNumber.ToString());
                CsvGenerator.SaveAsCsV(claimAdvice, @Configurations["EmailToInitiatorRecoveryPath"], attachmentFilesPath);
            }

            if (attachmentFilesPath.Count > 0)
            {
                string serverPath = Path.GetDirectoryName(attachmentFilesPath[0]);
                new FileHandler().DeleteFiles(serverPath);
            }
        }
        public JsonResult FormPost(FormCollection formValues)
        {
            string claimsAdviceData  = Request.Form["claimsAdvice"];
            var    dateformat        = "dd/MM/yyyy";
            var    dateTimeConverter = new IsoDateTimeConverter {
                DateTimeFormat = dateformat
            };
            ClaimAdvice claimAdvice = JsonConvert.DeserializeObject <ClaimAdvice>(claimsAdviceData, dateTimeConverter);

            claimAdvice = RemoveEmptyItems(claimAdvice);

            List <HttpPostedFileBase> fileCollection = new List <HttpPostedFileBase>();

            try
            {
                foreach (string file in Request.Files)
                {
                    var fileContent = Request.Files[file];
                    if (fileContent != null && fileContent.ContentLength > 0)
                    {
                        fileCollection.Add(fileContent);
                    }
                }
            }
            catch (Exception ex)
            {
                WriteCustomErrorLog.WriteLog("Error occured while adding file collection");
                throw new Exception(ex.Message);
            }

            List <string> attachmentFilesPath = new FileHandler().fileSave(fileCollection, claimAdvice.ContactEmail + DateTime.Now.ToString("ddMMyyhhmmsstt"));

            fileCollection.Clear();

            IDictionary <string, string> Configurations = PickeringsRepository.GetConfigurationSetting();

            ClaimAdvice storedClaimAdvice = PickeringsRepository.StoreClaimAdvice(claimAdvice, attachmentFilesPath, Configurations["DatabaseRecoveryPath"]);

            Thread MailThread = new Thread(new ThreadStart(delegate()
            {
                SendMail(attachmentFilesPath, storedClaimAdvice, Configurations);
            }));

            MailThread.Start();

            string[] referenceNumber = { claimAdvice.ReferenceNumber, string.Format("{0:dd/MM/yy hh:mm:ss tt}", storedClaimAdvice.CreationDate) };
            return(Json(referenceNumber, JsonRequestBehavior.AllowGet));
        }
        public JsonResult AllInsuredDetails()
        {
            List <InsuredDropDown> insuredDetails;

            try
            {
                insuredDetails = new PickeringsRepository().GetAllInsured();
            }
            catch (Exception ex)
            {
                WriteCustomErrorLog.WriteLog("Database error while fetching all insured details");
                throw new Exception(ex.Message);
            }

            return(Json(insuredDetails, JsonRequestBehavior.AllowGet));
        }
        public ClaimAdvice RemoveEmptyItems(ClaimAdvice claimAdvice)
        {
            ClaimAdvice objClaimAdvice = new ClaimAdvice();

            objClaimAdvice = claimAdvice;

            try
            {
                objClaimAdvice.SupportingFileUploads.RemoveAll(item => item.UploadFilename == "" || item.UploadFilename == null);
                objClaimAdvice.ThirdPartyFileUploads.RemoveAll(item => item.UploadFilename == "" || item.UploadFilename == null);
                objClaimAdvice.SceneWitnesses.RemoveAll(item => item.Name == "" && item.Address == "" && item.Phone == "" && item.Registration == "");
                objClaimAdvice.ThirdPartyBlames.RemoveAll(item => item.Name == "" && item.Address == "" && item.Phone == "" && item.Registration == "");
                objClaimAdvice.Claims.RemoveAll(item => item.PropertyDescription == "" && item.ItemAge == "");
            }
            catch (Exception ex)
            {
                WriteCustomErrorLog.WriteLog("Error occured while removing empty list items from claim advice");
                throw new Exception(ex.Message);
            }

            return(objClaimAdvice);
        }