using DevExpress.Web.Mvc; using DevExpress.XtraPrinting; using DevExpress.XtraReports.UI; using GreenTree.Nachtragsmanagement.Core; using GreenTree.Nachtragsmanagement.Core.Authentication; using GreenTree.Nachtragsmanagement.Core.Domain.Appendix; using GreenTree.Nachtragsmanagement.Services.Appendix; using GreenTree.Nachtragsmanagement.Services.Configuration; using GreenTree.Nachtragsmanagement.Services.Deviation; using GreenTree.Nachtragsmanagement.Services.Logging; using GreenTree.Nachtragsmanagement.Services.Site; using GreenTree.Nachtragsmanagement.Web.Extensions; using GreenTree.Nachtragsmanagement.Web.Framework.Authorization; using GreenTree.Nachtragsmanagement.Web.Models.Appendix; using GreenTree.Nachtragsmanagement.Web.Models.Deviation; using GreenTree.Nachtragsmanagement.Web.Models.Global; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Net.Mime; using System.Web; using System.Web.Mvc; using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper; namespace GreenTree.Nachtragsmanagement.Web.Controllers { public class AppendixController : Controller { private readonly IDeviationService _deviationSerivce; private readonly IAppendixService _appendixService; private readonly ISiteService _siteService; private readonly IUserHelper _userHelper; private readonly ILogger _logger; private readonly IConfigurationService _configurationService; public AppendixController( IDeviationService deviationService, IAppendixService appendixService, ISiteService siteService, IUserHelper userHelper, ILogger logger, IConfigurationService configurationService) { _deviationSerivce = deviationService; _appendixService = appendixService; _siteService = siteService; _userHelper = userHelper; _logger = logger; _configurationService = configurationService; ViewData["AllCategories"] = _appendixService.GetAllCategories(); ViewData["AllStates"] = _appendixService.GetAllStates(); } #region Appendices /// /// Basic appendix view function /// [FunctionAuthorize(true, "Appendix-Appendices")] public ActionResult ViewAppendices() { var currentUser = _userHelper.FromCookies(); var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser); var appendixModels = appendices .Select(u => AppendixDataModel.FromAppendix(u, false)) .ToList(); return View("~/Views/Appendices/View.cshtml", appendixModels); } /// /// Get JSON data of specific appendix /// /// Appendix id. public ActionResult GetAppendix(int id = -1) { var appendix = _appendixService.GetAppendixById(id); if (appendix == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; var appendixModel = AppendixDataModel.FromAppendix(appendix, false); return new JsonResult { Data = JsonConvert.SerializeObject(appendixModel), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } /// /// Callback result for appendix grid /// public ActionResult PartialAppendices(int scrollHeight = -1) { var currentUser = _userHelper.FromCookies(); var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser); var appendixModels = appendices .Select(u => AppendixDataModel.FromAppendix(u, false)) .OrderBy(u => u.CustomNumber) .ToList(); ViewData["ScrollHeight"] = scrollHeight; return PartialView("~/Views/Appendices/_AppendixGridPartial.cshtml", appendixModels); } /// /// Export result for appendix grid /// [HttpPost] public ActionResult ExportPartialAppendices(string displayMode, string exportformat) { if (String.IsNullOrEmpty(displayMode)) return new EmptyResult(); var currentUser = _userHelper.FromCookies(); var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser); var appendixModels = appendices .Select(u => AppendixDataModel.FromAppendix(u, false)) .ToList(); var viewContext = new ViewContext(); var viewPage = new ViewPage(); var htmlHelper = new System.Web.Mvc.HtmlHelper(viewContext, viewPage); MVCxGridViewState gridViewState = (MVCxGridViewState)Session["AppendixGridViewState"]; var settings = GridViewSettingsHelper.AppendixGridViewSettings(htmlHelper); if (gridViewState != null) { var generator = new MVCReportGeneratonHelper(); generator.CustomizeFormattingRules += new CustomizeFormattingRulesEventHandler(generator_CustomizeFormattingRules); generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(generator_CustomizeColumnsCollection); generator.CustomizeGroupColumnSummary += new CustomizeColumnGroupSummaryEventHandler(generator_CustomizeGroupColumnSummary); generator.CustomizeTotalColumnSummary += new CustomizeColumnTotalSummaryEventHandler(generator_CustomizeTotalColumnSummary); generator.PageSummaryGetResult += new SummaryGetResultHandler(generator_PageSummaryGetResult); var report = generator.GenerateMVCReport(gridViewState, appendixModels, "Nachtragsliste"); if (displayMode == "popup") { return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml", new PrintGridModel(report, "devGridViewAppendix", new { Controller = "Appendix", Action = "ExportPartialAppendices", displayMode = "callback", exportformat = String.Empty }, new { Controller = "Appendix", Action = "ExportPartialAppendices", displayMode = "export", exportformat = String.Empty })); } else if (displayMode == "callback") { return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml", new PrintGridModel(report, "devGridViewAppendix", new { Controller = "Appendix", Action = "ExportPartialAppendices", displayMode = "callback", exportformat = String.Empty }, new { Controller = "Appendix", Action = "ExportPartialAppendices", displayMode = "export", exportformat = String.Empty })); } else if (displayMode == "export") { switch (exportformat.ToLower()) { case "xlsx": settings.TotalSummary["OfferingValue"].DisplayFormat = "{0:c2}"; settings.TotalSummary["NegotiationValue"].DisplayFormat = "{0:c2}"; settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}"; return GridViewExtension.ExportToXlsx(settings, appendixModels); case "xls": settings.TotalSummary["OfferingValue"].DisplayFormat = "{0:c2}"; settings.TotalSummary["NegotiationValue"].DisplayFormat = "{0:c2}"; settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}"; return GridViewExtension.ExportToXls(settings, appendixModels); case "pdf": report.Name = "Nachtragsliste"; return DocumentViewerExtension.ExportTo(report); } } return new EmptyResult(); } else return new EmptyResult(); } private decimal accumulatedCustomSummaryOfferingValue = 0; private decimal accumulatedCustomSummaryNegotiationValue = 0; private decimal accumulatedCustomSummaryCount = 0; /// /// Set custom summary result for page /// /// /// private void generator_PageSummaryGetResult(object source, SummaryGetResultEventArgs e) { var label = (XRLabel)source; if (label.Tag.ToString() == "OfferingValue") { accumulatedCustomSummaryOfferingValue += e.CalculatedValues.OfType().Sum(); e.Result = accumulatedCustomSummaryOfferingValue; } if (label.Tag.ToString() == "NegotiationValue") { accumulatedCustomSummaryNegotiationValue += e.CalculatedValues.OfType().Sum(); e.Result = accumulatedCustomSummaryNegotiationValue; } if (label.Tag.ToString() == "Description") { accumulatedCustomSummaryCount += e.CalculatedValues.Count; e.Result = accumulatedCustomSummaryCount; } e.Handled = true; } /// /// Customize formatting /// /// /// private void generator_CustomizeFormattingRules(object source, CustomFormattingRulesEventArgs e) { var allStates = ViewData["AllStates"] as List; foreach (var state in allStates) { var stateBackColor = new FormattingRule { Condition = String.Format("[StateDescription] == \'{0}\'", state.Description), Name = String.Format("StateBackColor-{0}", state.Id) }; stateBackColor.Formatting.BackColor = ColorTranslator.FromHtml(state.HexColor); e.Rules.Add(stateBackColor); } } /// /// Customize created columns /// private void generator_CustomizeColumnsCollection(object source, ColumnsCreationEventArgs e) { foreach (var column in e.ColumnsInfo) { if (column.FieldName == "CustomNumber") { column.ColumnWidth = 30; } //if (column.FieldName == "SiteDescription") { column.ColumnWidth = 60; } if (column.FieldName == "SiteDescription") { column.IsVisible = false; column.IsDetail = true; } if (column.FieldName == "SiteCustomNumber") { column.IsVisible = false; column.IsDetail = true; } if (column.FieldName == "UserDescription") { column.IsVisible = false; column.IsDetail = true; } if (column.FieldName == "OfferingValue") { column.ColumnWidth = 80; } if (column.FieldName == "NegotiationValue") { column.ColumnWidth = 80; } if (column.FieldName == "DeviationDescription") { column.ColumnWidth = 40; } if (column.FieldName == "RelationOfferingToNegotiation") { column.ColumnWidth = 50; } if (column.FieldName == "RelationOfferingToDeviations") { column.ColumnWidth = 50; } if (column.FieldName == "StateDescription") { column.ColumnWidth = 70; } if (column.FieldName == "CategoryValuesDescription") { column.IsVisible = false; column.IsDetail = true; } if (column.FieldName == "OrderInvoiceCreatedDescription") { column.ColumnWidth = 45; } if (column.FieldName == "Comment") { column.IsVisible = false; column.IsDetail = true; } } } /// /// Customize column summary /// private void generator_CustomizeGroupColumnSummary(object source, ColumnSummaryCreationEventArgs e) { if (e.FieldName == "OfferingValue") { e.Summary.FormatString = "Angeb. ∑ = {0:c2}"; } if (e.FieldName == "NegotiationValue") { e.Summary.FormatString = "Verhand. ∑ = {0:c2}"; } if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; } } /// /// Customize column summary /// private void generator_CustomizeTotalColumnSummary(object source, ColumnSummaryCreationEventArgs e) { if (e.FieldName == "OfferingValue") { e.Summary.FormatString = "{0:c2}"; } if (e.FieldName == "NegotiationValue") { e.Summary.FormatString = "{0:c2}"; } if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; } } /// /// Partial edit for editing of existing or for new appendix /// /// Id for existing appendix, otherweise -1. public ActionResult EditAppendix(int id = -1) { var appendix = _appendixService.GetAppendixById(id); var appendixModel = AppendixDataModel.FromAppendix(appendix, true); var defaultState = _appendixService.GetDefaultState(); if (defaultState != null) ViewData["DefaultState"] = defaultState.Id; return PartialView("~/Views/Appendices/_AppendixEditPartial.cshtml", appendixModel); } /// /// Partial edit for viewing an existing appendix /// /// Id for existing appendix, otherweise -1. public ActionResult ViewAppendix(int id = -1) { if (id == -1) return new EmptyResult(); var appendix = _appendixService.GetAppendixById(id); var appendixModel = AppendixDataModel.FromAppendix(appendix, true); var deviationModels = appendix.Deviations .Select(d => DeviationDataModel.FromDeviation(d, false, _configurationService)); ViewData["AppendixDeviations"] = deviationModels; return PartialView("~/Views/Appendices/_AppendixViewPartial.cshtml", appendixModel); } /// /// Partial edit for creating a new deviation for a site /// /// Id of the site which the deviation should be appended to. public ActionResult AppendAppendixToSite(int siteId) { var site = _siteService.GetSiteById(siteId); var lastCustomNumber = 0; if (site.Appendices.Any()) lastCustomNumber = site.Appendices .Max(d => StaticHelper.TryParseInt(d.CustomNumber)); var appendixModel = new AppendixDataModel { Id = -1, SiteId = siteId, CustomNumber = (lastCustomNumber + 1).ToString(), Percentage = (decimal)1.0 }; var defaultState = _appendixService.GetDefaultState(); if (defaultState != null) ViewData["DefaultState"] = defaultState.Id; return PartialView("~/Views/Appendices/_AppendixEditPartial.cshtml", appendixModel); } /// /// Gets if an appendix OrderInvoiceCreated field and provides an edit form /// /// The entity id. public ActionResult EditOrderInvoiceCreated(int id) { var appendix = _appendixService.GetAppendixById(id); if (appendix == null) return new EmptyResult(); var model = new OrderInvoiceCreatedDataModel { AppendixId = appendix.Id, OrderInvoiceCreated = appendix.OrderInvoiceCreated }; return PartialView("~/Views/Appendices/_EditOrderInvoiceCreatedPartial.cshtml", model); } /// /// Sets the OrderInvoiceCreated status for a given appendix /// [HttpPost, ValidateInput(false)] public ActionResult EditOrderInvoiceCreated(OrderInvoiceCreatedDataModel model) { if (model == null) return new EmptyResult(); var appendix = _appendixService.GetAppendixById(model.AppendixId); if (appendix == null) return new EmptyResult(); appendix.OrderInvoiceCreated = model.OrderInvoiceCreated; _appendixService.UpdateAppendix(appendix); return new JsonResult { Data = "success" }; } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// Appendix model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditAppendix(AppendixDataModel appendixModel) { try { appendixModel.CategoryValueEntities = appendixModel.CategoryEntities .Select(r => JsonConvert.DeserializeObject(r)) .ToList(); for (int i = 0; i < appendixModel.CategoryValueEntities.Count; i++) appendixModel.CategoryValueEntities.ElementAt(i).Json = appendixModel.CategoryEntities.ElementAt(i); appendixModel.PercentageValue = appendixModel.OfferingValue * appendixModel.Percentage; if (!ModelState.IsValid) return PartialView("~/Views/Appendices/_AppendixEditPartial.cshtml", appendixModel); var categoryValues = appendixModel.CategoryValueEntities .Select(r => r.ToCategoryValue()) .ToList(); if (appendixModel.Id == -1) { var appendix = appendixModel.ToAppendix(); appendix.SetCategoryValues(categoryValues); _appendixService.InsertAppendix(appendix); _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies()); } else { var appendix = _appendixService.GetAppendixById(appendixModel.Id); appendix.CustomNumber = appendixModel.CustomNumber; appendix.Description = appendixModel.Description; appendix.Percentage = appendixModel.Percentage; appendix.Value = appendixModel.OfferingValue; appendix.OfferingNumber = appendixModel.OfferingNumber; appendix.OfferingDate = appendixModel.OfferingDate; appendix.NegotiationDate = appendixModel.NegotiationDate; appendix.NegotiationValue = appendixModel.NegotiationValue; appendix.ProtocolExists = appendixModel.ProtocolExists; appendix.StateId = appendixModel.StateId; appendix.OrderNumber = appendixModel.OrderNumber; appendix.OrderDate = appendixModel.OrderDate; appendix.OrderInvoiceCreated = appendixModel.OrderInvoiceCreated; appendix.Comment = appendixModel.Comment; appendix.SiteId = appendixModel.SiteId; appendix.SetCategoryValues(categoryValues); _appendixService.UpdateAppendix(appendix); _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies()); } return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Speicherung eines Nachtrags.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } /// /// Simple JSON result for deleting a specific appendix /// /// Appendix id. [HttpPost] public ActionResult DeleteAppendix(int id) { try { var appendix = _appendixService.GetAppendixById(id); if (appendix != null) _appendixService.DeleteAppendix(appendix); _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies()); return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Löschung eines Nachtrags.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } #endregion #region Invoices /// /// Get JSON data of specific invoice /// /// Invoice id. public ActionResult GetInvoice(int id = -1) { var invoice = _appendixService.GetInvoiceById(id); if (invoice == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; var invoiceModel = InvoiceDataModel.FromInvoice(invoice, false); return new JsonResult { Data = JsonConvert.SerializeObject(invoiceModel), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } /// /// Callback result for Invoice list /// public ActionResult PartialInvoices(int appendixId = -1) { if (appendixId == -1) return PartialView("~/Views/Appendices/_InvoiceListPartial.cshtml", new AppendixDataModel()); var appendix = _appendixService.GetAppendixById(appendixId); if (appendix == null) return PartialView("~/Views/Appendices/_InvoiceListPartial.cshtml", new AppendixDataModel()); var appendixDataModel = AppendixDataModel.FromAppendix(appendix, false); return PartialView("~/Views/Appendices/_InvoiceListPartial.cshtml", appendixDataModel); } /// /// Partial edit for editing of existing or for new invoice /// /// Id for existing invoice, otherweise -1. /// Id of corresponding Appendix public ActionResult EditInvoice(int appendixId, int id = -1) { var invoice = _appendixService.GetInvoiceById(id); var invoiceModel = InvoiceDataModel.FromInvoice(invoice, true); if (id == -1) invoiceModel.AppendixId = appendixId; return PartialView("~/Views/Appendices/_InvoiceEditPartial.cshtml", invoiceModel); } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// Invoice model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditInvoice(InvoiceDataModel invoiceModel) { try { if (!ModelState.IsValid) return PartialView("~/Views/Appendices/_InvoiceEditPartial.cshtml", invoiceModel); if (invoiceModel.Id == -1) { var invoice = invoiceModel.ToInvoice(); _appendixService.InsertInvoice(invoice); _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies()); } else { var invoice = _appendixService.GetInvoiceById(invoiceModel.Id); invoice.CustomNumber = invoiceModel.CustomNumber.Value; invoice.Date = invoiceModel.DateTime.Value; invoice.Value = invoiceModel.Value.Value; _appendixService.UpdateInvoice(invoice); _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies()); } return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Speicherung einer Rechnung.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } /// /// Simple JSON result for deleting a specific invoice /// /// Invoice id. [HttpPost] public ActionResult DeleteInvoice(int id) { try { var invoice = _appendixService.GetInvoiceById(id); if (invoice != null) _appendixService.DeleteInvoice(invoice); _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies()); return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Löschung einer Rechnung.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } #endregion #region Claims /// /// Basic claim view function /// [FunctionAuthorize(true, "Appendix-Claims")] public ActionResult ViewClaims() { return View("~/Views/Appendices/Claims.cshtml"); } /// /// Get JSON data of specific claim /// /// Claim type. /// Claim id. public ActionResult GetClaim(string claimType, int id = -1) { switch (claimType.ToLower()) { case "state": var state = _appendixService.GetStateById(id); if (state == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; else return new JsonResult { Data = JsonConvert.SerializeObject(state), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; case "category": var category = _appendixService.GetCategoryById(id); if (category == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; else return new JsonResult { Data = JsonConvert.SerializeObject(category), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; default: return new JsonResult { Data = "unknownClaimType", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } } /// /// Callback result for claim grid /// /// Claim type. public ActionResult PartialClaims(string claimType) { switch (claimType.ToLower()) { case "state": return PartialView("~/Views/Appendices/_StateListPartial.cshtml", ViewData["AllStates"]); case "category": return PartialView("~/Views/Appendices/_CategoryListPartial.cshtml", ViewData["AllCategories"]); default: return new EmptyResult(); } } /// /// Partial edit for editing of existing or for new claim /// /// Claim type. /// Id for existing claim, otherweise -1. public ActionResult EditClaim(string claimType = "", int id = -1) { switch (claimType.ToLower()) { case "state": var state = _appendixService.GetStateById(id); var stateModel = StateDataModel.FromState(state, true); return PartialView("~/Views/Appendices/_StateEditPartial.cshtml", stateModel); case "category": var category = _appendixService.GetCategoryById(id); var categoryModel = CategoryDataModel.FromCategory(category, true); return PartialView("~/Views/Appendices/_CategoryEditPartial.cshtml", categoryModel); default: return new EmptyResult(); } } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// State model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditState(StateDataModel stateModel) { try { if (!ModelState.IsValid) return PartialView("~/Views/Appendices/_StateEditPartial.cshtml", stateModel); var allStates = _appendixService.GetAllStates(); if (stateModel.IsDefault) { foreach (var state in allStates) { state.IsDefault = false; _appendixService.UpdateState(state); } } if (stateModel.IsFinish) { foreach (var state in allStates) { state.IsFinish = false; _appendixService.UpdateState(state); } } if (stateModel.Id == -1) { var claim = stateModel.ToState(); _appendixService.InsertState(claim); _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies()); } else { var state = _appendixService.GetStateById(stateModel.Id); state.Description = stateModel.Description; state.HexColor = stateModel.HexColor; state.IsZeroValue = stateModel.IsZeroValue; state.IsDefault = stateModel.IsDefault; state.IsFinish = stateModel.IsFinish; _appendixService.UpdateState(state); _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies()); } return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Speicherung eines NT-Status.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// Category model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditCategory(CategoryDataModel categoryModel) { try { if (!ModelState.IsValid) return PartialView("~/Views/Appendices/_CategoryEditPartial.cshtml", categoryModel); if (categoryModel.Id == -1) { var claim = categoryModel.ToCategory(); _appendixService.InsertCategory(claim); _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies()); } else { var category = _appendixService.GetCategoryById(categoryModel.Id); category.Description = categoryModel.Description; _appendixService.UpdateCategory(category); _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies()); } return new JsonResult { Data = "success" }; } catch (Exception ex) { _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } } /// /// Simple JSON result for deleting a specific claim /// /// Claim type. /// Claim id. /// Id of claim which deviations get in place of deleting claim. [HttpPost] public ActionResult DeleteClaim(string claimType, int id, int replaceId) { switch (claimType.ToLower()) { case "state": try { var state = _appendixService.GetStateById(id); var replaceState = _appendixService.GetStateById(replaceId); var stateAppendices = _appendixService.GetAppendicesByState(id); foreach (var appendix in stateAppendices) { appendix.StateId = replaceId; appendix.State = replaceState; _appendixService.UpdateAppendix(appendix); } if (state != null) _appendixService.DeleteState(state); _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies()); } catch (Exception ex) { _logger.Error("Fehler bei Löschung eines NT-Status.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } break; case "category": try { var category = _appendixService.GetCategoryById(id); var replaceCategory = _appendixService.GetCategoryById(replaceId); var allAppendices = _appendixService.GetAllAppendices(); foreach (var appendix in allAppendices) { foreach (var categoryValue in appendix.CategoryValues) { if (categoryValue.CategoryId == id) { categoryValue.Category = replaceCategory; categoryValue.CategoryId = replaceCategory.Id; } } _appendixService.UpdateAppendix(appendix); } if (category != null) _appendixService.DeleteCategory(category); _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies()); } catch (Exception ex) { _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookies()); return PartialView("~/Views/Shared/_PopupError.cshtml", ex); } break; default: return new EmptyResult(); } return new JsonResult { Data = "success" }; } #endregion } }