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

293 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.Core.ConnectionType;
using Kreta.Core.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 ZaradekHelper : LogicBase
{
public ZaradekHelper(IConnectionType connectionType) : base(connectionType) { }
public ZaradekCo GetZaradekById(int Id)
{
return Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.ZaradekDal();
var entity = dal.Get(Id);
var result = new ZaradekCo(entity);
return result;
});
}
public void DeleteZaradek(int Id, bool isOfo)
{
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.ZaradekDal();
var entity = dal.Get(Id);
var hasError = false;
var errorMessage = new StringBuilder();
if (h.OsztalyCsoport().GetIsOsztaly(entity.TanuloCsoport.OsztalyCsoportId))
{
hasError = ValidateUtolsoKiVagyAtsorolasiZaradek(errorMessage, entity, dal);
}
if (isOfo || hasError)
{
ValidateOfo(h, errorMessage, entity.IsKiVagyAtsorolasiZaradek);
if (errorMessage.Length > 0)
{ throw new BlException(errorMessage.ToString()); }
}
dal.Delete(entity);
});
}
public void SaveZaradek(ZaradekCo co, bool isOfo, bool isAdmin, int? tanevId = null)
{
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
Validate(h, co, isOfo, isAdmin);
SaveZaradek(h, co, tanevId);
});
}
public List<ZaradekCo> GetZaradekok(List<int> nemzetiDokumentumNyelvek, int tanuloCsoportId, int? tanuloId = null)
{
DataSet ds = Dal.CustomConnection.Run(ConnectionType, (h) => h.ZaradekDal().GetZaradekok(TanevId, IntezmenyId, nemzetiDokumentumNyelvek, tanuloCsoportId, tanuloId));
var coList = new List<ZaradekCo>();
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
coList.Add(new ZaradekCo
{
Id = row.Field<int>("Id"),
KeltezesDatuma = row.Field<DateTime?>("KeltezesDatuma"),
KeltezesHelye = row.Field<string>("KeltezesHelye"),
TanuloCsoportId = row.Field<int>("TanuloCsoportId"),
TanuloId = row.Field<int>("TanuloId"),
RogzitoId = row.Field<int>("RogzitoId"),
RogzitesDatuma = row.Field<DateTime>("RogzitesDatuma"),
ZaradekSzovegek = row.Field<string>("IdegenNyelvSzovegek"),
ZaradekSzovegList = new List<ZaradekNyelvCo> { new ZaradekNyelvCo() { NyelvId = (int)AnyanyelvEnum.magyar, Szoveg = row.Field<string>("Szoveg") } },
IsKiVagyAtsorolasiZaradek = SDAConvert.ToBooleanFromTF(row["IsKiVagyAtsorolasiZaradek"]),
OsztalyNev = row.Field<string>("OsztalyNev"),
IsKapcsolodo = SDAConvert.ToBooleanFromTF(row["IsKapcsolodo"]),
IsTorolheto = SDAConvert.ToBooleanFromTF(row["IsTorolheto"]),
IsOsztaly = SDAConvert.ToBooleanFromTF(row["IsOsztaly"])
});
}
}
return coList;
}
public void SaveZaradekTobbesModositas(ZaradekCo co, bool isOfo, bool isAdmin, List<int> tanuloCsoportIdList)
{
if (tanuloCsoportIdList.Any())
{
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
Validate(h, co, isOfo, isAdmin);
foreach (var tanuloCsoportId in tanuloCsoportIdList)
{
co.TanuloCsoportId = tanuloCsoportId;
co.Id = null;
SaveZaradek(h, co);
}
});
}
}
public void OsszesZaradekTorlese(List<int> tanuloCsoportIdList, bool isOsztalyList)
{
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.ZaradekDal();
dal.DeleteAll(tanuloCsoportIdList, FelhasznaloId, isOsztalyList);
});
}
public void LegutobbRogzitettZaradekokTorlese(List<int> tanuloCsoportIdList, bool isOsztalyList)
{
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.ZaradekDal();
dal.DeleteLasts(tanuloCsoportIdList, FelhasznaloId, isOsztalyList);
});
}
private void SaveZaradek(IDalHandler h, ZaradekCo co, int? tanevId = null)
{
var dal = h.ZaradekDal();
IZaradek entity;
if (co.Id.HasValue)
{
entity = dal.Get(co.Id.Value);
}
else
{
entity = dal.Get();
entity.TanevId = tanevId ?? TanevId;
entity.RogzitesDatuma = DateTime.Now;
entity.RogzitoId = co.RogzitoId;
entity.TanuloCsoportId = co.TanuloCsoportId.Value;
}
entity.IsBizonyitvanybanMegjelenik = co.IsBizonyitvanybanMegjelenik;
entity.IsKiVagyAtsorolasiZaradek = co.IsKiVagyAtsorolasiZaradek;
entity.IsOsztalynaplobanMegjelenik = co.IsOsztalynaplobanMegjelenik;
entity.IsTorzslaponMegjelenik = co.IsTorzslaponMegjelenik;
entity.KeltezesDatuma = co.KeltezesDatuma.Value;
entity.KeltezesHelye = co.KeltezesHelye;
entity.Szoveg = co.ZaradekSzovegList.Single(x => x.NyelvId == (int)AnyanyelvEnum.magyar).Szoveg;
entity.UtolsoModositasDatuma = DateTime.Now;
entity.UtolsoModositoId = FelhasznaloId;
if (co.Id.HasValue)
{
dal.FullUpdate(entity);
}
else
{
co.Id = dal.Insert(entity);
}
foreach (var zaradekNyelv in co.ZaradekSzovegList.Where(x => x.NyelvId != (int)AnyanyelvEnum.magyar))
{
var zaradekNyelvEntity = entity.ZaradekNyelv.SingleOrDefault(x => x.NyelvId == zaradekNyelv.NyelvId && !x.Torolt);
if (zaradekNyelvEntity != null)
{
if (!string.IsNullOrWhiteSpace(zaradekNyelv.Szoveg))
{
zaradekNyelvEntity.Szoveg = zaradekNyelv.Szoveg;
dal.UpdateIdegenNyelv(zaradekNyelvEntity);
}
else
{
dal.DeleteIdegenNyelv(zaradekNyelvEntity);
}
}
else
{
var idegenNyelvEntity = dal.GetIdegenNyelv();
idegenNyelvEntity.NyelvId = zaradekNyelv.NyelvId;
idegenNyelvEntity.Szoveg = zaradekNyelv.Szoveg;
idegenNyelvEntity.ZaradekId = co.Id.Value;
dal.InsertIdegenNyelv(idegenNyelvEntity);
}
}
foreach (var entityZaradekNyelv in entity.ZaradekNyelv.Where(e => !co.ZaradekSzovegList.Any(c => c.NyelvId == e.NyelvId) && !e.Torolt))
{
dal.DeleteIdegenNyelv(entityZaradekNyelv);
}
}
private void Validate(IDalHandler h, ZaradekCo co, bool isOfo, bool isAdmin)
{
if (!isOfo && !isAdmin)
{
throw new BlException(OsztalyCsoportResource.NincsJogosultsagaZaradekFelvetelere);
}
var errorMessage = new StringBuilder();
if (isOfo)
{
ValidateOfo(h, errorMessage, co.IsKiVagyAtsorolasiZaradek);
}
if (string.IsNullOrWhiteSpace(co.KeltezesHelye))
{
errorMessage.Append(OsztalyCsoportResource.KeltezesHelyeKotelezo).Append(Environment.NewLine);
}
if (string.IsNullOrWhiteSpace(co.ZaradekSzovegList.Single(x => x.NyelvId == (int)AnyanyelvEnum.magyar).Szoveg))
{
errorMessage.Append(OsztalyCsoportResource.ZaradekSzovegeKotelezo).Append(Environment.NewLine);
}
if (!co.KeltezesDatuma.HasValue)
{
errorMessage.Append(OsztalyCsoportResource.KeltezesDatumaKotelezo);
}
if (!string.IsNullOrWhiteSpace(errorMessage.ToString()))
{
throw new BlException(errorMessage.ToString());
}
}
private void ValidateOfo(IDalHandler h, StringBuilder errorMessage, bool isKiVagyAtsorolasiZaradek)
{
var systemSettingsHelper = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h));
var isOfoRogzithetEvkoziZaradekot = systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_zaradekat);
var isOfoRogzithetKiVagyAtsorolasiZaradekot = systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Osztalyfonok_kiegeszitheti_osztalyaba_jaro_tanulok_ki_vagy_atsorolsasi_zaradekat);
if (!isOfoRogzithetEvkoziZaradekot)
{
errorMessage.Append(OsztalyCsoportResource.OfoNemRogzithetZaradekot).Append(Environment.NewLine);
}
else if (isKiVagyAtsorolasiZaradek && !isOfoRogzithetKiVagyAtsorolasiZaradekot)
{
errorMessage.Append(OsztalyCsoportResource.OfoNemRogzithetKiVagyAtsorolasiZaradekot).Append(Environment.NewLine);
}
}
private bool ValidateUtolsoKiVagyAtsorolasiZaradek(StringBuilder errorMessage, IZaradek entity, IZaradekDal dal)
{
if (entity.IsKiVagyAtsorolasiZaradek && entity.TanuloCsoport.KilepesDatum.HasValue)
{
if (!IsKiVagyAtsorolasiZaradekTorolheto(entity.TanuloCsoport.ID, entity.ID))
{
errorMessage.Append(OsztalyCsoportResource.OsztalybolKiirtTanuloknakRendelkezniukKellKiAtsorolasiZaradekkal);
return true;
}
}
return false;
}
public bool IsKiVagyAtsorolasiZaradekTorolheto(int tanuloCsoportId, int zaradekId)
{
return Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var tanuloCsoportDal = h.TanuloCsoport();
var tanuloCsoport = tanuloCsoportDal.Get(tanuloCsoportId);
if (!tanuloCsoport.KilepesDatum.HasValue)
{
return true;
}
var zaradekDal = h.ZaradekDal();
return zaradekDal.GetTanuloKiVagyAtsorolasiZaradekai(tanuloCsoportId, zaradekId).Tables[0].AsEnumerable().Any();
});
}
}
}