282 lines
12 KiB
C#
282 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Mime;
|
|
using System.Text;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using Kreta.BusinessLogic.Classes;
|
|
using Kreta.BusinessLogic.HelperClasses;
|
|
using Kreta.BusinessLogic.HelperClasses.ImportCo;
|
|
using Kreta.BusinessLogic.Helpers.ImportExport;
|
|
using Kreta.BusinessLogic.Security;
|
|
using Kreta.Enums;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Enums.ManualEnums.ImportExport;
|
|
using Kreta.Resources;
|
|
using Kreta.Web.Areas.ImportExport.Models.CommonModels;
|
|
using Kreta.Web.Areas.ImportExport.Models.EszkozImportExport;
|
|
using Kreta.Web.Classes;
|
|
using Kreta.Web.Helpers;
|
|
using Kreta.Web.Models.EditorTemplates;
|
|
using Kreta.Web.Security;
|
|
|
|
namespace Kreta.Web.Areas.ImportExport.Controllers
|
|
{
|
|
[MvcRoleClaimsAuthorize(true)]
|
|
[MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
|
|
[MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.Adminisztrator.ClaimValue)]
|
|
public class EszkozImportExportController : BaseImportExportController
|
|
{
|
|
#region Fields
|
|
|
|
private const string TovabbUrl = @"~/Intezmeny/Eszkozok";
|
|
|
|
#endregion Fields
|
|
|
|
#region Properties
|
|
|
|
public static string GridName => "EszkozGrid";
|
|
public static string GridRowTemplateName => "EszkozGridRowTemplate";
|
|
|
|
public static string JavascriptHelperClassName => "EszkozImportExportHelper";
|
|
|
|
public static string ConrtollerName => "EszkozImportExport";
|
|
|
|
#endregion Properties
|
|
|
|
#region Constructors
|
|
|
|
public EszkozImportExportController(IUploadFileValidator uploadFileValidator)
|
|
{
|
|
UploadFileValidator = uploadFileValidator ?? throw new ArgumentNullException(nameof(uploadFileValidator));
|
|
}
|
|
|
|
#endregion Constructors
|
|
|
|
public ActionResult Index()
|
|
{
|
|
if (!ClaimData.EszkozKezelesEnabled)
|
|
{
|
|
return new RedirectResult("/");
|
|
}
|
|
|
|
var model = new EszkozImportExportModel
|
|
{
|
|
MaxAllowedFileSizeInBytes = UploadFileValidator.Configuration.ImportMaxAllowedFileSizeInBytes,
|
|
AllowedFileExtensions = UploadFileValidator.Configuration.ImportAllowedFileExtensions
|
|
};
|
|
return View(model);
|
|
}
|
|
|
|
#region Sablon
|
|
|
|
public ActionResult DownloadTemplate()
|
|
{
|
|
//TODO: CommonExportLogic-ba kiszervezni ezeket...
|
|
MemoryStream memoryStream = new EszkozImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTemplate();
|
|
return new FileStreamResult(memoryStream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = ImportExportEszkozResource.ImportSablonFileName };
|
|
}
|
|
|
|
#endregion Sablon
|
|
|
|
#region Export
|
|
|
|
[HttpPost]
|
|
[MvcValidateAjaxAntiForgeryToken]
|
|
public ActionResult Export()
|
|
{
|
|
using (var ms = new EszkozImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetExport())
|
|
{
|
|
return new FileContentResult(ms.ToArray(), MediaTypeNames.Application.Octet)
|
|
{
|
|
FileDownloadName = HttpUtility.UrlEncode(ImportExportEszkozResource.ExportFileName, Encoding.UTF8),
|
|
};
|
|
}
|
|
}
|
|
|
|
public string NemImportalhatoSorokExport()
|
|
{
|
|
MemoryStream memoryStream = new EszkozImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemImportalhatoSorokExport();
|
|
return GetExportFileString(memoryStream);
|
|
}
|
|
|
|
#endregion Export
|
|
|
|
#region Import
|
|
|
|
public JsonResult UploadFile(HttpPostedFileBase importFile, int importMuvelet)
|
|
{
|
|
UploadFileValidator.ValidateImportFile(importFile);
|
|
|
|
var errorResult = new List<string>();
|
|
|
|
Dictionary<int, string> importHeaderList = EszkozImportExportHelper.ImportHeaderList;
|
|
List<List<string>> importData = ImportExportHelper.GetImportDataFromExcel(importFile.InputStream, importHeaderList, out List<string> fileErrorResultList);
|
|
errorResult.AddRange(fileErrorResultList);
|
|
|
|
if (errorResult.Count > 0)
|
|
{
|
|
JsonResult errorJson = ThrowCustomError(errorResult);
|
|
return errorJson;
|
|
}
|
|
|
|
new EszkozImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).SetImportCo(importData, importMuvelet);
|
|
|
|
return Json(null);
|
|
}
|
|
|
|
public ActionResult OpenImportPreviewPopup()
|
|
{
|
|
EszkozImportCo importCo = new EszkozImportExportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).ImportCo;
|
|
IList<EszkozItemCo> coList = importCo.EszkozCoList;
|
|
|
|
var importInfoModel = new EszkozImportInfoModel
|
|
{
|
|
ImportInfoSummaryList = new ImportInfoSummaryListModel
|
|
{
|
|
ImportInfoSummaryModelList = new List<ImportInfoSummaryModel>
|
|
{
|
|
GetImportInfoSummary(importCo, coList)
|
|
}
|
|
},
|
|
MainImportItemList = new EszkozImportItemListModel
|
|
{
|
|
ImportItemModelList = GetImportItemModelList(importCo, coList)
|
|
},
|
|
NemImportalhatoItemList = new EszkozImportNemImportalhatoItemListModel
|
|
{
|
|
NemImportalhatoItemModelList = GetNemImportalhatoItemModelList(importCo.NemImportalhatoItemList)
|
|
}
|
|
};
|
|
|
|
var popUpModel = new PopUpModel(importInfoModel, ImportPreviewPopupName);
|
|
popUpModel.AddCancelBtn(popUpModel, "KretaWindowHelper.destroyAllWindow");
|
|
popUpModel.AddBtn(popUpModel, "ImportBtnOk", CommonResource.Importalas, $"{JavascriptHelperClassName}.import", "BtnOk", setDisabledAfterClick: true);
|
|
popUpModel.AddBtn(popUpModel, "NemImportalhatoSorokExportBtnOk", ImportExportCommonResource.NemImportalhatoSorokExportalasa, $"{JavascriptHelperClassName}.nemImportalhatoSorokExport", "BtnOk");
|
|
return PartialView(Constants.General.PopupView, popUpModel);
|
|
}
|
|
|
|
private static ImportInfoSummaryModel GetImportInfoSummary(EszkozImportCo importCo, IList<EszkozItemCo> coList)
|
|
{
|
|
List<EszkozImportJsonItemCo> mainImportJsonItemList = importCo.MainImportJsonItemList;
|
|
int insertRowCount = mainImportJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Insert) ?? 0;
|
|
int updateRowCount = mainImportJsonItemList?.Count(x => x.Operation == (int)ImportItemOperationEnum.Update) ?? 0;
|
|
int deleteRowCount = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert ? coList.Count(x => x.Importalt) : 0;
|
|
int unchangedRowCount;
|
|
switch (importCo.ImportMuvelet)
|
|
{
|
|
case (int)ImportMuveletEnum.DeleteAndInsert:
|
|
unchangedRowCount = coList.Count(x => !x.Importalt);
|
|
break;
|
|
|
|
case (int)ImportMuveletEnum.InsertAndUpdate:
|
|
unchangedRowCount = coList.Count - updateRowCount;
|
|
break;
|
|
|
|
default:
|
|
unchangedRowCount = coList.Count;
|
|
break;
|
|
}
|
|
|
|
int invalidRowCount = importCo.NemImportalhatoItemList.Count;
|
|
var importInfoSummary = new ImportInfoSummaryModel
|
|
{
|
|
ImportName = ImportExportEszkozResource.ImportDefaultSheetName,
|
|
InsertRowCount = insertRowCount.ToString(),
|
|
UpdateRowCount = updateRowCount.ToString(),
|
|
DeleteRowCount = deleteRowCount.ToString(),
|
|
UnchangedRowCount = unchangedRowCount.ToString(),
|
|
InvalidRowCount = invalidRowCount.ToString()
|
|
};
|
|
return importInfoSummary;
|
|
}
|
|
|
|
private List<EszkozImportItemModel> GetImportItemModelList(EszkozImportCo importCo, IList<EszkozItemCo> coList)
|
|
{
|
|
var importItemModelList = new List<EszkozImportItemModel>();
|
|
List<EszkozImportJsonItemCo> mainImportJsonItemList = importCo.MainImportJsonItemList;
|
|
if (mainImportJsonItemList == null)
|
|
{
|
|
if (!(coList.Count > 0))
|
|
{
|
|
return importItemModelList;
|
|
}
|
|
|
|
mainImportJsonItemList = new List<EszkozImportJsonItemCo>();
|
|
}
|
|
|
|
//NOTE: Hozzáadjuk azokat a az elemeket, amik az excel-ből jöttek!
|
|
foreach (EszkozImportJsonItemCo importJsonItem in mainImportJsonItemList)
|
|
{
|
|
importItemModelList.Add(new EszkozImportItemModel
|
|
{
|
|
Nev = importJsonItem.Nev,
|
|
TeremNev = importJsonItem.TeremNev,
|
|
TipusNev = importJsonItem.TipusId.GetDisplayName<EszkozTipusEnum>(ClaimData.SelectedTanevID.Value),
|
|
Darabszam = importJsonItem.Darabszam.ToString(),
|
|
FelelosNev = importJsonItem.FelelosNev ?? string.Empty,
|
|
LeltariSzam = importJsonItem.LeltariSzam ?? string.Empty,
|
|
Operation = importJsonItem.Operation
|
|
});
|
|
}
|
|
|
|
//NOTE: Hozzáadjuk azokat a az elemeket, amik az adatbázisból jöttek!
|
|
foreach (EszkozItemCo co in coList)
|
|
{
|
|
if (!mainImportJsonItemList.Select(x => x.Id).Contains(co.Id))
|
|
{
|
|
importItemModelList.Add(new EszkozImportItemModel
|
|
{
|
|
Nev = co.Nev,
|
|
TeremNev = co.TeremNev,
|
|
TipusNev = co.TipusNev,
|
|
Darabszam = co.Darabszam.ToString(),
|
|
FelelosNev = co.FelelosNev ?? string.Empty,
|
|
LeltariSzam = co.LeltariSzam ?? string.Empty,
|
|
Operation = importCo.ImportMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && co.Importalt ? (int)ImportItemOperationEnum.Delete : (int)ImportItemOperationEnum.Default
|
|
});
|
|
}
|
|
}
|
|
|
|
return importItemModelList.OrderBy(x => x.Nev).ThenByDescending(x => x.OperationText).ToList();
|
|
}
|
|
|
|
private List<EszkozImportNemImportalhatoItemModel> GetNemImportalhatoItemModelList(List<EszkozImportItemCo> nemImportalhatoItemList)
|
|
{
|
|
var nemImportalhatoItemModelList = new List<EszkozImportNemImportalhatoItemModel>();
|
|
foreach (EszkozImportItemCo nemImportalhatoItem in nemImportalhatoItemList)
|
|
{
|
|
nemImportalhatoItemModelList.Add(new EszkozImportNemImportalhatoItemModel
|
|
{
|
|
EszkozNeveImportData = nemImportalhatoItem.EszkozNeveImportData,
|
|
HelyisegImportData = nemImportalhatoItem.HelyisegImportData,
|
|
EszkozTipusImportData = nemImportalhatoItem.EszkozTipusImportData,
|
|
DarabszamImportData = nemImportalhatoItem.DarabszamImportData,
|
|
EszkozSzemelyiFeleloseImportData = nemImportalhatoItem.EszkozSzemelyiFeleloseImportData,
|
|
LeltariSzamImportData = nemImportalhatoItem.LeltariSzamImportData,
|
|
ErrorList = string.Join(Environment.NewLine, nemImportalhatoItem.ErrorList)
|
|
});
|
|
}
|
|
|
|
return nemImportalhatoItemModelList.OrderBy(x => x.EszkozNeveImportData).ToList();
|
|
}
|
|
|
|
public ActionResult Import()
|
|
{
|
|
if (ModelState.IsValid)
|
|
{
|
|
var sessionConnectionType = ConnectionTypeExtensions.GetSessionConnectionType();
|
|
EszkozImportCo importCo = new EszkozImportExportHelper(sessionConnectionType).ImportCo;
|
|
new ImportExportHelper(sessionConnectionType).Import(new { ImportJson = importCo }, importCo.ImportMuvelet);
|
|
return Content(Url.Content(TovabbUrl));
|
|
}
|
|
|
|
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
|
|
}
|
|
|
|
#endregion Import
|
|
}
|
|
}
|