297 lines
13 KiB
C#
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
|
|
}
|
|
}
|