private FileResult DisplayPdf(string fullFilePath, string id = "")
        {
            FileStream fs = null;

            byte[] bytes;
            if (!System.IO.File.Exists(fullFilePath))
            {
                if (!string.IsNullOrEmpty(id))
                {
                    EMemberRegistration eMemberRegistration = db.EMemberRegistration.Find(id);
                    if (eMemberRegistration != null)
                    {
                        bytes = eMemberRegistration.Dues_Card_Image;
                        return(File(bytes, "application/pdf", Path.GetFileName(fullFilePath)));
                    }
                }
                return(null);
            }
            try {
                fs    = System.IO.File.OpenRead(fullFilePath);
                bytes = new byte[fs.Length];
                fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
            } finally {
                if (fs != null)
                {
                    fs.Close();
                    fs.Dispose();
                }
            }

            return(File(bytes, "application/pdf", Path.GetFileName(fullFilePath)));
        }
        private void HandleMissingPdfFile(EMemberRegistration mbrRegistrationRecord)
        {
            string filePath = Path.Combine(LocalSettingsConfig.LocalSettings.DuesCardsPath, mbrRegistrationRecord.Dues_Card_File_Name);

            if (!System.IO.File.Exists(filePath))
            {
                byte[] bytes = mbrRegistrationRecord.Dues_Card_Image;
                System.IO.File.WriteAllBytes(filePath, bytes);
            }
        }
        // GET: EMemberRegistrations/Details/5
        public async Task <ActionResult> Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            EMemberRegistration eMemberRegistration = await db.EMemberRegistration.FindAsync(id);

            if (eMemberRegistration == null)
            {
                return(HttpNotFound());
            }
            return(View(eMemberRegistration));
        }
        //// POST: EMemberRegistrations/Create
        // [HttpPost]
        //[ValidateAntiForgeryToken]
        //public async Task<ActionResult> Create([Bind(Include = "Id,First_Name,Last_Name,Middle_Name,Dob,Address,Address_2,City,State,Postal_Code,Deduction_Opt_Out_Flag,Home_Phone,Mobile_Phone,Email,Employer_Union_Id,Position,Date_Of_Hire,Ssn,Sms_Opt_In_Flag,Race,Gender,Other_Gender,Ethnicity,Country,First_Language,Second_Language,Tip_Opt_In_Flag,Tip_Frequency,Tip_Contribution,LocalNumber,Validated_Flag,Validation_Status,Validation_Date,Processed_Flag,Processed_Status,Processed_Date,Success_Flag,Member_Union_Id,CreatedBy,CreatedOn,ModifiedBy,ModifiedOn,RowVersion,Dues_Card_File_Name,Dues_Card_Image")] EMemberRegistration eMemberRegistration) {
        //  if (ModelState.IsValid) {
        //    db.EMemberRegistration.Add(eMemberRegistration);
        //    await db.SaveChangesAsync();
        //    return RedirectToAction("Index");
        //  }

        //  return View(eMemberRegistration);
        //}

        // GET: EMemberRegistrations/Edit/5
        public async Task <ActionResult> Edit(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            EMemberRegistration eMemberRegistration = await db.EMemberRegistration.FindAsync(id);

            if (eMemberRegistration == null)
            {
                return(HttpNotFound());
            }
            logger.Info(eMemberRegistration.Last_Name + " " + eMemberRegistration.First_Name + " EDIT clicked.");
            ValidateInTimss(eMemberRegistration);
            return(View(eMemberRegistration));
        }
        public async Task <ActionResult> Edit([Bind(Include = "Id,Position,Member_Union_Id, Mbr_Level1, Mbr_Level2, Mbr_Level3, Mbr_Type, Employer_Name, UpdateName, UpdateAddress, UpdateHouse, UpdatePhone, UpdateEmail, Department, Section, Craft, FullPartTime, Notes, TipActionCode, Validated_Flag, Validation_Status, Notes, Discard_Reason")] EMemberRegistration eMemberRegistration, string command)
        {
            //Set Labels for MBR_LEVEL1, MBR_LEVEL2, MBR_LEVEL3
            ViewData["MBR_LEVEL1"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL1"];
            ViewData["MBR_LEVEL2"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL2"];
            ViewData["MBR_LEVEL3"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL3"];
            // Dropdown lists
            ViewBag.MbrTypeCodes       = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBR_TYPE_CODES"];
            ViewBag.Mbrlevel1Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL1_CODES"];
            ViewBag.Mbrlevel2Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL2_CODES"];
            ViewBag.Mbrlevel3Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL3_CODES"];
            ViewBag.DepartmentCodes    = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Session["DEPT_CODES"];
            ViewBag.SectionCodes       = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DEM_SECTION_CODES"];
            ViewBag.CraftCodes         = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["CRAFT_CODES"];
            ViewBag.FullPartTimeCodes  = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DEMFULLPART_CODES"];
            ViewBag.DiscardReasonCodes = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DISCARDREASON_CODES"];

            //        if (ModelState.IsValid) {
            EMemberRegistration dbRecord = await db.EMemberRegistration.FindAsync(eMemberRegistration.Id);

            if (dbRecord == null)
            {
                return(HttpNotFound());
            }
            logger.Info(" \t\t\t\t\t" + dbRecord.Last_Name + " " + dbRecord.First_Name + " record fetched from DB.");

            HandleMissingPdfFile(dbRecord);

            dbRecord.Validated_Flag    = eMemberRegistration.Validated_Flag;
            dbRecord.Validation_Status = eMemberRegistration.Validation_Status;
            dbRecord.Notes             = eMemberRegistration.Notes;
            dbRecord.Processed_Date    = DateTime.Now;

            try {
                if (command == "Discard")
                {
                    logger.Info(" \t\t\tDISCARD clicked.");
                    dbRecord.Success_Flag     = true;
                    dbRecord.Processed_Flag   = false;
                    dbRecord.Processed_Status = "DISCARDED";
                    //await db.SaveChangesAsync();
                    EMemberRegistrationRepository.Edit(dbRecord);
                    DbContext.Commit();
                    return(RedirectToAction("Index"));
                }
                else if (command == "Hold")
                {
                    logger.Info(" \t\t\tHOLD clicked.");
                    dbRecord.Success_Flag     = false;
                    dbRecord.Processed_Flag   = false;
                    dbRecord.Processed_Status = "HOLD";
                    //await db.SaveChangesAsync();
                    EMemberRegistrationRepository.Edit(dbRecord);
                    DbContext.Commit();
                    return(RedirectToAction("Index"));
                }
                else if (command == "Confirm Manual")
                {
                    logger.Info(" \t\t\tMANUAL clicked.");
                    dbRecord.Success_Flag     = true;
                    dbRecord.Processed_Flag   = true;
                    dbRecord.Processed_Status = "MANUAL Attachment";
                    if (eMemberRegistration.Member_Union_Id != null && eMemberRegistration.Member_Union_Id.Length >= 1)
                    {
                        dbRecord.Processed_Status += " - " + eMemberRegistration.Member_Union_Id;
                    }
                    //await db.SaveChangesAsync();
                    EMemberRegistrationRepository.Edit(dbRecord);
                    DbContext.Commit();
                    return(RedirectToAction("Index"));
                }
                else //Save
                {
                    logger.Info(" \t\t\tPROCESS clicked.");
                    logger.Info(" \t\t\t\t\t Started processing record.");
                    var localPrefix = (string)System.Web.HttpContext.Current.Application["LOCAL_PREFIX"];
                    dbRecord.Member_Union_Id  = eMemberRegistration.Member_Union_Id;
                    dbRecord.Position         = eMemberRegistration.Position;
                    dbRecord.Mbr_Level1       = eMemberRegistration.Mbr_Level1;
                    dbRecord.Mbr_Level2       = eMemberRegistration.Mbr_Level2;
                    dbRecord.Mbr_Level3       = eMemberRegistration.Mbr_Level3;
                    dbRecord.Mbr_Type         = eMemberRegistration.Mbr_Type;
                    dbRecord.Employer_Name    = eMemberRegistration.Employer_Name;
                    dbRecord.UpdateAddress    = eMemberRegistration.UpdateAddress;
                    dbRecord.UpdateName       = eMemberRegistration.UpdateName;
                    dbRecord.UpdateHouse      = eMemberRegistration.UpdateHouse;
                    dbRecord.Department       = eMemberRegistration.Department;
                    dbRecord.Section          = eMemberRegistration.Section;
                    dbRecord.Craft            = eMemberRegistration.Craft;
                    dbRecord.FullPartTime     = eMemberRegistration.FullPartTime;
                    dbRecord.Notes            = eMemberRegistration.Notes;
                    dbRecord.TipActionCode    = eMemberRegistration.TipActionCode;
                    dbRecord.Processed_Status = string.Empty;
                    // Save the user entered values for later issue debugging purposes
                    db.Entry(dbRecord).State = EntityState.Modified;
                    EMemberRegistrationRepository.Edit(dbRecord);
                    DbContext.Commit();
                    logger.Info(" \t\t\t\t\t\t Current user selections saved in DB.");

                    string pdfFilePath  = Path.Combine(LocalSettingsConfig.LocalSettings.DuesCardsPath, dbRecord.Dues_Card_File_Name);
                    string duesCardPath = (string)System.Web.HttpContext.Current.Application["DUES_CARD_IMAGE_LOCATION"];
                    var    duesCardFile = Path.Combine(duesCardPath, dbRecord.Ssn.Replace("-", "") + ".pdf");

                    if (eMemberRegistration.Member_Union_Id != null && eMemberRegistration.Member_Union_Id.Length >= 1)
                    {
                        // Existing Member
                        logger.Info(" \t\t\t\t\t\t Existing Member(" + dbRecord.Member_Union_Id + ")  - Going to update in TIMSS");
                        // Validate TIP Action choice
                        if (dbRecord.Tip_Opt_In_Flag && string.IsNullOrEmpty(eMemberRegistration.TipActionCode))
                        {
                            eMemberRegistration.Validation_Status = "Please chose appropriate action for TIP data!";
                            logger.Info(" \t\t\t\t\t TIP Action is not selected.");
                            ModelState.AddModelError("", "TIP Action is not selected.");
                            return(View(eMemberRegistration));
                        }
                        TimssData.UpdateMember(dbRecord, duesCardFile);
                        dbRecord.Processed_Status = "Existing Member(" + dbRecord.Member_Union_Id + ")  - Updated DuesCard";
                        if (dbRecord.Tip_Opt_In_Flag && dbRecord.Tip_Contribution > 0 && (dbRecord.TipActionCode.ToUpper().Equals("ADD") || dbRecord.TipActionCode.ToUpper().Equals("UPDATE")))
                        {
                            dbRecord.Processed_Status += " and TIP fields";
                        }
                        else
                        {
                            dbRecord.Processed_Status += ", but  no TIP info is uploaded";
                        }
                        dbRecord.Processed_Status += "!";
                        dbRecord.Processed_Flag    = true;
                        dbRecord.Processed_Date    = DateTime.Now;
                    }
                    else
                    {
                        //New Member
                        logger.Info(" \t\t\t\t\t\t New Member - Going to create member in TIMSS");

                        bool isValidData = true;
                        if (string.IsNullOrEmpty(eMemberRegistration.Mbr_Type))
                        {
                            ModelState.AddModelError("", "Member Type should be selected.");
                            isValidData = false;
                        }
                        if (string.IsNullOrEmpty(eMemberRegistration.Mbr_Level1))
                        {
                            ModelState.AddModelError("", (string)System.Web.HttpContext.Current.Application["MBR_LEVEL1"] + " should be selected.");
                            isValidData = false;
                        }
                        if (string.IsNullOrEmpty(eMemberRegistration.Mbr_Level2))
                        {
                            ModelState.AddModelError("", (string)System.Web.HttpContext.Current.Application["MBR_LEVEL2"] + " should be selected.");
                            isValidData = false;
                        }
                        if (string.IsNullOrEmpty(eMemberRegistration.Mbr_Level3))
                        {
                            ModelState.AddModelError("", (string)System.Web.HttpContext.Current.Application["MBR_LEVEL3"] + " should be selected.");
                            isValidData = false;
                        }
                        if (isValidData)
                        {
                            dbRecord.Member_Union_Id  = TimssData.CreateNewMember(dbRecord, localPrefix, duesCardFile);
                            dbRecord.Processed_Status = "New Member(" + dbRecord.Member_Union_Id + ") ";
                            dbRecord.Processed_Flag   = true;
                            dbRecord.Processed_Date   = DateTime.Now;
                        }
                        else
                        {
                            return(View(eMemberRegistration));
                        }
                    }

                    db.Entry(dbRecord).State = EntityState.Modified;
                    if (dbRecord.Member_Union_Id != null && dbRecord.Member_Union_Id.Length >= 1)
                    {
                        logger.Info(" \t\t\t\t\t\t Success in TIMSS");
                        dbRecord.Success_Flag = true;
                        EMemberRegistrationRepository.Edit(dbRecord);
                        DbContext.Commit();
                        //Move the Pdf file to SUCCESSFUL Location
                        DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/DuesCardFiles_Success"));
                        if (!dir.Exists)
                        {
                            dir.Create();
                        }
                        System.IO.File.Move(pdfFilePath, Path.Combine(Server.MapPath("~/DuesCardFiles_Success"), dbRecord.Dues_Card_File_Name));
                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        logger.Info(" \t\t\t\t\t\t Could not process due to validation errors!");
                        //eMemberRegistration.Validation_Status = "Could not process the record.  Please contact Miki Foster.";
                        //dbRecord.Processed_Status = "Could not process the record.  Please contact Miki Foster.";
                        //await db.SaveChangesAsync();
                        //EMemberRegistrationRepository.Edit(dbRecord);
                        //DbContext.Commit();
                    }
                }
            } catch (Exception ex) {
                logger.Error("\t\t Exception: {0}\t\t\t{1} \n", ex.Message, ex.StackTrace);
                //throw (ex);
                string errMsg = string.Empty;
                if (ex.Message.Contains("Error while moving old dues card file"))
                {
                    errMsg = "E404 - Mapped drive where Dues Cards are stored is not accessible.  Check permissions on " + LocalSettingsConfig.LocalSettings.TimssDuesCardsPath;
                    //eMemberRegistration.Validation_Status = errMsg + ".  Please contact Miki Foster.";
                    dbRecord.Processed_Status = errMsg + ".  Please contact Miki Foster.";
                    errLogger.Error("while processing {0} {1}:\t{2} \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("Missing Membership info in TIMSS"))
                {
                    errMsg = "E301 - Member info is missing in TIMSS!  Please enter the missing member info first in TIMSS for member " + dbRecord.Member_Union_Id;
                    //eMemberRegistration.Validation_Status = "Member info is missing in TIMSS!  Please enter the missing member info first in TIMSS.";
                    dbRecord.Processed_Status = errMsg;
                    errLogger.Error("while processing {0} {1}:\t{2} \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("Error while updating Member Record"))
                {
                    errMsg = "E504 - Unknown error while updating the member " + dbRecord.Member_Union_Id + " in TIMSS!  Please enter Helpdesk ticket. ";
                    //eMemberRegistration.Validation_Status = "Member info is missing in TIMSS!  Please enter the missing member info first in TIMSS.";
                    dbRecord.Processed_Status = errMsg;
                    errLogger.Error("while processing {0} {1}:\t{2} \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("ORA-"))
                {
                    errMsg = "E500 - Oracle error  " + ex.Message.Substring(ex.Message.IndexOf("ORA-"), ex.Message.IndexOf("at OracleInternal") - ex.Message.IndexOf("ORA-"));
                    errMsg = errMsg.Replace("\"", "");
                    //eMemberRegistration.Validation_Status = errMsg + ".  Please contact Miki Foster.";
                    dbRecord.Processed_Status = errMsg + ".  Please enter Helpdesk ticket and contact Miki Foster.";
                    errLogger.Error("while processing {0} {1}:\t{2}.  Contact development team. \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("Could not update Dues Card file in the database"))
                {
                    errMsg = "E501 - Unknown error while updating Dues Card file in the database for member " + dbRecord.Member_Union_Id;
                    //eMemberRegistration.Validation_Status = errMsg + ".  Please contact Miki Foster.";
                    dbRecord.Processed_Status = errMsg + ".  Please enter Helpdesk ticket and contact Miki Foster.";
                    errLogger.Error("while processing {0} {1}:\t{2}.  Contact development team. \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("Error while copying old dues card file"))
                {
                    errMsg = "E502 - Unknown error while  copying old dues card file";
                    //eMemberRegistration.Validation_Status = errMsg + ".  Please contact Miki Foster.";
                    dbRecord.Processed_Status = errMsg + ".  Please enter Helpdesk ticket and contact Miki Foster.";
                    errLogger.Error("while processing {0} {1}:\t{2}.  Contact development team. \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else if (ex.Message.Contains("Error while moving old dues card file"))
                {
                    errMsg = "E503 - Unknown error while  moving old dues card file";
                    //eMemberRegistration.Validation_Status = errMsg + ".  Please contact Miki Foster.";
                    dbRecord.Processed_Status = errMsg + ".  Please enter Helpdesk ticket and contact Miki Foster.";
                    errLogger.Error("while processing {0} {1}:\t{2}.  Contact development team. \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                else
                {
                    //eMemberRegistration.Validation_Status = "E505 - Unknown Error:  Could not process the record due to unknown error.  Please contact Miki Foster.";
                    dbRecord.Processed_Status = "E505 - Unknown Error:  Could not process the record due to unknown error.  Please enter Helpdesk ticket and contact Miki Foster.";
                    errMsg = "E505 - Unknown Error:  " + ex.Message;
                    errLogger.Error("while processing {0} {1}:\t{2}.  Contact development team. \n", dbRecord.First_Name, dbRecord.Last_Name, errMsg);
                }
                //await db.SaveChangesAsync();
                dbRecord.Processed_Flag = false;
                dbRecord.Success_Flag   = false;
                EMemberRegistrationRepository.Edit(dbRecord);
                DbContext.Commit();
            }
            eMemberRegistration = dbRecord;
            eMemberRegistration.Member_Union_Id   = null;
            eMemberRegistration.Validated_Flag    = true;
            eMemberRegistration.Validation_Status = dbRecord.Processed_Status;
            if (!string.IsNullOrEmpty(eMemberRegistration.Validation_Status))
            {
                ModelState.AddModelError("", eMemberRegistration.Validation_Status);
                //Store Model Errors so that we can store it in DB
                errLogger.Error("while processing {0} {1}:\t{2} \n", eMemberRegistration.First_Name, eMemberRegistration.Last_Name, eMemberRegistration.Validation_Status);
            }
            //ValidateInTimss(eMemberRegistration);
            // Set Comparison Codes to display
            ViewData["Error"] = eMemberRegistration.Validation_Status;
            return(View(eMemberRegistration));
            //      }
        }
        private void ValidateInTimss(EMemberRegistration eMemberRegistration)
        {
            // Validate against TIMSS
            var           validationMessage      = new StringBuilder();
            bool          validatedFlag          = true;
            List <string> comparisonMessagesList = new List <string>();
            string        comparisonMessage;

            ViewData["Show_UpdateName"]     = false;
            ViewData["Show_UpdateAddress"]  = false;
            ViewData["Show_UpdateHouse"]    = false;
            ViewData["Show_ConfirmMessage"] = false;
            ViewData["Show_AddTip"]         = false;
            if (eMemberRegistration.Last_Name.Length + (string.IsNullOrEmpty(eMemberRegistration.Middle_Name) ? 0 : eMemberRegistration.Middle_Name.Length) + eMemberRegistration.First_Name.Length > 40)
            {
                ModelState.AddModelError("", "E303 - Name cannot be more than 40 letters!  Please contact Miki Foster to have the name shortened in the database.");
            }
            if (eMemberRegistration.State.Length > 2)
            {
                ModelState.AddModelError("", "E302 - State abbreviation cannot be more than 2 letters!  Please contact Miki Foster to have the State value changed in the database.");
            }

            var mbrData = TimssData.GetMemberData(eMemberRegistration.Ssn, eMemberRegistration.Tip_Opt_In_Flag);

            if (mbrData.Count > 0)
            {
                if (mbrData.Count == 1)
                {
                    //Exactly ONE match found for SSN
                    var mbr = mbrData[0];
                    eMemberRegistration.Member_Union_Id = mbr.MemberUnionId;
                    comparisonMessage = "Member exists in Database : " + mbr.MemberUnionId + " (" + (mbr.SelfPayFlag == "Y" ? "Selfpay" : "Checkoff") + ") - Status: " + mbr.MbrStatusCode;
                    comparisonMessagesList.Add(comparisonMessage);
                    validationMessage.Append(comparisonMessage);
                    //Store if the Member is already on Checkoff.  [Note: Deduction_Opt_Out_Flag  TRUE implies he chose "SelfPay" i.e opted out of CheckOff]
                    ViewData["MemberData"] = mbr;
                    if (mbr.MbrStatusCode.Equals("MBR Missing"))
                    {
                        ModelState.AddModelError("", "E301 - Member info is missing in TIMSS!  Please enter the missing member info first in TIMSS for member " + mbr.MemberUnionId);
                    }
                    if (mbr.SelfPayFlag == "N" && eMemberRegistration.Deduction_Opt_Out_Flag &&
                        mbr.HouseUnionId == eMemberRegistration.Employer_Union_Id)
                    {
                        //Member is on CheckOff in the database, but now choses SelfPay
                        ViewData["Show_ConfirmMessage"] = true;
                    }

                    if (!mbr.FirstName.Trim().ToLower().Equals(eMemberRegistration.First_Name.Trim().ToLower(), StringComparison.InvariantCulture))
                    {
                        comparisonMessage = "First Name in Database is different : " + mbr.FirstName + "(" + eMemberRegistration.First_Name + ")";
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateName"] = true;
                    }
                    if (!mbr.LastName.Trim().ToLower().Equals(eMemberRegistration.Last_Name.Trim().ToLower(), StringComparison.InvariantCulture))
                    {
                        comparisonMessage = "Last Name in Database is different : " + mbr.LastName + "(" + eMemberRegistration.Last_Name + ")";
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateName"] = true;
                    }
                    if (!mbr.HouseUnionId.Equals(eMemberRegistration.Employer_Union_Id))
                    {
                        comparisonMessage = "Primary House in Database is different : " + mbr.HouseUnionId;
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        if (mbr.SelfPayFlag == "N" && eMemberRegistration.Deduction_Opt_Out_Flag)
                        {
                            ViewData["Show_UpdateHouse"] = false; //Already CheckOff on H1, but now he wants to be SelfPay on H2
                        }
                        ViewData["Show_UpdateHouse"] = true;
                    }
                    //Compare Address
                    if (!mbr.Zip.StartsWith(eMemberRegistration.Postal_Code) && !eMemberRegistration.Postal_Code.StartsWith(mbr.Zip))
                    {
                        comparisonMessage = "Postal Code in Database is different : " + mbr.Zip;
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateAddress"] = true;
                    }
                    else if (!mbr.State.ToUpper().Equals(eMemberRegistration.State.ToUpper()))
                    {
                        comparisonMessage = "State in Database is different : " + mbr.State;
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateAddress"] = true;
                    }
                    else if (!mbr.City.Trim().ToLower().Equals(eMemberRegistration.City.Trim().ToLower(), StringComparison.InvariantCulture))
                    {
                        comparisonMessage = "City in Database is different : " + mbr.City;
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateAddress"] = true;
                    }
                    else if (!string.Concat(mbr.Address, mbr.Address_2).Trim().ToLower().Equals(string.Concat(eMemberRegistration.Address, eMemberRegistration.Address_2).Trim().ToLower(), StringComparison.InvariantCulture))
                    {
                        comparisonMessage = "Address Lines in Database is different : " + string.Concat(mbr.Address, " ", mbr.Address_2);
                        comparisonMessagesList.Add(comparisonMessage);
                        validationMessage.Append("\n" + comparisonMessage);
                        ViewData["Show_UpdateAddress"] = true;
                    }
                    // Take care of TIP signup
                    if (eMemberRegistration.Tip_Opt_In_Flag)
                    {
                        if (mbr.TimssTipData == null || mbr.TimssTipData.Count == 0)// No TIP data in TIMSS
                        //comparisonMessage = "No TIP data exists in TIMSS ";
                        //comparisonMessagesList.Add(comparisonMessage);
                        //validationMessage.Append("\n" + comparisonMessage);
                        {
                            ViewData["Show_AddTip"] = true;
                        }
                        else
                        {
                            comparisonMessage = "Below TIP data exists in TIMSS: ";
                            //comparisonMessagesList.Add(comparisonMessage);
                            validationMessage.Append("Below TIP data exists in TIMSS: \n");
                            ViewData["Show_AddTip"] = true;
                            foreach (var tip in mbr.TimssTipData)
                            {
                                if (tip.Contains(eMemberRegistration.Employer_Union_Id))
                                {
                                    ViewData["Show_AddTip"] = false; //Update Tip Amount in the same House
                                }
                                comparisonMessage = tip;
                                //comparisonMessagesList.Add(comparisonMessage);
                                validationMessage.Append("\n" + comparisonMessage);
                            }
                        }
                    }
                }
                else
                {
                    //More than one member found in database
                    validatedFlag = false;
                    validationMessage.Append("More than one member already exists in Database with same SSN:\n ");
                    foreach (var mbr in mbrData)
                    {
                        validationMessage.Append(" \n              " + mbr.MemberUnionId + " - " + mbr.FirstName + " " + mbr.LastName);
                    }
                }
            }
            else
            {
                // No matching Member found in DB
                eMemberRegistration.Member_Union_Id = null;
            }
            eMemberRegistration.Validated_Flag    = validatedFlag;
            eMemberRegistration.Validation_Status = validationMessage.ToString();
            // Populate Employer_Name
            if (eMemberRegistration.Employer_Name.IsNullOrWhiteSpace())
            {
                var cachedHouseData = (IEnumerable <HouseData>)System.Web.HttpContext.Current.Application["HouseData"];
                var employerData    =
                    cachedHouseData.Where(h => h.HouseUnionId == eMemberRegistration.Employer_Union_Id)
                    .Take(1)
                    .Select(h => h.HouseName)
                    .ToList();
                if (employerData.Count == 0)
                {
                    ModelState.AddModelError("", "E304 - Invalid House " + eMemberRegistration.Employer_Union_Id + ".  Please enter Helpdesk ticket and contact Miki Foster. ");
                }
                else
                {
                    eMemberRegistration.Employer_Name = employerData[0];
                }
            }
            //Set Labels for MBR_LEVEL1, MBR_LEVEL2, MBR_LEVEL3
            ViewData["MBR_LEVEL1"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL1"];
            ViewData["MBR_LEVEL2"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL2"];
            ViewData["MBR_LEVEL3"] = (string)System.Web.HttpContext.Current.Application["MBR_LEVEL3"];
            // Dropdown lists
            ViewBag.MbrTypeCodes       = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBR_TYPE_CODES"];
            ViewBag.Mbrlevel1Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL1_CODES"];
            ViewBag.Mbrlevel2Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL2_CODES"];
            ViewBag.Mbrlevel3Codes     = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["MBRLEVEL3_CODES"];
            ViewBag.DepartmentCodes    = GetDepartmentList(eMemberRegistration.Employer_Union_Id);
            ViewBag.SectionCodes       = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DEM_SECTION_CODES"];
            ViewBag.CraftCodes         = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["CRAFT_CODES"];
            ViewBag.FullPartTimeCodes  = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DEMFULLPART_CODES"];
            ViewBag.DiscardReasonCodes = (IEnumerable <SelectListItem>)System.Web.HttpContext.Current.Application["DISCARDREASON_CODES"];
            // Set Comparison Codes to display
            ViewData["Comparison"] = comparisonMessagesList;
            //Store Model Errors so that we can store it in DB
            if (!ModelState.IsValid)
            {
                foreach (var val in ModelState.Values)
                {
                    foreach (ModelError modelError in val.Errors)
                    {
                        errLogger.Error("while processing {0} {1}:\t{2} \n", eMemberRegistration.First_Name, eMemberRegistration.Last_Name, modelError.ErrorMessage);
                    }
                }
            }
        }
Exemplo n.º 7
0
        public async Task <IHttpActionResult> Post()
        {
            EMemberRegistration model = null;

            // Check if the request contains multipart/form-data.
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            string        pdfFilePath = ConfigurationManager.AppSettings["DuesCardsPath"];//System.Web.HttpContext.Current.Server.MapPath("~/DuesCardFiles");
            string        root        = System.Web.HttpContext.Current.Server.MapPath("~/Uploads");
            DirectoryInfo dir         = new DirectoryInfo(pdfFilePath);

            if (!dir.Exists)
            {
                dir.Create();
            }
            dir = new DirectoryInfo(root);
            if (!dir.Exists)
            {
                dir.Create();
            }
            var provider = new MultipartFormDataStreamProvider(root);

            try {
                // Read the form data.
                await Request.Content.ReadAsMultipartAsync(provider);

                if (provider.FileData.Count > 1)
                {
                    return(BadRequest("Cannot provide more than one file!"));
                }

                foreach (var key in provider.FormData.AllKeys)
                {
                    foreach (var val in provider.FormData.GetValues(key))
                    {
                        model = JsonConvert.DeserializeObject <EMemberRegistration>(val);
                        if (!string.IsNullOrEmpty(model.Gender))
                        {
                            model.Gender = model.Gender.Substring(0, 1);
                        }
                        break;
                        //Trace.WriteLine(string.Format("{0}: {1}", key, val));
                    }
                    break;
                }
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                foreach (MultipartFileData fileData in provider.FileData)
                {
                    if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName))
                    {
                        return(BadRequest("This request is not properly formatted"));
                    }
                    string fileName = fileData.Headers.ContentDisposition.FileName;
                    if (fileName.StartsWith("\"") && fileName.EndsWith("\""))
                    {
                        fileName = fileName.Trim('"');
                    }
                    if (fileName.Contains(@"/") || fileName.Contains(@"\"))
                    {
                        fileName = Path.GetFileName(fileName);
                    }
                    var duesCardFile = Path.Combine(pdfFilePath, fileName);
                    File.Move(fileData.LocalFileName, duesCardFile);
                    model.Dues_Card_File_Name = fileName;
                    using (var fStream = File.OpenRead(duesCardFile)) {
                        byte[] contents = new byte[fStream.Length];
                        fStream.Read(contents, 0, (int)fStream.Length);
                        fStream.Close();
                        model.Dues_Card_Image = contents;
                    }
                }
            } catch (System.Exception e) {
                return(BadRequest(e.Message));
            }


            EMemberRegistrationRepository.Add(model);
            DbContext.Commit();

            var viewModel = Mapper.Map <EMemberRegistrationModel>(model);

            //return Ok();
            return(CreatedAtRoute("", new { id = viewModel.Id }, viewModel));
        }