/// <summary> /// Сохранить файлы баз данных во временной папке пользователя /// Один раз в день /// </summary> /// <param name="dataPath">Путь до папки с базами данных</param> private static void SaveDbFilesToTempFolder(string dataPath) { // Скопировать файлы с данными var di = new DirectoryInfo(dataPath); string saveDataPath; string newSaveDataLocation = GetSaveDataLocation(out saveDataPath); if (di.GetFiles().Length == 0 || Directory.Exists(newSaveDataLocation)) { return; } Directory.CreateDirectory(newSaveDataLocation); foreach (FileInfo fi in di.GetFiles()) { fi.CopyTo(Path.Combine(newSaveDataLocation, fi.Name)); } // Скопировать файлы c картинками di = new DirectoryInfo(Path.Combine(dataPath, "CardPictures")); if (di.Exists) { string newSavePictureLocation = Path.Combine(newSaveDataLocation, "CardPictures"); Directory.CreateDirectory(newSavePictureLocation); foreach (FileInfo fi in di.GetFiles()) { fi.CopyTo(Path.Combine(newSavePictureLocation, fi.Name)); } } // Удаление старых папок с сохранёнными файлами (оставить только 10 последних) di = new DirectoryInfo(saveDataPath); var savedFolders = new List <DateTime>(); foreach (DirectoryInfo curDi in di.GetDirectories()) { try { savedFolders.Add(CConvertEngine.StringToDateTime(curDi.Name)); } catch { } } savedFolders.Sort(); for (int i = 0; i < savedFolders.Count - 10; i++) { Directory.Delete(Path.Combine(saveDataPath, CConvertEngine.DateTimeToString(savedFolders[i])), true); } }
/// <summary> /// Получить путь до папки с сохранёнными версиями баз /// </summary> /// <returns></returns> public static string GetSaveDataLocation(out string saveDataPath) { saveDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SurgeryHelper2"); return(Path.Combine(saveDataPath, CConvertEngine.DateTimeToString(DateTime.Now))); }
/// <summary> /// Импортировать в Word всех пациентов с переданными id /// </summary> /// <param name="workersKeeper">Класс с воркерами</param> /// <param name="importedPatientIds">Список id пациентов, которых надо импортировать</param> public static void Export(CWorkersKeeper workersKeeper, List <int> importedPatientIds) { _waitForm = new WaitForm(); CultureInfo oldCi = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); _waitForm.Show(); CPatient[] patientList = workersKeeper.PatientWorker.PatientList; // Стартуем Excel-приложение _oxl = new Application(); _waitForm.SetProgress(10); // Создаем новую книгу _owb = _oxl.Workbooks.Add(Missing.Value); if (_owb.Sheets.Count > 2) { _ows = (_Worksheet)_owb.Sheets[3]; _ows.Delete(); } if (_owb.Sheets.Count > 1) { _ows = (_Worksheet)_owb.Sheets[2]; _ows.Delete(); } if (_owb.Sheets.Count > 0) { _ows = (_Worksheet)_owb.Sheets[1]; } else { _ows = (_Worksheet)_owb.Sheets.Add(); } _ows.Cells.WrapText = true; _ows.Cells.VerticalAlignment = 2; _ows.Cells.HorizontalAlignment = 2; _waitForm.SetProgress(20); #region Глобальные заголовки _owr = _ows.get_Range("A1", "AH1"); _owr.MergeCells = true; _owr.Font.Bold = true; _owr.Font.Size = 14; _owr.RowHeight = 30; _owr.HorizontalAlignment = 3; _ows.Cells[1, 1] = "СПИСОК ПАЦИЕНТОВ НА " + CConvertEngine.DateTimeToString(DateTime.Now); _owr = _ows.get_Range("A2", "M2"); _owr.MergeCells = true; _owr.Font.Bold = true; _owr.Font.Size = 14; _owr.RowHeight = 30; _owr.HorizontalAlignment = 3; _ows.Cells[2, 1] = "ОБЩИЕ ДАННЫЕ"; _owr = _ows.get_Range("N2", "T2"); _owr.MergeCells = true; _owr.Font.Bold = true; _owr.Font.Size = 14; _owr.RowHeight = 30; _owr.HorizontalAlignment = 3; _ows.Cells[2, 14] = "ГОСПИТАЛИЗАЦИИ"; _owr = _ows.get_Range("U2", "AE2"); _owr.MergeCells = true; _owr.Font.Bold = true; _owr.Font.Size = 14; _owr.RowHeight = 30; _owr.HorizontalAlignment = 3; _ows.Cells[2, 21] = "Данные по операциям"; _owr = _ows.get_Range("AF2", "AH2"); _owr.MergeCells = true; _owr.Font.Bold = true; _owr.Font.Size = 14; _owr.RowHeight = 30; _owr.HorizontalAlignment = 3; _ows.Cells[2, 32] = "КОНСУЛЬТАЦИИ"; #endregion #region Заголовки _owr = _ows.get_Range("A3", "A3"); _owr.ColumnWidth = 4; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "№"; _owr = _ows.get_Range("B3", "B3"); _owr.ColumnWidth = 15; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "ФИО пациента"; _owr = _ows.get_Range("C3", "C3"); _owr.ColumnWidth = 4; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Возраст"; _owr = _ows.get_Range("D3", "D3"); _owr.ColumnWidth = 10; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата рождения"; _owr = _ows.get_Range("E3", "E3"); _owr.ColumnWidth = 21; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Адрес"; _owr = _ows.get_Range("F3", "F3"); _owr.ColumnWidth = 11; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Телефон"; _owr = _ows.get_Range("G3", "G3"); _owr.ColumnWidth = 11; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "E-mail"; _owr = _ows.get_Range("H3", "H3"); _owr.ColumnWidth = 11; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Нозология"; _owr = _ows.get_Range("I3", "I3"); _owr.ColumnWidth = 9; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата травмы"; _owr = _ows.get_Range("J3", "J3"); _owr.ColumnWidth = 6; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Количество госпитализаций"; _owr = _ows.get_Range("K3", "K3"); _owr.ColumnWidth = 6; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Количество консультаций в офисе"; _owr = _ows.get_Range("L3", "L3"); _owr.ColumnWidth = 6; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Количество операций"; _owr = _ows.get_Range("M3", "M3"); _owr.ColumnWidth = 9; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата поступления"; _owr = _ows.get_Range("N3", "N3"); _owr.ColumnWidth = 10; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата выписки"; _owr = _ows.get_Range("O3", "O3"); _owr.ColumnWidth = 5; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "К/д"; _owr = _ows.get_Range("P3", "P3"); _owr.ColumnWidth = 7; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "№ ИБ"; _owr = _ows.get_Range("Q3", "Q3"); _owr.ColumnWidth = 9; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Лечащий врач"; _owr = _ows.get_Range("R3", "R3"); _owr.ColumnWidth = 22; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Диагноз"; _owr = _ows.get_Range("S3", "S3"); _owr.ColumnWidth = 14; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Карты обследования"; _owr = _ows.get_Range("T3", "T3"); _owr.ColumnWidth = 28; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Название операции"; _owr = _ows.get_Range("U3", "U3"); _owr.ColumnWidth = 11; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Тип операции"; _owr = _ows.get_Range("V3", "V3"); _owr.ColumnWidth = 10; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата операции"; _owr = _ows.get_Range("W3", "W3"); _owr.ColumnWidth = 6; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Время начала операции"; _owr = _ows.get_Range("X3", "X3"); _owr.ColumnWidth = 6; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Время окончания операции"; _owr = _ows.get_Range("Y3", "Y3"); _owr.ColumnWidth = 10; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Список хирургов"; _owr = _ows.get_Range("Z3", "Z3"); _owr.ColumnWidth = 12; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Список ассистентов"; _owr = _ows.get_Range("AA3", "AA3"); _owr.ColumnWidth = 8; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Анестезиолог"; _owr = _ows.get_Range("AB3", "AB3"); _owr.ColumnWidth = 8; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Анестезистка"; _owr = _ows.get_Range("AC3", "AC3"); _owr.ColumnWidth = 8; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Операц. мед. сестра"; _owr = _ows.get_Range("AD3", "AD3"); _owr.ColumnWidth = 8; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Санитар"; _owr = _ows.get_Range("AE3", "AE3"); _owr.ColumnWidth = 140; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Ход операции"; _owr = _ows.get_Range("AF3", "AF3"); _owr.ColumnWidth = 10; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Дата консультации в офисе"; _owr = _ows.get_Range("AG3", "AG3"); _owr.ColumnWidth = 50; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Диагноз"; _owr = _ows.get_Range("AH3", "AH3"); _owr.ColumnWidth = 14; _owr.Font.Bold = true; _owr.HorizontalAlignment = 3; _owr.Value2 = "Карты обследования"; #endregion int rowCnt = 4; int n = 1; double progressStep = patientList.Length == 0 ? 0 : 70.0 / patientList.Length; double progress = 30; for (int i = 0; i < patientList.Length; i++) { _waitForm.SetProgress(progress); progress += progressStep; if (!importedPatientIds.Contains(patientList[i].Id)) { continue; } // Общие данные о пациенте _ows.Cells[rowCnt, 1] = n.ToString(); n++; _ows.Cells[rowCnt, 2] = patientList[i].GetFullName(); _ows.Cells[rowCnt, 3] = CConvertEngine.GetAge(patientList[i].Birthday); _ows.Cells[rowCnt, 4] = CConvertEngine.DateTimeToString(patientList[i].Birthday); _ows.Cells[rowCnt, 5] = patientList[i].GetAddress(); _ows.Cells[rowCnt, 6] = patientList[i].Phone; _ows.Cells[rowCnt, 7] = patientList[i].EMail; _ows.Cells[rowCnt, 8] = patientList[i].Nosology; if (workersKeeper.AnamneseWorker.IsExists(patientList[i].Id)) { _ows.Cells[rowCnt, 9] = CConvertEngine.DateTimeToString(workersKeeper.AnamneseWorker.GetByPatientId(patientList[i].Id).TraumaDate); } _ows.Cells[rowCnt, 10] = workersKeeper.HospitalizationWorker.GetCountByPatientId(patientList[i].Id).ToString(); _ows.Cells[rowCnt, 11] = workersKeeper.VisitWorker.GetCountByPatientId(patientList[i].Id).ToString(); _ows.Cells[rowCnt, 12] = workersKeeper.OperationWorker.GetCountByPatientId(patientList[i].Id).ToString(); // Госпитализации int saveRowCnt = rowCnt; foreach (CHospitalization hospitalization in workersKeeper.HospitalizationWorker.GetListByPatientId(patientList[i].Id)) { _ows.Cells[rowCnt, 13] = CConvertEngine.DateTimeToString(hospitalization.DeliveryDate, true); _ows.Cells[rowCnt, 14] = CConvertEngine.DateTimeToString(hospitalization.ReleaseDate); _ows.Cells[rowCnt, 15] = hospitalization.KD; _ows.Cells[rowCnt, 16] = hospitalization.NumberOfCaseHistory; _ows.Cells[rowCnt, 17] = hospitalization.DoctorInChargeOfTheCase; _ows.Cells[rowCnt, 18] = hospitalization.Diagnose; _ows.Cells[rowCnt, 10] = GetExistingCardsInfo(workersKeeper, hospitalization.Id, -1); // Операции foreach (COperation operation in workersKeeper.OperationWorker.GetListByHospitalizationId(hospitalization.Id)) { _ows.Cells[rowCnt, 20] = operation.Name; _ows.Cells[rowCnt, 21] = CConvertEngine.ListToString(operation.OperationTypes, ", "); _ows.Cells[rowCnt, 22] = CConvertEngine.DateTimeToString(operation.DateOfOperation); _ows.Cells[rowCnt, 23] = CConvertEngine.TimeToString(operation.StartTimeOfOperation); _ows.Cells[rowCnt, 24] = CConvertEngine.TimeToString(operation.EndTimeOfOperation); _ows.Cells[rowCnt, 25] = CConvertEngine.ListToString(operation.Surgeons, ", "); _ows.Cells[rowCnt, 26] = CConvertEngine.ListToString(operation.Assistents, ", "); _ows.Cells[rowCnt, 27] = operation.HeAnaesthetist; _ows.Cells[rowCnt, 28] = operation.SheAnaesthetist; _ows.Cells[rowCnt, 29] = operation.ScrubNurse; _ows.Cells[rowCnt, 30] = operation.Orderly; _ows.Cells[rowCnt++, 31] = workersKeeper.OperationProtocolWorker.GetByOperationId(operation.Id).OperationCourse; } if (workersKeeper.OperationWorker.GetCountByHospitalizationId(hospitalization.Id) == 0) { rowCnt++; } } // Консультации rowCnt = saveRowCnt; foreach (CVisit visit in workersKeeper.VisitWorker.GetListByPatientId(patientList[i].Id)) { _ows.Cells[rowCnt, 32] = CConvertEngine.DateTimeToString(visit.VisitDate); _ows.Cells[rowCnt, 33] = visit.Diagnose; _ows.Cells[rowCnt++, 34] = GetExistingCardsInfo(workersKeeper, -1, visit.Id); } int maxCnt = Math.Max( workersKeeper.OperationWorker.GetCountByPatientId(patientList[i].Id), workersKeeper.VisitWorker.GetCountByPatientId(patientList[i].Id)); rowCnt = saveRowCnt + Math.Max(1, maxCnt); } _waitForm.SetProgress(100); } catch (Exception ex) { MessageBox.ShowDialog(ex.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { _waitForm.CloseForm(); if (_oxl != null) { _oxl.Visible = true; _oxl.UserControl = true; if (_owb != null) { Marshal.ReleaseComObject(_owb); _owb = null; } if (_ows != null) { Marshal.ReleaseComObject(_ows); _ows = null; } if (_owr != null) { Marshal.ReleaseComObject(_owr); _owr = null; } Marshal.ReleaseComObject(_oxl); _oxl = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } Thread.CurrentThread.CurrentCulture = oldCi; } }