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 OrarendiOraJavasoltJelenlet = new List { new JavasoltJelenletTemplateGetResponseCo{ Tipus = JavasoltJelenletTemplateType.Default, Prioritas = 1, SzuroElemLista = new List{ 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{ 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{ 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{ 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{ 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{ 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{ 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{ 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 TanitasiOraJavasoltJelenlet = new List { new JavasoltJelenletTemplateGetResponseCo{ Tipus = JavasoltJelenletTemplateType.Default, Prioritas = 1, SzuroElemLista = new List{ 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{ 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{ 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{ 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{ 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{ 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{ 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{ 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 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 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!"); } } } }