186 lines
8.8 KiB
C#
186 lines
8.8 KiB
C#
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<String> filters = new List<String>();
|
|
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<String> filters = new List<String>();
|
|
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 ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|