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

543 lines
24 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Classes.ComboBox;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Utils;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Core.Exceptions;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.Model.TantargyFelosztas;
using Kreta.DataAccessManual.Util;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Helpers
{
public class TantargyFelosztasHelper : LogicBase
{
public TantargyFelosztasHelper(IConnectionType connectionType) : base(connectionType) { }
public DataSet GetTantargyFelosztasData(int? tanarId = null, int? csoportId = null, List<int> tantargyIds = null, int? targyKatId = null, int? foglalkozasTipusId = null,
int? feladatKategoriaId = null, int? feladatellatasiHelyId = null, int? evfolyamId = null, double? oraszam = null, bool? isImportalt = null, bool osztalybontasokkal = false, bool kapcsolodoCsoportokkal = false, bool isFromSzervezet = false)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
return dal.GetTantargyFelosztasokKereses(tanarId, csoportId, tantargyIds, targyKatId, foglalkozasTipusId, TanevId, evfolyamId, feladatKategoriaId, feladatellatasiHelyId, oraszam: oraszam, isImportalt: isImportalt, osztalybontasokkal: osztalybontasokkal, kapcsolodoCsoportokkal: kapcsolodoCsoportokkal, isFromSzervezet: isFromSzervezet);
});
}
public List<TantargyfelosztasItemCo> GetTantargyFelosztasCoList(TantargyFelosztasKeresesCo searchCo)
{
var coList = GetTantargyfelosztasCoList(searchCo.Tanar, searchCo.OsztalyCsoport, searchCo.IsOsztalybontasokkal, searchCo.IsKapcsolodoCsoportokkal, searchCo.IsFromSzervezet, searchCo.SzervezetId);
return FilterTantargyfelosztasItemCoList(coList, searchCo);
}
public IDictionary<string, string> GetTantargyFelosztasForDDL(int tanarId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
return LogicUtil.CreateDropdownContent(dal.GetFoglalkozasokForDDL(tanarId, TanevId), "ID", "Nev", null);
});
}
public int CreateOrUpdateFelosztas(TantargyFelosztasCO co, bool isForceInsert = false, bool isFromSzervezet = false)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
var dm = new TantargyFelosztasDM
{
Id = co.ID,
TanevId = TanevId,
TanarId = co.TanarID,
OsztalyCsoportId = co.OsztalyCsoportID,
};
if (isFromSzervezet)
{
dm.FoglalkozasTipusa = (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas;
dm.TantargyId = co.TantargyID;
dm.Oraszam = 1;
dm.TuloraSzam = 0;
dm.OsszevontOra = false;
dm.NemzetisegiOra = false;
dm.MegbizasiOraszam = 0;
}
else
{
dm.FoglalkozasTipusa = co.FoglalkozasTipusa;
dm.TantargyId = co.TantargyID;
dm.Oraszam = co.Oraszam;
dm.TuloraSzam = co.TuloraSzam;
dm.OsszevontOra = co.OsszevontOra;
dm.NemzetisegiOra = co.NemzetisegiOra;
dm.MegbizasiOraszam = co.MegbizasiOraszam;
};
if (!CheckTtfCorrectTanevId(helper, dm))
{
throw new BlException(ErrorResource.HibasTanevBeallitasok);
}
var (id, removeFromOrarendOra) = dal.CreateOrUpdateFelosztas(dm, IntezmenyId, isForceInsert);
if (removeFromOrarendOra)
{
helper.OrarendiOra().SetFoglalkozasToNull(id, FelhasznaloId);
}
return id;
});
}
private bool CheckTtfCorrectTanevId(IDalHandler h, TantargyFelosztasDM ttf)
{
var osztalyCsoport = h.OsztalyCsoport().Get(ttf.OsztalyCsoportId);
var tanar = h.Alkalmazott().Get(ttf.TanarId);
var tantargy = h.Tantargy().GetTantargy(ttf.TantargyId);
var tanevIds = new List<int>
{
osztalyCsoport.TanevId,
tanar.TanevId,
tantargy.TanevId
};
return tanevIds.All(t => t == TanevId);
}
internal DataSet GetTTFToExport(int? tanarId, int? csoportId, int? tantargyId, int? targyKatId, int? foglalkozasTipusId, int? feladatKategoriaId, int? feladatellatasiHelyId, int? evfolyamId, double? oraszam, bool? isImportalt, bool osztalybontasokkal, bool kapcsolodoCsoportokkal, bool isFromSzervezet)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
return dal.GetTTFToExport(TanevId, tanarId, csoportId, tantargyId, targyKatId, foglalkozasTipusId, feladatKategoriaId, feladatellatasiHelyId, evfolyamId, oraszam, isImportalt, osztalybontasokkal, kapcsolodoCsoportokkal, isFromSzervezet);
});
}
public TantargyFelosztasCO GetTantargyFelosztas(int felosztasId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var entity = helper.Foglalkozas().Get(felosztasId);
bool modosithato = entity.OrarendiOra.Count == 0 && entity.TanitasiOra.Count == 0;
return new TantargyFelosztasCO()
{
ID = felosztasId,
FoglalkozasTipusa = entity.FoglalkozasTipusa,
Oraszam = entity.Oraszam,
OsztalyCsoportID = entity.OsztalyCsoportId,
TanarID = entity.TanarId,
TantargyID = entity.TantargyId,
TanevID = entity.TanevId,
Modosithato = modosithato,
Nev = !string.IsNullOrWhiteSpace(entity.Nev) ? entity.Nev : string.Empty,
OsszevontOra = entity.IsOsszevontOra,
NemzetisegiOra = entity.IsNemzetisegi,
MegbizasiOraszam = entity.MegbizasiOraszam,
TuloraSzam = entity.TuloraSzam
};
});
}
public TantargyFelosztasKapcsolataiCO GetTantargyFelosztasKapcsolatai(int felosztasId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
DataTable table = dal.GetTantargyFelosztasKapcsolatai(felosztasId, TanevId).Tables[0];
if (table.Rows.Count > 0)
{
return new TantargyFelosztasKapcsolataiCO
{
DiakokSzama = Convert.ToInt32(table.Rows[0]["DiakokSzama"]),
TanorakSzama = Convert.ToInt32(table.Rows[0]["TanorakSzama"]),
ErtekelesekSzama = Convert.ToInt32(table.Rows[0]["ErtekelesekSzama"]),
MulasztasokSzama = Convert.ToInt32(table.Rows[0]["MulasztasokSzama"])
};
}
return new TantargyFelosztasKapcsolataiCO();
});
}
public DataSet GetFormazottTTFExport(int formatMode)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
return helper.TantargyFelosztas().GetFormazottTTFExport(IntezmenyId, TanevId, formatMode, IntezmenyAzonosito);
});
}
public TantargyFelosztasAlapAdatokCO GetTantargyFelosztasAdatok(int felosztasId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
DataTable table = dal.GetTantargyFelosztasAdatok(felosztasId).Tables[0];
if (table.Rows.Count > 0)
{
return new TantargyFelosztasAlapAdatokCO
{
Csoport = table.Rows[0]["OsztalyCsoportNev"].ToString(),
FoglalkozasHelye = table.Rows[0]["FeladatellatasiHelyNev"].ToString(),
FoglalkozasTipus = table.Rows[0]["FoglalkozasTipusa"].ToString(),
HetiOraszam = table.Rows[0]["Oraszam"].ToString(),
MunkakorTipus = table.Rows[0]["MunkakorTipus"].ToString(),
MunkavallaloNev = table.Rows[0]["MunkavallaloNev"].ToString(),
Tantargynev = table.Rows[0]["Tantargy"].ToString(),
Tanev = table.Rows[0]["Tanev"].ToString(),
TuloraSzam = table.Rows[0]["TuloraSzam"].ToString(),
OsszevontOra = table.Rows[0]["OsszevontOra_BNAME"].ToString(),
NemzetisegiOra = table.Rows[0]["NemzetisegiOra_BNAME"].ToString(),
MegbizasiOraszam = table.Rows[0]["MegbizasiOraszam"].ToString()
};
}
return new TantargyFelosztasAlapAdatokCO();
});
}
public void DeleteTargyFelosztas(int id)
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
var foglalkozas = helper.Foglalkozas().Get(id);
dal.Delete(foglalkozas);
});
}
public DataSet GetTantargyFoglalkozasai(int tantargyId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
return dal.GetTantargyFoglalkozasai(tantargyId, TanevId);
});
}
public void DeleteAllTargyFelosztas()
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
dal.DeleteAllTargyFelosztas(TanevId);
});
}
public DataSet GetFoglalkozasok(int? tanarId, int? osztalyId = null, bool? isOsszefuggoSzakGyak = null, bool filterNincsBeloleOra = false, bool isKapcsolodoCsoportok = false)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
return dal.GetFoglalkozasok(TanevId, tanarId, osztalyId, isOsszefuggoSzakGyak, filterNincsBeloleOra, isKapcsolodoCsoportok);
});
}
public void TantargyfelosztasVisszamenolegesModositas(TantargyFelosztasVisszamenolegesCO data)
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
dal.TantargyfelosztasVisszamenolegesModositas(IntezmenyId, TanevId, FelhasznaloId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data));
});
}
public List<int> GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(TantargyFelosztasVisszamenolegesCO data)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
List<int> list = new List<int>();
DataSet ds = dal.GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(IntezmenyId, TanevId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data));
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow item in ds.Tables[0].Rows)
{
list.Add(SDAConvert.ToInt32(item["EredetiErtekelesId"].ToString()));
}
}
return list;
});
}
public void UpdateOrarendiOraAfterTantargyfelosztasUpdate(TantargyFelosztasVisszamenolegesCO data)
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
dal.UpdateOrarendiOraAfterTantargyfelosztasUpdate(IntezmenyId, TanevId, FelhasznaloId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data));
});
}
public void RemoveOrarendiOraTTFRelation(int ttfId)
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
dal.RemoveOrarendiOraTTFRelation(IntezmenyId, TanevId, ttfId);
});
}
public DataSet TantargyfelosztasbanValtozoOrarendiOrak(TantargyFelosztasVisszamenolegesCO data)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
return dal.TantargyfelosztasbanValtozoOrarendiOrak(IntezmenyId, TanevId, TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(data));
});
}
public void FizikaiTorlesTantargyfelosztas()
{
Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
dal.FizikaiTorlesTantargyfelosztas(IntezmenyId, TanevId, FelhasznaloId);
});
}
public DataSet GetFoglalkozasById(int TTFId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
return helper.TantargyFelosztas().GetFoglalkozasById(TTFId);
});
}
public DataSet GetFoglalkozasDataById(int TTFId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
return helper.TantargyFelosztas().GetFoglalkozasDataById(TTFId);
});
}
public List<ComboBoxListItem> GetTanarAltalErtekelhetoCsoportokForDDL(int szuperOsztalyfonok, DateTime date, string osztalyGroupName = null, string csoportGroupName = null)
{
if (string.IsNullOrWhiteSpace(osztalyGroupName))
{ osztalyGroupName = CommonResource.Osztaly; } /*Osztály*/
if (string.IsNullOrWhiteSpace(csoportGroupName))
{ csoportGroupName = CommonResource.Csoport; } /*Csoport*/
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
var ds = dal.GetTanarAltalErtekelhetoCsoportok(FelhasznaloId, TanevId, szuperOsztalyfonok, date, osztalyGroupName, csoportGroupName);
return LogicUtil.CreateMvcGroupedSelectListItem(ds, "OsztalyCsoportId", "Nev", "GroupName");
});
}
public IDictionary<string, string> GetTanarDolgozatTantargyakForDDL(int szuperOsztalyfonok, DateTime date)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
return LogicUtil.CreateDropdownContent(dal.GetTanarDolgozatTantargyak(FelhasznaloId, TanevId, szuperOsztalyfonok, date), "TantargyId", "TantargyNev", null);
});
}
public List<TantargyfelosztasItemCo> GetTantargyfelosztasCoList(int? alkalmazottId = null, int? osztalyCsoportId = null, bool isOsztalybontasokkal = false, bool isKacsolodoCsoportokkal = false, bool isFromSzervezet = false, int? szervezetId = null)
{
var dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Foglalkozas().GetTantargyfelosztasDataSet(IntezmenyId, TanevId, alkalmazottId, osztalyCsoportId, isOsztalybontasokkal: isOsztalybontasokkal, isKapcsolodoCsoportokkal: isKacsolodoCsoportokkal, isFromSzervezet: isFromSzervezet, szervezetId: szervezetId));
var coList = new List<TantargyfelosztasItemCo>();
var szervezetIds = new List<int>();
var intezmenyiAdminIds = new List<int>();
if (isFromSzervezet)
{
szervezetIds = !szervezetId.IsEntityId() ? new List<int>() : Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.SzervezetDal().GetLathatoSzervezetek(IntezmenyId, TanevId, szervezetId, (int)SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek));
intezmenyiAdminIds = szervezetId.IsEntityId() ? new List<int>() : Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.Felhasznalo().GetAllIntezmenyiAdmin(TanevId));
}
foreach (DataRow dataRow in dataSet.Tables[0].Rows)
{
var iSzerkesztheto = true;
if (isFromSzervezet)
{
var rowSzervezetId = dataRow.Field<int?>("SzervezetId");
var isSzerkesztheto = (szervezetId.IsEntityId() && rowSzervezetId.IsEntityId() && szervezetIds.Contains(rowSzervezetId.Value)) ||
(!szervezetId.IsEntityId() && intezmenyiAdminIds.Contains(FelhasznaloId) && intezmenyiAdminIds.Contains(dataRow.Field<int?>("RogzitoId") ?? FelhasznaloId));
}
var item = new TantargyfelosztasItemCo(dataRow, iSzerkesztheto);
if (item.IsOsszevontOra)
{
item.TtfKorrekcioOraszam = item.Oraszam;
item.Oraszam = 0;
}
else
{
item.TtfKorrekcioOraszam = 0;
}
coList.Add(item);
}
return coList;
}
public bool DuplicatedTantargyfelosztas(int tanarId, int osztalyCsoportId, int tantargyId, int? id)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas(GridParameters);
return dal.TantargyFelosztasLetezik(tanarId, osztalyCsoportId, tantargyId, id, TanevId).IsEntityId();
});
}
public void CreateOrUpdateEgyeniTantargyFelosztasForAMI(FoglalkozasAmiTanuloCo co)
{
co.TantargyfelosztasCo.ID = CreateOrUpdateFelosztas(co.TantargyfelosztasCo, isForceInsert: true);
InsertOrUpdateFoglalkozasAmiTanulo(co);
}
public void InsertOrUpdateFoglalkozasAmiTanulo(FoglalkozasAmiTanuloCo co)
{
Dal.CustomConnection.Run(ConnectionType, h =>
{
var dal = h.FoglalkozasAmiTanuloDal();
IFoglalkozasAmiTanulo entity;
if (co.AmiFoglalkozasId.IsEntityId())
{ entity = dal.Get(co.AmiFoglalkozasId.Value); }
else
{ entity = dal.Get(); }
entity.TanevId = TanevId;
entity.FoglalkozasId = co.TantargyfelosztasCo.ID.Value;
entity.AMIFotargyId = co.AMIFotargyId;
entity.AmiTagozatId = co.AmiTagozatId;
entity.AMITantargyKotelezosegId = co.AMITantargyKotelezosegId;
entity.EvfolyamTipusId = co.EvfolyamTipusId;
entity.TanuloId = co.TanuloId;
if (co.AmiFoglalkozasId.IsEntityId())
{ dal.FullUpdate(entity); }
else
{ dal.Insert(entity); }
});
}
public void DeleteFoglalkozasAmiTanulo(int foglalkozasAmiTanuloId)
{
Dal.CustomConnection.Run(ConnectionType, h => h.FoglalkozasAmiTanuloDal().Delete(foglalkozasAmiTanuloId));
}
public (bool, string, string) ValidateAmiCsoportTtf(int osztalyCsoportId, int tanarId, int tantargyId, int id)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
var ds = dal.GetFoglalkozasokByOsztalyCsoport(osztalyCsoportId, TanevId);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row.Field<int>("TanarId") == tanarId && row.Field<int>("TantargyId") == tantargyId && row.Field<int>("ID") != id)
{
return (false, row.Field<string>("TanarNev"), row.Field<string>("TantargyNev"));
}
}
}
return (true, string.Empty, string.Empty);
});
}
public int GetTeremByFoglalkozas(int foglalkozasId)
{
return Dal.CustomConnection.Run(ConnectionType, helper =>
{
var dal = helper.TantargyFelosztas();
return dal.GetTeremByFoglalkozas(foglalkozasId);
});
}
private List<TantargyfelosztasItemCo> FilterTantargyfelosztasItemCoList(List<TantargyfelosztasItemCo> coList, TantargyFelosztasKeresesCo searchCo)
{
if (searchCo == null)
{
return coList;
}
IEnumerable<TantargyfelosztasItemCo> result = coList;
if (searchCo.FeladatKategoriaId.IsEntityId() && !searchCo.IsFromSzervezet)
{
result = result.Where(x => x.FeladatKategoriaId == searchCo.FeladatKategoriaId.Value);
}
if (searchCo.Tanar.IsEntityId())
{
result = result.Where(x => x.TanarId == searchCo.Tanar.Value);
}
if (searchCo.Tantargy.IsEntityId())
{
result = result.Where(x => x.TantargyId == searchCo.Tantargy.Value);
}
if (searchCo.Feladatellatasihely.IsEntityId() && !searchCo.IsFromSzervezet)
{
result = result.Where(x => x.FeladatEllatasihelyId == searchCo.Feladatellatasihely.Value);
}
if (searchCo.Oraszam.HasValue)
{
result = result.Where(x => x.Oraszam == searchCo.Oraszam.Value);
}
if (searchCo.IsFromSzervezet)
{
result = result.Where(x => x.TipusId == (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas);
}
else
{
result = result.Where(x => x.TipusId != (int)Enums.FoglalkozasTipusEnum.dualis_foglalkozas || !x.SzervezetId.IsEntityId());
}
if (!string.IsNullOrWhiteSpace(searchCo.DualisKepzohelyNeve))
{
result = result.Where(x => x.DualisKepzohelyNeve.Contains(searchCo.DualisKepzohelyNeve));
}
if (!string.IsNullOrWhiteSpace(searchCo.DualisKepzohelyAdoszama))
{
result = result.Where(x => x.DualisKepzohelyAdoszama.Contains(searchCo.DualisKepzohelyAdoszama));
}
return result.ToList();
}
public bool ValidateTantargyfelosztasVisszamenolegesModositas(TantargyFelosztasVisszamenolegesCO co, out string errorMessage)
{
errorMessage = null;
var ds = Dal.CustomConnection.Run(ConnectionType, h =>
{
var dal = h.TantargyFelosztas();
var pco = TantargyFelosztasVisszamenolegesCO.ConvertCOToPCO(co);
return dal.ValidateTantargyfelosztasVisszamenolegesModositas(pco);
});
var utkozoDatumok = ds.Tables[0].AsEnumerable().Select(r => r.Field<DateTime>("Datum").ToString(Constants.ToStringPattern.HungarianDate));
if (utkozoDatumok.Any())
{
errorMessage = string.Format(TantargyfelosztasResource.TtfVisszamenolegesModositasHiba, string.Join(", ", utkozoDatumok));
}
return string.IsNullOrWhiteSpace(errorMessage);
}
public void HandleTanarValtozasOrarendiOrakon(int foglalkozasId)
{
Dal.CustomConnection.Run(ConnectionType, h =>
{
h.TantargyFelosztas().HandleTanarValtozasOrarendiOrakon(foglalkozasId);
});
}
}
}