kreta/Kreta.BusinessLogic/Classes/MobileApi/Naplo/V2/Logic/JavasoltJelenletTemplateLogic.cs
2024-03-13 00:33:46 +01:00

288 lines
22 KiB
C#

namespace Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Logic
{
using System.Collections.Generic;
using System.Linq;
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Ora.Common;
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Ora.JavasoltJelenletTemplate;
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Enum;
using Kreta.Core.Validation.Exceptions;
using Kreta.Core.Validation.Exceptions.Enum;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
/// TODO: Optional refact: lehetne dictionary a template, sokkal optimálisabb lenne (DevKornél)
public class JavasoltJelenletTemplateLogic
{
private static readonly List<JavasoltJelenletTemplateGetResponseCo> OrarendiOraJavasoltJelenlet = new List<JavasoltJelenletTemplateGetResponseCo> {
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Default,
Prioritas = 1,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.ElozoOranHianyzott,
Prioritas = 2,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Igazolas,
Prioritas = 3,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.ParhuzamosOranNaplozott,
Prioritas = 4,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.MagantanuloOralatogatasAloliMentesseg,
Prioritas = 5,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Felmentes,
Prioritas = 6,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.SzakmaiGyakorlat,
Prioritas = 7,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.JogviszonySzuneteltetes,
Prioritas = 8,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(true,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
}
};
private static readonly List<JavasoltJelenletTemplateGetResponseCo> TanitasiOraJavasoltJelenlet = new List<JavasoltJelenletTemplateGetResponseCo> {
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Default,
Prioritas = 1,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true, MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.ElozoOranHianyzott,
Prioritas = 2,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Igazolas,
Prioritas = 3,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false, true, MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false, true, MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false, true, MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false, true, MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.ParhuzamosOranNaplozott,
Prioritas = 4,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.MagantanuloOralatogatasAloliMentesseg,
Prioritas = 5,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.Felmentes,
Prioritas = 6,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo (false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo (false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo (false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo (false,false,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.SzakmaiGyakorlat,
Prioritas = 7,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.keses)
}
},
new JavasoltJelenletTemplateGetResponseCo{
Tipus = JavasoltJelenletTemplateType.JogviszonySzuneteltetes,
Prioritas = 8,
SzuroElemLista = new List<JavasoltJelenletTemplateItemGetResponseCo>{
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.ures),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.jelenlet),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.hianyzas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.potlas),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.szabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.tappenz),
new JavasoltJelenletTemplateItemGetResponseCo(false,true,MulasztasTipusEnum.betegszabadsag),
new JavasoltJelenletTemplateItemGetResponseCo(false,false,MulasztasTipusEnum.keses)
}
}
};
public JavasoltJelenletTemplateLogic(TanoraAllapotaEnum oraAllapota)
{
OraAllapota = oraAllapota;
}
private JavasoltJelenletTemplateLogic()
{
}
public TanoraAllapotaEnum OraAllapota { get; }
/// TODO: vizsgálatot meg kell csinálni, ha magasabb prior állítana default értéket, de már le van tiltva (vagy egy új ajánlást) (DevKornél)
public JavasoltJelenletTemplateGetResponseCo GetCalculatedJelenletJavaslatConsideringSzuro(IEnumerable<IJavasoltJelenletSzuroGetResponseCo> javasoltJelenletTemplateTipusSzuroLista)
{
if (!javasoltJelenletTemplateTipusSzuroLista.Any(filter => filter.Tipus == JavasoltJelenletTemplateType.Default))
{
throw new ValidationException(ValidationErrorType.Undefined, $"{nameof(JavasoltJelenletTemplateType.Default)} template filter does not exist!");
}
var orderedTeljesultSzuroTemplateLista = GetTemplate().FindAll(template => javasoltJelenletTemplateTipusSzuroLista.Any(filter => filter.Tipus == template.Tipus)).OrderByDescending(x => x.Prioritas).ToList();
if (!orderedTeljesultSzuroTemplateLista.Exists(template => template.Tipus == JavasoltJelenletTemplateType.Default))
{
throw new ValidationException(ValidationErrorType.Undefined, $"{nameof(JavasoltJelenletTemplateType.Default)} template does not exist!");
}
return orderedTeljesultSzuroTemplateLista[0];
}
public List<JavasoltJelenletTemplateGetResponseCo> GetTemplate()
{
switch (this.OraAllapota)
{
case TanoraAllapotaEnum.Nem_naplozott:
return OrarendiOraJavasoltJelenlet;
case TanoraAllapotaEnum.Naplozott:
return TanitasiOraJavasoltJelenlet;
default:
throw new ValidationException(ValidationErrorType.Undefined, $"Template does not exist!");
}
}
}
}