using adas_core.Domain.Enums; using MongoDB.Bson; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace adas_core.Domain.Models; public class PatientAppointment : JsonConverter { public ObjectId Id { get; set; } public ObjectId PatientId { get; set; } public Person? Patient { get; set; } public List Timings { get; set; } = []; public DateTime? CreateTime { get; set; } public DateTime UpdateTime { get; set; } public Entity? PlacerOrder { get; set; } public Entity? FillerOrder { get; set; } public string? EventReason { get; set; } public string? AppointmentReason { get; set; } public string? AppointmentType { get; set; } public OperationType? AppointmentOperationType { get; set; } public OperationType? AppointmentStatus { get; set; } public double Duration { get; set; } public string? VisitNumber { get; set; } public string? PatientClass { get; set; } public bool EpisodeActivation { get; set; } = false; public Person? PlacerContact { get; set; } public Person? FillerContact { get; set; } public List ResourceGroups { get; set; } = []; public List Allergies { get; set; } = []; public List ApplyResourceGroups(PatientAppointment? apdb = null) { var i = 0; ResourceGroups = ResourceGroups.Select(rg => { var rgdb = apdb != null && apdb.ResourceGroups.Count > i ? apdb.ResourceGroups[i] : null; rg.Services = CodeAction.Apply(rgdb?.Services, rg.ServicesActions); rg.Resources = CodeAction.Apply(rgdb?.Resources, rg.ResourcesActions); rg.Locations = PatientLocationAction.Apply(rgdb?.Locations, rg.LocationsActions); rg.Personnel = PersonResourceAction.Apply(rgdb?.Personnel, rg.PersonnelActions); return rg; }).ToList(); return ResourceGroups; } public override bool CanConvert(Type objectType) { return objectType == typeof(PatientAppointment); } public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) { if (value != null) { var jo = JObject.FromObject(value); jo.Property("Id")?.Remove(); jo.WriteTo(writer); } } public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } } public class PatientAppointmentResourceGroup { public List? Services { get; set; } public List? Resources { get; set; } public List? Locations { get; set; } public List? Personnel { get; set; } /** * ApiRequest resource actions */ public List? ServicesActions { get; set; } public List? ResourcesActions { get; set; } public List? LocationsActions { get; set; } public List? PersonnelActions { get; set; } } public class Allergies { public Code? AllergenType { get; set; } public Code? Allergen { get; set; } }