using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Classes.ExcelHelpers; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Validation.Exceptions; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class OsszefuggoSzakGyakHelper : LogicBase { #region Constructors public OsszefuggoSzakGyakHelper(IConnectionType connectionType) : base(connectionType) { } #endregion Constructors public DataSet GetOsszefuggoSzakGyakGrid(int csoportId, int tantargyId) { return Dal.CustomConnection.Run(ConnectionType, h => { var sysSettingsHelper = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)); var szakGyakKezdDatum = sysSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum); var szakGyakVegDatum = sysSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_veg_datum); DataSet dataSet = h.OsszefuggoSzakGyakDal(GridParameters).GetOsszefuggoSzakGyakGrid(csoportId, tantargyId, szakGyakKezdDatum.Value, szakGyakVegDatum.Value); DataTable dataTable = dataSet.Tables[0]; dataTable.Columns.Add("TeljesitesDatumFormatted"); foreach (DataRow dataRow in dataTable.Rows.Cast().ToList()) { dataRow["TeljesitesDatumFormatted"] = SDAConvert.ToDateTime(dataRow["TeljesitesDatum"]).ToShortDateString(); if (dataRow["ErtekelesSzoveg"] == DBNull.Value || dataRow["ErtekelesSzoveg"].ToString() == "null") { dataRow["ErtekelesSzoveg"] = string.Empty; } if (dataRow["Megjegyzes"] == DBNull.Value || dataRow["Megjegyzes"].ToString() == "null") { dataRow["Megjegyzes"] = string.Empty; } } return dataSet; }); } public void SaveOsszefuggoSzakGyakGrid(List coList) { Validate(coList); Dal.CustomConnection.Run(ConnectionType, h => { var osszefuggoSzakGyakDal = h.OsszefuggoSzakGyakDal(); var tanuloDal = h.Tanulo(); var tanuloErtekelesDal = h.TanuloErtekelesDal(); foreach (var co in coList) { var tanuloEntity = tanuloDal.Get(co.ID); var osszefuggoSzakGyakEntity = tanuloEntity.OsszefuggoSzakGyak.SingleOrDefault(x => !x.Torolt && x.TantargyId == co.TantargyId && x.CsoportId == co.CsoportId); if (co.IsRowToDelete) { if (osszefuggoSzakGyakEntity != null) { osszefuggoSzakGyakDal.Delete(osszefuggoSzakGyakEntity); } } else { if (osszefuggoSzakGyakEntity == null) { Insert(h, osszefuggoSzakGyakDal, co); } else { Update(h, osszefuggoSzakGyakDal, tanuloErtekelesDal, co, osszefuggoSzakGyakEntity); } } } }); } private void Validate(List coList) { var errorMessage = new StringBuilder(); foreach (var co in coList) { if (co.Teljesitett.HasValue && !co.TeljesitesDatum.HasValue || !co.Teljesitett.HasValue && co.TeljesitesDatum.HasValue || !co.Teljesitett.HasValue && !co.TeljesitesDatum.HasValue && (co.ErtekelesOsztalyzatId.HasValue || !string.IsNullOrWhiteSpace(co.ErtekelesSzoveg) || !string.IsNullOrWhiteSpace(co.Megjegyzes))) { errorMessage.Append($"{co.TanuloNev} {FeljegyzesekResource.XtanuloAdatsoraHibas} {FeljegyzesekResource.TeljesitveValasztoEsTeljesitesDatumKotelezoVagyMindennekUresnekKellLennieTorlesEseten}"); errorMessage.AppendLine(); } if (!string.IsNullOrWhiteSpace(co.Megjegyzes) && co.Megjegyzes.Length > Constants.General.EgybefuggoSzakmaiGyakorlatMegjegyzesMaxHossza) { errorMessage.Append($"{co.TanuloNev} {FeljegyzesekResource.XtanuloAdatsoraHibas} {ErrorResource.AMegjegyzesMaximum4000KarakterLehet}"); errorMessage.AppendLine(); } } if (errorMessage.Length > 0) { throw new ValidationException(errorMessage.ToString()); } } private void Insert(IDalHandler dalHandler, IOsszefuggoSzakGyakDal osszefuggoSzakGyakDal, OsszefuggoSzakGyakGridCo co) { var osszefuggoSzakGyakEntity = osszefuggoSzakGyakDal.Get(); osszefuggoSzakGyakEntity.Teljesitett = co.Teljesitett; osszefuggoSzakGyakEntity.TeljesitesDatum = co.TeljesitesDatum; osszefuggoSzakGyakEntity.Megjegyzes = !string.IsNullOrWhiteSpace(co.Megjegyzes) ? co.Megjegyzes : null; osszefuggoSzakGyakEntity.TanuloId = co.ID; osszefuggoSzakGyakEntity.CsoportId = co.CsoportId; osszefuggoSzakGyakEntity.TantargyId = co.TantargyId; osszefuggoSzakGyakDal.Insert(osszefuggoSzakGyakEntity); if (co.ErtekelesOsztalyzatId.HasValue) { SaveErtekeles(dalHandler, co, osszefuggoSzakGyakEntity.ID, false); } if (!string.IsNullOrWhiteSpace(co.ErtekelesSzoveg)) { SaveErtekeles(dalHandler, co, osszefuggoSzakGyakEntity.ID, true); } } private void Update(IDalHandler dalHandler, IOsszefuggoSzakGyakDal osszefuggoSzakGyakDal, ITanuloErtekelesDal tanuloErtekelesDal, OsszefuggoSzakGyakGridCo co, IOsszefuggoSzakGyak osszefuggoSzakGyakEntity) { osszefuggoSzakGyakEntity.Teljesitett = co.Teljesitett; osszefuggoSzakGyakEntity.TeljesitesDatum = co.TeljesitesDatum; osszefuggoSzakGyakEntity.Megjegyzes = !string.IsNullOrWhiteSpace(co.Megjegyzes) ? co.Megjegyzes : null; osszefuggoSzakGyakDal.FullUpdate(osszefuggoSzakGyakEntity); var ertekelesOsztalyzatEntity = osszefuggoSzakGyakEntity.TanuloErtekeles.SingleOrDefault(x => !x.Torolt && x.ErtekelesOsztalyzatId.HasValue); if (co.ErtekelesOsztalyzatId.HasValue) { if (ertekelesOsztalyzatEntity == null) { SaveErtekeles(dalHandler, co, osszefuggoSzakGyakEntity.ID, false); } else { UpdateErtekeles(dalHandler, co, ertekelesOsztalyzatEntity, false); } } else { DeleteErtekeles(tanuloErtekelesDal, ertekelesOsztalyzatEntity); } var ertekelesSzovegEntity = osszefuggoSzakGyakEntity.TanuloErtekeles.SingleOrDefault(x => !x.Torolt && !string.IsNullOrWhiteSpace(x.ErtekelesSzoveg)); if (!string.IsNullOrWhiteSpace(co.ErtekelesSzoveg)) { if (ertekelesSzovegEntity == null) { SaveErtekeles(dalHandler, co, osszefuggoSzakGyakEntity.ID, true); } else { UpdateErtekeles(dalHandler, co, ertekelesSzovegEntity, true); } } else { DeleteErtekeles(tanuloErtekelesDal, ertekelesSzovegEntity); } } private void SaveErtekeles(IDalHandler dalHandler, OsszefuggoSzakGyakGridCo co, int osszefuggoSzakGyakId, bool isSzoveg) { var ertekeles = SetTanuloErtekelesCo(co, osszefuggoSzakGyakId); if (isSzoveg) { ertekeles.ErtekelesSzoveg = co.ErtekelesSzoveg; ertekeles.ErtekelesSzovegFormazott = co.ErtekelesSzoveg; } else { ertekeles.ErtekelesOsztalyzatId = co.ErtekelesOsztalyzatId; } SaveOrUpdateTanuloErtekeles(dalHandler, ertekeles); } private void UpdateErtekeles(IDalHandler dalHandler, OsszefuggoSzakGyakGridCo co, ITanuloErtekeles ertekelesEntity, bool isSzoveg) { List nemzetiDokumentumNyelvek = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, dalHandler)).GetSystemSettingValue>(RendszerBeallitasTipusEnum.Nemzeti_Nyelvi_Dokumentum_Nyelvek); var ertekeles = new TanuloErtekelesCo(ertekelesEntity, nemzetiDokumentumNyelvek, TanevId); ertekeles.Datum = co.TeljesitesDatum.Value; if (isSzoveg) { ertekeles.ErtekelesSzoveg = co.ErtekelesSzoveg; ertekeles.ErtekelesSzovegFormazott = co.ErtekelesSzoveg; } else { ertekeles.ErtekelesOsztalyzatId = co.ErtekelesOsztalyzatId; } SaveOrUpdateTanuloErtekeles(dalHandler, ertekeles); } private void SaveOrUpdateTanuloErtekeles(IDalHandler dalHandler, TanuloErtekelesCo ertekeles) { var helper = new TanuloErtekelesHelper(new DalHandlerConnectionType(ConnectionType, dalHandler)); helper.SaveOrUpdateTanuloErtekeles(FelhasznaloId, ertekeles); } private void DeleteErtekeles(ITanuloErtekelesDal tanuloErtekelesDal, ITanuloErtekeles ertekelestEntity) { if (ertekelestEntity != null && ertekelestEntity.ID.IsEntityId()) { tanuloErtekelesDal.Delete(ertekelestEntity.ID); } } private TanuloErtekelesCo SetTanuloErtekelesCo(OsszefuggoSzakGyakGridCo co, int osszefuggoSzakGyakId) { var ertekeles = new TanuloErtekelesCo { TanuloId = co.ID, TantargyId = co.TantargyId, ErtekelesModId = (int)ErtekelesModEnum.na, ErtekelesTema = TanuloErtekelesResource.OsszefuggoSzakmaiGyakorlat, OsztalyCsoportId = co.CsoportId, ErtekeloId = FelhasznaloId, Datum = co.TeljesitesDatum.Value, TipusId = (int)ErtekelesTipusEnum.evkozi_jegy_ertekeles, OsszefuggoSzakGyakId = osszefuggoSzakGyakId }; return ertekeles; } #region Export public MemoryStream Export(int csoportId, int tantargyId) { var manager = new ExcelExportManager(); var exportFile = new ExcelExportItem(); exportFile.AddColumn((int)ExportColumns.TanuloNeve, FeljegyzesekResource.TanuloNeve); exportFile.AddColumn((int)ExportColumns.Teljesites, FeljegyzesekResource.Teljesitve); exportFile.AddColumn((int)ExportColumns.ErtekelesOsztalyzat, FeljegyzesekResource.Erdemjegy); exportFile.AddColumn((int)ExportColumns.ErtekelesSzoveges, FeljegyzesekResource.SzovegesErtekeles); exportFile.AddColumn((int)ExportColumns.Datum, FeljegyzesekResource.Datum); exportFile.AddColumn((int)ExportColumns.Megjegyzes, FeljegyzesekResource.Megjegyzes); var dataSet = this.GetOsszefuggoSzakGyakGrid(csoportId, tantargyId); dataSet = dataSet.DataSetSort("TanuloNev"); var i = 2; foreach (var item in dataSet.Tables[0].AsEnumerable()) { exportFile.AddCell(i, (int)ExportColumns.TanuloNeve, item.Field("TanuloNev")); exportFile.AddCell(i, (int)ExportColumns.Teljesites, item.Field("Teljesitett_BNAME")); exportFile.AddCell(i, (int)ExportColumns.ErtekelesOsztalyzat, item.Field("ErtekelesOsztalyzatId_DNAME")); exportFile.AddCell(i, (int)ExportColumns.ErtekelesSzoveges, item.Field("ErtekelesSzoveg")); exportFile.AddCell(i, (int)ExportColumns.Datum, item.Field("TeljesitesDatumFormatted")); exportFile.AddCell(i, (int)ExportColumns.Megjegyzes, item.Field("Megjegyzes")); i++; } return manager.CreateExcelExport(new List { exportFile }); } public enum ExportColumns { TanuloNeve = 0, Teljesites, ErtekelesOsztalyzat, ErtekelesSzoveges, Datum, Megjegyzes, } #endregion Export } }