Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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);
        }