using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; using Sarand.Core.App; using Sarand.Core.Base; using Sarand.Core.Bus; using Sarand.Core.Dbas.Base; using Sarand.Win.Dbas.Base; using Sarand.PatientMgr.Core.App; using Sarand.PatientMgr.Core.Bus; using Sarand.PatientMgr.Core.Mgr; using Sarand.PatientMgr.Win.Dbas.Bus; using Sarand.PatientMgr.Win.Dbas.Internal; //using Sarand.PatientMgr.Win.Dbas.UpdateLog; using Sarand.Win.Dbas.Data; namespace Sarand.PatientMgr.Win.Dbas.Mgr { //======================================================================= internal partial class SpmDepartmentMgr_Dbas : SpmDepartmentMgr { //******************************************************************* // A d m i s s i o n A c t i o n //******************************************************************* //------------------------------------------------------------------- // Data members. //------------------------------------------------------------------- // Utilities. //------------------------------------------------------------------- // TemplateData exists. public override bool TemplateDataExistsById(SysId templateDataId) { ClearErrorState(); if (!SysId.IsValid(templateDataId)) return false; SpmTemplateData.Params prmTemplateData = new SpmTemplateData.Params(); prmTemplateData.IncludedIds.Add(templateDataId); prmTemplateData.StatusCat = SpmTemplateData.StatusCat.Any; return GetTemplateDataCount(prmTemplateData) == 1; } //------------------------------------------------------------------- // Get TemplateData. public override SpmTemplateData GetTemplateData(SpmTemplateData.Params prm) { return GetTemplateData(GetTemplateDataQueryFilter(prm).Concat(" AND ", "(", ")")); } private SpmTemplateData GetTemplateData(String filter) { ClearErrorState(); long count = GetTemplateDataCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple TemplateDataes found"); return null; } SpmTemplateData templateData = null; // Query data. using (var dbConnection = db.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SwmTemplateData_Db dbTemplateData = new SwmTemplateData_Db(DbInfo); dbTemplateData.PopulateFrom(dbCommand, aliasTemplateData, filter); templateData = CreateTemplateData(dbTemplateData); } catch (Exception exc) { SetErrorState("Database query exception"); Logger.Warn(GetType().Name + ".GetTemplateData\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return templateData; } public override SpmTemplateData GetTemplateDataById(SysId templateDataId) { ClearErrorState(); if (!SysId.IsValid(templateDataId)) return null; SpmTemplateData.Params prmTemplateData = new SpmTemplateData.Params(); prmTemplateData.IncludedIds.Add(templateDataId); prmTemplateData.StatusCat = SpmTemplateData.StatusCat.Any; return GetTemplateData(prmTemplateData); } //------------------------------------------------------------------- // Create TemplateData. public override SpmTemplateData CreateTemplateData() { return new SpmTemplateData_Dbas(UserContext, null, 0); } private SpmTemplateData_Dbas CreateTemplateData(SwmTemplateData_Db dbTemplateData) { ClearErrorState(); SpmTemplateData_Dbas templateData = new SpmTemplateData_Dbas(UserContext, new SysId(0), (ushort)dbTemplateData._Flags); PopulateFrom(dbTemplateData, templateData); return templateData; } //------------------------------------------------------------------- // Validate TemplateData. public override bool IsValidTemplateDataData(SpmTemplateData.Data data, SpmTemplateData.ErrField errField) { ClearErrorState(); if (!base.IsValidTemplateDataData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert TemplateData. public override bool InsertTemplateData(SpmTemplateData templateData, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidTemplateData(templateData)) return false; if (SysId.IsValid(templateData.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = db.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SwmTemplateData_Db dbTemplateData = new SwmTemplateData_Db(DbInfo); PopulateTo(dbTemplateData, templateData, dbUpdateInfo); if (SwmTemplateData_Db.FieldsNonId.Contains("Id")) { // Generate next Id. //dbTemplateData._Id = SysId.ToInt(db.GetNextId("TemplateData", dbUpdateInfo)); } dbTemplateData.ExecuteInsertCommand(dbCommand); //templateData.Id = new SysId(dbTemplateData._Id); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update TemplateData. public override bool UpdateTemplateData(SpmTemplateData templateData, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidTemplateData(templateData)) return false; if (!SysId.IsValid(templateData.Id)) return SetErrorState(ErrorMessage.InvalidItemId); using (var dbConnection = db.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve TemplateData. dbConnection.Open(); SwmTemplateData_Db dbTemplateData = new SwmTemplateData_Db(DbInfo); dbTemplateData.PopulateFrom(dbCommand, aliasTemplateData, "Id=" + SysId.ToString(templateData.Id)); //SpmUpdateLogItemMonitor_TemplateData updateLogMonitor = new SpmUpdateLogItemMonitor_TemplateData(UserContext, CreateTemplateData(dbTemplateData)); // Update properties. PopulateTo(dbTemplateData, templateData, dbUpdateInfo); dbTemplateData.ExecuteUpdateCommand(dbCommand); /* Record updates. updateLogMonitor.RecordUpdatedValues(templateData); updateLogMonitor.LogUpdates();*/ } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete TemplateData. public override bool TemplateDataCanBeDeleted(SpmTemplateData templateData) { ClearErrorState(); if (!base.TemplateDataCanBeDeleted(templateData)) return false; return true; } public override bool DeleteTemplateData(SpmTemplateData templateData, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!TemplateDataCanBeDeleted(templateData)) return false; using (var dbConnection = db.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve TemplateData. dbConnection.Open(); SwmTemplateData_Db dbTemplateData = new SwmTemplateData_Db(DbInfo); dbTemplateData.PopulateFrom(dbCommand, aliasTemplateData, "Id=" + templateData.Id.ToString()); // Delete TemplateData. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmTemplateData) + " WHERE Id=" + SysId.ToString(templateData.Id) + ";"; dbCommand.ExecuteNonQuery(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(SwmTemplateData_Db dbTemplateData, SpmTemplateData templateData, DbUpdateInfo dbUpdateInfo) { //dbTemplateData._Id = templateData.Id.ToInt(); dbTemplateData._Notes = templateData.Notes; dbTemplateData._Status = SacsSystem.GetStatusCode(templateData.Status); dbTemplateData._Flags = (short)templateData.Flags; if (!SysId.IsValid(templateData.Id)) { dbTemplateData._CreateOn = DateTime.UtcNow; dbTemplateData._CreateBy = dbUpdateInfo.UserId.ToInt(); dbTemplateData._CreateHost = dbUpdateInfo.Host; } dbTemplateData._UpdateOn = DateTime.UtcNow; dbTemplateData._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbTemplateData._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(SwmTemplateData_Db dbTemplateData, SpmTemplateData templateData) { //templateData.Id = new SysId(dbTemplateData._Id); templateData.Notes = dbTemplateData._Notes; templateData.Status = SacsSystem.GetStatusForCode(dbTemplateData._Status); templateData.SetCreateStamp(dbTemplateData._CreateOn, new SysId(dbTemplateData._CreateBy), dbTemplateData._CreateHost); templateData.SetUpdateStamp(dbTemplateData._UpdateOn, new SysId(dbTemplateData._UpdateBy), dbTemplateData._UpdateHost); templateData.AcceptChanges(); } //------------------------------------------------------------------- // TemplateData column definitions. private static readonly String aliasTemplateData = "aAdmAct"; private void SetTemplateDataColDfn (ColumnDfn col, String caption, int width, SpmDbDfn.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, String alias = "", String prefix = "") { if (String.IsNullOrEmpty(alias) && SpmDbDfn.GetTableForColumn(dbCol) == SpmDbDfn.TableIdx.SwmTemplateData) alias = aliasTemplateData; col.Set(caption, width, (int)dbCol, prefix + SpmDbDfn.GetColumnName(dbCol, false), SpmDbDfn.GetColumnNameQual(dbCol, alias), dataType, align); if (dataType == DataValue.DataType.String && dbCol != SpmDbDfn.ColumnIdx.Unknown) col.MaxLength = (int)SpmDbDfn.GetColTextLen(dbCol); } //------------------------------------------------------------------- // Getting prmTemplateData column definition. public override ColumnDfn GetTemplateDataColumnDfn(SpmTemplateData.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { /*case SpmTemplateData.Column.Pos: SetTemplateDataColDfn(columnDfn, "Pos", 42, SpmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SpmTemplateData.Column.Id: SetTemplateDataColDfn(columnDfn, "Id", 40, SpmDbDfn.ColumnIdx.SwmTemplateData_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break;*/ // TemplateData Properties. // Derived properties. // Common properties. case SpmTemplateData.Column.Notes: SetTemplateDataColDfn(columnDfn, "Notes", 200, SpmDbDfn.ColumnIdx.SwmTemplateData_Notes); break; case SpmTemplateData.Column.Status: SetTemplateDataColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmTemplateData_Status, ColumnAlignment.Center); break; case SpmTemplateData.Column.Status_Desc: SetTemplateDataColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmTemplateData_Status, ColumnAlignment.Center); break; case SpmTemplateData.Column.Status_Ind: SetTemplateDataColDfn(columnDfn, "Status", 50, SpmDbDfn.ColumnIdx.SwmTemplateData_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SpmTemplateData.Column.CreateOn_Date: SetTemplateDataColDfn(columnDfn, "Created", 65, SpmDbDfn.ColumnIdx.SwmTemplateData_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SpmTemplateData.Column.UpdateOn_Date: SetTemplateDataColDfn(columnDfn, "Updated", 65, SpmDbDfn.ColumnIdx.SwmTemplateData_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // TemplateData query filter. public override List GetTemplateDataQueryFilter(SpmTemplateData.Params prm) { List filter = new List(); // TemplateData Id. String includedIds = prm.IncludedIds.Concat(","); /*if (!includedIds.IsEmpty()) filter.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Id, aliasTemplateData) + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Id, aliasTemplateData) + " NOT IN (" + excludedIds + ")");*/ //--------------------------------------------------------------- // Common Properties. if (filter.Count < 1) filter.Add("1=1"); return filter; } //------------------------------------------------------------------- // TemplateData sort columns. public List GetTemplateDataSortColumns(SpmTemplateData.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for TemplateData columns in case of conflict. String sortCol = String.Empty; if (SpmDbDfn.GetTableForColumn((SpmDbDfn.ColumnIdx)columnDfn.DbColumn) == SpmDbDfn.TableIdx.SwmTemplateData) { sortCol = SpmDbDfn.GetColumnNameQual((SpmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasTemplateData); } else { sortCol = columnDfn.DataName; if (!StringUtil.IsEmpty(columnDfn.SortDataName)) sortCol = columnDfn.SortDataName; } if (!sortCol.IsEmpty()) { DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", ")); } } sortColumnNames.RemoveBlanks(); if (sortColumnNames.IsEmpty()) { // Default sort columns: //sortColumnNames.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Type, aliasTemplateData) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // TemplateData count. private long GetTemplateDataCount(String filter) { ClearErrorState(); return db.GetRowCount(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmTemplateData) + " As " + aliasTemplateData, filter); } public override long GetTemplateDataCount(SpmTemplateData.Params prm) { ClearErrorState(); return GetTemplateDataCount(GetTemplateDataQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // TemplateData list. public override List GetTemplateDataList(SpmTemplateData.Params prm) { List TemplateDataes = new List(); DbQuery qry = new DbQuery(db.DbmsType); qry.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmTemplateData), aliasTemplateData); qry.Columns.AddRange(SwmTemplateData_Db.Fields); qry.Filters.AddRange(GetTemplateDataQueryFilter(prm)); // Query data. using (var dbConnection = db.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { SwmTemplateData_Db dbTemplateData = new SwmTemplateData_Db(DbInfo); dbTemplateData.PopulateFrom(dbDataReader); TemplateDataes.Add(CreateTemplateData(dbTemplateData)); } } } catch (Exception exc) { Logger.Warn(GetType().Name + ".GetTemplateDataList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return TemplateDataes; } //------------------------------------------------------------------- // TemplateData query execution. public override DbResultSet ExecuteTemplateDataQuery(List columns, SpmTemplateData.Params prm) { ClearErrorState(); //--------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(db.DbmsType); query.Tables.Add(SpmDbDfn.GetTableName(SpmDbDfn.TableIdx.SwmTemplateData), aliasTemplateData); // TemplateData Properties - add columns as defined in query list. /*if (columns.HasId((int)SpmTemplateData.Column.Id)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Id, aliasTemplateData));*/ // Common Properties if (columns.HasId((int)SpmTemplateData.Column.Notes)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Notes, aliasTemplateData)); if (columns.HasId((int)SpmTemplateData.Column.Status) || columns.HasId((int)SpmTemplateData.Column.Status_Desc) || columns.HasId((int)SpmTemplateData.Column.Status_Ind)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_Status, aliasTemplateData)); if (columns.HasId((int)SpmTemplateData.Column.CreateOn_Date)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_CreateOn, aliasTemplateData)); if (columns.HasId((int)SpmTemplateData.Column.UpdateOn_Date)) query.Columns.Add(SpmDbDfn.GetColumnNameQual(SpmDbDfn.ColumnIdx.SwmTemplateData_UpdateOn, aliasTemplateData)); //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetTemplateDataQueryFilter(prm)); if (prm.IncludedIds.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetTemplateDataSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery()); return new Sarand.Win.Dbas.Data.DbResultSet_DataReader(db, query.BuildQuery()); } //------------------------------------------------------------------- public override DataValue GetTemplateDataDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SpmTemplateData.Column)column.Id) { // Notes. case SpmTemplateData.Column.Notes: value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; // Status. case SpmTemplateData.Column.Status_Desc: case SpmTemplateData.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SpmTemplateData.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SpmTemplateData.Column.Status_Ind) value = new DataValue(SpmTemplateData.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }