private void SetUserFSS(ref UserAuthenticated userAuth, int empID) { DateTime today = DateTime.UtcNow.ToUtcID(); IRepository <FSS> repoFSS = _unitOfWork.GetRepository <FSS>(); repoFSS.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == empID && x.ValidTo >= today); FSS fss = repoFSS.Find().FirstOrDefault(); if (fss == null) { return; } bool allowByNIK = false; userAuth.IsRoleValid = true; userAuth.NIK = fss.NIK; userAuth.Fullname = fss.FullName; if (fss.UploadValidTo != null) { if (fss.UploadValidTo.Value.Date >= today.Date) { allowByNIK = true; } } //userAuth.IsAbleToWrite = fss.AllowedByNIK == null ? false : true; userAuth.IsAbleToWrite = allowByNIK; }
public SupervisorViewModel GetDetail(int id) { IRepository <FSS> repo = _unitOfWork.GetRepository <FSS>(); repo.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == id); FSS item = repo.Find().FirstOrDefault(); if (item == null) { return(null); } return(GetSupervisorViewModel(item)); }
private SupervisorViewModel GetSupervisorViewModel(FSS item) { SupervisorViewModel model = new SupervisorViewModel(); model.NIK = item.NIK; model.Fullname = item.FullName; model.IsRole = item.Role; model.DefaultRayonType = item.DefaultRayonType; model.AllowWriteBy = item.AllowedByNIK; model.IsAbleToUpload = item.AllowedByNIK == null ? false : true; model.UploadValidTo = item.UploadValidTo; model.FormattedUploadValidTo = model.UploadValidTo == null ? null : model.UploadValidTo.Value.ToString(AppConstant.DefaultFormatDate); model.ValidFromDate = item.ValidFrom; model.ValidToDate = item.ValidTo; model.FormattedValidFrom = model.ValidFromDate.ToString(AppConstant.DefaultFormatDate); model.FormattedValidTo = model.ValidToDate.ToString(AppConstant.DefaultFormatDate); return(model); }
private bool Ausfuehren_Loeschen() { switch (_elementTyp) { case ElementTyp.Gleis: Gleis gleis = (Gleis)_element; foreach (Signal el in gleis.Signale) { _anlagenElemente.SignalElemente.Löschen(el); } foreach (Entkuppler el in gleis.Entkuppler) { _anlagenElemente.EntkupplerElemente.Löschen(el); } if (gleis.Fss != null) { _anlagenElemente.FssElemente.Löschen(gleis.Fss); } if (gleis.Schalter != null) { _anlagenElemente.SchalterElemente.Löschen(gleis.Schalter); } _anlagenElemente.GleisElemente.Löschen(gleis); int index = gleis.StartKn.GetGleisAnschlussNr(gleis); gleis.StartKn.Gleise[index] = null; if (index < 2) { if (gleis.StartKn.Weichen[0] != null) { _anlagenElemente.WeicheElemente.Löschen(gleis.StartKn.Weichen[0]); gleis.StartKn.Weichen[0] = null; } } else { if (gleis.StartKn.Weichen[1] != null) { _anlagenElemente.WeicheElemente.Löschen(gleis.StartKn.Weichen[1]); gleis.StartKn.Weichen[1] = null; } } int count = 0; foreach (Gleis gl in gleis.StartKn.Gleise) { if (gl != null) { count++; } } if (count == 0) { _anlagenElemente.KnotenElemente.Löschen(gleis.StartKn); } index = gleis.EndKn.GetGleisAnschlussNr(gleis); gleis.EndKn.Gleise[index] = null; if (index < 2) { if (gleis.EndKn.Weichen[0] != null) { gleis.EndKn.Weichen[0] = null; _anlagenElemente.WeicheElemente.Löschen(gleis.EndKn.Weichen[0]); } } else { if (gleis.EndKn.Weichen[1] != null) { gleis.EndKn.Weichen[1] = null; _anlagenElemente.WeicheElemente.Löschen(gleis.EndKn.Weichen[1]); } } count = 0; foreach (Gleis gl in gleis.EndKn.Gleise) { if (gl != null) { count++; } } if (count == 0) { _anlagenElemente.KnotenElemente.Löschen(gleis.EndKn); } break; case ElementTyp.Signal: Signal sig = (Signal)_element; _anlagenElemente.SignalElemente.Löschen(sig); sig.AnschlussGleis.GleisElementAustragen(sig); break; case ElementTyp.Entkuppler: Entkuppler entkuppler = (Entkuppler)_element; _anlagenElemente.EntkupplerElemente.Löschen(entkuppler); entkuppler.AnschlussGleis.GleisElementAustragen(entkuppler); break; case ElementTyp.FSS: FSS fss = (FSS)_element; _anlagenElemente.FssElemente.Löschen(fss); fss.AnschlussGleis.GleisElementAustragen(fss); break; case ElementTyp.Schalter: Schalter schalter = (Schalter)_element; _anlagenElemente.SchalterElemente.Löschen(schalter); schalter.AnschlussGleis.GleisElementAustragen(schalter); break; case ElementTyp.InfoElement: InfoFenster infoFenster = (InfoFenster)_element; _anlagenElemente.InfoElemente.Löschen(infoFenster); infoFenster.AnschlussGleis.GleisElementAustragen(infoFenster); break; case ElementTyp.Knoten: break; } return(true); }
public AlertMessage Preview(ImportTagihViewModel model) { AlertMessage alert = new AlertMessage(); if (!IsAccessible(ModuleCode.MasterTagih)) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } List <HierTagihViewModel> listVM = GetListHierTagihViewModel(model.InputFile); if (listVM == null) { alert.Text = StaticMessage.ERR_INVALID_INPUT; return(alert); } IRepository <FSS> repoFSS = _unitOfWork.GetRepository <FSS>(); IRepository <SLM> repoSLM = _unitOfWork.GetRepository <SLM>(); IRepository <TCollector> repoCollector = _unitOfWork.GetRepository <TCollector>(); IRepository <TFakturis> repoFakturis = _unitOfWork.GetRepository <TFakturis>(); IRepository <TSPVFakturis> repoSPVFakturis = _unitOfWork.GetRepository <TSPVFakturis>(); FSS fss = null; SLM slm = null; TCollector collector = null; TFakturis fakturis = null; TSPVFakturis spvFakturis = null; DateTime dtMaxValidTo = DateTime.ParseExact(AppConstant.DefaultValidTo, AppConstant.DefaultFormatDate, _cultureInfo); Dictionary <int, string> dcExistingFSS = new Dictionary <int, string>(); Dictionary <int, string> dcExistingSLM = new Dictionary <int, string>(); Dictionary <long, string> dcExistingCollector = new Dictionary <long, string>(); Dictionary <long, string> dcExistingFakturis = new Dictionary <long, string>(); Dictionary <long, string> dcExistingSPVFakturis = new Dictionary <long, string>(); DateTime today = DateTime.UtcNow.ToUtcID().Date; List <string> listRemarks = null; foreach (var item in listVM) { if (!string.IsNullOrEmpty(item.Remarks)) { continue; } if (dcExistingFSS.ContainsKey(item.FSSNik) && dcExistingSLM.ContainsKey(item.SLMNik) && item.CollectorNik != null && dcExistingCollector.ContainsKey(item.CollectorNik.Value) && item.FakturisNik != null && dcExistingFakturis.ContainsKey(item.FakturisNik.Value) && item.SPVFakturisNik != null && dcExistingSPVFakturis.ContainsKey(item.SPVFakturisNik.Value)) { continue; } listRemarks = new List <string>(); #region check FSS if (item.FSSNik != 0 && !dcExistingFSS.ContainsKey(item.FSSNik)) { repoFSS.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == item.FSSNik); repoFSS.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); fss = repoFSS.Find().FirstOrDefault(); if (fss == null) { listRemarks.Add(string.Format(StaticMessage.ERR_FSS_NOT_FOUND, item.FSSNik)); } else if (fss.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_FSS_NOT_ACTIVE, item.FSSNik)); } else { dcExistingFSS[fss.NIK] = fss.FullName; } } #endregion #region check SLM if (item.SLMNik != 0 && !dcExistingSLM.ContainsKey(item.SLMNik)) { repoSLM.Condition = PredicateBuilder.True <SLM>().And(x => x.NIK == item.SLMNik); repoSLM.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); slm = repoSLM.Find().FirstOrDefault(); if (slm == null) { listRemarks.Add(string.Format(StaticMessage.ERR_SLM_NOT_FOUND, item.SLMNik)); } else if (slm.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_SLM_NOT_ACTIVE, item.SLMNik)); } else { dcExistingSLM[slm.NIK] = slm.FullName; } } #endregion #region check Controller if (item.CollectorNik != null && item.CollectorNik.Value != 0 && !dcExistingCollector.ContainsKey(item.CollectorNik.Value)) { repoCollector.Condition = PredicateBuilder.True <TCollector>().And(x => x.NIK == item.CollectorNik.Value); repoCollector.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); collector = repoCollector.Find().FirstOrDefault(); if (collector == null) { listRemarks.Add(string.Format(StaticMessage.ERR_COLLECTOR_NOT_FOUND, item.CollectorNik.Value)); } else if (collector.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_COLLECTOR_NOT_ACTIVE, item.CollectorNik.Value)); } else { dcExistingCollector[collector.NIK] = collector.FULLNAME; } } #endregion #region check Fakturis if (item.FakturisNik != null && item.FakturisNik.Value != 0 && !dcExistingFakturis.ContainsKey(item.FakturisNik.Value)) { repoFakturis.Condition = PredicateBuilder.True <TFakturis>().And(x => x.NIK == item.FakturisNik.Value); repoFakturis.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); fakturis = repoFakturis.Find().FirstOrDefault(); if (fakturis == null) { listRemarks.Add(string.Format(StaticMessage.ERR_FAKTURIS_NOT_FOUND, item.FakturisNik.Value)); } else if (fakturis.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_FAKTURIS_NOT_ACTIVE, item.FakturisNik.Value)); } else { dcExistingFakturis[fakturis.NIK] = fakturis.FULLNAME; } } #endregion #region check SPV Fakturis if (item.SPVFakturisNik != null && item.SPVFakturisNik.Value != 0 && !dcExistingFakturis.ContainsKey(item.SPVFakturisNik.Value)) { repoSPVFakturis.Condition = PredicateBuilder.True <TSPVFakturis>().And(x => x.NIK == item.SPVFakturisNik.Value); repoSPVFakturis.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); spvFakturis = repoSPVFakturis.Find().FirstOrDefault(); if (spvFakturis == null) { listRemarks.Add(string.Format(StaticMessage.ERR_SPV_FAKTURIS_NOT_FOUND, item.SPVFakturisNik.Value)); } else if (spvFakturis.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_SPV_FAKTURIS_NOT_ACTIVE, item.SPVFakturisNik.Value)); } else { dcExistingSPVFakturis[spvFakturis.NIK] = spvFakturis.FULLNAME; } } #endregion if (listRemarks.Count > 0) { item.Remarks = String.Join("; ", listRemarks.ToArray()); } } int numError = listVM.Count(x => !string.IsNullOrEmpty(x.Remarks)); if (numError > 0) { alert.Status = 0; alert.Text = string.Format(StaticMessage.ERR_PREVIEW_CONTAINS_ERROR, numError); } model.ListHierTagih = listVM; alert.Data = model; return(alert); }
private void fssLaden(int ID) { _fss = _model.ZeichnenElemente.FssElemente.Element(ID); _model.BearbeitenSelektieren(_fss); fssDatenLaden(); }
public AlertMessage Preview(ImportSalesViewModel model) { AlertMessage alert = new AlertMessage(); if (!IsAccessible(ModuleCode.MasterSales)) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } if (!IsEditable()) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } List <HierSalesViewModel> listVM = GetListHierSalesViewModel(model.InputFile); if (listVM == null) { alert.Text = StaticMessage.ERR_INVALID_INPUT; return(alert); } IRepository <FSS> repoFSS = _unitOfWork.GetRepository <FSS>(); IRepository <SLM> repoSLM = _unitOfWork.GetRepository <SLM>(); FSS fss = null; SLM slm = null; DateTime dtMaxValidTo = DateTime.ParseExact(AppConstant.DefaultValidTo, AppConstant.DefaultFormatDate, _cultureInfo); Dictionary <int, string> dcExistingFSS = new Dictionary <int, string>(); Dictionary <int, string> dcExistingSLM = new Dictionary <int, string>(); DateTime today = DateTime.UtcNow.ToUtcID().Date; List <string> listRemarks = null; foreach (var item in listVM) { if (!string.IsNullOrEmpty(item.Remarks)) { continue; } if (dcExistingFSS.ContainsKey(item.FSSNik) && dcExistingSLM.ContainsKey(item.SLMNik)) { continue; } listRemarks = new List <string>(); if (item.FSSNik != 0 && !dcExistingFSS.ContainsKey(item.FSSNik)) { repoFSS.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == item.FSSNik); repoFSS.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); fss = repoFSS.Find().FirstOrDefault(); if (fss == null) { listRemarks.Add(string.Format(StaticMessage.ERR_FSS_NOT_FOUND, item.FSSNik)); } else if (fss.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_FSS_NOT_ACTIVE, item.FSSNik)); } else { dcExistingFSS[fss.NIK] = fss.FullName; } } if (item.SLMNik != 0 && !dcExistingSLM.ContainsKey(item.SLMNik)) { repoSLM.Condition = PredicateBuilder.True <SLM>().And(x => x.NIK == item.SLMNik); repoSLM.OrderBy = new SqlOrderBy("CreatedOn", SqlOrderType.Descending); slm = repoSLM.Find().FirstOrDefault(); if (slm == null) { listRemarks.Add(string.Format(StaticMessage.ERR_SLM_NOT_FOUND, item.SLMNik)); } else if (slm.ValidTo < today) { listRemarks.Add(string.Format(StaticMessage.ERR_SLM_NOT_ACTIVE, item.SLMNik)); } else { dcExistingSLM[slm.NIK] = slm.FullName; } } if (listRemarks.Count > 0) { item.Remarks = String.Join("; ", listRemarks.ToArray()); } } int numError = listVM.Count(x => !string.IsNullOrEmpty(x.Remarks)); if (numError > 0) { alert.Status = 0; alert.Text = string.Format(StaticMessage.ERR_PREVIEW_CONTAINS_ERROR, numError); } model.ListHierSales = listVM; alert.Data = model; return(alert); }
private void buttonArduinoExport_Click(object sender, EventArgs e) { StreamWriter arduinoStreamWriter = new StreamWriter("ArduinoDaten.txt", false, Encoding.UTF8); foreach (MCSpeicher ard in _model.ZeichnenElemente.ListeMCSpeicher.Elemente) { arduinoStreamWriter.WriteLine("Arduino " + ard.ID); for (int i = 0; i < 3; i++) {//Relaisplatine arduinoStreamWriter.WriteLine("Relais-Platine " + ard.ID + "-" + i); string[] kurzBezeichnungArray = new string[17]; kurzBezeichnungArray[0] = "PC-Bezeichnung"; string[] anlagenBezeichnungArray = new string[17]; anlagenBezeichnungArray[0] = "Anlagen-Bezeichnung"; string[] steckerArray = new string[17]; steckerArray[0] = "Stecker"; string[] rmArray = new string[17]; rmArray[0] = "Rückmeldung"; string[] reglerArray = new string[17]; reglerArray[0] = "Regler"; List <AnlagenElement> anlagenElemente = _model.ZeichnenElemente.RelaisAdresseSuchen(ard.ID, i); foreach (AnlagenElement a in anlagenElemente) { int b = a.Ausgang.BitNr + 1; kurzBezeichnungArray[b] = kurzBezeichnungArray[b] + a.KurzBezeichnung + " "; anlagenBezeichnungArray[b] = anlagenBezeichnungArray[b] + a.Bezeichnung + " "; steckerArray[b] = steckerArray[b] + a.Stecker + " "; if (a.GetType().Name == "Gleis") { Gleis g = (Gleis)a; rmArray[b] = rmArray[b] + "RM" + g.Eingang.SpeicherString + " "; } if (a.GetType().Name == "FSS") { FSS f = (FSS)a; int r = f.ReglerNummer1; if (r > 0) { rmArray[b] = rmArray[b] + "Regler" + r + " "; } if (r < 0) { FSS f1 = _model.ZeichnenElemente.FssElemente.Element(-r); rmArray[b] = rmArray[b] + //f1.KurzBezeichnung + "_" + "Re" + f1.Ausgang.SpeicherString + " "; } r = f.ReglerNummer2; if (r > 0) { reglerArray[b] = reglerArray[b] + "Regler" + r + " "; } if (r < 0) { FSS f2 = _model.ZeichnenElemente.FssElemente.Element(-r); reglerArray[b] = reglerArray[b] + //f2.KurzBezeichnung + "_" + "Re" + f2.Ausgang.SpeicherString + " "; } } } for (int a = 0; a < 17; a++) { arduinoStreamWriter.Write(StringBereinigen(kurzBezeichnungArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < 17; a++) { arduinoStreamWriter.Write(StringBereinigen(anlagenBezeichnungArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(" "); for (int a = 0; a < 17; a++) { arduinoStreamWriter.Write(StringBereinigen(steckerArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < 17; a++) { arduinoStreamWriter.Write(StringBereinigen(rmArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < 17; a++) { arduinoStreamWriter.Write(StringBereinigen(reglerArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(" "); } for (int i = 0; i < 2; i++) {//Rückmelde-Platinen arduinoStreamWriter.WriteLine("RM-Platine " + ard.ID + "-" + i); string[] kurzBezeichnungArray = new string[17]; kurzBezeichnungArray[0] = "PC-Bezeichnung"; string[] anlagenBezeichnungArray = new string[17]; anlagenBezeichnungArray[0] = "Anlagen-Bezeichnung"; string[] steckerArray = new string[17]; steckerArray[0] = "Stecker"; string[] rmArray = new string[17]; rmArray[0] = "Rückmeldung"; string[] relaisArray = new string[17]; relaisArray[0] = "Relais"; List <Gleis> gleisElemente = _model.ZeichnenElemente.RMAdresseSuchen(ard.ID, i); //_model.ZeichnenElemente.RMSuchen(ard.ID, i); foreach (Gleis g in gleisElemente) { int b = g.Eingang.BitNr + 1; kurzBezeichnungArray[b] = kurzBezeichnungArray[b] + g.KurzBezeichnung + " "; anlagenBezeichnungArray[b] = anlagenBezeichnungArray[b] + g.Bezeichnung + " "; steckerArray[b] = steckerArray[b] + g.Stecker + " "; relaisArray[b] = relaisArray[b] + "Re" + g.Ausgang.SpeicherString + " "; } for (int a = 0; a < kurzBezeichnungArray.Length; a++) { arduinoStreamWriter.Write(StringBereinigen(kurzBezeichnungArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < anlagenBezeichnungArray.Length; a++) { arduinoStreamWriter.Write(StringBereinigen(anlagenBezeichnungArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < steckerArray.Length; a++) { arduinoStreamWriter.Write(StringBereinigen(steckerArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); for (int a = 0; a < relaisArray.Length; a++) { arduinoStreamWriter.Write(StringBereinigen(relaisArray[a]) + "\t"); } arduinoStreamWriter.WriteLine(""); } } arduinoStreamWriter.Flush(); arduinoStreamWriter.Dispose(); }
public AlertMessage Edit(SupervisorViewModel model) { AlertMessage alert = new AlertMessage(); if (!IsAccessible(ModuleCode.Supervisor)) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } if (!IsEditable()) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } IRepository <FSS> repo = _unitOfWork.GetRepository <FSS>(); repo.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == model.NIK); FSS item = repo.Find().FirstOrDefault(); if (item == null) { alert.Text = StaticMessage.ERR_DATA_NOT_FOUND; return(alert); } DateTime now = DateTime.UtcNow.ToUtcID(); item.FullName = model.Fullname; //item.Role = model.IsRole; item.DefaultRayonType = model.DefaultRayonType; item.ValidFrom = DateTime.Parse(model.FormattedValidFrom); item.ValidTo = DateTime.Parse(model.FormattedValidTo); item.UpdatedBy = _userAuth.NIK.ToString(); item.UpdatedOn = now; try { _unitOfWork.BeginTransaction(); repo.Update(item); _unitOfWork.Commit(); alert.Status = 1; alert.Text = string.Format(StaticMessage.SCS_EDIT, item.NIK, item.FullName); } catch (Exception ex) { _logger.Write("error", DateTime.Now, ex.Message, _userAuth.Fullname, ex); alert.Text = StaticMessage.ERR_SAVE_FAILED; } finally { _unitOfWork.Dispose(); } return(alert); }
public AlertMessage Add(SupervisorViewModel model) { AlertMessage alert = new AlertMessage(); if (!IsAccessible(ModuleCode.Supervisor)) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } if (!IsEditable()) { alert.Text = StaticMessage.ERR_ACCESS_DENIED; return(alert); } //model.ValidFromDate = DateTime.ParseExact(model.FormattedValidFrom, AppConstant.DefaultFormatDate, _cultureInfo); //model.ValidToDate = DateTime.ParseExact(model.FormattedValidTo, AppConstant.DefaultFormatDate, _cultureInfo); IRepository <FSS> repo = _unitOfWork.GetRepository <FSS>(); FSS item = null; repo.Condition = PredicateBuilder.True <FSS>().And(x => x.NIK == model.NIK); item = repo.Find().FirstOrDefault(); if (item != null) { alert.Text = string.Format(StaticMessage.ERR_NIK_EXIST, model.NIK); return(alert); } DateTime now = DateTime.UtcNow.ToUtcID(); DateTime validFrom = now.AddMonths(-1).AddDays(1).Date; DateTime validTo = new DateTime(9999, 12, 31); item = new FSS() { NIK = model.NIK, FullName = model.Fullname, Role = model.IsRole, DefaultRayonType = model.DefaultRayonType, ValidFrom = validFrom, ValidTo = validTo, CreatedBy = _userAuth.NIK.ToString(), CreatedOn = now, UpdatedBy = _userAuth.NIK.ToString(), UpdatedOn = now, }; try { _unitOfWork.BeginTransaction(); repo.Insert(item); _unitOfWork.Commit(); alert.Status = 1; alert.Text = string.Format(StaticMessage.SCS_ADD_MASTER, model.NIK, model.Fullname); } catch (Exception ex) { _logger.Write("error", DateTime.Now, ex.Message, _userAuth.Fullname, ex); alert.Text = StaticMessage.ERR_SAVE_FAILED; } finally { _unitOfWork.Dispose(); } return(alert); }