using System; using System.Collections.Generic; using System.Data; using System.Text; using Kreta.Core.Logic; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Framework; using SDA.DataProvider; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class SapTavolletDal : DataAccessBase, ISapTavolletDal { private static readonly string SqlDateFormat = "yyyyMMdd 00:00:00"; public SapTavolletDal(DalHandler handler) : base(handler) { } #region BaseCRUD public void Delete(ISAPTavollet dto) { var entity = dto as SAPTavollet; entity.Delete(false); DalHelper.Commit(); } public void Delete(int id) { var entity = SAPTavollet.GiveAnInstance(); entity.LoadByID(id); entity.Delete(); DalHelper.Commit(); } public ISAPTavollet Get() { return SAPTavollet.GiveAnInstance(); } public ISAPTavollet Get(int id) { var entity = SAPTavollet.GiveAnInstance(); entity.LoadByID(id); return entity; } public void Insert(ISAPTavollet dto) { var entity = dto as SAPTavollet; entity.Insert(); dto.ID = entity.ID; DalHelper.Commit(); } public void Update(ISAPTavollet dto) { var entity = dto as SAPTavollet; entity.Update(); DalHelper.Commit(); } #endregion public DataSet GetSAPTavolletDataSet(int? alkalmazottId, TavolletSearchPco pco) { var command = new StringBuilder(); var parameters = new List() { new CommandParameter("pAlkalmazottId", (object)alkalmazottId ?? DBNull.Value), new CommandParameter("pTanevId", pco.TanevId), new CommandParameter("pIntezmenyId", pco.IntezmenyId), }; for (int i = 0; i < pco.NaptariEv.Length; i++) { parameters.Add(new CommandParameter($"pKezdete{i}", new DateTime(pco.NaptariEv[i], 1, 1).ToString(SqlDateFormat))); parameters.Add(new CommandParameter($"pKezdeteVege{i}", new DateTime(pco.NaptariEv[i], 1, 1).AddYears(1).ToString(SqlDateFormat))); //az éven átnyúlás miatt a kezdet a lényeg if (i > 0) { command.AppendLine(@" UNION ALL"); } command.Append($@" SELECT t.C_ALKALMAZOTTID as AlkalmazottId ,a.C_SZTSZKOD as SzTSzKod ,t.C_INTEZMENYID as IntezmenyId ,t.C_TAVOLLETKEZDETE as TavolletKezdete ,t.C_TAVOLLETVEGE as TavolletVege ,t.C_TAVOLLETIDOTARTAMANAP as TavolletIdotartamNap ,t.C_TAVOLLETIDOTARTAMAORA as TavolletIdotartamOra ,t.C_TAVOLLETTIPUSID as TavolletTipusId FROM T_SAPTAVOLLET_OSSZES t INNER JOIN T_ALKALMAZOTT_OSSZES a ON (a.ID = t.C_ALKALMAZOTTID OR a.ELOZOTANEVIREKORDID = t.C_ALKALMAZOTTID) AND a.TOROLT = 'F' WHERE t.TOROLT = 'F' AND (a.ID = :pAlkalmazottId OR :pAlkalmazottId IS NULL) AND a.C_ALTANEVID = :pTanevId AND t.C_INTEZMENYID = :pIntezmenyId AND t.C_TAVOLLETKEZDETE >= :pKezdete{i} AND t.C_TAVOLLETKEZDETE < :pKezdeteVege{i} "); } return GetData(command.ToString(), parameters); } public void SyncSapTavollet(Dictionary> tavolletListDict, TavolletSearchPco pco) { //régi rekordok fizikai törlése //TODO: pKezdete és pVege pontosítása, ha szükséges?! using (SDACommand command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; var alkalmazottList = new List(); var elozoTaneviList = new List(); foreach (var item in tavolletListDict) { if (item.Value.Count > 0) { alkalmazottList.Add(item.Value[0].AlkalmazottId); if (item.Value[0].ElozoTaneviAlkalmazottId.HasValue) elozoTaneviList.Add(item.Value[0].ElozoTaneviAlkalmazottId.Value); } } command.Parameters.Add("pAlkalmazottIds", SqlLogic.ParseListToParameter(alkalmazottList)); command.Parameters.Add("pElozoTaneviAlkalmazottIds", (elozoTaneviList.Count > 0 ? SqlLogic.ParseListToParameter(elozoTaneviList) : DBNull.Value)); command.Parameters.Add("pIntezmenyId", pco.IntezmenyId); var commandText = new StringBuilder(); commandText.Append(@" DELETE FROM T_SAPTAVOLLET_OSSZES WHERE (C_ALKALMAZOTTID IN (SELECT value FROM string_split(:pAlkalmazottIds, ',')) OR (:pElozoTaneviAlkalmazottIds IS NOT NULL AND C_ALKALMAZOTTID IN (SELECT value FROM string_split(:pElozoTaneviAlkalmazottIds, ',')))) AND C_INTEZMENYID = :pIntezmenyId AND ( "); for (int i = 0; i < pco.NaptariEv.Length; i++) { if (i > 0) { commandText.AppendLine(@" OR "); } command.Parameters.Add($"pKezdete{i}", new DateTime(pco.NaptariEv[i], 1, 1).ToString(SqlDateFormat)); command.Parameters.Add($"pVege{i}", new DateTime(pco.NaptariEv[i], 1, 1).AddYears(1).ToString(SqlDateFormat)); commandText.AppendLine($@" (C_TAVOLLETKEZDETE >= :pKezdete{i} AND C_TAVOLLETVEGE < :pVege{i})"); } commandText.Append(")"); command.CommandText = commandText.ToString(); command.ExecuteNonQuery(); } //friss rekordok beszúrása foreach (var alkalmazott in tavolletListDict) { ISAPTavollet tavollet; foreach (var item in alkalmazott.Value) { tavollet = SAPTavollet.GiveAnInstance(); tavollet.AlkalmazottId = item.AlkalmazottId; tavollet.TanevId = item.TanevId; tavollet.IntezmenyId = item.IntezmenyId; tavollet.TavolletKezdete = item.TavolletKezdete; tavollet.TavolletVege = item.TavolletVege; tavollet.TavolletIdotartamaNap = item.TavolletIdotartamNap; tavollet.TavolletIdotartamaOra = item.TavolletIdotartamOra; tavollet.TavolletTipusId = item.TavolletTipusId; Insert(tavollet); } } } public DataSet GetTavolletTipusDataSet(int tanevId, int intezmenyId) { var parameters = new List() { new CommandParameter("pTanevId", tanevId), new CommandParameter("pIntezmenyId", intezmenyId) }; var commandText = new StringBuilder($@" SELECT DISTINCT tt.ID AS 'ID' ,tt.C_SAPKOD AS 'SapCode' ,d.C_NAME AS 'Megnevezes' FROM T_TAVOLLETTIPUS_OSSZES tt INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.ID=tt.ID WHERE tt.TOROLT = 'F' AND tt.C_ALTANEVID = :pTanevId AND tt.C_ALINTEZMENYID = :pIntezmenyId "); return GetData(commandText.ToString(), parameters); } } }