kreta/Kreta.BusinessLogic/Helpers/OsszefuggoSzakGyakHelper.cs
2024-03-13 00:33:46 +01:00

297 lines
13 KiB
C#

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<DateTime?>(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum);
var szakGyakVegDatum = sysSettingsHelper.GetSystemSettingValue<DateTime?>(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<DataRow>().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<OsszefuggoSzakGyakGridCo> 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<OsszefuggoSzakGyakGridCo> 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<int> nemzetiDokumentumNyelvek = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, dalHandler)).GetSystemSettingValue<List<int>>(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<string>("TanuloNev"));
exportFile.AddCell(i, (int)ExportColumns.Teljesites, item.Field<string>("Teljesitett_BNAME"));
exportFile.AddCell(i, (int)ExportColumns.ErtekelesOsztalyzat, item.Field<string>("ErtekelesOsztalyzatId_DNAME"));
exportFile.AddCell(i, (int)ExportColumns.ErtekelesSzoveges, item.Field<string>("ErtekelesSzoveg"));
exportFile.AddCell(i, (int)ExportColumns.Datum, item.Field<string>("TeljesitesDatumFormatted"));
exportFile.AddCell(i, (int)ExportColumns.Megjegyzes, item.Field<string>("Megjegyzes"));
i++;
}
return manager.CreateExcelExport(new List<ExcelExportItem> { exportFile });
}
public enum ExportColumns
{
TanuloNeve = 0,
Teljesites,
ErtekelesOsztalyzat,
ErtekelesSzoveges,
Datum,
Megjegyzes,
}
#endregion Export
}
}