public IActionResult UploadShipStoresFile(int portCallId) { try { var file = Request.Form.Files.FirstOrDefault(); if (file != null && file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); var timeStamp = DateTime.Now.ToString("yyyyMMddHHmmssfff"); fileName += " - " + timeStamp; var fullPath = Path.Combine(Path.GetTempPath(), fileName); using (var stream = new FileStream(fullPath, FileMode.Create)) { file.CopyTo(stream); var ShipStores = new List <FalShipStores>(); var fi = new FileInfo(fullPath); using (var package = new ExcelPackage(fi)) { var shipStoreSheetDefinition = new ShipStoresSheet(); var workbook = package.Workbook; var shipStoreSheet = workbook.Worksheets[shipStoreSheetDefinition.Sheetname]; ShipStores = ConvertToShipStores(shipStoreSheet, shipStoreSheetDefinition, portCallId); var shipStoresWithErrors = new List <FalShipStores>(); var saved = false; if (ShipStores.Any(x => x.Errors.Any())) { ShipStores.ForEach(ss => ss.PortCall = null); shipStoresWithErrors = ShipStores.Where(x => x.Errors.Any()).ToList(); ShipStores = ShipStores.Where(x => !x.Errors.Any()).ToList(); } if (ShipStores.Any()) { saved = SaveShipStoresToPortCall(ShipStores, portCallId); } if (shipStoresWithErrors.Any()) { return(Json(shipStoresWithErrors)); } if (saved) { return(Json(true)); } return(Json(false)); } } } return(Json(true)); } catch (Exception ex) { return(Json("Upload Failed: " + ex.Message)); } }
private List <FalShipStores> ConvertToShipStores(ExcelWorksheet worksheet, ShipStoresSheet sheetDefinition, int portCallId) { var shipStoreList = new List <FalShipStores>(); var sequenceNo = 1; var validator = new ShipStoresSpreadSheetValidator(); var measurementTypes = new Dictionary <string, int>(); _context.MeasurementType.ToList().ForEach(x => { measurementTypes.Add(x.Name.Split('(', ')')[1], x.MeasurementTypeId); }); try { for (var rowNum = sheetDefinition.startRow; rowNum <= worksheet.Dimension.End.Row; rowNum++) { var NameOfArticle = worksheet.Cells[rowNum, sheetDefinition.NameOfArticleAddress].Text; var QuantityTxt = worksheet.Cells[rowNum, sheetDefinition.QuantityAddress].Text; var LocationOnBoard = worksheet.Cells[rowNum, sheetDefinition.LocationOnBoardAddress].Text; var MeasurementType = worksheet.Cells[rowNum, sheetDefinition.MeasurementTypeAddress].Text; if (string.IsNullOrWhiteSpace(NameOfArticle) && string.IsNullOrWhiteSpace(QuantityTxt) && string.IsNullOrWhiteSpace(LocationOnBoard)) { continue; } QuantityTxt = QuantityTxt.Replace(",", "."); float.TryParse(QuantityTxt, NumberStyles.Any, CultureInfo.InvariantCulture, out var Quantity); var shipStore = new FalShipStores { SequenceNumber = sequenceNo, LocationOnBoard = LocationOnBoard, ArticleName = NameOfArticle, Quantity = Quantity, PortCallId = portCallId, }; if (!string.IsNullOrWhiteSpace(MeasurementType)) { if (measurementTypes.TryGetValue(MeasurementType.Split('(', ')')[1], out var measurementTypeId)) { shipStore.MeasurementTypeId = measurementTypeId; } ; } var errors = validator.ValidateShipStoreSpreadsheetModel(shipStore); var errorMsgs = validator.ConvertErrorsToMsg(errors); shipStore.Errors = errors; shipStore.ExcelRowNum = rowNum; shipStore.ErrorMessages = errorMsgs; shipStoreList.Add(shipStore); sequenceNo++; } return(shipStoreList); } catch (Exception ex) { Logger.Error(ex); } return(shipStoreList); }