Files
PatientMgr-CSharp/SaPatMgrWinDbas/Win/Dbas/Bus/SpmFacilityTemplate_Dbas.cs
T
2019-06-04 09:06:12 +01:00

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 ", "(", ")"));
}
//-------------------------------------------------------------------
}
//=======================================================================
}