public JsonResult UpdateCreate_UnidadesArmazenamento([FromBody] List <StockkeepingUnitViewModel> data)
        {
            List <StockkeepingUnitViewModel> results = DBStockkeepingUnit.ParseToViewModel(DBStockkeepingUnit.GetAll());

            data.RemoveAll(x => results.Any(
                               u =>
                               u.ProductNo == x.ProductNo &&
                               u.Description == x.Description &&
                               u.Code == x.Code &&
                               u.Inventory == x.Inventory &&
                               u.ShelfNo == x.ShelfNo &&
                               u.Blocked == x.Blocked &&
                               u.CodeWareHouse == x.CodeWareHouse &&
                               u.WareHouseValue == x.WareHouseValue &&
                               u.VendorNo == x.VendorNo &&
                               u.VendorItemNo == x.VendorItemNo &&
                               u.CodeUnitMeasure == x.CodeUnitMeasure &&
                               u.UnitCost == x.UnitCost &&
                               u.LastCostDirect == x.LastCostDirect &&
                               u.PriceSale == x.PriceSale
                               ));

            data.ForEach(x =>
            {
                if (!string.IsNullOrEmpty(x.ProductNo) && DBFichaProduto.GetById(x.ProductNo) != null)
                {
                    UnidadeDeArmazenamento toCreate = DBStockkeepingUnit.ParseToDb(x);
                    UnidadeDeArmazenamento toUpdate = DBStockkeepingUnit.ParseToDb(x);
                    UnidadeDeArmazenamento toSearch = DBStockkeepingUnit.GetById(x.ProductNo);

                    FichaProdutoViewModel product        = DBFichaProduto.ParseToViewModel(DBFichaProduto.GetById(x.ProductNo));
                    LocationViewModel localizacao        = DBLocations.ParseToViewModel(DBLocations.GetById(x.Code));
                    NAVVendorViewModel fornecedor        = DBNAV2017Vendor.GetVendor(_config.NAVDatabaseName, _config.NAVCompanyName).Where(y => y.No_ == x.VendorNo).FirstOrDefault();
                    UnidadeMedidaViewModel unidadeMedida = DBUnidadeMedida.ParseToViewModel(DBUnidadeMedida.GetById(x.CodeUnitMeasure));

                    if (toSearch == null)
                    {
                        toCreate.NºProduto = x.ProductNo;
                        toCreate.Descrição = product.Descricao;
                        if (localizacao != null)
                        {
                            toCreate.CódLocalização = x.Code;
                        }
                        else
                        {
                            toCreate.CódLocalização = null;
                        }
                        toCreate.Inventário       = x.Inventory;
                        toCreate.NºPrateleira     = x.ShelfNo;
                        toCreate.Bloqueado        = x.Blocked.HasValue ? x.Blocked.ToString().ToLower() == "sim" ? true : false : false;
                        toCreate.ArmazémPrincipal = x.CodeWareHouse.HasValue ? x.CodeWareHouse.ToString().ToLower() == "sim" ? true : false : false;
                        toCreate.ValorEmArmazem   = x.WareHouseValue;
                        if (fornecedor != null)
                        {
                            toCreate.NºFornecedor = x.VendorNo;
                        }
                        else
                        {
                            toCreate.NºFornecedor = null;
                        }
                        toCreate.CódProdForn = x.VendorItemNo;
                        if (unidadeMedida != null)
                        {
                            toCreate.CódUnidadeMedidaProduto = x.CodeUnitMeasure;
                        }
                        else
                        {
                            toCreate.CódUnidadeMedidaProduto = null;
                        }
                        toCreate.CustoUnitário      = x.UnitCost;
                        toCreate.UltimoCustoDirecto = x.LastCostDirect;
                        toCreate.PreçoDeVenda       = x.PriceSale;
                        toCreate.UtilizadorCriação  = User.Identity.Name;
                        toCreate.DataHoraCriação    = DateTime.Now;

                        DBStockkeepingUnit.Create(toCreate);
                    }
                    else
                    {
                        toUpdate.NºProduto = x.ProductNo;
                        toUpdate.Descrição = product.Descricao;
                        if (localizacao != null)
                        {
                            toUpdate.CódLocalização = x.Code;
                        }
                        else
                        {
                            toUpdate.CódLocalização = null;
                        }
                        toUpdate.Inventário       = x.Inventory;
                        toUpdate.NºPrateleira     = x.ShelfNo;
                        toUpdate.Bloqueado        = x.Blocked.HasValue ? x.Blocked.ToString().ToLower() == "sim" ? true : false : false;
                        toUpdate.ArmazémPrincipal = x.CodeWareHouse.HasValue ? x.CodeWareHouse.ToString().ToLower() == "sim" ? true : false : false;
                        toUpdate.ValorEmArmazem   = x.WareHouseValue;
                        if (fornecedor != null)
                        {
                            toUpdate.NºFornecedor = x.VendorNo;
                        }
                        else
                        {
                            toUpdate.NºFornecedor = null;
                        }
                        toUpdate.CódProdForn = x.VendorItemNo;
                        if (unidadeMedida != null)
                        {
                            toUpdate.CódUnidadeMedidaProduto = x.CodeUnitMeasure;
                        }
                        else
                        {
                            toUpdate.CódUnidadeMedidaProduto = null;
                        }
                        toUpdate.CustoUnitário         = x.UnitCost;
                        toUpdate.UltimoCustoDirecto    = x.LastCostDirect;
                        toUpdate.PreçoDeVenda          = x.PriceSale;
                        toUpdate.UtilizadorModificação = User.Identity.Name;
                        toUpdate.DataHoraModificação   = DateTime.Now;

                        DBStockkeepingUnit.Update(toUpdate);
                    }
                }
            });
            return(Json(data));
        }
        public JsonResult GetUnitStockeeping()
        {
            List <StockkeepingUnitViewModel> result = DBStockkeepingUnit.ParseToViewModel(DBStockkeepingUnit.GetAll());

            return(Json(result));
        }
        public JsonResult OnPostImport_UnidadesArmazenamento()
        {
            var files = Request.Form.Files;
            List <StockkeepingUnitViewModel> ListToCreate = DBStockkeepingUnit.ParseToViewModel(DBStockkeepingUnit.GetAll());
            StockkeepingUnitViewModel        nrow         = new StockkeepingUnitViewModel();

            for (int i = 0; i < files.Count; i++)
            {
                IFormFile     file        = files[i];
                string        folderName  = "Upload";
                string        webRootPath = _generalConfig.FileUploadFolder + "UnidadesArmazenamento\\" + "tmp\\";
                string        newPath     = Path.Combine(webRootPath, folderName);
                StringBuilder sb          = new StringBuilder();
                if (!Directory.Exists(newPath))
                {
                    Directory.CreateDirectory(newPath);
                }
                if (file.Length > 0)
                {
                    string sFileExtension = Path.GetExtension(file.FileName).ToLower();
                    ISheet sheet;
                    string fullPath = Path.Combine(newPath, file.FileName);
                    using (var stream = new FileStream(fullPath, FileMode.Create))
                    {
                        file.CopyTo(stream);
                        stream.Position = 0;
                        if (sFileExtension == ".xls")
                        {
                            HSSFWorkbook hssfwb = new HSSFWorkbook(stream); //This will read the Excel 97-2000 formats
                            sheet = hssfwb.GetSheetAt(0);                   //get first sheet from workbook
                        }
                        else
                        {
                            XSSFWorkbook hssfwb = new XSSFWorkbook(stream); //This will read 2007 Excel format
                            sheet = hssfwb.GetSheetAt(0);                   //get first sheet from workbook
                        }
                        for (int j = (sheet.FirstRowNum + 1); j <= sheet.LastRowNum; j++)
                        {
                            IRow row = sheet.GetRow(j);
                            if (row != null)
                            {
                                nrow = new StockkeepingUnitViewModel();

                                nrow.ProductNo = row.GetCell(0) != null?row.GetCell(0).ToString() : "";

                                nrow.Description = row.GetCell(1) != null?row.GetCell(1).ToString() : "";

                                nrow.Code = row.GetCell(2) != null?row.GetCell(2).ToString() : "";

                                nrow.InventoryText = row.GetCell(3) != null?row.GetCell(3).ToString() : "";

                                nrow.ShelfNo = row.GetCell(4) != null?row.GetCell(4).ToString() : "";

                                nrow.BlockedText = row.GetCell(5) != null?row.GetCell(5).ToString() : "";

                                nrow.CodeWareHouseText = row.GetCell(6) != null?row.GetCell(6).ToString() : "";

                                nrow.WareHouseValueText = row.GetCell(7) != null?row.GetCell(7).ToString() : "";

                                nrow.VendorNo = row.GetCell(8) != null?row.GetCell(8).ToString() : "";

                                nrow.VendorItemNo = row.GetCell(9) != null?row.GetCell(9).ToString() : "";

                                nrow.CodeUnitMeasure = row.GetCell(10) != null?row.GetCell(10).ToString() : "";

                                nrow.UnitCostText = row.GetCell(11) != null?row.GetCell(11).ToString() : "";

                                nrow.LastCostDirectText = row.GetCell(12) != null?row.GetCell(12).ToString() : "";

                                nrow.PriceSaleText = row.GetCell(13) != null?row.GetCell(13).ToString() : "";

                                ListToCreate.Add(nrow);
                            }
                        }
                    }
                }
                if (ListToCreate.Count > 0)
                {
                    foreach (StockkeepingUnitViewModel item in ListToCreate)
                    {
                        if (!string.IsNullOrEmpty(item.InventoryText))
                        {
                            item.Inventory     = Convert.ToDecimal(item.InventoryText);
                            item.InventoryText = "";
                        }
                        if (!string.IsNullOrEmpty(item.BlockedText))
                        {
                            item.Blocked     = item.BlockedText.ToLower() == "sim" ? true : false;
                            item.BlockedText = "";
                        }
                        if (!string.IsNullOrEmpty(item.CodeWareHouseText))
                        {
                            item.CodeWareHouse     = item.CodeWareHouseText.ToLower() == "sim" ? true : false;
                            item.CodeWareHouseText = "";
                        }
                        if (!string.IsNullOrEmpty(item.WareHouseValueText))
                        {
                            item.WareHouseValue     = Convert.ToDecimal(item.WareHouseValueText);
                            item.WareHouseValueText = "";
                        }
                        if (!string.IsNullOrEmpty(item.UnitCostText))
                        {
                            item.UnitCost     = Convert.ToDecimal(item.UnitCostText);
                            item.UnitCostText = "";
                        }
                        if (!string.IsNullOrEmpty(item.LastCostDirectText))
                        {
                            item.LastCostDirect     = Convert.ToDecimal(item.LastCostDirectText);
                            item.LastCostDirectText = "";
                        }
                        if (!string.IsNullOrEmpty(item.PriceSaleText))
                        {
                            item.PriceSale     = Convert.ToDecimal(item.PriceSaleText);
                            item.PriceSaleText = "";
                        }
                    }
                }
            }
            return(Json(ListToCreate));
        }