///<summary>Any filenames mentioned in the fileList which are not attached to the given patient are properly attached to that patient. Returns the total number of documents that were newly attached to the patient.</summary> public static int InsertMissing(Patient patient, List <string> fileList) { //No need to check RemotingRole; no call to db. int countAdded = 0; DataTable table = Documents.GetFileNamesForPatient(patient.PatNum); for (int j = 0; j < fileList.Count; j++) { string fileName = Path.GetFileName(fileList[j]); if (!IsAcceptableFileName(fileName)) { continue; } bool inList = false; for (int i = 0; i < table.Rows.Count && !inList; i++) { inList = (table.Rows[i]["FileName"].ToString() == fileName); } if (!inList) //OD found new images in the patient's folder that aren't part of the DB. { Document doc = new Document(); if (PrefC.AtoZfolderUsed == DataStorageType.LocalAtoZ) { doc.DateCreated = File.GetLastWriteTime(fileList[j]); } else //Cloud { doc.DateCreated = DateTime.Now; } DateTime datePrevious = doc.DateTStamp; doc.Description = fileName; doc.DocCategory = Defs.GetFirstForCategory(DefCat.ImageCats, true).DefNum; doc.FileName = fileName; doc.PatNum = patient.PatNum; Insert(doc, patient); countAdded++; string docCat = Defs.GetDef(DefCat.ImageCats, doc.DocCategory).ItemName; SecurityLogs.MakeLogEntry(Permissions.ImageEdit, patient.PatNum, Lans.g("ContrImages", "Document Created: A file") + ", " + doc.FileName + ", " + Lans.g("ContrImages", "placed into the patient's AtoZ images folder from outside of the program was detected and a record automatically inserted into the first image category") + ", " + docCat, doc.DocNum, datePrevious); } } return(countAdded); }
public static DataTable GetTreeListTableForPatient(string patNum) { if (RemotingClient.RemotingRole == RemotingRole.ClientWeb) { return(Meth.GetTable(MethodBase.GetCurrentMethod(), patNum)); } DataConnection dcon = new DataConnection(); DataTable table = new DataTable("DocumentList"); DataRow row; DataTable raw; string command; //Rows are first added to the resultSet list so they can be sorted at the end as a larger group, then //they are placed in the datatable to be returned. List <Object> resultSet = new List <Object>(); //columns that start with lowercase are altered for display rather than being raw data. table.Columns.Add("DocNum"); table.Columns.Add("MountNum"); table.Columns.Add("DocCategory"); table.Columns.Add("DateCreated"); table.Columns.Add("docFolder"); //The folder order to which the Document category corresponds. table.Columns.Add("description"); table.Columns.Add("ImgType"); //Move all documents which are invisible to the first document category. command = "SELECT DocNum FROM document WHERE PatNum='" + patNum + "' AND " + "DocCategory<0"; raw = dcon.GetTable(command); if (raw.Rows.Count > 0) //Are there any invisible documents? { command = "UPDATE document SET DocCategory='" + Defs.GetFirstForCategory(DefCat.ImageCats, true).DefNum + "' WHERE PatNum='" + patNum + "' AND ("; for (int i = 0; i < raw.Rows.Count; i++) { command += "DocNum='" + PIn.Long(raw.Rows[i]["DocNum"].ToString()) + "' "; if (i < raw.Rows.Count - 1) { command += "OR "; } } command += ")"; dcon.NonQ(command); } //Load all documents into the result table. command = "SELECT DocNum,DocCategory,DateCreated,Description,ImgType,MountItemNum FROM document WHERE PatNum='" + patNum + "'"; raw = dcon.GetTable(command); for (int i = 0; i < raw.Rows.Count; i++) { //Make sure hidden documents are never added (there is a small possibility that one is added after all are made visible). if (Defs.GetOrder(DefCat.ImageCats, PIn.Long(raw.Rows[i]["DocCategory"].ToString())) < 0) { continue; } //Do not add individual documents which are part of a mount object. if (PIn.Long(raw.Rows[i]["MountItemNum"].ToString()) != 0) { continue; } row = table.NewRow(); row["DocNum"] = PIn.Long(raw.Rows[i]["DocNum"].ToString()); row["MountNum"] = 0; row["DocCategory"] = PIn.Long(raw.Rows[i]["DocCategory"].ToString()); row["DateCreated"] = PIn.Date(raw.Rows[i]["DateCreated"].ToString()); row["docFolder"] = Defs.GetOrder(DefCat.ImageCats, PIn.Long(raw.Rows[i]["DocCategory"].ToString())); row["description"] = PIn.Date(raw.Rows[i]["DateCreated"].ToString()).ToString("d") + ": " + PIn.String(raw.Rows[i]["Description"].ToString()); row["ImgType"] = PIn.Long(raw.Rows[i]["ImgType"].ToString()); resultSet.Add(row); } //Move all mounts which are invisible to the first document category. command = "SELECT MountNum FROM mount WHERE PatNum='" + patNum + "' AND " + "DocCategory<0"; raw = dcon.GetTable(command); if (raw.Rows.Count > 0) //Are there any invisible mounts? { command = "UPDATE mount SET DocCategory='" + Defs.GetFirstForCategory(DefCat.ImageCats, true).DefNum + "' WHERE PatNum='" + patNum + "' AND ("; for (int i = 0; i < raw.Rows.Count; i++) { command += "MountNum='" + PIn.Long(raw.Rows[i]["MountNum"].ToString()) + "' "; if (i < raw.Rows.Count - 1) { command += "OR "; } } command += ")"; dcon.NonQ(command); } //Load all mounts into the result table. command = "SELECT MountNum,DocCategory,DateCreated,Description,ImgType FROM mount WHERE PatNum='" + patNum + "'"; raw = dcon.GetTable(command); for (int i = 0; i < raw.Rows.Count; i++) { //Make sure hidden mounts are never added (there is a small possibility that one is added after all are made visible). if (Defs.GetOrder(DefCat.ImageCats, PIn.Long(raw.Rows[i]["DocCategory"].ToString())) < 0) { continue; } row = table.NewRow(); row["DocNum"] = 0; row["MountNum"] = PIn.Long(raw.Rows[i]["MountNum"].ToString()); row["DocCategory"] = PIn.Long(raw.Rows[i]["DocCategory"].ToString()); row["DateCreated"] = PIn.Date(raw.Rows[i]["DateCreated"].ToString()); row["docFolder"] = Defs.GetOrder(DefCat.ImageCats, PIn.Long(raw.Rows[i]["DocCategory"].ToString())); row["description"] = PIn.Date(raw.Rows[i]["DateCreated"].ToString()).ToString("d") + ": " + PIn.String(raw.Rows[i]["Description"].ToString()); row["ImgType"] = PIn.Long(raw.Rows[i]["ImgType"].ToString()); resultSet.Add(row); } //We must sort the results after they are returned from the database, because the database software (i.e. MySQL) //cannot return sorted results from two or more result sets like we have here. resultSet.Sort(delegate(Object o1, Object o2) { DataRow r1 = (DataRow)o1; DataRow r2 = (DataRow)o2; int docFolder1 = Convert.ToInt32(r1["docFolder"].ToString()); int docFolder2 = Convert.ToInt32(r2["docFolder"].ToString()); if (docFolder1 < docFolder2) { return(-1); } else if (docFolder1 > docFolder2) { return(1); } return(PIn.Date(r1["DateCreated"].ToString()).CompareTo(PIn.Date(r2["DateCreated"].ToString()))); }); //Finally, move the results from the list into a data table. for (int i = 0; i < resultSet.Count; i++) { table.Rows.Add((DataRow)resultSet[i]); } return(table); }