private void GetLastUploadDetails(UploadAddressBaseModel model)
        {
            MetadataUpload dataUpload = db.MetadataUploads.Where(m => m.MetadataUploadTypeId == (Int32)Constants.MetadataUploadType.AddressBase).OrderByDescending(m => m.CreatedDateTimeUtc).FirstOrDefault();

            if (dataUpload != null)
            {
                if (dataUpload.AspNetUser == null)
                {
                    AspNetUser user = db.AspNetUsers.Find(dataUpload.CreatedByUserId);
                    if (user != null)
                    {
                        model.LastUploadedBy = user.Name;
                    }
                }
                else
                {
                    model.LastUploadedBy = dataUpload.AspNetUser.Name;
                }
                model.LastUploadDateTimeUtc = dataUpload.CreatedDateTimeUtc;
                DateTime.SpecifyKind(model.LastUploadDateTimeUtc.Value, DateTimeKind.Utc);
                try
                {
                    model.LastUploadFileName = String.Join("<br />", dataUpload.FileName.Split(';'));
                }
                catch {}
            }
        }
        public ActionResult Index()
        {
            UploadAddressBaseModel model = new UploadAddressBaseModel();

            GetViewData();
            GetLastUploadDetails(model);

            return(View(model));
        }
        public ActionResult Index(UploadAddressBaseModel model)
        {
            ViewBag.IsComplete = true;

            // Check if import is already in progress.
            ProgressMessage pm = db.ProgressMessages.Find(MessageArea);

            if (pm != null)
            {
                if (!pm.IsComplete)
                {
                    ViewBag.IsComplete = false;
                    ModelState.AddModelError("", AppGlobal.Language.GetText(this, "ImportInProgress", "Import Already In Progress"));
                }
                else
                {
                    DeleteProgressMessage();
                }
            }

            if (ModelState.IsValid)
            {
                String[] validFileTypes    = { ".zip" };
                String   AddressBaseFolder = Constants.ConfigSettings.AddressBaseUploadVirtualDirectoryName;
                if (AddressBaseFolder.EndsWith(@"\"))
                {
                    AddressBaseFolder = AddressBaseFolder.Substring(0, AddressBaseFolder.Length - 1);
                }

                // Check if config setting is valid
                if (String.IsNullOrEmpty(AddressBaseFolder) || !Directory.Exists(AddressBaseFolder))
                {
                    ModelState.AddModelError("", AppGlobal.Language.GetText(this, "AddressBaseFolderNotConfigured", "Configuration setting VirtualDirectoryNameForStoringAddressBaseFiles is not set or is incorrect"));
                    DeleteProgressMessage();
                }

                String importErrorMessageText = AppGlobal.Language.GetText(this, "ImportError", "Error Importing Address Base : {0}");
                try
                {
                    for (int i = 0; i < Request.Files.Count; i++)
                    {
                        HttpPostedFileBase uploadedFile = Request.Files[i];
                        if (uploadedFile == null)
                        {
                            continue;
                        }
                        String ext = Path.GetExtension(uploadedFile.FileName);
                        if (!validFileTypes.Contains(ext ?? "", StringComparer.CurrentCultureIgnoreCase))
                        {
                            ModelState.AddModelError("File",
                                                     AppGlobal.Language.GetText(this, "ZIPFilesOnly", "Please upload a ZIP file"));
                        }

                        if (ModelState.IsValid)
                        {
                            String ZIPFile = Path.Combine(AddressBaseFolder, uploadedFile.FileName);

                            // Delete the file if it exists
                            if (System.IO.File.Exists(ZIPFile))
                            {
                                TryToDeleteFile(ZIPFile);
                            }

                            // Save the zip file
                            uploadedFile.SaveAs(ZIPFile);

                            // Sometimes it uploads the file as zero bytes.
                            // If so log the error and delete the file
                            FileInfo fi = new FileInfo(ZIPFile);
                            if (fi.Length == 0)
                            {
                                ModelState.AddModelError("", String.Format(AppGlobal.Language.GetText("FileUploadFailed", "Error uploading file: {0}"), uploadedFile.FileName));
                                fi.Delete();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    // Create an error
                    AddOrReplaceProgressMessage(String.Format(importErrorMessageText, ex.Message), true);
                }
            }

            // No Errors so redirect to index which will show messages
            if (ModelState.IsValid)
            {
                return(RedirectToAction("Index"));
            }

            GetViewData();
            GetLastUploadDetails(model);

            return(View(model));
        }