using System; using System.Collections.Generic; using Sarand.Core.Bus; using Sarand.PatientMgr.Core.App; using Sarand.PatientMgr.Core.Bus; using Sarand.Core.Interfaces; using Sarand.Core.Dbas.Base; using Sarand.PatientMgr.Core.Mgr; using Sarand.Core.Base; using Sarand.Win.Dbas.Data; using Sarand.Win.Dbas.Base; namespace Sarand.PatientMgr.Win.Dbas.Bus { //======================================================================= class SpmFacilityTemplate_Dbas : SpmFacilityTemplate { //------------------------------------------------------------------- // Data members. private readonly SpmUserContext userContext; //------------------------------------------------------------------- // Construction. public SpmFacilityTemplate_Dbas(SpmUserContext userContext, SysId facilityId, Spm.ResourceCategory resourceCategory, ushort flags) : base(facilityId, resourceCategory) { this.userContext = userContext; Flags = flags; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. //------------------------------------------------------------------- // A s s o c i a t e d D a t a E l e m e n t s //------------------------------------------------------------------- public override bool HasDataItems() { ClearErrorState(); if (SysId.IsValid(Id)) return false; ISacsDatabase db = SpmGlobals.Application.GetDatabase(userContext.SessionContext); if (db == null) SetErrorState("database unavailable"); List filters = new List(); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmTemplateData_FacilityTemplateId) + "=" + Id.ToString()); return db.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmTemplateData), filters.Concat(" AND ", "(", ")")) > 0; ; } public override bool HasSessions() { DateTime? earliest = null, latest = null; return HasSessions(DateTime.MinValue, DateTime.MinValue, ref earliest, ref latest); } public override bool HasSessionsBefore(DateTime target, ref DateTime? earliest, ref DateTime? latest) { return HasSessions(DateTime.MinValue, DateTime.MinValue, ref earliest, ref latest); } public override bool HasSessionsAfter(DateTime target, ref DateTime? earliest, ref DateTime? latest) { return HasSessions(DateTime.MinValue, DateTime.MinValue, ref earliest, ref latest); } public override bool HasSessions(DateTime before, DateTime after, ref DateTime? earliest, ref DateTime? latest) { ClearErrorState(); if (SysId.IsValid(Id)) return false; SacsDatabase db = SpmGlobals.Application.GetDatabase(userContext.SessionContext) as SacsDatabase; if (db == null) SetErrorState("database unavailable"); long countSession = 0; DbQuery query = new DbQuery(db != null ? db.DbmsType : DbmsType.General); query.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmFacilitySession)); query.Columns.Add("Count(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_FacilityTemplateId) + ")", "CountAdm"); query.Columns.Add("Max(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_Session) + ")", "MaxSession"); query.Columns.Add("Min(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_Session) + ")", "MinSession"); // Filter to identify matching Sessions: FacilitySession.FacilityTemplateId = This item's Id. query.Filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_FacilityTemplateId) + "=" + Id.ToString()); if (DateUtil.IsValid(before)) query.Filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_Session) + "<" + DbQuery.FormatDateForCondition(before)); if (DateUtil.IsValid(after)) query.Filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmFacilitySession_Session) + ">=" + DbQuery.FormatDateForCondition(after.AddDays(1))); // Retrieve session statistics. using (DbResultSet dbResultSet = new DbResultSet_DataReader(db, query.ToString())) { if (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); countSession = values.GetValue("CountSession").AsLong(); if (countSession > 0) { if (earliest != null) earliest = values.GetValue("MinSession").AsDate().Date; if (latest != null) latest = values.GetValue("MaxSession").AsDate().Date; } } } return false; } public override bool HasAdmissions(Spm.AdmissionCancelType cancelType) { DateTime? earliest = null, latest = null; return HasAdmissions(DateTime.MinValue, DateTime.MinValue, cancelType, ref earliest, ref latest); } public override bool HasAdmissionsBefore(DateTime target, Spm.AdmissionCancelType cancelType, ref DateTime? earliest, ref DateTime? latest) { return HasAdmissions(DateTime.MinValue, DateTime.MinValue, cancelType, ref earliest, ref latest); } public override bool HasAdmissionsAfter(DateTime target, Spm.AdmissionCancelType cancelType, ref DateTime? earliest, ref DateTime? latest) { return HasAdmissions(DateTime.MinValue, DateTime.MinValue, cancelType, ref earliest, ref latest); } public override bool HasAdmissions(DateTime before, DateTime after, Spm.AdmissionCancelType cancelType, ref DateTime? earliest, ref DateTime? latest) { ClearErrorState(); if (SysId.IsValid(Id)) return false; SacsDatabase db = SpmGlobals.Application.GetDatabase(userContext.SessionContext) as SacsDatabase; if (db == null) SetErrorState("database unavailable"); long countAdmission = 0; DbQuery query = new DbQuery(db.DbmsType); query.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission)); query.Columns.Add("Count(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_Id) + ")", "CountAdm"); if (earliest != null) query.Columns.Add("Min(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom) + ")", "MinAdm"); if (latest != null) query.Columns.Add("Max(" + SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo) + ")", "MaxAdm"); // Filter to identify matching Admissions. SpmAdmission.Params prmAdm = new SpmAdmission.Params(); prmAdm.FacilityTemplateId = Id; prmAdm.AdmissionFrom = after.AddDays(1); prmAdm.AdmissionTo = before.AddDays(-1); SpmAdmissionMgr admissionMgr = SpmGlobals.System.CreateAdmissionMgr(userContext); query.Filters.AddRange(admissionMgr.GetAdmissionQueryFilter(prmAdm)); // Retrieve admission statistics. using (DbResultSet dbResultSet = new DbResultSet_DataReader(db, query.ToString())) { if (dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); countAdmission = values.GetValue("CountAdm").AsLong(); if (countAdmission > 0) { if (earliest != null) earliest = values.GetValue("MinAdm").AsDate().Date; if (latest != null) latest = values.GetValue("MaxAdm").AsDate().Date; } } } return false; } public override long GetSessionComplexityCount(DateTime admission, String complexity, SysId admissionExcludeId) { ClearErrorState(); if (SysId.IsValid(Id)) return 0; ISacsDatabase db = SpmGlobals.Application.GetDatabase(userContext.SessionContext); if (db == null) SetErrorState("database unavailable"); // Dummy query to set the DBMS correctly (for formatting strings and dates etc)/ DbQuery qryDummy = new DbQuery(db != null ? db.DbmsType :DbmsType.General); // Filter to identify matching Admissions. // Admission.FacilityTemplateId = This item's Id. // Admission.AdmissionFrom = admission date // Admission.AdmissionTo = admission date // Admissin.ComplexityCode = complexity code // Admission.Id <> exclude item List filters = new List(); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_FacilityTemplateId) + "=" + Id.ToString()); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionFrom) + "=" + DbQuery.FormatDateForCondition(admission)); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_AdmissionTo) + "=" + DbQuery.FormatDateForCondition(admission)); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_ComplexityCode) + "='" + complexity + "'"); filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_CancelType) + "=" + ((int)Spm.AdmissionCancelType.None)); if (SysId.IsValid(admissionExcludeId)) filters.Add(SpmDbDfn.GetColumnName(SpmDbDfn.ColumnIdx.SwmAdmission_Id) + "<>" + admissionExcludeId.ToString()); return db.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmAdmission), filters.Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- } //======================================================================= }