Initial commit

This commit is contained in:
user
2026-07-12 15:08:43 +04:00
commit 4105783ab9
150 changed files with 17708 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
# Build output
bin/
obj/
# Build folders
Debug/
Release/
net*/
publish/
# Visual Studio
.vs/
*.user
*.suo
*.userosscache
*.sln.docstates
# Rider / JetBrains
.idea/
*.sln.iml
# NuGet
*.nupkg
packages/
.nuget/
# Logs
*.log
# Database backups (если не нужны как часть проекта)
*.bak
*.tar
# Temporary files
*.tmp
*.temp
# OS files
.DS_Store
Thumbs.db
# Screenshots / temporary images
# (уберите, если картинки нужны в документации)
# *.png
# *.jpg
# *.jpeg
+25
View File
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36603.0 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Register office", "Register office\Register office.csproj", "{C8CBA323-4CD6-46D0-81AA-1C986EB50C6B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C8CBA323-4CD6-46D0-81AA-1C986EB50C6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C8CBA323-4CD6-46D0-81AA-1C986EB50C6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C8CBA323-4CD6-46D0-81AA-1C986EB50C6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C8CBA323-4CD6-46D0-81AA-1C986EB50C6B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BE06EF1-D35E-4B49-A77D-D46964AC9895}
EndGlobalSection
EndGlobal
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Register_office.BaseClasses
{
internal interface IUnionId
{
public abstract object GetId();
}
}
@@ -0,0 +1,70 @@
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
namespace Register_office
{
internal class ExcelManager
{
public static void ExportToExcel<T>(List<T> data, string filePath)
{
ExcelPackage.License.SetNonCommercialOrganization("Grant");
using var package = new ExcelPackage();
var worksheet = package.Workbook.Worksheets.Add("Отчёт");
// Получаем свойства класса
var properties = typeof(T).GetProperties();
// Заголовки (используем атрибут [DisplayName] или имя свойства)
for (int i = 0; i < properties.Length; i++)
{
var displayNameAttr = properties[i].GetCustomAttribute<DisplayNameAttribute>();
worksheet.Cells[1, i + 1].Value = displayNameAttr?.DisplayName ?? properties[i].Name;
}
// Данные
for (int i = 0; i < data.Count; i++)
{
for (int j = 0; j < properties.Length; j++)
{
worksheet.Cells[i + 2, j + 1].Value = properties[j].GetValue(data[i]);
}
}
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
try
{
File.WriteAllBytes(filePath, package.GetAsByteArray());
}
catch (Exception)
{
MessageBox.Show($"Не получилось сформировать отчет. Пожалуйста, закройте открытый файл отчета",
"Отчет о наличии ЛП в конце дня",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static void OpenExcelFile(string filePath)
{
try
{
var process = new Process
{
StartInfo = new ProcessStartInfo(filePath)
{
UseShellExecute = true // Ключевой параметр!
}
};
process.Start();
}
catch (Exception ex)
{
MessageBox.Show($"Не удалось открыть файл: {ex.Message}", "Отчет о наличии ЛП в конце дня",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Register_office.Model
{
internal class Analysis
{
[DisplayName("Пациент")]
[Column("Пациент")]
public string Patient { get; set; }
[DisplayName("Обследование")]
[Column("Обследование")]
public string Examination { get; set; }
[DisplayName("Результат")]
[Column("Результат")]
public string Result { get; set; }
}
}
@@ -0,0 +1,31 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Windows.Forms.Design.Behavior;
namespace Register_office.Model;
public partial class Disease : IUnionId
{
public object GetId() => DiseaseId;
[Display(Name = "hide")]
public int DiseaseId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Display(Name = "Код МКБ")]
public string IcdCode { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<DiseaseSyndrome> DiseaseSyndromes { get; set; } = new List<DiseaseSyndrome>();
[Browsable(false)]
public virtual ICollection<HospitalAdmission> HospitalAdmissions { get; set; } = new List<HospitalAdmission>();
[Browsable(false)]
public virtual ICollection<HospitalDischarge> HospitalDischarges { get; set; } = new List<HospitalDischarge>();
}
@@ -0,0 +1,61 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class DiseaseSyndrome : IUnionId
{
public object GetId() => DiseaseSyndromeId;
public int DiseaseSyndromeId { get; set; }
public int DiseaseId { get; set; }
public int SyndromeId { get; set; }
public virtual Disease Disease { get; set; } = null!;
public virtual SyndromeType Syndrome { get; set; } = null!;
}
internal class DiseaseSyndromeWrapper
{
[Display(Name = "hide")]
public int DiseaseSyndromeId { get; set; }
[Display(Name = "hide")]
public int DiseaseId { get; set; }
[Display(Name = "hide")]
public int SyndromeId { get; set; }
[Display(Name = "Заболевание")]
public string DiseaseName { get; set; } = null!;
[Display(Name = "Синдром")]
public string SyndromeName { get; set; } = null!;
public DiseaseSyndromeWrapper(DiseaseSyndrome src)
{
DiseaseSyndromeId = src.DiseaseSyndromeId;
DiseaseId = src.DiseaseId;
SyndromeId = src.SyndromeId;
DiseaseName = src.Disease.Name;
SyndromeName = src.Syndrome.Name;
}
internal static List<DiseaseSyndromeWrapper> ToList(List<DiseaseSyndrome> src)
{
List<DiseaseSyndromeWrapper> res = [];
foreach (DiseaseSyndrome lst in src)
{
res.Add(new DiseaseSyndromeWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class Doctor
{
[Display(Name = "hide")]
public int DoctorId { get; set; }
[Display(Name = "Данные")]
public virtual Person DoctorNavigation { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<Prescription> Prescriptions { get; set; } = new List<Prescription>();
}
@@ -0,0 +1,21 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class DrugIntakeMethod : IUnionId
{
public object GetId() => DrugIntakeMethodId;
[Display(Name = "hide")]
public int DrugIntakeMethodId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<DrugTypePrescription> DrugTypePrescriptions { get; set; } = new List<DrugTypePrescription>();
}
@@ -0,0 +1,30 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class DrugType : IUnionId
{
public object GetId() => DrugTypeId;
[Display(Name = "hide")]
public int DrugTypeId { get; set; }
[Display(Name = "Название на русском")]
public string InternationalNameRu { get; set; } = null!;
[Display(Name = "Название на английском")]
public string? InternationalNameEn { get; set; }
[Display(Name = "Название на латинском")]
public string? InternationalNameLa { get; set; }
[Display(Name = "Брэнд")]
public string? BrandNameRu { get; set; }
[Browsable(false)]
public virtual ICollection<DrugTypePrescription> DrugTypePrescriptions { get; set; } = new List<DrugTypePrescription>();
}
@@ -0,0 +1,93 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class DrugTypePrescription : IUnionId
{
public object GetId() => DrugPrescriptionId;
public int DrugPrescriptionId { get; set; }
public int PrescriptionId { get; set; }
public int DrugTypeId { get; set; }
public decimal Dose { get; set; }
public int DoseUnitId { get; set; }
public int IntakeMethodId { get; set; }
public int DurationDays { get; set; }
public virtual Unit DoseUnit { get; set; } = null!;
public virtual DrugType DrugType { get; set; } = null!;
public virtual DrugIntakeMethod IntakeMethod { get; set; } = null!;
public virtual Prescription Prescription { get; set; } = null!;
}
internal class DrugTypePrescriptionWrapper
{
[Display(Name = "hide")]
public int DrugPrescriptionId { get; set; }
[Display(Name = "hide")]
public int PrescriptionId { get; set; }
[Display(Name = "hide")]
public int DrugTypeId { get; set; }
[Display(Name = "Лекарства")]
public string DrugName { get; set; } = null!;
[Display(Name = "Количество")]
public decimal Dose { get; set; }
[Display(Name = "hide")]
public int DoseUnitId { get; set; }
[Display(Name = "Единица изм.")]
public string UnitName { get; set; } = null!;
[Display(Name = "hide")]
public int IntakeMethodId { get; set; }
[Display(Name = "Способ приема")]
public string IntakeMethodName { get; set; } = null!;
[Display(Name = "Длительность")]
public int DurationDays { get; set; }
public DrugTypePrescriptionWrapper(DrugTypePrescription src)
{
DrugPrescriptionId = src.DrugPrescriptionId;
PrescriptionId = src.PrescriptionId;
DrugTypeId = src.DrugTypeId;
DrugName = src.DrugType.InternationalNameRu;
Dose = src.Dose;
DoseUnitId = src.DoseUnitId;
UnitName = src.DoseUnit.Name;
IntakeMethodId = src.IntakeMethodId;
IntakeMethodName = src.IntakeMethod.Name;
DurationDays = src.DurationDays;
}
internal static List<DrugTypePrescriptionWrapper> ToList(List<DrugTypePrescription> src)
{
List<DrugTypePrescriptionWrapper> res = [];
foreach (DrugTypePrescription lst in src)
{
res.Add(new DrugTypePrescriptionWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Register_office.Model
{
public enum ExaminationCategories
{
Physical, // физикальное обследование
Laboratory, // лабораторное обследование
Instrumental // инструментальное обследование
}
public enum HospitalDischargeReasonEnum
{
Death, // смерть
Improvement, // улучшение состояния
Refusal // отказ от госпитализации или дальнейшего лечения
}
public enum GenderEnum
{
Male, // мужчина
Female // женщина
}
}
@@ -0,0 +1,33 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class ExaminationType : IUnionId
{
public object GetId() => ExaminationTypeId;
[Display(Name = "hide")]
public int ExaminationTypeId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Display(Name = "Категория")]
public string Category { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<ExaminationTypePrescription> ExaminationTypePrescriptions { get; set; } = new List<ExaminationTypePrescription>();
[Browsable(false)]
public virtual ICollection<ReferenceValue> ReferenceValues { get; set; } = new List<ReferenceValue>();
[Browsable(false)]
public virtual Result? Result { get; set; }
[Browsable(false)]
public virtual SyndromeExaminationType? SyndromeExaminationType { get; set; }
}
@@ -0,0 +1,70 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class ExaminationTypePrescription : IUnionId
{
public object GetId() => ExaminationPrescriptionId;
public int ExaminationPrescriptionId { get; set; }
public int PrescriptionId { get; set; }
public int? ResultId { get; set; }
public int ExaminationTypeId { get; set; }
public virtual ExaminationType ExaminationType { get; set; } = null!;
public virtual Prescription Prescription { get; set; } = null!;
public virtual Result? Result { get; set; }
}
internal class ExaminationTypePrescriptionWrapper
{
[Display(Name = "hide")]
public int ExaminationPrescriptionId { get; set; }
[Display(Name = "hide")]
public int PrescriptionId { get; set; }
[Display(Name = "hide")]
public int? ResultId { get; set; }
[Display(Name = "hide")]
public int ExaminationTypeId { get; set; }
[Display(Name = "Результат")]
public string Result { get; set; } = null!;
[Display(Name = "Обследование")]
public string ExaminationName { get; set; } = null!;
public ExaminationTypePrescriptionWrapper(ExaminationTypePrescription src)
{
ExaminationPrescriptionId = src.ExaminationPrescriptionId;
PrescriptionId = src.PrescriptionId;
ResultId = src.ResultId;
ExaminationTypeId = src.ExaminationTypeId;
if (src.Result != null)
Result = new ResultWrapper(src.Result).Result;
ExaminationName = src.ExaminationType.Name;
}
internal static List<ExaminationTypePrescriptionWrapper> ToList(List<ExaminationTypePrescription> src)
{
List<ExaminationTypePrescriptionWrapper> res = [];
foreach (ExaminationTypePrescription lst in src)
{
res.Add(new ExaminationTypePrescriptionWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,71 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class HospitalAdmission : IUnionId
{
public object GetId() => HospitalAdmissionId;
public int HospitalAdmissionId { get; set; }
public int PatientId { get; set; }
public int PreliminaryDiseaseId { get; set; }
public DateTime AdmissionDatetime { get; set; }
public virtual ICollection<HospitalDischarge> HospitalDischarges { get; set; } = new List<HospitalDischarge>();
public virtual Patient Patient { get; set; } = null!;
public virtual Disease PreliminaryDisease { get; set; } = null!;
}
internal class HospitalAdmissionWrapper
{
[Display(Name = "hide")]
public int HospitalAdmissionId { get; set; }
[Display(Name = "hide")]
public int PatientId { get; set; }
[Display(Name = "hide")]
public int PreliminaryDiseaseId { get; set; }
[Display(Name = "Пациент")]
public string PatientName { get; set; } = null!;
[Display(Name = "Заболевание")]
public string DiseaseName { get; set; } = null!;
[Display(Name = "Время")]
public DateTime AdmissionDatetime { get; set; }
public HospitalAdmissionWrapper(HospitalAdmission src)
{
HospitalAdmissionId = src.HospitalAdmissionId;
PatientId = src.PatientId;
PreliminaryDiseaseId = src.PreliminaryDiseaseId;
DiseaseName = src.PreliminaryDisease.Name;
AdmissionDatetime = src.AdmissionDatetime;
Person p = src.Patient.PatientNavigation;
PatientName = p.LastName + " " + p.FirstName + " " + p.MiddleName;
}
internal static List<HospitalAdmissionWrapper> ToList(List<HospitalAdmission> src)
{
List<HospitalAdmissionWrapper> res = [];
foreach (HospitalAdmission lst in src)
{
res.Add(new HospitalAdmissionWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,75 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class HospitalDischarge : IUnionId
{
public object GetId() => HospitalDischargeId;
public int HospitalDischargeId { get; set; }
public int HospitalAdmissionId { get; set; }
public DateTime DischargeDatetime { get; set; }
public int FinalDiseaseId { get; set; }
public string Reason { get; set; } = null!;
public virtual Disease FinalDisease { get; set; } = null!;
public virtual HospitalAdmission HospitalAdmission { get; set; } = null!;
}
internal class HospitalDischargeWrapper
{
[Display(Name = "hide")]
public int HospitalDischargeId { get; set; }
[Display(Name = "hide")]
public int HospitalAdmissionId { get; set; }
[Display(Name = "Пациент")]
public string PatientName { get; set; } = null!;
[Display(Name = "Предв. заболевание")]
public string DiseasePrName { get; set; } = null!;
[Display(Name = "Финал. заболевание")]
public string DiseaseFinName { get; set; } = null!;
[Display(Name = "Время")]
public DateTime DischargeDatetime { get; set; }
[Display(Name = "Причина завершения")]
public string Reason { get; set; } = null!;
public HospitalDischargeWrapper(HospitalDischarge src)
{
HospitalAdmissionId = src.HospitalAdmissionId;
HospitalDischargeId = src.HospitalDischargeId;
DiseasePrName = src.HospitalAdmission.PreliminaryDisease.Name;
DiseaseFinName = src.FinalDisease.Name;
DischargeDatetime = src.DischargeDatetime;
Reason = src.Reason;
Person p = src.HospitalAdmission.Patient.PatientNavigation;
PatientName = p.LastName + " " + p.FirstName + " " + p.MiddleName;
}
internal static List<HospitalDischargeWrapper> ToList(List<HospitalDischarge> src)
{
List<HospitalDischargeWrapper> res = [];
foreach (HospitalDischarge lst in src)
{
res.Add(new HospitalDischargeWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,21 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
namespace Register_office;
public partial class NumericResult : IUnionId
{
public object GetId() => ResultId;
public int ResultId { get; set; }
public decimal Value { get; set; }
public int UnitId { get; set; }
public virtual Result Result { get; set; } = null!;
public virtual Unit Unit { get; set; } = null!;
}
@@ -0,0 +1,72 @@
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class Patient
{
public int PatientId { get; set; }
public string PolicyNumber { get; set; } = null!;
public virtual ICollection<HospitalAdmission> HospitalAdmissions { get; set; } = new List<HospitalAdmission>();
public virtual Person PatientNavigation { get; set; } = null!;
public virtual ICollection<Prescription> Prescriptions { get; set; } = new List<Prescription>();
}
internal class PatientWrapper
{
[Display(Name = "hide")]
public int PatientId { get; set; }
[Display(Name = "Полис")]
public string PolicyNumber { get; set; } = null!;
[Display(Name = "Отчество")]
public string LastName { get; set; } = null!;
[Display(Name = "Имя")]
public string FirstName { get; set; } = null!;
[Display(Name = "Фамилия")]
public string? MiddleName { get; set; }
[Display(Name = "Дата рождения")]
public DateOnly BirthDate { get; set; }
[Display(Name = "Адрес")]
public string Address { get; set; } = null!;
[Display(Name = "Пол")]
public string Gender { get; set; } = null!;
public PatientWrapper(Patient src)
{
PatientId = src.PatientId;
PolicyNumber = src.PolicyNumber;
Person p = src.PatientNavigation;
LastName = p.LastName;
FirstName = p.FirstName;
MiddleName = p.MiddleName;
BirthDate = p.BirthDate;
Address = p.Address;
Gender = p.Gender;
}
internal static List<PatientWrapper> ToList(List<Patient> src)
{
List<PatientWrapper> res = [];
foreach (Patient lst in src)
{
res.Add(new PatientWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,40 @@
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class Person
{
[Display(Name = "hide")]
public int PersonId { get; set; }
[Display(Name = "Отчество")]
public string LastName { get; set; } = null!;
[Display(Name = "Имя")]
public string FirstName { get; set; } = null!;
[Display(Name = "Фамилия")]
public string? MiddleName { get; set; }
[Display(Name = "Дата рождения")]
public DateOnly BirthDate { get; set; }
[Display(Name = "Адрес")]
public string Address { get; set; } = null!;
[Display(Name = "Пол")]
public string Gender { get; set; } = null!;
[Browsable(false)]
public virtual Doctor? Doctor { get; set; }
[Browsable(false)]
public virtual Patient? Patient { get; set; }
[Browsable(false)]
public virtual Registrar? Registrar { get; set; }
}
@@ -0,0 +1,65 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class Prescription : IUnionId
{
public object GetId() => PrescriptionId;
public int PrescriptionId { get; set; }
public int PatientId { get; set; }
public int DoctorId { get; set; }
public virtual Doctor Doctor { get; set; } = null!;
public virtual DrugTypePrescription? DrugTypePrescription { get; set; }
public virtual ExaminationTypePrescription? ExaminationTypePrescription { get; set; }
public virtual Patient Patient { get; set; } = null!;
public virtual ProcedureTypePrescription? ProcedureTypePrescription { get; set; }
}
internal class PrescriptionWrapper
{
[Display(Name = "hide")]
public int PrescriptionId { get; set; }
[Display(Name = "hide")]
public int PatientId { get; set; }
[Display(Name = "hide")]
public int DoctorId { get; set; }
[Display(Name = "Пациент")]
public string PatientName { get; set; } = null!;
public PrescriptionWrapper(Prescription src)
{
PrescriptionId = src.PrescriptionId;
PatientId = src.PatientId;
DoctorId = src.DoctorId;
Person p = src.Patient.PatientNavigation;
PatientName = p.LastName + " " + p.FirstName + " " + p.MiddleName;
}
internal static List<PrescriptionWrapper> ToList(List<Prescription> src)
{
List<PrescriptionWrapper> res = [];
foreach (Prescription lst in src)
{
res.Add(new PrescriptionWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,22 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class ProcedureType : IUnionId
{
public object GetId() => ProcedureTypeId;
[Display(Name = "hide")]
public int ProcedureTypeId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<ProcedureTypePrescription> ProcedureTypePrescriptions { get; set; } = new List<ProcedureTypePrescription>();
}
@@ -0,0 +1,64 @@
using Register_office.BaseClasses;
using Register_office.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office;
public partial class ProcedureTypePrescription : IUnionId
{
public object GetId() => ProcedurePrescriptionId;
public int ProcedurePrescriptionId { get; set; }
public int PrescriptionId { get; set; }
public int ProcedureTypeId { get; set; }
public DateTime ScheduledDatetime { get; set; }
public virtual Prescription Prescription { get; set; } = null!;
public virtual ProcedureType ProcedureType { get; set; } = null!;
}
internal class ProcedureTypePrescriptionWrapper
{
[Display(Name = "hide")]
public int ProcedurePrescriptionId { get; set; }
[Display(Name = "hide")]
public int PrescriptionId { get; set; }
[Display(Name = "hide")]
public int ProcedureTypeId { get; set; }
[Display(Name = "Запланированное время")]
public DateTime ScheduledDatetime { get; set; }
[Display(Name = "Процедура")]
public string ProcedureName { get; set; } = null!;
public ProcedureTypePrescriptionWrapper(ProcedureTypePrescription src)
{
ProcedurePrescriptionId = src.ProcedurePrescriptionId;
PrescriptionId = src.PrescriptionId;
ProcedureTypeId = src.ProcedureTypeId;
ScheduledDatetime = src.ScheduledDatetime;
ProcedureName = src.ProcedureType.Name;
}
internal static List<ProcedureTypePrescriptionWrapper> ToList(List<ProcedureTypePrescription> src)
{
List<ProcedureTypePrescriptionWrapper> res = [];
foreach (ProcedureTypePrescription lst in src)
{
res.Add(new ProcedureTypePrescriptionWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,16 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
namespace Register_office.Model;
public partial class QualitativeResult : IUnionId
{
public object GetId() => ResultId;
public int ResultId { get; set; }
public bool Value { get; set; }
public virtual Result Result { get; set; } = null!;
}
@@ -0,0 +1,63 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class ReferenceNumericValue : IUnionId
{
public object GetId() => ReferenceValueId;
public int ReferenceValueId { get; set; }
public decimal? MinValue { get; set; }
public decimal? MaxValue { get; set; }
public int UnitId { get; set; }
public virtual ReferenceValue ReferenceValue { get; set; } = null!;
public virtual Unit Unit { get; set; } = null!;
}
internal class ReferenceNumericValueWrapper
{
[Display(Name = "hide")]
public int ReferenceValueId { get; set; }
[Display(Name = "Мин.")]
public decimal? MinValue { get; set; }
[Display(Name = "Макс.")]
public decimal? MaxValue { get; set; }
[Display(Name = "hide")]
public int UnitId { get; set; }
[Display(Name = "Единица изм.")]
public string UnitName { get; set; } = null!;
public ReferenceNumericValueWrapper(ReferenceNumericValue src)
{
ReferenceValueId = src.ReferenceValueId;
MinValue = src.MinValue;
MaxValue = src.MaxValue;
UnitId = src.UnitId;
UnitName = src.Unit.Name;
}
internal static List<ReferenceNumericValueWrapper> ToList(List<ReferenceNumericValue> src)
{
List<ReferenceNumericValueWrapper> res = [];
foreach (ReferenceNumericValue lst in src)
{
res.Add(new ReferenceNumericValueWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,24 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class ReferenceQualitativeValue : IUnionId
{
public object GetId() => ReferenceValueId;
[Display(Name = "hide")]
public int ReferenceValueId { get; set; }
[Display(Name = "Опис. наличия")]
public string DescriptionTrue { get; set; } = null!;
[Display(Name = "Опис. отсутствия")]
public string DescriptionFalse { get; set; } = null!;
[Browsable(false)]
public virtual ReferenceValue ReferenceValue { get; set; } = null!;
}
@@ -0,0 +1,71 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class ReferenceValue : IUnionId
{
public object GetId() => ReferenceValueId;
public int ReferenceValueId { get; set; }
public int ExaminationTypeId { get; set; }
public int? AgeMin { get; set; }
public int? AgeMax { get; set; }
public string Gender { get; set; } = null!;
public virtual ExaminationType ExaminationType { get; set; } = null!;
public virtual ReferenceNumericValue? ReferenceNumericValue { get; set; }
public virtual ReferenceQualitativeValue? ReferenceQualitativeValue { get; set; }
}
internal class ReferenceValueWrapper
{
[Display(Name = "hide")]
public int ReferenceValueId { get; set; }
[Display(Name = "hide")]
public int ExaminationTypeId { get; set; }
[Display(Name = "Мин. возраст")]
public int? AgeMin { get; set; }
[Display(Name = "Макс. возраст")]
public int? AgeMax { get; set; }
[Display(Name = "Обследование")]
public string ExaminationName { get; set; } = null!;
[Display(Name = "Пол")]
public string Gender { get; set; } = null!;
public ReferenceValueWrapper(ReferenceValue src)
{
ReferenceValueId = src.ReferenceValueId;
ExaminationTypeId = src.ExaminationTypeId;
AgeMin = src.AgeMin;
AgeMax = src.AgeMax;
ExaminationName = src.ExaminationType.Name;
Gender = src.Gender;
}
internal static List<ReferenceValueWrapper> ToList(List<ReferenceValue> src)
{
List<ReferenceValueWrapper> res = [];
foreach (ReferenceValue lst in src)
{
res.Add(new ReferenceValueWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class Registrar
{
[Display(Name = "hide")]
public int RegistrarId { get; set; }
[Display(Name = "Данные")]
public virtual Person RegistrarNavigation { get; set; } = null!;
}
@@ -0,0 +1,61 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class Result : IUnionId
{
public object GetId() => ResultId;
public int ResultId { get; set; }
public int ExaminationId { get; set; }
public virtual ExaminationType Examination { get; set; } = null!;
public virtual ICollection<ExaminationTypePrescription> ExaminationTypePrescriptions { get; set; } = new List<ExaminationTypePrescription>();
public virtual NumericResult? NumericResult { get; set; }
public virtual QualitativeResult? QualitativeResult { get; set; }
}
internal class ResultWrapper
{
[Display(Name = "hide")]
public int ResultId { get; set; }
[Display(Name = "hide")]
public int ExaminationId { get; set; }
[Display(Name = "Обследование")]
public string Examination { get; set; } = null!;
[Display(Name = "Результат")]
public string Result { get; set; } = null!;
public ResultWrapper(Result src)
{
ResultId = src.ResultId;
ExaminationId = src.ExaminationId;
Examination = src.Examination.Name;
Result = src.NumericResult != null
? src.NumericResult.Value + " " + src.NumericResult.Unit
: (src.QualitativeResult?.Value == true ? "Положительный" : "Отрициательный");
}
internal static List<ResultWrapper> ToList(List<Result> src)
{
List<ResultWrapper> res = [];
foreach (Result lst in src)
{
res.Add(new ResultWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,55 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class SyndromeExaminationType : IUnionId
{
public object GetId() => string.Concat(SyndromeId, ExaminationTypeId);
public int SyndromeId { get; set; }
public int ExaminationTypeId { get; set; }
public virtual ExaminationType ExaminationType { get; set; } = null!;
public virtual SyndromeType Syndrome { get; set; } = null!;
}
internal class SyndromeExaminationTypeWrapper
{
[Display(Name = "hide")]
public int SyndromeId { get; set; }
[Display(Name = "hide")]
public int ExaminationTypeId { get; set; }
[Display(Name = "Синдром")]
public string SyndromeName { get; set; } = null!;
[Display(Name = "Обследование")]
public string ExaminationName { get; set; } = null!;
public SyndromeExaminationTypeWrapper(SyndromeExaminationType src)
{
SyndromeId = src.SyndromeId;
ExaminationTypeId = src.ExaminationTypeId;
SyndromeName = src.Syndrome.Name;
ExaminationName = src.ExaminationType.Name;
}
internal static List<SyndromeExaminationTypeWrapper> ToList(List<SyndromeExaminationType> src)
{
List<SyndromeExaminationTypeWrapper> res = [];
foreach (SyndromeExaminationType lst in src)
{
res.Add(new SyndromeExaminationTypeWrapper(lst));
}
return res;
}
}
@@ -0,0 +1,24 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class SyndromeType : IUnionId
{
public object GetId() => SyndromeTypeId;
[Display(Name = "hide")]
public int SyndromeTypeId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<DiseaseSyndrome> DiseaseSyndromes { get; set; } = new List<DiseaseSyndrome>();
[Browsable(false)]
public virtual SyndromeExaminationType? SyndromeExaminationType { get; set; }
}
@@ -0,0 +1,27 @@
using Register_office.BaseClasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Register_office.Model;
public partial class Unit : IUnionId
{
public object GetId() => UnitId;
[Display(Name = "hide")]
public int UnitId { get; set; }
[Display(Name = "Название")]
public string Name { get; set; } = null!;
[Browsable(false)]
public virtual ICollection<DrugTypePrescription> DrugTypePrescriptions { get; set; } = new List<DrugTypePrescription>();
[Browsable(false)]
public virtual ICollection<NumericResult> NumericResults { get; set; } = new List<NumericResult>();
[Browsable(false)]
public virtual ICollection<ReferenceNumericValue> ReferenceNumericValues { get; set; } = new List<ReferenceNumericValue>();
}
@@ -0,0 +1,57 @@
using Register_office.Properties;
using Register_office.View.LoginV;
using Register_office.View.MenuV;
using Register_office.View.RegistrationV;
using Register_office.ViewModel;
namespace Register_office
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
if (!Init()) return;
Application.Run(new LoginForm());
}
private static bool Init()
{
GeneralViewModel.Instance.Initialize();
while (!RegisterOfficeFactory.CanConnect)
{
MessageBox.Show("Îøèáêà ïîäêëþ÷åíèÿ ê áàçå äàííûõ! " +
"Îáðàòèòåñü ê àäìèíèñòðàòîðó áàçû äàííûõ çà ïîìîùüþ íàñòðîéêè ïîäêëþ÷åíèÿ",
"Ïîäêëþ÷åíèå ê áàçå äàííûõ", MessageBoxButtons.OK, MessageBoxIcon.Error);
ConnectionParametersForm form = new();
{
form.tbHost.Text = Settings.Default.Host;
form.tbDataBase.Text = Settings.Default.Database;
form.tbUsername.Text = Settings.Default.Username;
form.tbPassword.Text = Settings.Default.Password;
}
if (form.ShowDialog() == DialogResult.OK)
{
Settings.Default.Host = form.tbHost.Text;
Settings.Default.Database = form.tbDataBase.Text;
Settings.Default.Username = form.tbUsername.Text;
Settings.Default.Password = form.tbPassword.Text;
Settings.Default.Save();
}
else return false;
GeneralViewModel.Instance.Initialize();
}
return true;
}
}
}
@@ -0,0 +1,556 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
namespace Register_office.Properties;
public partial class RegisterOfficeContext : DbContext
{
public RegisterOfficeContext()
{
}
public RegisterOfficeContext(DbContextOptions<RegisterOfficeContext> options)
: base(options)
{
}
public virtual DbSet<Disease> Diseases { get; set; }
public virtual DbSet<DiseaseSyndrome> DiseaseSyndromes { get; set; }
public virtual DbSet<Doctor> Doctors { get; set; }
public virtual DbSet<DrugIntakeMethod> DrugIntakeMethods { get; set; }
public virtual DbSet<DrugType> DrugTypes { get; set; }
public virtual DbSet<DrugTypePrescription> DrugTypePrescriptions { get; set; }
public virtual DbSet<ExaminationType> ExaminationTypes { get; set; }
public virtual DbSet<ExaminationTypePrescription> ExaminationTypePrescriptions { get; set; }
public virtual DbSet<HospitalAdmission> HospitalAdmissions { get; set; }
public virtual DbSet<HospitalDischarge> HospitalDischarges { get; set; }
public virtual DbSet<NumericResult> NumericResults { get; set; }
public virtual DbSet<Patient> Patients { get; set; }
public virtual DbSet<Person> People { get; set; }
public virtual DbSet<Prescription> Prescriptions { get; set; }
public virtual DbSet<ProcedureType> ProcedureTypes { get; set; }
public virtual DbSet<ProcedureTypePrescription> ProcedureTypePrescriptions { get; set; }
public virtual DbSet<QualitativeResult> QualitativeResults { get; set; }
public virtual DbSet<ReferenceNumericValue> ReferenceNumericValues { get; set; }
public virtual DbSet<ReferenceQualitativeValue> ReferenceQualitativeValues { get; set; }
public virtual DbSet<ReferenceValue> ReferenceValues { get; set; }
public virtual DbSet<Registrar> Registrars { get; set; }
public virtual DbSet<Result> Results { get; set; }
public virtual DbSet<SyndromeExaminationType> SyndromeExaminationTypes { get; set; }
public virtual DbSet<SyndromeType> SyndromeTypes { get; set; }
public virtual DbSet<Unit> Units { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=register_office;Username=postgres;Password=slavik242");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.HasPostgresEnum("examination_categories_enum", new[] { "physical", "laboratory", "instrumental" })
.HasPostgresEnum("gender_enum", new[] { "male", "female" })
.HasPostgresEnum("hospital_discharge_reason_enum", new[] { "death", "improvement", "refusal" })
.HasPostgresEnum("unit_context_enum", new[] { "examination", "medication" });
modelBuilder.Entity<Disease>(entity =>
{
entity.HasKey(e => e.DiseaseId).HasName("disease_pkey");
entity.ToTable("disease");
entity.HasIndex(e => e.IcdCode, "disease_icd_code_key").IsUnique();
entity.HasIndex(e => e.Name, "disease_name_key").IsUnique();
entity.Property(e => e.DiseaseId).HasColumnName("disease_id");
entity.Property(e => e.IcdCode).HasColumnName("icd_code");
entity.Property(e => e.Name).HasColumnName("name");
});
modelBuilder.Entity<DiseaseSyndrome>(entity =>
{
entity.HasKey(e => e.DiseaseSyndromeId).HasName("disease_syndrome_pkey");
entity.ToTable("disease_syndrome");
entity.HasIndex(e => new { e.DiseaseId, e.SyndromeId }, "disease_syndrome_disease_id_syndrome_id_key").IsUnique();
entity.Property(e => e.DiseaseSyndromeId).HasColumnName("disease_syndrome_id");
entity.Property(e => e.DiseaseId).HasColumnName("disease_id");
entity.Property(e => e.SyndromeId).HasColumnName("syndrome_id");
entity.HasOne(d => d.Disease).WithMany(p => p.DiseaseSyndromes)
.HasForeignKey(d => d.DiseaseId)
.HasConstraintName("disease_syndrome_disease_id_fkey");
entity.HasOne(d => d.Syndrome).WithMany(p => p.DiseaseSyndromes)
.HasForeignKey(d => d.SyndromeId)
.HasConstraintName("disease_syndrome_syndrome_id_fkey");
});
modelBuilder.Entity<Doctor>(entity =>
{
entity.HasKey(e => e.DoctorId).HasName("doctor_pkey");
entity.ToTable("doctor");
entity.Property(e => e.DoctorId)
.ValueGeneratedNever()
.HasColumnName("doctor_id");
entity.HasOne(d => d.DoctorNavigation).WithOne(p => p.Doctor)
.HasForeignKey<Doctor>(d => d.DoctorId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("doctor_doctor_id_fkey");
});
modelBuilder.Entity<DrugIntakeMethod>(entity =>
{
entity.HasKey(e => e.DrugIntakeMethodId).HasName("drug_intake_method_pkey");
entity.ToTable("drug_intake_method");
entity.HasIndex(e => e.Name, "drug_intake_method_name_key").IsUnique();
entity.Property(e => e.DrugIntakeMethodId).HasColumnName("drug_intake_method_id");
entity.Property(e => e.Name).HasColumnName("name");
});
modelBuilder.Entity<DrugType>(entity =>
{
entity.HasKey(e => e.DrugTypeId).HasName("drug_type_pkey");
entity.ToTable("drug_type");
entity.HasIndex(e => e.BrandNameRu, "drug_type_brand_name_ru_key").IsUnique();
entity.HasIndex(e => e.InternationalNameEn, "drug_type_international_name_en_key").IsUnique();
entity.HasIndex(e => e.InternationalNameLa, "drug_type_international_name_la_key").IsUnique();
entity.HasIndex(e => e.InternationalNameRu, "drug_type_international_name_ru_key").IsUnique();
entity.Property(e => e.DrugTypeId).HasColumnName("drug_type_id");
entity.Property(e => e.BrandNameRu).HasColumnName("brand_name_ru");
entity.Property(e => e.InternationalNameEn).HasColumnName("international_name_en");
entity.Property(e => e.InternationalNameLa).HasColumnName("international_name_la");
entity.Property(e => e.InternationalNameRu).HasColumnName("international_name_ru");
});
modelBuilder.Entity<DrugTypePrescription>(entity =>
{
entity.HasKey(e => e.DrugPrescriptionId).HasName("drug_type_prescription_pkey");
entity.ToTable("drug_type_prescription");
entity.HasIndex(e => e.PrescriptionId, "drug_type_prescription_prescription_id_key").IsUnique();
entity.Property(e => e.DrugPrescriptionId).HasColumnName("drug_prescription_id");
entity.Property(e => e.Dose).HasColumnName("dose");
entity.Property(e => e.DoseUnitId).HasColumnName("dose_unit_id");
entity.Property(e => e.DrugTypeId).HasColumnName("drug_type_id");
entity.Property(e => e.DurationDays).HasColumnName("duration_days");
entity.Property(e => e.IntakeMethodId).HasColumnName("intake_method_id");
entity.Property(e => e.PrescriptionId).HasColumnName("prescription_id");
entity.HasOne(d => d.DoseUnit).WithMany(p => p.DrugTypePrescriptions)
.HasForeignKey(d => d.DoseUnitId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("drug_type_prescription_dose_unit_id_fkey");
entity.HasOne(d => d.DrugType).WithMany(p => p.DrugTypePrescriptions)
.HasForeignKey(d => d.DrugTypeId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("drug_type_prescription_drug_type_id_fkey");
entity.HasOne(d => d.IntakeMethod).WithMany(p => p.DrugTypePrescriptions)
.HasForeignKey(d => d.IntakeMethodId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("drug_type_prescription_intake_method_id_fkey");
entity.HasOne(d => d.Prescription).WithOne(p => p.DrugTypePrescription)
.HasForeignKey<DrugTypePrescription>(d => d.PrescriptionId)
.HasConstraintName("drug_type_prescription_prescription_id_fkey");
});
modelBuilder.Entity<ExaminationType>(entity =>
{
entity.HasKey(e => e.ExaminationTypeId).HasName("examination_type_pkey");
entity.ToTable("examination_type");
entity.HasIndex(e => e.Name, "examination_type_name_key").IsUnique();
entity.Property(e => e.ExaminationTypeId).HasColumnName("examination_type_id");
entity.Property(e => e.Name).HasColumnName("name");
entity.Property(e => e.Category).HasColumnName("category");
});
modelBuilder.Entity<ExaminationTypePrescription>(entity =>
{
entity.HasKey(e => e.ExaminationPrescriptionId).HasName("examination_type_prescription_pkey");
entity.ToTable("examination_type_prescription");
entity.HasIndex(e => e.PrescriptionId, "examination_type_prescription_prescription_id_key").IsUnique();
entity.Property(e => e.ExaminationPrescriptionId).HasColumnName("examination_prescription_id");
entity.Property(e => e.ExaminationTypeId).HasColumnName("examination_type_id");
entity.Property(e => e.PrescriptionId).HasColumnName("prescription_id");
entity.Property(e => e.ResultId).HasColumnName("result_id");
entity.HasOne(d => d.ExaminationType).WithMany(p => p.ExaminationTypePrescriptions)
.HasForeignKey(d => d.ExaminationTypeId)
.HasConstraintName("examination_type_prescription_examination_type_id_fkey");
entity.HasOne(d => d.Prescription).WithOne(p => p.ExaminationTypePrescription)
.HasForeignKey<ExaminationTypePrescription>(d => d.PrescriptionId)
.HasConstraintName("examination_type_prescription_prescription_id_fkey");
entity.HasOne(d => d.Result).WithMany(p => p.ExaminationTypePrescriptions)
.HasForeignKey(d => d.ResultId)
.HasConstraintName("examination_type_prescription_result_id_fkey");
});
modelBuilder.Entity<HospitalAdmission>(entity =>
{
entity.HasKey(e => e.HospitalAdmissionId).HasName("hospital_admission_pkey");
entity.ToTable("hospital_admission");
entity.Property(e => e.HospitalAdmissionId).HasColumnName("hospital_admission_id");
entity.Property(e => e.AdmissionDatetime)
.HasColumnType("timestamp without time zone")
.HasColumnName("admission_datetime");
entity.Property(e => e.PatientId).HasColumnName("patient_id");
entity.Property(e => e.PreliminaryDiseaseId).HasColumnName("preliminary_disease_id");
entity.HasOne(d => d.Patient).WithMany(p => p.HospitalAdmissions)
.HasForeignKey(d => d.PatientId)
.HasConstraintName("hospital_admission_patient_id_fkey");
entity.HasOne(d => d.PreliminaryDisease).WithMany(p => p.HospitalAdmissions)
.HasForeignKey(d => d.PreliminaryDiseaseId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("hospital_admission_preliminary_disease_id_fkey");
});
modelBuilder.Entity<HospitalDischarge>(entity =>
{
entity.HasKey(e => e.HospitalDischargeId).HasName("hospital_discharge_pkey");
entity.ToTable("hospital_discharge");
entity.Property(e => e.HospitalDischargeId).HasColumnName("hospital_discharge_id");
entity.Property(e => e.DischargeDatetime)
.HasColumnType("timestamp without time zone")
.HasColumnName("discharge_datetime");
entity.Property(e => e.FinalDiseaseId).HasColumnName("final_disease_id");
entity.Property(e => e.HospitalAdmissionId).HasColumnName("hospital_admission_id");
entity.Property(e => e.Reason).HasColumnName("reason");
entity.HasOne(d => d.FinalDisease).WithMany(p => p.HospitalDischarges)
.HasForeignKey(d => d.FinalDiseaseId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("hospital_discharge_final_disease_id_fkey");
entity.HasOne(d => d.HospitalAdmission).WithMany(p => p.HospitalDischarges)
.HasForeignKey(d => d.HospitalAdmissionId)
.HasConstraintName("hospital_discharge_hospital_admission_id_fkey");
});
modelBuilder.Entity<NumericResult>(entity =>
{
entity.HasKey(e => e.ResultId).HasName("numeric_result_pkey");
entity.ToTable("numeric_result");
entity.Property(e => e.ResultId)
.ValueGeneratedNever()
.HasColumnName("result_id");
entity.Property(e => e.UnitId).HasColumnName("unit_id");
entity.Property(e => e.Value).HasColumnName("value");
entity.HasOne(d => d.Result).WithOne(p => p.NumericResult)
.HasForeignKey<NumericResult>(d => d.ResultId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("numeric_result_result_id_fkey");
entity.HasOne(d => d.Unit).WithMany(p => p.NumericResults)
.HasForeignKey(d => d.UnitId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("numeric_result_unit_id_fkey");
});
modelBuilder.Entity<Patient>(entity =>
{
entity.HasKey(e => e.PatientId).HasName("patient_pkey");
entity.ToTable("patient");
entity.Property(e => e.PatientId)
.ValueGeneratedNever()
.HasColumnName("patient_id");
entity.Property(e => e.PolicyNumber).HasColumnName("policy_number");
entity.HasOne(d => d.PatientNavigation).WithOne(p => p.Patient)
.HasForeignKey<Patient>(d => d.PatientId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("patient_patient_id_fkey");
});
modelBuilder.Entity<Person>(entity =>
{
entity.HasKey(e => e.PersonId).HasName("person_pkey");
entity.ToTable("person");
entity.Property(e => e.PersonId).HasColumnName("person_id");
entity.Property(e => e.Address).HasColumnName("address");
entity.Property(e => e.BirthDate).HasColumnName("birth_date");
entity.Property(e => e.FirstName).HasColumnName("first_name");
entity.Property(e => e.LastName).HasColumnName("last_name");
entity.Property(e => e.MiddleName).HasColumnName("middle_name");
entity.Property(e => e.Gender).HasColumnName(name: "gender");
});
modelBuilder.Entity<Prescription>(entity =>
{
entity.HasKey(e => e.PrescriptionId).HasName("prescription_pkey");
entity.ToTable("prescription");
entity.Property(e => e.PrescriptionId).HasColumnName("prescription_id");
entity.Property(e => e.DoctorId).HasColumnName("doctor_id");
entity.Property(e => e.PatientId).HasColumnName("patient_id");
entity.HasOne(d => d.Doctor).WithMany(p => p.Prescriptions)
.HasForeignKey(d => d.DoctorId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("prescription_doctor_id_fkey");
entity.HasOne(d => d.Patient).WithMany(p => p.Prescriptions)
.HasForeignKey(d => d.PatientId)
.HasConstraintName("prescription_patient_id_fkey");
});
modelBuilder.Entity<ProcedureType>(entity =>
{
entity.HasKey(e => e.ProcedureTypeId).HasName("procedure_type_pkey");
entity.ToTable("procedure_type");
entity.HasIndex(e => e.Name, "procedure_type_name_key").IsUnique();
entity.Property(e => e.ProcedureTypeId).HasColumnName("procedure_type_id");
entity.Property(e => e.Name).HasColumnName("name");
});
modelBuilder.Entity<ProcedureTypePrescription>(entity =>
{
entity.HasKey(e => e.ProcedurePrescriptionId).HasName("procedure_type_prescription_pkey");
entity.ToTable("procedure_type_prescription");
entity.HasIndex(e => e.PrescriptionId, "procedure_type_prescription_prescription_id_key").IsUnique();
entity.Property(e => e.ProcedurePrescriptionId).HasColumnName("procedure_prescription_id");
entity.Property(e => e.PrescriptionId).HasColumnName("prescription_id");
entity.Property(e => e.ProcedureTypeId).HasColumnName("procedure_type_id");
entity.Property(e => e.ScheduledDatetime)
.HasColumnType("timestamp without time zone")
.HasColumnName("scheduled_datetime");
entity.HasOne(d => d.Prescription).WithOne(p => p.ProcedureTypePrescription)
.HasForeignKey<ProcedureTypePrescription>(d => d.PrescriptionId)
.HasConstraintName("procedure_type_prescription_prescription_id_fkey");
entity.HasOne(d => d.ProcedureType).WithMany(p => p.ProcedureTypePrescriptions)
.HasForeignKey(d => d.ProcedureTypeId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("procedure_type_prescription_procedure_type_id_fkey");
});
modelBuilder.Entity<QualitativeResult>(entity =>
{
entity.HasKey(e => e.ResultId).HasName("qualitative_result_pkey");
entity.ToTable("qualitative_result");
entity.Property(e => e.ResultId)
.ValueGeneratedNever()
.HasColumnName("result_id");
entity.Property(e => e.Value).HasColumnName("value");
entity.HasOne(d => d.Result).WithOne(p => p.QualitativeResult)
.HasForeignKey<QualitativeResult>(d => d.ResultId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("qualitative_result_result_id_fkey");
});
modelBuilder.Entity<ReferenceNumericValue>(entity =>
{
entity.HasKey(e => e.ReferenceValueId).HasName("reference_numeric_value_pkey");
entity.ToTable("reference_numeric_value");
entity.Property(e => e.ReferenceValueId)
.ValueGeneratedNever()
.HasColumnName("reference_value_id");
entity.Property(e => e.MaxValue).HasColumnName("max_value");
entity.Property(e => e.MinValue).HasColumnName("min_value");
entity.Property(e => e.UnitId).HasColumnName("unit_id");
entity.HasOne(d => d.ReferenceValue).WithOne(p => p.ReferenceNumericValue)
.HasForeignKey<ReferenceNumericValue>(d => d.ReferenceValueId)
.HasConstraintName("reference_numeric_value_reference_value_id_fkey");
entity.HasOne(d => d.Unit).WithMany(p => p.ReferenceNumericValues)
.HasForeignKey(d => d.UnitId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("reference_numeric_value_unit_id_fkey");
});
modelBuilder.Entity<ReferenceQualitativeValue>(entity =>
{
entity.HasKey(e => e.ReferenceValueId).HasName("reference_qualitative_value_pkey");
entity.ToTable("reference_qualitative_value");
entity.HasIndex(e => new { e.DescriptionTrue, e.DescriptionFalse }, "reference_qualitative_value_description_true_description_fa_key").IsUnique();
entity.Property(e => e.ReferenceValueId)
.ValueGeneratedNever()
.HasColumnName("reference_value_id");
entity.Property(e => e.DescriptionFalse).HasColumnName("description_false");
entity.Property(e => e.DescriptionTrue).HasColumnName("description_true");
entity.HasOne(d => d.ReferenceValue).WithOne(p => p.ReferenceQualitativeValue)
.HasForeignKey<ReferenceQualitativeValue>(d => d.ReferenceValueId)
.HasConstraintName("reference_qualitative_value_reference_value_id_fkey");
});
modelBuilder.Entity<ReferenceValue>(entity =>
{
entity.HasKey(e => e.ReferenceValueId).HasName("reference_value_pkey");
entity.ToTable("reference_value");
entity.Property(e => e.ReferenceValueId).HasColumnName("reference_value_id");
entity.Property(e => e.AgeMax).HasColumnName("age_max");
entity.Property(e => e.AgeMin).HasColumnName("age_min");
entity.Property(e => e.ExaminationTypeId).HasColumnName("examination_type_id");
entity.Property(e => e.Gender).HasColumnName("gender");
entity.HasOne(d => d.ExaminationType).WithMany(p => p.ReferenceValues)
.HasForeignKey(d => d.ExaminationTypeId)
.HasConstraintName("reference_value_examination_type_id_fkey");
});
modelBuilder.Entity<Registrar>(entity =>
{
entity.HasKey(e => e.RegistrarId).HasName("registrar_pkey");
entity.ToTable("registrar");
entity.Property(e => e.RegistrarId)
.ValueGeneratedNever()
.HasColumnName("registrar_id");
entity.HasOne(d => d.RegistrarNavigation).WithOne(p => p.Registrar)
.HasForeignKey<Registrar>(d => d.RegistrarId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("registrar_registrar_id_fkey");
});
modelBuilder.Entity<Result>(entity =>
{
entity.HasKey(e => e.ResultId).HasName("result_pkey");
entity.ToTable("result");
entity.Property(e => e.ResultId).HasColumnName("result_id");
entity.Property(e => e.ExaminationId).HasColumnName("examination_id");
entity.HasOne(d => d.Examination).WithOne(p => p.Result)
.HasForeignKey<Result>(d => d.ExaminationId)
.HasConstraintName("result_examination_id_fkey");
});
modelBuilder.Entity<SyndromeExaminationType>(entity =>
{
entity.HasKey(e => e.SyndromeId).HasName("syndrome_examination_type_pkey");
entity.ToTable("syndrome_examination_type");
entity.HasIndex(e => e.ExaminationTypeId, "syndrome_examination_type_examination_type_id_key").IsUnique();
entity.Property(e => e.SyndromeId)
.ValueGeneratedNever()
.HasColumnName("syndrome_id");
entity.Property(e => e.ExaminationTypeId).HasColumnName("examination_type_id");
entity.HasOne(d => d.ExaminationType).WithOne(p => p.SyndromeExaminationType)
.HasForeignKey<SyndromeExaminationType>(d => d.ExaminationTypeId)
.HasConstraintName("syndrome_examination_type_examination_type_id_fkey");
entity.HasOne(d => d.Syndrome).WithOne(p => p.SyndromeExaminationType)
.HasForeignKey<SyndromeExaminationType>(d => d.SyndromeId)
.HasConstraintName("syndrome_examination_type_syndrome_id_fkey");
});
modelBuilder.Entity<SyndromeType>(entity =>
{
entity.HasKey(e => e.SyndromeTypeId).HasName("syndrome_type_pkey");
entity.ToTable("syndrome_type");
entity.HasIndex(e => e.Name, "syndrome_type_name_key").IsUnique();
entity.Property(e => e.SyndromeTypeId).HasColumnName("syndrome_type_id");
entity.Property(e => e.Name).HasColumnName("name");
});
modelBuilder.Entity<Unit>(entity =>
{
entity.HasKey(e => e.UnitId).HasName("unit_pkey");
entity.ToTable("unit");
entity.HasIndex(e => e.Name, "unit_name_key").IsUnique();
entity.Property(e => e.UnitId).HasColumnName("unit_id");
entity.Property(e => e.Name).HasColumnName("name");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore;
using Npgsql;
using Register_office.Properties;
namespace Register_office.Properties
{
internal class RegisterOfficeFactory
{
internal static bool CanConnect = false;
internal static RegisterOfficeContext Create(string username, string password)
{
var builder = new NpgsqlConnectionStringBuilder()
{
Host = Settings.Default.Host,
Database = Settings.Default.Database,
Username = username,
Password = password
};
var optionsBuilder = new DbContextOptionsBuilder<RegisterOfficeContext>();
optionsBuilder.UseNpgsql(builder.ToString());
RegisterOfficeContext dbContext = new(optionsBuilder.Options);
CanConnect = dbContext.Database.CanConnect();
return dbContext;
}
}
}
@@ -0,0 +1,74 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Register_office.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Host {
get {
return ((string)(this["Host"]));
}
set {
this["Host"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Database {
get {
return ((string)(this["Database"]));
}
set {
this["Database"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Username {
get {
return ((string)(this["Username"]));
}
set {
this["Username"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Password {
get {
return ((string)(this["Password"]));
}
set {
this["Password"] = value;
}
}
}
}
@@ -0,0 +1,18 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Apteka.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="Host" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Database" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Username" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Password" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>
@@ -0,0 +1,91 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<RootNamespace>Register_office</RootNamespace>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EPPlus" Version="8.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Update="View\HospitalV\HospitalForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\HospitalV\HospitalDischargeDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PatientV\PatientForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PrescriptionsV\DrugDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PrescriptionsV\ExaminationDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PrescriptionsV\ProcedureDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PrescriptionsV\PrescriptionForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\PrescriptionsV\ResultDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\DrugTypeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\DiseaseSyndromeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\UnitForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\SyndromeExaminationTypeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\SyndromeTypeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\ReferenceValueForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\ProcedureTypeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\ExaminationTypeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\DrugIntakeMethodForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="View\TypesV\DiseaseForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
</Project>
@@ -0,0 +1,158 @@
namespace Register_office.View.TypesV
{
partial class HospitalDischargeDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
cbDisease = new ComboBox();
label1 = new Label();
button2 = new Button();
btnOK = new Button();
dtpDischarge = new DateTimePicker();
label6 = new Label();
rtbReason = new RichTextBox();
label2 = new Label();
SuspendLayout();
//
// cbDisease
//
cbDisease.DropDownStyle = ComboBoxStyle.DropDownList;
cbDisease.Font = new Font("Segoe UI", 12F);
cbDisease.FormattingEnabled = true;
cbDisease.Items.AddRange(new object[] { "Числовой", "Качественный" });
cbDisease.Location = new Point(12, 37);
cbDisease.Name = "cbDisease";
cbDisease.Size = new Size(341, 29);
cbDisease.TabIndex = 24;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(186, 25);
label1.TabIndex = 25;
label1.Text = "Финальный диагноз";
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(192, 271);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 27;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 271);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 26;
btnOK.Text = "Добавить";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// dtpDischarge
//
dtpDischarge.CustomFormat = "HH:mm dd.MM.yyyy";
dtpDischarge.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
dtpDischarge.Format = DateTimePickerFormat.Custom;
dtpDischarge.Location = new Point(9, 97);
dtpDischarge.MinDate = new DateTime(1940, 1, 1, 0, 0, 0, 0);
dtpDischarge.Name = "dtpDischarge";
dtpDischarge.Size = new Size(164, 29);
dtpDischarge.TabIndex = 28;
//
// label6
//
label6.AutoSize = true;
label6.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label6.Location = new Point(9, 69);
label6.Name = "label6";
label6.Size = new Size(164, 25);
label6.TabIndex = 29;
label6.Text = "Дата завершения";
//
// rtbReason
//
rtbReason.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
rtbReason.Location = new Point(9, 157);
rtbReason.Name = "rtbReason";
rtbReason.Size = new Size(341, 96);
rtbReason.TabIndex = 30;
rtbReason.Text = "";
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(9, 129);
label2.Name = "label2";
label2.Size = new Size(202, 25);
label2.TabIndex = 31;
label2.Text = "Причина завершения";
//
// HospitalDischargeDataForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(365, 325);
Controls.Add(label2);
Controls.Add(rtbReason);
Controls.Add(dtpDischarge);
Controls.Add(label6);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(cbDisease);
Controls.Add(label1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "HospitalDischargeDataForm";
Text = "Завершение госпитализации";
ResumeLayout(false);
PerformLayout();
}
#endregion
internal ComboBox cbDisease;
private Label label1;
private Button button2;
internal Button btnOK;
internal DateTimePicker dtpDischarge;
private Label label6;
private RichTextBox rtbReason;
private Label label2;
}
}
@@ -0,0 +1,81 @@
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
using Register_office.ViewModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Register_office.View.TypesV
{
public partial class HospitalDischargeDataForm : Form
{
private HospitalViewModel _viewModel;
private HospitalAdmission _hospitalAdmission;
public HospitalDischargeDataForm(HospitalAdmission h, bool isForAdd = true)
{
Init();
_hospitalAdmission = h;
if (!isForAdd) SetData(h);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
dtpDischarge.Value =
dtpDischarge.MaxDate = DateTime.Now;
}
private void SetData(HospitalAdmission ha)
{
HospitalDischarge hd = _viewModel.GetHospitalDischarge()
.First(x => x.HospitalAdmissionId == ha.HospitalAdmissionId);
cbDisease.SelectedValue = hd.FinalDiseaseId;
rtbReason.Text = hd.Reason;
dtpDischarge.Value = hd.DischargeDatetime;
Text = "Просмотр завершения госпитализации";
btnOK.Visible = cbDisease.Enabled =
rtbReason.Enabled = dtpDischarge.Enabled = false;
}
private void SetDataSourceToComboBoxes()
{
cbDisease.DataSource = _viewModel.General.Context.Diseases
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.DiseaseId })
.OrderBy(cbi => cbi.Name).ToList();
cbDisease.DisplayMember = "Name";
cbDisease.ValueMember = "Id";
}
private void btnOK_Click(object sender, EventArgs e)
{
HospitalDischarge hd = new()
{
HospitalAdmissionId = _hospitalAdmission.HospitalAdmissionId,
DischargeDatetime = dtpDischarge.Value,
FinalDiseaseId = int.Parse(cbDisease.SelectedValue?.ToString() ?? "-1"),
Reason = rtbReason.Text
};
if (_viewModel.AddHospital(hd) == -1)
{
DialogResult = DialogResult.None;
return;
}
MessageBox.Show("Госпитализация успешно завершена", "Завершение госпитализации",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,263 @@
using Register_office.View;
namespace Register_office.View.PatientV
{
partial class HospitalForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
dtpArrive = new DateTimePicker();
label6 = new Label();
label3 = new Label();
cbDisease = new ComboBox();
label2 = new Label();
cbPatient = new ComboBox();
btnAddHospitalAdmission = new Button();
btnUpdate = new Button();
btnDelete = new Button();
btnHospitalDischarge = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(dtpArrive);
splitContainer1.Panel1.Controls.Add(label6);
splitContainer1.Panel1.Controls.Add(label3);
splitContainer1.Panel1.Controls.Add(cbDisease);
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(cbPatient);
splitContainer1.Panel1.Controls.Add(btnAddHospitalAdmission);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnHospitalDischarge);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 125;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// dtpArrive
//
dtpArrive.CustomFormat = "HH:mm dd.MM.yyyy";
dtpArrive.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
dtpArrive.Format = DateTimePickerFormat.Custom;
dtpArrive.Location = new Point(232, 78);
dtpArrive.MinDate = new DateTime(1940, 1, 1, 0, 0, 0, 0);
dtpArrive.Name = "dtpArrive";
dtpArrive.Size = new Size(139, 25);
dtpArrive.TabIndex = 19;
//
// label6
//
label6.AutoSize = true;
label6.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label6.Location = new Point(232, 58);
label6.Name = "label6";
label6.Size = new Size(114, 17);
label6.TabIndex = 20;
label6.Text = "Дата поступления";
//
// label3
//
label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 58);
label3.Name = "label3";
label3.Size = new Size(127, 17);
label3.TabIndex = 18;
label3.Text = "Предварит. диагноз";
//
// cbDisease
//
cbDisease.DropDownStyle = ComboBoxStyle.DropDownList;
cbDisease.FormattingEnabled = true;
cbDisease.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbDisease.Location = new Point(12, 78);
cbDisease.Name = "cbDisease";
cbDisease.Size = new Size(211, 25);
cbDisease.TabIndex = 17;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 9);
label2.Name = "label2";
label2.Size = new Size(57, 17);
label2.TabIndex = 16;
label2.Text = "Пациент";
//
// cbPatient
//
cbPatient.DropDownStyle = ComboBoxStyle.DropDownList;
cbPatient.FormattingEnabled = true;
cbPatient.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbPatient.Location = new Point(12, 30);
cbPatient.Name = "cbPatient";
cbPatient.Size = new Size(214, 25);
cbPatient.TabIndex = 15;
//
// btnAddHospitalAdmission
//
btnAddHospitalAdmission.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAddHospitalAdmission.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAddHospitalAdmission.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAddHospitalAdmission.Location = new Point(455, 73);
btnAddHospitalAdmission.Name = "btnAddHospitalAdmission";
btnAddHospitalAdmission.Size = new Size(333, 33);
btnAddHospitalAdmission.TabIndex = 12;
btnAddHospitalAdmission.Text = "Добавить";
btnAddHospitalAdmission.UseVisualStyleBackColor = true;
btnAddHospitalAdmission.Click += btnAddHospitalAdmission_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(455, 25);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(169, 33);
btnUpdate.TabIndex = 11;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(630, 25);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(158, 33);
btnDelete.TabIndex = 10;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnHospitalDischarge
//
btnHospitalDischarge.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnHospitalDischarge.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnHospitalDischarge.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnHospitalDischarge.Location = new Point(232, 25);
btnHospitalDischarge.Name = "btnHospitalDischarge";
btnHospitalDischarge.Size = new Size(217, 33);
btnHospitalDischarge.TabIndex = 7;
btnHospitalDischarge.Text = "Завершить госпитализацию";
btnHospitalDischarge.UseVisualStyleBackColor = true;
btnHospitalDischarge.Click += btnHospitalDischarge_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 517);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// HospitalForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "HospitalForm";
Text = "Госпитализации";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Button btnHospitalDischarge;
private Button btnDelete;
private Button btnAddHospitalAdmission;
private Button btnUpdate;
private Label label3;
private ComboBox cbDisease;
private Label label2;
private ComboBox cbPatient;
internal DateTimePicker dtpArrive;
private Label label6;
}
}
@@ -0,0 +1,156 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.View.TypesV;
using Register_office.ViewModel;
using System.Data;
using System.Xml.Linq;
namespace Register_office.View.PatientV
{
public partial class HospitalForm : Form
{
private HospitalViewModel _viewModel;
private HospitalAdmission? _selectedHospital;
private string _columnIdName = "HospitalAdmissionId";
public HospitalForm()
{
Init();
}
public HospitalForm(Patient patient)
{
Init();
dgv.DataSource = new SortableBindingList<HospitalAdmissionWrapper>(
HospitalAdmissionWrapper.ToList(_viewModel.GetHospitalAdmission()
.Where(x => x.PatientId == patient.PatientId)
.ToList()));
}
private void Init()
{
InitializeComponent();
TopMost = true;
Text = "Госпитализации";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<HospitalAdmissionWrapper>(dgv);
dtpArrive.Value =
dtpArrive.MaxDate = DateTime.Now;
SetDataSourceToComboBoxes();
UpdateDgv();
UpdateElements();
}
private void SetDataSourceToComboBoxes()
{
cbDisease.DataSource = _viewModel.General.Context.Diseases
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.DiseaseId })
.OrderBy(cbi => cbi.Name).ToList();
cbDisease.DisplayMember = "Name";
cbDisease.ValueMember = "Id";
cbPatient.DataSource = _viewModel.General.Context.Patients
.Include(x => x.PatientNavigation)
.Select(x => new ComboBoxItem
{
Name = x.PatientNavigation.FirstName + " " +
x.PatientNavigation.FirstName + " " +
x.PatientNavigation.LastName,
Id = x.PatientId
})
.OrderBy(cbi => cbi.Name).ToList();
cbPatient.DisplayMember = "Name";
cbPatient.ValueMember = "Id";
}
private void UpdateElements(bool enableButtons = false)
{
if (_selectedHospital != null)
{
cbPatient.SelectedValue = _selectedHospital.PatientId;
cbDisease.SelectedValue = _selectedHospital.PreliminaryDiseaseId;
dtpArrive.Value = _selectedHospital.AdmissionDatetime;
btnHospitalDischarge.Enabled = true;
btnHospitalDischarge.Text = _selectedHospital.HospitalDischarges.Any()
? "Результаты госпитализации"
: "Завершить госпитализацию";
}
btnDelete.Enabled = btnUpdate.Enabled = btnHospitalDischarge.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<HospitalAdmission>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedHospital = _viewModel.GetHospitalAdmission(id).FirstOrDefault();
if (_selectedHospital != null)
UpdateElements(true);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedHospital != null)
{
_viewModel.DeleteHospital(_selectedHospital);
UpdateElements();
UpdateDgv();
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedHospital != null)
{
_selectedHospital.PatientId = int.Parse(cbPatient.SelectedValue?.ToString() ?? "-1");
_selectedHospital.PreliminaryDiseaseId = int.Parse(cbDisease.SelectedValue?.ToString() ?? "-1");
_selectedHospital.AdmissionDatetime = dtpArrive.Value;
_viewModel.Update();
UpdateElements();
UpdateDgv();
}
}
private void btnAddHospitalAdmission_Click(object sender, EventArgs e)
{
HospitalAdmission _temp = new()
{
PatientId = int.Parse(cbPatient.SelectedValue?.ToString() ?? "-1"),
PreliminaryDiseaseId = int.Parse(cbDisease.SelectedValue?.ToString() ?? "-1"),
AdmissionDatetime = dtpArrive.Value
};
_viewModel.AddHospital(_temp);
UpdateElements();
UpdateDgv();
}
private void btnHospitalDischarge_Click(object sender, EventArgs e)
{
HospitalDischargeDataForm hdf;
if (_selectedHospital.HospitalDischarges.Any())
{
hdf = new(_selectedHospital, false);
hdf.ShowDialog();
}
else
{
hdf = new(_selectedHospital);
if (hdf.ShowDialog() == DialogResult.OK)
{
btnHospitalDischarge.Text = "Результаты госпитализации";
}
}
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,237 @@
namespace Register_office.View.MenuV
{
partial class OnlyMenuForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
menuStrip1 = new MenuStrip();
справочникиToolStripMenuItem = new ToolStripMenuItem();
лекарстваToolStripMenuItem = new ToolStripMenuItem();
способыприемалекарствToolStripMenuItem = new ToolStripMenuItem();
заболеваниеToolStripMenuItem1 = new ToolStripMenuItem();
процедурыToolStripMenuItem = new ToolStripMenuItem();
синдромыToolStripMenuItem = new ToolStripMenuItem();
соответствиеЗаболеванийИСиндромовToolStripMenuItem = new ToolStripMenuItem();
обследованияToolStripMenuItem = new ToolStripMenuItem();
нормалиОбследованийToolStripMenuItem = new ToolStripMenuItem();
CоответствиеСиндромовИОбследованийToolStripMenuItem = new ToolStripMenuItem();
единицыИзмеренияToolStripMenuItem = new ToolStripMenuItem();
сотрудникиToolStripMenuItem = new ToolStripMenuItem();
пациентыToolStripMenuItem = new ToolStripMenuItem();
добавитьПациентаToolStripMenuItem = new ToolStripMenuItem();
toolStripSeparator1 = new ToolStripSeparator();
назначенияToolStripMenuItem = new ToolStripMenuItem();
госпитализацииToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem();
результатыАнализовToolStripMenuItem = new ToolStripMenuItem();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// menuStrip1
//
menuStrip1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, сотрудникиToolStripMenuItem, отчетыToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(800, 33);
menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1";
//
// справочникиToolStripMenuItem
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { лекарстваToolStripMenuItem, способыприемалекарствToolStripMenuItem, заболеваниеToolStripMenuItem1, процедурыToolStripMenuItem, синдромыToolStripMenuItem, соответствиеЗаболеванийИСиндромовToolStripMenuItem, обследованияToolStripMenuItem, нормалиОбследованийToolStripMenuItem, CоответствиеСиндромовИОбследованийToolStripMenuItem, единицыИзмеренияToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(142, 29);
справочникиToolStripMenuItem.Text = "Справочники";
//
// лекарстваToolStripMenuItem
//
лекарстваToolStripMenuItem.Name = "лекарстваToolStripMenuItem";
лекарстваToolStripMenuItem.Size = new Size(462, 30);
лекарстваToolStripMenuItem.Text = "Лекарства...";
лекарстваToolStripMenuItem.Click += лекарстваToolStripMenuItem_Click;
//
// способыприемалекарствToolStripMenuItem
//
способыприемалекарствToolStripMenuItem.Name = "способыприемалекарствToolStripMenuItem";
способыприемалекарствToolStripMenuItem.Size = new Size(462, 30);
способыприемалекарствToolStripMenuItem.Text = "Способы приема лекарств...";
способыприемалекарствToolStripMenuItem.Click += способыприемалекарствToolStripMenuItem_Click;
//
// заболеваниеToolStripMenuItem1
//
заболеваниеToolStripMenuItem1.Name = "заболеваниеToolStripMenuItem1";
заболеваниеToolStripMenuItem1.Size = new Size(462, 30);
заболеваниеToolStripMenuItem1.Text = "Заболевания...";
заболеваниеToolStripMenuItem1.Click += заболеваниеToolStripMenuItem1_Click;
//
// процедурыToolStripMenuItem
//
процедурыToolStripMenuItem.Name = "процедурыToolStripMenuItem";
процедурыToolStripMenuItem.Size = new Size(462, 30);
процедурыToolStripMenuItem.Text = "Процедуры...";
процедурыToolStripMenuItem.Click += процедурыToolStripMenuItem_Click;
//
// синдромыToolStripMenuItem
//
синдромыToolStripMenuItem.Name = "синдромыToolStripMenuItem";
синдромыToolStripMenuItem.Size = new Size(462, 30);
синдромыToolStripMenuItem.Text = "Синдромы...";
синдромыToolStripMenuItem.Click += синдромыToolStripMenuItem_Click;
//
// соответствиеЗаболеванийИСиндромовToolStripMenuItem
//
соответствиеЗаболеванийИСиндромовToolStripMenuItem.Name = "соответствиеЗаболеванийИСиндромовToolStripMenuItem";
соответствиеЗаболеванийИСиндромовToolStripMenuItem.Size = new Size(462, 30);
соответствиеЗаболеванийИСиндромовToolStripMenuItem.Text = "Соответствие заболеваний и синдромов...";
соответствиеЗаболеванийИСиндромовToolStripMenuItem.Click += соответствиеЗаболеванийИСиндромовToolStripMenuItem_Click;
//
// обследованияToolStripMenuItem
//
обследованияToolStripMenuItem.Name = "обследованияToolStripMenuItem";
обследованияToolStripMenuItem.Size = new Size(462, 30);
обследованияToolStripMenuItem.Text = "Обследования...";
обследованияToolStripMenuItem.Click += обследованияToolStripMenuItem_Click;
//
// нормалиОбследованийToolStripMenuItem
//
нормалиОбследованийToolStripMenuItem.Name = "нормалиОбследованийToolStripMenuItem";
нормалиОбследованийToolStripMenuItem.Size = new Size(462, 30);
нормалиОбследованийToolStripMenuItem.Text = "Нормали обследований...";
нормалиОбследованийToolStripMenuItem.Click += нормалиОбследованийToolStripMenuItem_Click;
//
// CоответствиеСиндромовИОбследованийToolStripMenuItem
//
CоответствиеСиндромовИОбследованийToolStripMenuItem.Name = "CоответствиеСиндромовИОбследованийToolStripMenuItem";
CоответствиеСиндромовИОбследованийToolStripMenuItem.Size = new Size(462, 30);
CоответствиеСиндромовИОбследованийToolStripMenuItem.Text = "Cоответствие синдромов и обследований...";
CоответствиеСиндромовИОбследованийToolStripMenuItem.Click += CоответствиеСиндромовИОбследованийToolStripMenuItem_Click;
//
// единицыИзмеренияToolStripMenuItem
//
единицыИзмеренияToolStripMenuItem.Name = "единицыИзмеренияToolStripMenuItem";
единицыИзмеренияToolStripMenuItem.Size = new Size(462, 30);
единицыИзмеренияToolStripMenuItem.Text = "Единицы измерения...";
единицыИзмеренияToolStripMenuItem.Click += единицыИзмеренияToolStripMenuItem_Click;
//
// сотрудникиToolStripMenuItem
//
сотрудникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { пациентыToolStripMenuItem, добавитьПациентаToolStripMenuItem, toolStripSeparator1, назначенияToolStripMenuItem, госпитализацииToolStripMenuItem });
сотрудникиToolStripMenuItem.Name = "сотрудникиToolStripMenuItem";
сотрудникиToolStripMenuItem.Size = new Size(85, 29);
сотрудникиToolStripMenuItem.Text = "Работа";
//
// пациентыToolStripMenuItem
//
пациентыToolStripMenuItem.Name = "пациентыToolStripMenuItem";
пациентыToolStripMenuItem.Size = new Size(267, 30);
пациентыToolStripMenuItem.Text = "Пациенты...";
пациентыToolStripMenuItem.Click += пациентыToolStripMenuItem_Click;
//
// добавитьПациентаToolStripMenuItem
//
добавитьПациентаToolStripMenuItem.Name = "добавитьПациентаToolStripMenuItem";
добавитьПациентаToolStripMenuItem.Size = new Size(267, 30);
добавитьПациентаToolStripMenuItem.Text = "Добавить пациента...";
добавитьПациентаToolStripMenuItem.Click += добавитьПациентаToolStripMenuItem_Click;
//
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(264, 6);
//
// назначенияToolStripMenuItem
//
назначенияToolStripMenuItem.Name = "назначенияToolStripMenuItem";
назначенияToolStripMenuItem.Size = new Size(267, 30);
назначенияToolStripMenuItem.Text = "Назначения...";
назначенияToolStripMenuItem.Click += назначенияToolStripMenuItem_Click;
//
// госпитализацииToolStripMenuItem
//
госпитализацииToolStripMenuItem.Name = "госпитализацииToolStripMenuItem";
госпитализацииToolStripMenuItem.Size = new Size(267, 30);
госпитализацииToolStripMenuItem.Text = "Госпитализации...";
госпитализацииToolStripMenuItem.Click += госпитализацииToolStripMenuItem_Click;
//
// отчетыToolStripMenuItem
//
отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { результатыАнализовToolStripMenuItem });
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
отчетыToolStripMenuItem.Size = new Size(88, 29);
отчетыToolStripMenuItem.Text = "Отчеты";
//
// результатыАнализовToolStripMenuItem
//
результатыАнализовToolStripMenuItem.Name = "результатыАнализовToolStripMenuItem";
результатыАнализовToolStripMenuItem.Size = new Size(267, 30);
результатыАнализовToolStripMenuItem.Text = "Результаты анализов";
результатыАнализовToolStripMenuItem.Click += результатыАнализовToolStripMenuItem_Click;
//
// OnlyMenuForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 35);
Controls.Add(menuStrip1);
FormBorderStyle = FormBorderStyle.FixedSingle;
MainMenuStrip = menuStrip1;
MaximizeBox = false;
Name = "OnlyMenuForm";
Text = "ИНФОРМАЦИОННАЯ СИСТЕМА \"РЕГИСТРАТУРА\"";
WindowState = FormWindowState.Maximized;
SizeChanged += Form_SizeChanged;
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private MenuStrip menuStrip1;
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem заболеваниеToolStripMenuItem1;
private ToolStripMenuItem способыприемалекарствToolStripMenuItem;
private ToolStripMenuItem обследованияToolStripMenuItem;
private ToolStripMenuItem нормалиОбследованийToolStripMenuItem;
private ToolStripMenuItem сотрудникиToolStripMenuItem;
private ToolStripMenuItem отчетыToolStripMenuItem;
private ToolStripMenuItem CоответствиеСиндромовИОбследованийToolStripMenuItem;
private ToolStripMenuItem пациентыToolStripMenuItem;
private ToolStripMenuItem назначенияToolStripMenuItem;
private ToolStripMenuItem результатыАнализовToolStripMenuItem;
private ToolStripMenuItem процедурыToolStripMenuItem;
private ToolStripMenuItem госпитализацииToolStripMenuItem;
private ToolStripMenuItem синдромыToolStripMenuItem;
private ToolStripMenuItem единицыИзмеренияToolStripMenuItem;
private ToolStripMenuItem лекарстваToolStripMenuItem;
private ToolStripMenuItem соответствиеЗаболеванийИСиндромовToolStripMenuItem;
private ToolStripMenuItem добавитьПациентаToolStripMenuItem;
private ToolStripSeparator toolStripSeparator1;
}
}
@@ -0,0 +1,149 @@
using Register_office;
using Register_office.Model;
using Register_office.View.LoginV;
using Register_office.View.PatientV;
using Register_office.View.TypesV;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.MenuV
{
public partial class OnlyMenuForm : Form
{
OnlyMenuViewModel _viewModel;
public OnlyMenuForm()
{
InitializeComponent();
_viewModel = new();
SetFormByRole();
}
private void SetFormByRole()
{
if (_viewModel.General.DoctorId < 1)
{
справочникиToolStripMenuItem.Visible =
госпитализацииToolStripMenuItem.Visible =
отчетыToolStripMenuItem.Visible = false;
}
}
private T ShowForm<T>() where T : Form, new()
{
T? form = _viewModel.General.GetActivatedForm<T>();
form ??= new();
form.Visible = true;
form.Show();
return form;
}
private void ReportAnalyses()
{
List<Analysis> sales = _viewModel.GetReport<Analysis>();
string fileName = _viewModel.General.PathReport + "/Результаты анализов " +
DateOnly.FromDateTime(DateTime.Now) + ".xlsx";
ExcelManager.ExportToExcel(sales, fileName);
ExcelManager.OpenExcelFile(fileName);
}
private void HideForms()
{
FormCollection formCollection = Application.OpenForms;
bool hide = false;
if (this.WindowState == FormWindowState.Minimized)
hide = false;
else if (this.WindowState == FormWindowState.Maximized)
hide = true;
foreach (Form form in formCollection)
if (form.Name != this.Name && form.Name != new LoginForm().Name)
form.Visible = hide;
}
private void Form_SizeChanged(object sender, EventArgs e)
{
HideForms();
}
private void заболеваниеToolStripMenuItem1_Click(object sender, EventArgs e)
{
ShowForm<DiseaseForm>();
}
private void способыприемалекарствToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<DrugIntakeMethodForm>();
}
private void обследованияToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<ExaminationTypeForm>();
}
private void процедурыToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<PatientForm>();
}
private void нормалиОбследованийToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<ReferenceValueForm>();
}
private void синдромыToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<SyndromeTypeForm>();
}
private void CоответствиеСиндромовИОбследованийToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<SyndromeExaminationTypeForm>();
}
private void единицыИзмеренияToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<UnitForm>();
}
private void лекарстваToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<DrugTypeForm>();
}
private void соответствиеЗаболеванийИСиндромовToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<DiseaseSyndromeForm>();
}
private void пациентыToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<PatientForm>();
}
private void добавитьПациентаToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<PatientDataForm>();
}
private void назначенияToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<PrescriptionForm>();
}
private void госпитализацииToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowForm<HospitalForm>();
}
private void результатыАнализовToolStripMenuItem_Click(object sender, EventArgs e)
{
ReportAnalyses();
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,281 @@
namespace Register_office.View.PatientV
{
partial class PatientDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
tbName = new TextBox();
lblData = new Label();
tbSurname = new TextBox();
label3 = new Label();
tbPatronymic = new TextBox();
label4 = new Label();
label6 = new Label();
label7 = new Label();
btnOK = new Button();
button2 = new Button();
dtpBirthday = new DateTimePicker();
cbGender = new ComboBox();
lblIdPerson = new Label();
label5 = new Label();
tbAddress = new TextBox();
mtbPolicy = new MaskedTextBox();
label2 = new Label();
SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 49);
label1.Name = "label1";
label1.Size = new Size(91, 25);
label1.TabIndex = 0;
label1.Text = "Фамилия";
//
// tbName
//
tbName.Font = new Font("Segoe UI", 12F);
tbName.Location = new Point(12, 137);
tbName.Name = "tbName";
tbName.Size = new Size(398, 29);
tbName.TabIndex = 1;
tbName.KeyPress += TextBoxKeyPress;
//
// lblData
//
lblData.AutoSize = true;
lblData.Font = new Font("Segoe UI", 18F, FontStyle.Regular, GraphicsUnit.Point, 204);
lblData.Location = new Point(78, 9);
lblData.Name = "lblData";
lblData.Size = new Size(233, 32);
lblData.TabIndex = 2;
lblData.Text = "Данные о пациенте";
//
// tbSurname
//
tbSurname.Font = new Font("Segoe UI", 12F);
tbSurname.Location = new Point(12, 77);
tbSurname.Name = "tbSurname";
tbSurname.Size = new Size(398, 29);
tbSurname.TabIndex = 0;
tbSurname.KeyPress += TextBoxKeyPress;
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 109);
label3.Name = "label3";
label3.Size = new Size(49, 25);
label3.TabIndex = 3;
label3.Text = "Имя";
//
// tbPatronymic
//
tbPatronymic.Font = new Font("Segoe UI", 12F);
tbPatronymic.Location = new Point(12, 197);
tbPatronymic.Name = "tbPatronymic";
tbPatronymic.Size = new Size(398, 29);
tbPatronymic.TabIndex = 2;
tbPatronymic.KeyPress += TextBoxKeyPress;
//
// label4
//
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label4.Location = new Point(12, 169);
label4.Name = "label4";
label4.Size = new Size(93, 25);
label4.TabIndex = 5;
label4.Text = "Отчество";
//
// label6
//
label6.AutoSize = true;
label6.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label6.Location = new Point(12, 289);
label6.Name = "label6";
label6.Size = new Size(146, 25);
label6.TabIndex = 9;
label6.Text = "Дата рождения";
//
// label7
//
label7.AutoSize = true;
label7.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label7.Location = new Point(246, 289);
label7.Name = "label7";
label7.Size = new Size(47, 25);
label7.TabIndex = 11;
label7.Text = "Пол";
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 421);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 7;
btnOK.Text = "Принять";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(249, 421);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 8;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// dtpBirthday
//
dtpBirthday.Font = new Font("Segoe UI", 12F);
dtpBirthday.Location = new Point(12, 317);
dtpBirthday.MinDate = new DateTime(1940, 1, 1, 0, 0, 0, 0);
dtpBirthday.Name = "dtpBirthday";
dtpBirthday.Size = new Size(200, 29);
dtpBirthday.TabIndex = 4;
//
// cbGender
//
cbGender.DropDownStyle = ComboBoxStyle.DropDownList;
cbGender.Font = new Font("Segoe UI", 12F);
cbGender.FormattingEnabled = true;
cbGender.Items.AddRange(new object[] { "Мужчина", "Женщина" });
cbGender.Location = new Point(246, 317);
cbGender.Name = "cbGender";
cbGender.Size = new Size(161, 29);
cbGender.TabIndex = 5;
//
// lblIdPerson
//
lblIdPerson.AutoSize = true;
lblIdPerson.Location = new Point(229, 328);
lblIdPerson.Name = "lblIdPerson";
lblIdPerson.Size = new Size(0, 15);
lblIdPerson.TabIndex = 21;
lblIdPerson.Visible = false;
//
// label5
//
label5.AutoSize = true;
label5.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label5.Location = new Point(12, 229);
label5.Name = "label5";
label5.Size = new Size(64, 25);
label5.TabIndex = 7;
label5.Text = "Адрес";
//
// tbAddress
//
tbAddress.Font = new Font("Segoe UI", 12F);
tbAddress.Location = new Point(12, 257);
tbAddress.Name = "tbAddress";
tbAddress.Size = new Size(398, 29);
tbAddress.TabIndex = 3;
//
// mtbPolicy
//
mtbPolicy.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
mtbPolicy.Location = new Point(12, 377);
mtbPolicy.Mask = "9999999999999999";
mtbPolicy.Name = "mtbPolicy";
mtbPolicy.Size = new Size(161, 29);
mtbPolicy.TabIndex = 24;
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 349);
label2.Name = "label2";
label2.Size = new Size(67, 25);
label2.TabIndex = 23;
label2.Text = "Полис";
//
// PatientDataForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(425, 475);
Controls.Add(mtbPolicy);
Controls.Add(label2);
Controls.Add(lblIdPerson);
Controls.Add(cbGender);
Controls.Add(dtpBirthday);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(label7);
Controls.Add(label6);
Controls.Add(tbAddress);
Controls.Add(label5);
Controls.Add(tbPatronymic);
Controls.Add(label4);
Controls.Add(tbSurname);
Controls.Add(label3);
Controls.Add(lblData);
Controls.Add(tbName);
Controls.Add(label1);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "PatientDataForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Данные пациента";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private Label label3;
private Label label4;
private Label label6;
private Label label7;
private Button button2;
internal DateTimePicker dtpBirthday;
internal ComboBox cbGender;
internal TextBox tbName;
internal TextBox tbSurname;
internal TextBox tbPatronymic;
internal Label lblData;
internal Button btnOK;
internal Label lblIdPerson;
private Label label5;
internal TextBox tbAddress;
private MaskedTextBox mtbPolicy;
private Label label2;
}
}
@@ -0,0 +1,120 @@
using Register_office.Model;
using Register_office.ViewModel;
namespace Register_office.View.PatientV
{
public partial class PatientDataForm : Form
{
private PatientViewModel _viewModel;
public PatientDataForm()
{
Init();
}
public PatientDataForm(Patient e)
{
Init();
SetPatientData(e);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
dtpBirthday.Value =
dtpBirthday.MaxDate = DateTime.Now;
}
private void SetPatientData(Patient patient)
{
mtbPolicy.Text = patient.PolicyNumber;
Person p = patient.PatientNavigation;
tbSurname.Text = p.MiddleName;
tbName.Text = p.FirstName;
tbPatronymic.Text = p.LastName;
tbAddress.Text = p.Address;
dtpBirthday.Value = new(p.BirthDate, new());
cbGender.Text = p.Gender;
string patientName = string.Concat(tbSurname.Text, " ",
tbName.Text, " ", tbPatronymic.Text);
Text = "Изменение данных";
lblData.Dock = DockStyle.Top;
lblData.Text = patientName;
lblIdPerson.Text = p.PersonId.ToString();
}
private void SetDataSourceToComboBoxes()
{
cbGender.DataSource = new string[] { "Мужчина", "Женщина" };
}
private void TextBoxKeyPress(object sender, KeyPressEventArgs e)
{
// Разрешаем только буквы
if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar))
{
e.Handled = true; // Блокируем ввод
}
}
private void btnOK_Click(object sender, EventArgs e)
{
Person person = new();
person = SetPersonData(person);
int id = person.PersonId;
if (lblIdPerson.Text != "")
{
person = _viewModel.GetPerson(id).First();
person = SetPersonData(person);
person.Patient.PolicyNumber = mtbPolicy.Text;
_viewModel.Update();
}
else
{
id = _viewModel.AddPerson(person);
if (id == -1)
{
DialogResult = DialogResult.None;
return;
}
Patient p = new()
{
PatientId = id,
PolicyNumber = mtbPolicy.Text
};
if (!_viewModel.AddPatient(p))
{
DialogResult = DialogResult.None;
return;
}
}
MessageBox.Show("Пациент успешно добавлен", "Добавление пользователя",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
private Person SetPersonData(Person p)
{
p.MiddleName = tbSurname.Text;
p.FirstName = tbName.Text;
p.LastName = tbPatronymic.Text;
p.Address = tbAddress.Text;
p.BirthDate = DateOnly.FromDateTime(dtpBirthday.Value);
p.Gender = cbGender.Text;
if (lblIdPerson.Text != "")
p.PersonId = int.Parse(lblIdPerson.Text);
return p;
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,181 @@
using Register_office.View;
namespace Register_office.View.PatientV
{
partial class PatientForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnDelete = new Button();
btnUpdate = new Button();
btnHospital = new Button();
btnPrescription = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(btnHospital);
splitContainer1.Panel1.Controls.Add(btnPrescription);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 70;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(619, 28);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(169, 33);
btnDelete.TabIndex = 10;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(449, 28);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(164, 33);
btnUpdate.TabIndex = 9;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// btnHospital
//
btnHospital.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnHospital.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnHospital.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnHospital.Location = new Point(12, 28);
btnHospital.Name = "btnHospital";
btnHospital.Size = new Size(162, 33);
btnHospital.TabIndex = 7;
btnHospital.Text = "Госпитализации";
btnHospital.UseVisualStyleBackColor = true;
btnHospital.Click += btnHospital_Click;
//
// btnPrescription
//
btnPrescription.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnPrescription.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnPrescription.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnPrescription.Location = new Point(180, 28);
btnPrescription.Name = "btnPrescription";
btnPrescription.Size = new Size(162, 33);
btnPrescription.TabIndex = 5;
btnPrescription.Text = "Назначения";
btnPrescription.UseVisualStyleBackColor = true;
btnPrescription.Click += btnPrescription_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 572);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// PatientForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "PatientForm";
Text = "Пациенты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Button btnHospital;
private Button btnPrescription;
private Button btnUpdate;
private Button btnDelete;
}
}
@@ -0,0 +1,92 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
using System.Xml.Linq;
namespace Register_office.View.PatientV
{
public partial class PatientForm : Form
{
private PatientViewModel _viewModel;
private Patient? _selectedPatient;
private string _columnIdName = "PatientId";
private Patient _temp;
public PatientForm()
{
InitializeComponent();
TopMost = true;
Text = "Пациенты";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<PatientWrapper>(dgv);
UpdateDgv();
UpdateElements();
btnPrescription.Visible = _viewModel.General.DoctorId != 0;
}
private void UpdateElements(bool enableButtons = false)
{
if (_selectedPatient == null)
btnPrescription.Enabled = btnHospital.Enabled = false;
else
{
btnHospital.Enabled = _selectedPatient.HospitalAdmissions.Count != 0;
btnPrescription.Enabled = _selectedPatient.Prescriptions.Count != 0;
}
btnUpdate.Enabled = btnDelete.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedPatient = _viewModel.GetPatient(id).FirstOrDefault();
if (_selectedPatient != null)
UpdateElements(true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedPatient != null)
{
PatientDataForm pf = new(_selectedPatient);
if (pf.ShowDialog() == DialogResult.OK)
{
UpdateElements();
UpdateDgv();
}
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedPatient != null)
{
_viewModel.DeletePatient(_selectedPatient);
UpdateElements();
UpdateDgv();
}
}
private void btnPrescription_Click(object sender, EventArgs e)
{
PrescriptionForm pf = new(_selectedPatient);
pf.ShowDialog();
}
private void btnHospital_Click(object sender, EventArgs e)
{
HospitalForm hf = new(_selectedPatient);
hf.ShowDialog();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,244 @@
namespace Register_office.View.PatientV
{
partial class DrugDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label7 = new Label();
btnOK = new Button();
button2 = new Button();
cbDrug = new ComboBox();
cbPatient = new ComboBox();
label1 = new Label();
label5 = new Label();
cbUnit = new ComboBox();
label2 = new Label();
nudDose = new NumericUpDown();
cbIntakeMethod = new ComboBox();
label3 = new Label();
label4 = new Label();
nudDurationDays = new NumericUpDown();
((System.ComponentModel.ISupportInitialize)nudDose).BeginInit();
((System.ComponentModel.ISupportInitialize)nudDurationDays).BeginInit();
SuspendLayout();
//
// label7
//
label7.AutoSize = true;
label7.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label7.Location = new Point(12, 69);
label7.Name = "label7";
label7.Size = new Size(103, 25);
label7.TabIndex = 11;
label7.Text = "Лекарство";
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 330);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 3;
btnOK.Text = "Добавить";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(249, 330);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 4;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// cbDrug
//
cbDrug.DropDownStyle = ComboBoxStyle.DropDownList;
cbDrug.Font = new Font("Segoe UI", 12F);
cbDrug.FormattingEnabled = true;
cbDrug.Location = new Point(12, 97);
cbDrug.Name = "cbDrug";
cbDrug.Size = new Size(398, 29);
cbDrug.TabIndex = 1;
//
// cbPatient
//
cbPatient.DropDownStyle = ComboBoxStyle.DropDownList;
cbPatient.Font = new Font("Segoe UI", 12F);
cbPatient.FormattingEnabled = true;
cbPatient.Items.AddRange(new object[] { "Мужчина", "Женщина" });
cbPatient.Location = new Point(12, 37);
cbPatient.Name = "cbPatient";
cbPatient.Size = new Size(398, 29);
cbPatient.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(87, 25);
label1.TabIndex = 23;
label1.Text = "Пациент";
//
// label5
//
label5.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label5.AutoSize = true;
label5.Font = new Font("Segoe UI", 14.25F);
label5.Location = new Point(224, 129);
label5.Name = "label5";
label5.Size = new Size(186, 25);
label5.TabIndex = 28;
label5.Text = "Единица измерения";
//
// cbUnit
//
cbUnit.DropDownStyle = ComboBoxStyle.DropDownList;
cbUnit.Font = new Font("Segoe UI", 12F);
cbUnit.FormattingEnabled = true;
cbUnit.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbUnit.Location = new Point(224, 157);
cbUnit.Name = "cbUnit";
cbUnit.Size = new Size(186, 29);
cbUnit.TabIndex = 27;
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 14.25F);
label2.Location = new Point(12, 129);
label2.Name = "label2";
label2.Size = new Size(54, 25);
label2.TabIndex = 26;
label2.Text = "Доза";
//
// nudDose
//
nudDose.DecimalPlaces = 2;
nudDose.Font = new Font("Segoe UI", 12F);
nudDose.Increment = new decimal(new int[] { 1, 0, 0, 65536 });
nudDose.Location = new Point(12, 157);
nudDose.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudDose.Name = "nudDose";
nudDose.Size = new Size(120, 29);
nudDose.TabIndex = 25;
nudDose.Value = new decimal(new int[] { 1, 0, 0, 0 });
//
// cbIntakeMethod
//
cbIntakeMethod.DropDownStyle = ComboBoxStyle.DropDownList;
cbIntakeMethod.Font = new Font("Segoe UI", 12F);
cbIntakeMethod.FormattingEnabled = true;
cbIntakeMethod.Location = new Point(12, 217);
cbIntakeMethod.Name = "cbIntakeMethod";
cbIntakeMethod.Size = new Size(398, 29);
cbIntakeMethod.TabIndex = 29;
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 189);
label3.Name = "label3";
label3.Size = new Size(148, 25);
label3.TabIndex = 30;
label3.Text = "Способ приема";
//
// label4
//
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 14.25F);
label4.Location = new Point(12, 249);
label4.Name = "label4";
label4.Size = new Size(276, 25);
label4.TabIndex = 32;
label4.Text = "Длительность приема (в днях)";
//
// nudDurationDays
//
nudDurationDays.Font = new Font("Segoe UI", 12F);
nudDurationDays.Location = new Point(12, 277);
nudDurationDays.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
nudDurationDays.Name = "nudDurationDays";
nudDurationDays.Size = new Size(65, 29);
nudDurationDays.TabIndex = 31;
nudDurationDays.Value = new decimal(new int[] { 1, 0, 0, 0 });
//
// DrugDataForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(425, 384);
Controls.Add(label4);
Controls.Add(nudDurationDays);
Controls.Add(cbIntakeMethod);
Controls.Add(label3);
Controls.Add(label5);
Controls.Add(cbUnit);
Controls.Add(label2);
Controls.Add(nudDose);
Controls.Add(cbPatient);
Controls.Add(label1);
Controls.Add(cbDrug);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(label7);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "DrugDataForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Назначение лекарства";
((System.ComponentModel.ISupportInitialize)nudDose).EndInit();
((System.ComponentModel.ISupportInitialize)nudDurationDays).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label7;
private Button button2;
internal ComboBox cbDrug;
internal Button btnOK;
internal ComboBox cbPatient;
private Label label1;
private Label label5;
private ComboBox cbUnit;
private Label label2;
private NumericUpDown nudDose;
internal ComboBox cbIntakeMethod;
private Label label3;
private Label label4;
private NumericUpDown nudDurationDays;
}
}
@@ -0,0 +1,124 @@
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
using Register_office.ViewModel;
namespace Register_office.View.PatientV
{
public partial class DrugDataForm : Form
{
private PrescriptionViewModel _viewModel;
private Prescription? _prescription;
public DrugDataForm()
{
Init();
}
public DrugDataForm(Prescription p)
{
Init();
SetData(p);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
}
private void SetData(Prescription prescription)
{
_prescription = prescription;
cbPatient.SelectedValue = prescription.PatientId;
cbDrug.SelectedValue = prescription.DrugTypePrescription.DrugTypeId;
cbUnit.SelectedValue = prescription.DrugTypePrescription.DoseUnitId;
nudDose.Value = prescription.DrugTypePrescription.Dose;
cbIntakeMethod.SelectedValue = prescription.DrugTypePrescription.IntakeMethodId;
nudDurationDays.Value = prescription.DrugTypePrescription.DurationDays;
Text = "Просмотр процедуры";
btnOK.Visible = cbPatient.Enabled =
cbIntakeMethod.Enabled = cbUnit.Enabled =
nudDose.Enabled = nudDurationDays.Enabled =
cbDrug.Enabled = false;
}
private void SetDataSourceToComboBoxes()
{
cbDrug.DataSource = _viewModel.General.Context.DrugTypes
.Select(x => new ComboBoxItem { Name = x.InternationalNameRu, Id = x.DrugTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbDrug.DisplayMember = "Name";
cbDrug.ValueMember = "Id";
cbPatient.DataSource = _viewModel.General.Context.Patients
.Include(x => x.PatientNavigation)
.Select(x => new ComboBoxItem
{
Name = x.PatientNavigation.FirstName + " " +
x.PatientNavigation.FirstName + " " +
x.PatientNavigation.LastName,
Id = x.PatientId
})
.OrderBy(cbi => cbi.Name).ToList();
cbPatient.DisplayMember = "Name";
cbPatient.ValueMember = "Id";
cbIntakeMethod.DataSource = _viewModel.General.Context.DrugIntakeMethods
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.DrugIntakeMethodId })
.OrderBy(cbi => cbi.Name).ToList();
cbIntakeMethod.DisplayMember = "Name";
cbIntakeMethod.ValueMember = "Id";
cbUnit.DataSource = _viewModel.General.Context.Units
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.UnitId })
.OrderBy(cbi => cbi.Name).ToList();
cbUnit.DisplayMember = "Name";
cbUnit.ValueMember = "Id";
}
private void btnOK_Click(object sender, EventArgs e)
{
Prescription p = new()
{
DoctorId = _viewModel.General.DoctorId,
PatientId = int.Parse(cbPatient.SelectedValue?.ToString() ?? "-1")
};
Prescription? prInDb = _viewModel.General.Context.Prescriptions
.FirstOrDefault(x => x.PatientId == p.PatientId && x.DoctorId == p.DoctorId);
int id = prInDb?.PrescriptionId ?? 0;
if (prInDb == null)
{
id = _viewModel.AddPrescription(p);
if (id == -1)
{
DialogResult = DialogResult.None;
return;
}
}
DrugTypePrescription pr = new()
{
PrescriptionId = id,
DrugTypeId = int.Parse(cbDrug.SelectedValue?.ToString() ?? "0"),
DoseUnitId = int.Parse(cbUnit.SelectedValue?.ToString() ?? "0"),
IntakeMethodId = int.Parse(cbIntakeMethod.SelectedValue?.ToString() ?? "0"),
Dose = nudDose.Value,
DurationDays = (int)nudDurationDays.Value
};
if (_viewModel.AddPrescription(pr) == -1)
{
DialogResult = DialogResult.None;
return;
}
MessageBox.Show("Лекарство успешно назначено", "Назначение пользователю",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,147 @@
namespace Register_office.View.PatientV
{
partial class ExaminationDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label7 = new Label();
btnOK = new Button();
button2 = new Button();
cbExamination = new ComboBox();
cbPatient = new ComboBox();
label1 = new Label();
btnResult = new Button();
SuspendLayout();
//
// label7
//
label7.AutoSize = true;
label7.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label7.Location = new Point(12, 69);
label7.Name = "label7";
label7.Size = new Size(139, 25);
label7.TabIndex = 11;
label7.Text = "Обследование";
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 225);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 3;
btnOK.Text = "Добавить";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(249, 225);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 4;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// cbExamination
//
cbExamination.DropDownStyle = ComboBoxStyle.DropDownList;
cbExamination.Font = new Font("Segoe UI", 12F);
cbExamination.FormattingEnabled = true;
cbExamination.Location = new Point(12, 97);
cbExamination.Name = "cbExamination";
cbExamination.Size = new Size(398, 29);
cbExamination.TabIndex = 1;
//
// cbPatient
//
cbPatient.DropDownStyle = ComboBoxStyle.DropDownList;
cbPatient.Font = new Font("Segoe UI", 12F);
cbPatient.FormattingEnabled = true;
cbPatient.Items.AddRange(new object[] { "Мужчина", "Женщина" });
cbPatient.Location = new Point(12, 37);
cbPatient.Name = "cbPatient";
cbPatient.Size = new Size(398, 29);
cbPatient.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(87, 25);
label1.TabIndex = 23;
label1.Text = "Пациент";
//
// btnResult
//
btnResult.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnResult.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnResult.Location = new Point(12, 155);
btnResult.Name = "btnResult";
btnResult.Size = new Size(398, 42);
btnResult.TabIndex = 24;
btnResult.Text = "Результаты";
btnResult.UseVisualStyleBackColor = true;
btnResult.Click += btnResult_Click;
//
// ExaminationDataForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(425, 279);
Controls.Add(btnResult);
Controls.Add(cbPatient);
Controls.Add(label1);
Controls.Add(cbExamination);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(label7);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "ExaminationDataForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Назначение обследования";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label7;
private Button button2;
internal ComboBox cbExamination;
internal Button btnOK;
internal ComboBox cbPatient;
private Label label1;
internal Button btnResult;
}
}
@@ -0,0 +1,130 @@
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
using Register_office.View.TypesV;
using Register_office.ViewModel;
namespace Register_office.View.PatientV
{
public partial class ExaminationDataForm : Form
{
private PrescriptionViewModel _viewModel;
private Prescription? _prescription;
bool _isResult;
public ExaminationDataForm()
{
Init();
btnResult.Visible = false;
}
public ExaminationDataForm(Prescription p)
{
Init();
SetData(p);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
}
private void SetData(Prescription prescription)
{
_prescription = prescription;
cbPatient.SelectedValue = prescription.PatientId;
cbExamination.SelectedValue = prescription.ExaminationTypePrescription.ExaminationTypeId;
Text = "Просмотр обследования";
btnOK.Visible = cbPatient.Enabled =
cbExamination.Enabled = false;
_isResult = prescription.ExaminationTypePrescription.ResultId != null;
btnResult.Text = _isResult
? "Посмотреть результаты"
: "Добавить результаты";
btnResult.Visible = true;
}
private void SetDataSourceToComboBoxes()
{
cbExamination.DataSource = _viewModel.General.Context.ExaminationTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.ExaminationTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbExamination.DisplayMember = "Name";
cbExamination.ValueMember = "Id";
cbPatient.DataSource = _viewModel.General.Context.Patients
.Include(x => x.PatientNavigation)
.Select(x => new ComboBoxItem
{
Name = x.PatientNavigation.FirstName + " " +
x.PatientNavigation.FirstName + " " +
x.PatientNavigation.LastName,
Id = x.PatientId
})
.OrderBy(cbi => cbi.Name).ToList();
cbPatient.DisplayMember = "Name";
cbPatient.ValueMember = "Id";
}
private void btnOK_Click(object sender, EventArgs e)
{
Prescription p = new()
{
DoctorId = _viewModel.General.DoctorId,
PatientId = int.Parse(cbPatient.SelectedValue?.ToString() ?? "-1")
};
Prescription? prInDb = _viewModel.General.Context.Prescriptions
.FirstOrDefault(x => x.PatientId == p.PatientId && x.DoctorId == p.DoctorId);
int id = prInDb?.PrescriptionId ?? 0;
if (prInDb == null)
{
id = _viewModel.AddPrescription(p);
if (id == -1)
{
DialogResult = DialogResult.None;
return;
}
}
ExaminationTypePrescription pr = new()
{
PrescriptionId = id,
ExaminationTypeId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "0")
};
if (_viewModel.AddPrescription(pr) == -1)
{
DialogResult = DialogResult.None;
return;
}
MessageBox.Show("Обследование успешно назначено", "Назначение пользователю",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
private void btnResult_Click(object sender, EventArgs e)
{
ResultDataForm rf;
if (!_isResult)
{
rf = new(_prescription.ExaminationTypePrescription);
if (rf.ShowDialog() == DialogResult.OK)
{
_isResult = true;
btnResult.Text = "Посмотреть результаты";
}
}
else
{
rf = new(_prescription.ExaminationTypePrescription, false);
rf.ShowDialog();
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,258 @@
using Register_office.View;
namespace Register_office.View.PatientV
{
partial class PrescriptionForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
label2 = new Label();
btnProcedureShow = new Button();
btnExaminationShow = new Button();
btnDrugShow = new Button();
label1 = new Label();
btnProcedureAdd = new Button();
btnDelete = new Button();
btnExaminationAdd = new Button();
btnDrugAdd = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(btnProcedureShow);
splitContainer1.Panel1.Controls.Add(btnExaminationShow);
splitContainer1.Panel1.Controls.Add(btnDrugShow);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(btnProcedureAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnExaminationAdd);
splitContainer1.Panel1.Controls.Add(btnDrugAdd);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 134;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 73);
label2.Name = "label2";
label2.Size = new Size(80, 17);
label2.TabIndex = 16;
label2.Text = "Посмотреть";
//
// btnProcedureShow
//
btnProcedureShow.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnProcedureShow.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnProcedureShow.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnProcedureShow.Location = new Point(348, 93);
btnProcedureShow.Name = "btnProcedureShow";
btnProcedureShow.Size = new Size(162, 33);
btnProcedureShow.TabIndex = 15;
btnProcedureShow.Text = "Процедуру";
btnProcedureShow.UseVisualStyleBackColor = true;
btnProcedureShow.Click += btnProcedureShow_Click;
//
// btnExaminationShow
//
btnExaminationShow.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnExaminationShow.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnExaminationShow.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnExaminationShow.Location = new Point(12, 93);
btnExaminationShow.Name = "btnExaminationShow";
btnExaminationShow.Size = new Size(162, 33);
btnExaminationShow.TabIndex = 14;
btnExaminationShow.Text = "Обследование";
btnExaminationShow.UseVisualStyleBackColor = true;
btnExaminationShow.Click += btnExaminationShow_Click;
//
// btnDrugShow
//
btnDrugShow.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDrugShow.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDrugShow.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDrugShow.Location = new Point(180, 93);
btnDrugShow.Name = "btnDrugShow";
btnDrugShow.Size = new Size(162, 33);
btnDrugShow.TabIndex = 13;
btnDrugShow.Text = "Лекарство";
btnDrugShow.UseVisualStyleBackColor = true;
btnDrugShow.Click += btnDrugShow_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 8);
label1.Name = "label1";
label1.Size = new Size(66, 17);
label1.TabIndex = 12;
label1.Text = "Добавить";
//
// btnProcedureAdd
//
btnProcedureAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnProcedureAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnProcedureAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnProcedureAdd.Location = new Point(348, 28);
btnProcedureAdd.Name = "btnProcedureAdd";
btnProcedureAdd.Size = new Size(162, 33);
btnProcedureAdd.TabIndex = 11;
btnProcedureAdd.Text = "Процедуру";
btnProcedureAdd.UseVisualStyleBackColor = true;
btnProcedureAdd.Click += btnProcedureAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(619, 28);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(169, 33);
btnDelete.TabIndex = 10;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnExaminationAdd
//
btnExaminationAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnExaminationAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnExaminationAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnExaminationAdd.Location = new Point(12, 28);
btnExaminationAdd.Name = "btnExaminationAdd";
btnExaminationAdd.Size = new Size(162, 33);
btnExaminationAdd.TabIndex = 7;
btnExaminationAdd.Text = "Обследование";
btnExaminationAdd.UseVisualStyleBackColor = true;
btnExaminationAdd.Click += btnExaminationAdd_Click;
//
// btnDrugAdd
//
btnDrugAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDrugAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDrugAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDrugAdd.Location = new Point(180, 28);
btnDrugAdd.Name = "btnDrugAdd";
btnDrugAdd.Size = new Size(162, 33);
btnDrugAdd.TabIndex = 5;
btnDrugAdd.Text = "Лекарство";
btnDrugAdd.UseVisualStyleBackColor = true;
btnDrugAdd.Click += btnDrugAdd_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 508);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// PrescriptionForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "PrescriptionForm";
Text = "Пациенты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Button btnExaminationAdd;
private Button btnDrugAdd;
private Button btnDelete;
private Button btnProcedureAdd;
private Label label1;
private Label label2;
private Button btnProcedureShow;
private Button btnExaminationShow;
private Button btnDrugShow;
}
}
@@ -0,0 +1,124 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
using System.Xml.Linq;
namespace Register_office.View.PatientV
{
public partial class PrescriptionForm : Form
{
private PrescriptionViewModel _viewModel;
private Prescription? _selectedPrescription;
private string _columnIdName = "PrescriptionId";
public PrescriptionForm()
{
Init();
}
public PrescriptionForm(Patient patient)
{
Init();
dgv.DataSource = new SortableBindingList<PrescriptionWrapper>(
PrescriptionWrapper.ToList(_viewModel.General.Context.Prescriptions
.Where(x => x.PatientId == patient.PatientId)
.ToList()));
}
private void Init()
{
InitializeComponent();
TopMost = true;
Text = "Назначения";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<PrescriptionWrapper>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(bool enableButtons = false)
{
if (_selectedPrescription == null)
btnDrugShow.Enabled = btnExaminationShow.Enabled = btnProcedureShow.Enabled = false;
else
{
btnDrugShow.Enabled = _selectedPrescription.DrugTypePrescription != null;
btnExaminationShow.Enabled = _selectedPrescription.ExaminationTypePrescription != null;
btnProcedureShow.Enabled = _selectedPrescription.ProcedureTypePrescription != null;
}
btnDelete.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<Prescription>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedPrescription = _viewModel.General.Context.Prescriptions
.Include(x => x.ProcedureTypePrescription)
.Include(x => x.DrugTypePrescription)
.Include(x => x.ExaminationTypePrescription)
.Where(x => x.PrescriptionId == id).FirstOrDefault();
if (_selectedPrescription != null)
UpdateElements(true);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedPrescription != null)
{
_viewModel.DeletePrescription(_selectedPrescription);
UpdateElements();
UpdateDgv();
}
}
private void btnProcedureAdd_Click(object sender, EventArgs e)
{
ProcedureDataForm pf = new();
pf.ShowDialog();
UpdateDgv();
}
private void btnProcedureShow_Click(object sender, EventArgs e)
{
ProcedureDataForm pf = new(_selectedPrescription);
pf.ShowDialog();
}
private void btnDrugAdd_Click(object sender, EventArgs e)
{
DrugDataForm pf = new();
pf.ShowDialog();
UpdateDgv();
}
private void btnDrugShow_Click(object sender, EventArgs e)
{
DrugDataForm pf = new(_selectedPrescription);
pf.ShowDialog();
}
private void btnExaminationAdd_Click(object sender, EventArgs e)
{
ExaminationDataForm pf = new();
pf.ShowDialog();
UpdateDgv();
}
private void btnExaminationShow_Click(object sender, EventArgs e)
{
ExaminationDataForm pf = new(_selectedPrescription);
pf.ShowDialog();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,157 @@
namespace Register_office.View.PatientV
{
partial class ProcedureDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label6 = new Label();
label7 = new Label();
btnOK = new Button();
button2 = new Button();
dtpSchedule = new DateTimePicker();
cbProcedure = new ComboBox();
cbPatient = new ComboBox();
label1 = new Label();
SuspendLayout();
//
// label6
//
label6.AutoSize = true;
label6.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label6.Location = new Point(12, 139);
label6.Name = "label6";
label6.Size = new Size(163, 25);
label6.TabIndex = 9;
label6.Text = "Дата проведения";
//
// label7
//
label7.AutoSize = true;
label7.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label7.Location = new Point(12, 69);
label7.Name = "label7";
label7.Size = new Size(109, 25);
label7.TabIndex = 11;
label7.Text = "Процедура";
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 225);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 3;
btnOK.Text = "Добавить";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(249, 225);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 4;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// dtpSchedule
//
dtpSchedule.Font = new Font("Segoe UI", 12F);
dtpSchedule.Location = new Point(12, 167);
dtpSchedule.MinDate = new DateTime(1940, 1, 1, 0, 0, 0, 0);
dtpSchedule.Name = "dtpSchedule";
dtpSchedule.Size = new Size(200, 29);
dtpSchedule.TabIndex = 2;
//
// cbProcedure
//
cbProcedure.DropDownStyle = ComboBoxStyle.DropDownList;
cbProcedure.Font = new Font("Segoe UI", 12F);
cbProcedure.FormattingEnabled = true;
cbProcedure.Location = new Point(12, 97);
cbProcedure.Name = "cbProcedure";
cbProcedure.Size = new Size(398, 29);
cbProcedure.TabIndex = 1;
//
// cbPatient
//
cbPatient.DropDownStyle = ComboBoxStyle.DropDownList;
cbPatient.Font = new Font("Segoe UI", 12F);
cbPatient.FormattingEnabled = true;
cbPatient.Items.AddRange(new object[] { "Мужчина", "Женщина" });
cbPatient.Location = new Point(12, 37);
cbPatient.Name = "cbPatient";
cbPatient.Size = new Size(398, 29);
cbPatient.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(87, 25);
label1.TabIndex = 23;
label1.Text = "Пациент";
//
// ProcedureDataForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(425, 279);
Controls.Add(cbPatient);
Controls.Add(label1);
Controls.Add(cbProcedure);
Controls.Add(dtpSchedule);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(label7);
Controls.Add(label6);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "ProcedureDataForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Назначение процедуры";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label6;
private Label label7;
private Button button2;
internal DateTimePicker dtpSchedule;
internal ComboBox cbProcedure;
internal Button btnOK;
internal ComboBox cbPatient;
private Label label1;
}
}
@@ -0,0 +1,108 @@
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
using Register_office.ViewModel;
namespace Register_office.View.PatientV
{
public partial class ProcedureDataForm : Form
{
private PrescriptionViewModel _viewModel;
private Prescription? _prescription;
public ProcedureDataForm()
{
Init();
}
public ProcedureDataForm(Prescription p)
{
Init();
SetData(p);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
dtpSchedule.Value =
dtpSchedule.MinDate = DateTime.Now;
dtpSchedule.MaxDate = DateTime.Now.AddDays(180);
}
private void SetData(Prescription prescription)
{
_prescription = prescription;
cbPatient.SelectedValue = prescription.PatientId;
dtpSchedule.Value =
dtpSchedule.MinDate = prescription.ProcedureTypePrescription.ScheduledDatetime;
cbProcedure.SelectedValue = prescription.ProcedureTypePrescription.ProcedureTypeId;
Text = "Просмотр процедуры";
btnOK.Visible = cbPatient.Enabled =
dtpSchedule.Enabled = cbProcedure.Enabled= false;
}
private void SetDataSourceToComboBoxes()
{
cbProcedure.DataSource = _viewModel.General.Context.ProcedureTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.ProcedureTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbProcedure.DisplayMember = "Name";
cbProcedure.ValueMember = "Id";
cbPatient.DataSource = _viewModel.General.Context.Patients
.Include(x => x.PatientNavigation)
.Select(x => new ComboBoxItem
{
Name = x.PatientNavigation.FirstName + " " +
x.PatientNavigation.FirstName + " " +
x.PatientNavigation.LastName,
Id = x.PatientId
})
.OrderBy(cbi => cbi.Name).ToList();
cbPatient.DisplayMember = "Name";
cbPatient.ValueMember = "Id";
}
private void btnOK_Click(object sender, EventArgs e)
{
Prescription p = new()
{
DoctorId = _viewModel.General.DoctorId,
PatientId = int.Parse(cbPatient.SelectedValue?.ToString() ?? "-1")
};
Prescription? prInDb = _viewModel.General.Context.Prescriptions
.FirstOrDefault(x => x.PatientId == p.PatientId && x.DoctorId == p.DoctorId);
int id = prInDb?.PrescriptionId ?? 0;
if (prInDb == null)
{
id = _viewModel.AddPrescription(p);
if (id == -1)
{
DialogResult = DialogResult.None;
return;
}
}
ProcedureTypePrescription pr = new()
{
PrescriptionId = id,
ProcedureTypeId = int.Parse(cbProcedure.SelectedValue?.ToString() ?? "0"),
ScheduledDatetime = dtpSchedule.Value
};
if (_viewModel.AddPrescription(pr) == -1)
{
DialogResult = DialogResult.None;
return;
}
MessageBox.Show("Процедура успешно назначена", "Назначение пользователю",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,217 @@
namespace Register_office.View.TypesV
{
partial class ResultDataForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
cbTypeResult = new ComboBox();
label1 = new Label();
button2 = new Button();
btnOK = new Button();
cbValue = new ComboBox();
lblBool = new Label();
lblUnit = new Label();
cbUnit = new ComboBox();
lblCount = new Label();
nudCount = new NumericUpDown();
cbExamination = new ComboBox();
label2 = new Label();
((System.ComponentModel.ISupportInitialize)nudCount).BeginInit();
SuspendLayout();
//
// cbTypeResult
//
cbTypeResult.DropDownStyle = ComboBoxStyle.DropDownList;
cbTypeResult.Font = new Font("Segoe UI", 12F);
cbTypeResult.FormattingEnabled = true;
cbTypeResult.Items.AddRange(new object[] { "Числовой", "Качественный" });
cbTypeResult.Location = new Point(12, 37);
cbTypeResult.Name = "cbTypeResult";
cbTypeResult.Size = new Size(143, 29);
cbTypeResult.TabIndex = 24;
cbTypeResult.TextChanged += cbTypeResult_TextChanged;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(143, 25);
label1.TabIndex = 25;
label1.Text = "Тип результата";
//
// button2
//
button2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
button2.DialogResult = DialogResult.Cancel;
button2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
button2.Location = new Point(192, 201);
button2.Name = "button2";
button2.Size = new Size(161, 42);
button2.TabIndex = 27;
button2.Text = "Отмена";
button2.UseVisualStyleBackColor = true;
//
// btnOK
//
btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnOK.DialogResult = DialogResult.OK;
btnOK.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOK.Location = new Point(12, 201);
btnOK.Name = "btnOK";
btnOK.Size = new Size(161, 42);
btnOK.TabIndex = 26;
btnOK.Text = "Добавить";
btnOK.UseVisualStyleBackColor = true;
btnOK.Click += btnOK_Click;
//
// cbValue
//
cbValue.DropDownStyle = ComboBoxStyle.DropDownList;
cbValue.Font = new Font("Segoe UI", 12F);
cbValue.FormattingEnabled = true;
cbValue.Items.AddRange(new object[] { "Положительный", "Отрицательный" });
cbValue.Location = new Point(12, 97);
cbValue.Name = "cbValue";
cbValue.Size = new Size(143, 29);
cbValue.TabIndex = 31;
//
// lblBool
//
lblBool.AutoSize = true;
lblBool.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
lblBool.Location = new Point(12, 69);
lblBool.Name = "lblBool";
lblBool.Size = new Size(96, 25);
lblBool.TabIndex = 32;
lblBool.Text = "Результат";
//
// lblUnit
//
lblUnit.AutoSize = true;
lblUnit.Font = new Font("Segoe UI", 14.25F);
lblUnit.Location = new Point(167, 129);
lblUnit.Name = "lblUnit";
lblUnit.Size = new Size(186, 25);
lblUnit.TabIndex = 36;
lblUnit.Text = "Единица измерения";
//
// cbUnit
//
cbUnit.DropDownStyle = ComboBoxStyle.DropDownList;
cbUnit.Font = new Font("Segoe UI", 12F);
cbUnit.FormattingEnabled = true;
cbUnit.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbUnit.Location = new Point(167, 157);
cbUnit.Name = "cbUnit";
cbUnit.Size = new Size(186, 29);
cbUnit.TabIndex = 35;
//
// lblCount
//
lblCount.AutoSize = true;
lblCount.Font = new Font("Segoe UI", 14.25F);
lblCount.Location = new Point(12, 129);
lblCount.Name = "lblCount";
lblCount.Size = new Size(114, 25);
lblCount.TabIndex = 34;
lblCount.Text = "Количество";
//
// nudCount
//
nudCount.DecimalPlaces = 2;
nudCount.Font = new Font("Segoe UI", 12F);
nudCount.Increment = new decimal(new int[] { 1, 0, 0, 65536 });
nudCount.Location = new Point(12, 157);
nudCount.Minimum = new decimal(new int[] { 100, 0, 0, int.MinValue });
nudCount.Name = "nudCount";
nudCount.Size = new Size(143, 29);
nudCount.TabIndex = 33;
//
// cbExamination
//
cbExamination.DropDownStyle = ComboBoxStyle.DropDownList;
cbExamination.Font = new Font("Segoe UI", 12F);
cbExamination.FormattingEnabled = true;
cbExamination.Items.AddRange(new object[] { "Числовой", "Качественный" });
cbExamination.Location = new Point(167, 37);
cbExamination.Name = "cbExamination";
cbExamination.Size = new Size(186, 29);
cbExamination.TabIndex = 37;
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(167, 9);
label2.Name = "label2";
label2.Size = new Size(139, 25);
label2.TabIndex = 38;
label2.Text = "Обследование";
//
// ResultDataForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(365, 255);
Controls.Add(cbExamination);
Controls.Add(label2);
Controls.Add(lblUnit);
Controls.Add(cbUnit);
Controls.Add(lblCount);
Controls.Add(nudCount);
Controls.Add(cbValue);
Controls.Add(lblBool);
Controls.Add(button2);
Controls.Add(btnOK);
Controls.Add(cbTypeResult);
Controls.Add(label1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "ResultDataForm";
Text = "Результаты";
((System.ComponentModel.ISupportInitialize)nudCount).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
internal ComboBox cbTypeResult;
private Label label1;
private Button button2;
internal Button btnOK;
internal ComboBox cbValue;
private Label lblBool;
private Label lblUnit;
private ComboBox cbUnit;
private Label lblCount;
private NumericUpDown nudCount;
internal ComboBox cbExamination;
private Label label2;
}
}
@@ -0,0 +1,161 @@
using Microsoft.EntityFrameworkCore;
using Register_office.Model;
using Register_office.ViewModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Register_office.View.TypesV
{
public partial class ResultDataForm : Form
{
private ResultViewModel _viewModel;
private ExaminationTypePrescription? _prescription;
bool _isNumericResult;
public ResultDataForm(ExaminationTypePrescription p, bool isForAdd = true)
{
Init();
_prescription = p;
cbExamination.SelectedValue = p.ExaminationTypeId;
cbExamination.Enabled = false;
if (!isForAdd) SetData(p);
}
private void Init()
{
InitializeComponent();
TopMost = true;
_viewModel = new();
SetDataSourceToComboBoxes();
}
private void SetData(ExaminationTypePrescription prescription)
{
_prescription = _viewModel.General.Context.ExaminationTypePrescriptions
.Include(x => x.Result)
.ThenInclude(y => y.NumericResult)
.Include(x => x.Result)
.ThenInclude(y => y.QualitativeResult)
.First(x => x.ExaminationPrescriptionId == prescription.ExaminationPrescriptionId);
_isNumericResult = _prescription.Result.QualitativeResult == null;
cbTypeResult.Text = _isNumericResult
? "Числовой"
: "Качественный";
if (_isNumericResult)
{
nudCount.Value = _prescription.Result.NumericResult.Value;
cbUnit.SelectedValue = _prescription.Result.NumericResult.UnitId;
nudCount.Visible = cbUnit.Visible =
lblCount.Visible = lblUnit.Visible = true;
cbValue.Visible = lblBool.Visible = false;
}
else
{
cbValue.Text = _prescription.Result.QualitativeResult.Value
? "Положительный"
: "Отрицательный";
nudCount.Visible = cbUnit.Visible =
lblCount.Visible = lblUnit.Visible = false;
cbValue.Visible = lblBool.Visible = true;
}
Text = "Просмотр результатов";
btnOK.Visible = cbTypeResult.Enabled =
nudCount.Enabled = cbUnit.Enabled =
cbValue.Enabled = false;
}
private void SetDataSourceToComboBoxes()
{
cbTypeResult.SelectedItem = cbTypeResult.Items[0];
cbExamination.DataSource = _viewModel.General.Context.ExaminationTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.ExaminationTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbExamination.DisplayMember = "Name";
cbExamination.ValueMember = "Id";
cbUnit.DataSource = _viewModel.General.Context.Units
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.UnitId })
.OrderBy(cbi => cbi.Name).ToList();
cbUnit.DisplayMember = "Name";
cbUnit.ValueMember = "Id";
}
private void btnOK_Click(object sender, EventArgs e)
{
Result r = new()
{
ExaminationId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "-1")
};
int id = _viewModel.AddResult(r);
if (id == -1)
{
DialogResult = DialogResult.None;
return;
}
if (cbTypeResult.Text == "Качественный")
{
QualitativeResult qr = new()
{
ResultId = id,
Value = cbValue.Text == "Положительный"
};
if (_viewModel.AddResult(qr) == -1)
{
DialogResult = DialogResult.None;
_viewModel.DeleteResult(r);
return;
}
}
else
{
NumericResult nr = new()
{
ResultId = id,
UnitId = int.Parse(cbUnit.SelectedValue?.ToString() ?? "0"),
Value = nudCount.Value
};
if (_viewModel.AddResult(nr) == -1)
{
DialogResult = DialogResult.None;
_viewModel.DeleteResult(r);
return;
}
}
_prescription.ResultId = id;
_viewModel.Update();
MessageBox.Show("Результаты успешно добавлены", "Результаты обследования",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
}
private void cbTypeResult_TextChanged(object sender, EventArgs e)
{
if (cbTypeResult.Text == "Качественный")
{
nudCount.Visible = cbUnit.Visible =
lblCount.Visible = lblUnit.Visible = false;
cbValue.Visible = lblBool.Visible = true;
}
else
{
nudCount.Visible = cbUnit.Visible =
lblCount.Visible = lblUnit.Visible = true;
cbValue.Visible = lblBool.Visible = false;
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,164 @@
namespace Register_office.View.RegistrationV
{
partial class ConnectionParametersForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
button1 = new Button();
tbHost = new TextBox();
label2 = new Label();
tbDataBase = new TextBox();
label1 = new Label();
tbPassword = new TextBox();
label3 = new Label();
tbUsername = new TextBox();
label4 = new Label();
SuspendLayout();
//
// button1
//
button1.DialogResult = DialogResult.OK;
button1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
button1.Location = new Point(12, 236);
button1.Name = "button1";
button1.Size = new Size(75, 29);
button1.TabIndex = 2;
button1.Text = "ОК";
button1.UseVisualStyleBackColor = true;
//
// tbHost
//
tbHost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tbHost.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbHost.Location = new Point(12, 33);
tbHost.Name = "tbHost";
tbHost.Size = new Size(212, 29);
tbHost.TabIndex = 30;
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 9);
label2.Name = "label2";
label2.Size = new Size(124, 21);
label2.TabIndex = 31;
label2.Text = "Владелец (Host)";
//
// tbDataBase
//
tbDataBase.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tbDataBase.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbDataBase.Location = new Point(12, 89);
tbDataBase.Name = "tbDataBase";
tbDataBase.Size = new Size(212, 29);
tbDataBase.TabIndex = 32;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 65);
label1.Name = "label1";
label1.Size = new Size(99, 21);
label1.TabIndex = 33;
label1.Text = "База данных";
//
// tbPassword
//
tbPassword.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tbPassword.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbPassword.Location = new Point(12, 201);
tbPassword.Name = "tbPassword";
tbPassword.Size = new Size(212, 29);
tbPassword.TabIndex = 36;
tbPassword.UseSystemPasswordChar = true;
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 177);
label3.Name = "label3";
label3.Size = new Size(63, 21);
label3.TabIndex = 37;
label3.Text = "Пароль";
//
// tbUsername
//
tbUsername.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tbUsername.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbUsername.Location = new Point(12, 145);
tbUsername.Name = "tbUsername";
tbUsername.Size = new Size(212, 29);
tbUsername.TabIndex = 34;
//
// label4
//
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 204);
label4.Location = new Point(12, 121);
label4.Name = "label4";
label4.Size = new Size(151, 21);
label4.TabIndex = 35;
label4.Text = "Суперпользователь";
//
// ConnectionParametersForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(236, 269);
Controls.Add(tbPassword);
Controls.Add(label3);
Controls.Add(tbUsername);
Controls.Add(label4);
Controls.Add(tbDataBase);
Controls.Add(label1);
Controls.Add(tbHost);
Controls.Add(label2);
Controls.Add(button1);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "ConnectionParametersForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Параметры подключения";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button button1;
internal TextBox tbHost;
private Label label2;
internal TextBox tbDataBase;
private Label label1;
internal TextBox tbPassword;
private Label label3;
internal TextBox tbUsername;
private Label label4;
}
}
@@ -0,0 +1,10 @@
namespace Register_office.View.RegistrationV
{
public partial class ConnectionParametersForm : Form
{
public ConnectionParametersForm()
{
InitializeComponent();
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,121 @@
namespace Register_office.View.LoginV
{
partial class LoginForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
tbLogin = new TextBox();
tbPassword = new TextBox();
label2 = new Label();
btnEntry = new Button();
SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 12F, FontStyle.Bold);
label1.Location = new Point(12, 23);
label1.Name = "label1";
label1.Size = new Size(63, 21);
label1.TabIndex = 0;
label1.Text = "Логин:";
//
// tbLogin
//
tbLogin.Font = new Font("Segoe UI", 12F, FontStyle.Bold);
tbLogin.Location = new Point(99, 20);
tbLogin.MaxLength = 20;
tbLogin.Name = "tbLogin";
tbLogin.Size = new Size(131, 29);
tbLogin.TabIndex = 1;
tbLogin.Text = "Иванов Н.В.";
tbLogin.KeyDown += RegistrationForm_KeyDown;
//
// tbPassword
//
tbPassword.Font = new Font("Segoe UI", 12F, FontStyle.Bold);
tbPassword.Location = new Point(98, 61);
tbPassword.MaxLength = 20;
tbPassword.Name = "tbPassword";
tbPassword.Size = new Size(131, 29);
tbPassword.TabIndex = 3;
tbPassword.Text = "Иванов123";
tbPassword.UseSystemPasswordChar = true;
tbPassword.KeyDown += RegistrationForm_KeyDown;
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 12F, FontStyle.Bold);
label2.Location = new Point(11, 64);
label2.Name = "label2";
label2.Size = new Size(74, 21);
label2.TabIndex = 2;
label2.Text = "Пароль:";
//
// btnEntry
//
btnEntry.BackColor = Color.LightBlue;
btnEntry.FlatStyle = FlatStyle.Flat;
btnEntry.Font = new Font("Segoe UI", 12F);
btnEntry.Location = new Point(54, 104);
btnEntry.Name = "btnEntry";
btnEntry.Size = new Size(131, 31);
btnEntry.TabIndex = 4;
btnEntry.Text = "ВВОД";
btnEntry.UseVisualStyleBackColor = false;
btnEntry.Click += btnEntry_Click;
//
// LoginForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(243, 147);
Controls.Add(btnEntry);
Controls.Add(tbPassword);
Controls.Add(label2);
Controls.Add(tbLogin);
Controls.Add(label1);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "LoginForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Авторизация пользователя";
KeyDown += RegistrationForm_KeyDown;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private TextBox tbLogin;
private TextBox tbPassword;
private Label label2;
private Button btnEntry;
}
}
@@ -0,0 +1,53 @@
//using Register_office.View.MenuV;
using Register_office.ViewModel.LoginVM;
using Npgsql;
using Register_office.View.MenuV;
namespace Register_office.View.LoginV
{
internal partial class LoginForm : Form
{
private readonly LoginViewModel _viewModel;
public LoginForm()
{
_viewModel = new();
InitializeComponent();
}
/// <summary>
/// Входит в систему
/// </summary>
private void btnEntry_Click(object sender, EventArgs e)
{
try
{
// Проверяем логин и пароль
int personId = _viewModel.CheckEnter(tbLogin.Text, tbPassword.Text);
_viewModel.General.DoctorId = _viewModel.GetDoctorId(personId);
Hide();
OnlyMenuForm launchForm = new();
launchForm.ShowDialog();
Close();
}
catch (NpgsqlException ex)
{
MessageBox.Show(ex.Message.Split(':').Skip(1).FirstOrDefault()?.Trim(),
"Ошибка ввода данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// При нажатии enter - производит событие входа в систему
/// </summary>
private void RegistrationForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnEntry.PerformClick();
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,219 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class DiseaseForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
label2 = new Label();
tbCodeICB = new TextBox();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
label1 = new Label();
tbName = new TextBox();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(tbCodeICB);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(tbName);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(276, 9);
label2.Name = "label2";
label2.Size = new Size(62, 17);
label2.TabIndex = 10;
label2.Text = "Код МКБ";
//
// tbCodeICB
//
tbCodeICB.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbCodeICB.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbCodeICB.Location = new Point(276, 32);
tbCodeICB.Name = "tbCodeICB";
tbCodeICB.Size = new Size(125, 27);
tbCodeICB.TabIndex = 9;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 10);
label1.Name = "label1";
label1.Size = new Size(65, 17);
label1.TabIndex = 1;
label1.Text = "Название";
//
// tbName
//
tbName.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbName.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbName.Location = new Point(12, 33);
tbName.Name = "tbName";
tbName.Size = new Size(242, 27);
tbName.TabIndex = 0;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// DiseaseForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "DiseaseForm";
Text = "Справочник";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private TextBox tbName;
private Label label1;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label2;
private TextBox tbCodeICB;
}
}
@@ -0,0 +1,83 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class DiseaseForm : Form
{
private TypeViewModel _viewModel;
private Disease? _selectedType;
private string _columnIdName = "DiseaseId";
public DiseaseForm()
{
InitializeComponent();
Text = "Справочник заболеваний";
TopMost = true;
_viewModel = new();
_viewModel.ConfigureSettingsDGV<Disease>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(string name = "", string codeIcb = "", bool enableButtons = false)
{
tbName.Text = name;
tbCodeICB.Text = codeIcb;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<Disease>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.Diseases.Where(x => x.DiseaseId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.Name, _selectedType.IcdCode, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.Name = tbName.Text;
_selectedType.IcdCode = tbCodeICB.Text;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
Disease d = new()
{
Name = tbName.Text,
IcdCode = tbCodeICB.Text
};
_viewModel.AddType(d);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,221 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class DiseaseSyndromeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
label3 = new Label();
btnAdd = new Button();
cbDisease = new ComboBox();
btnDelete = new Button();
label2 = new Label();
cbSyndrome = new ComboBox();
btnUpdate = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label3);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(cbDisease);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(cbSyndrome);
splitContainer1.Panel1.Controls.Add(btnUpdate);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// label3
//
label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(232, 17);
label3.Name = "label3";
label3.Size = new Size(87, 17);
label3.TabIndex = 14;
label3.Text = "Заболевание";
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// cbDisease
//
cbDisease.DropDownStyle = ComboBoxStyle.DropDownList;
cbDisease.FormattingEnabled = true;
cbDisease.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbDisease.Location = new Point(232, 37);
cbDisease.Name = "cbDisease";
cbDisease.Size = new Size(211, 25);
cbDisease.TabIndex = 13;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 16);
label2.Name = "label2";
label2.Size = new Size(62, 17);
label2.TabIndex = 12;
label2.Text = "Синдром";
//
// cbSyndrome
//
cbSyndrome.DropDownStyle = ComboBoxStyle.DropDownList;
cbSyndrome.FormattingEnabled = true;
cbSyndrome.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbSyndrome.Location = new Point(12, 37);
cbSyndrome.Name = "cbSyndrome";
cbSyndrome.Size = new Size(214, 25);
cbSyndrome.TabIndex = 11;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// DiseaseSyndromeForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "DiseaseSyndromeForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label3;
private ComboBox cbDisease;
private Label label2;
private ComboBox cbSyndrome;
}
}
@@ -0,0 +1,101 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class DiseaseSyndromeForm : Form
{
private TypeViewModel _viewModel;
private DiseaseSyndrome? _selectedType;
private DiseaseSyndrome _temp;
public DiseaseSyndromeForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник соответствий заболеваний и синдромов";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<DiseaseSyndromeWrapper>(dgv);
UpdateDgv();
SetDataSourceToComboBoxes();
UpdateElements();
}
private void SetDataSourceToComboBoxes()
{
cbDisease.DataSource = _viewModel.General.Context.Diseases
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.DiseaseId })
.OrderBy(cbi => cbi.Name).ToList();
cbDisease.DisplayMember = "Name";
cbDisease.ValueMember = "Id";
cbSyndrome.DataSource = _viewModel.General.Context.SyndromeTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.SyndromeTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbSyndrome.DisplayMember = "Name";
cbSyndrome.ValueMember = "Id";
}
private void UpdateElements(int idDis = -1, int idSynd = -1, bool enableButtons = false)
{
cbDisease.SelectedValue = idDis;
cbSyndrome.SelectedValue = idSynd;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<DiseaseSyndrome>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int idDis = int.Parse(selectedRow.Cells["DiseaseId"].Value.ToString() ?? "");
int idSynd = int.Parse(selectedRow.Cells["SyndromeId"].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.DiseaseSyndromes
.Where(x => x.DiseaseId == idDis && x.SyndromeId == idSynd).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.DiseaseId, _selectedType.SyndromeId, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.DiseaseId = int.Parse(cbDisease.SelectedValue?.ToString() ?? "-1");
_selectedType.SyndromeId = int.Parse(cbSyndrome.SelectedValue?.ToString() ?? "-1");
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
DiseaseId = int.Parse(cbDisease.SelectedValue?.ToString() ?? "-1"),
SyndromeId = int.Parse(cbSyndrome.SelectedValue?.ToString() ?? "-1")
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,193 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class DrugIntakeMethodForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
label1 = new Label();
tbName = new TextBox();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(tbName);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 10);
label1.Name = "label1";
label1.Size = new Size(65, 17);
label1.TabIndex = 1;
label1.Text = "Название";
//
// tbName
//
tbName.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbName.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbName.Location = new Point(12, 33);
tbName.Name = "tbName";
tbName.Size = new Size(242, 27);
tbName.TabIndex = 0;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// DrugIntakeMethodForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "DrugIntakeMethodForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private TextBox tbName;
private Label label1;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
}
}
@@ -0,0 +1,79 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class DrugIntakeMethodForm : Form
{
private TypeViewModel _viewModel;
private DrugIntakeMethod? _selectedType;
private string _columnIdName = "DrugIntakeMethodId";
public DrugIntakeMethodForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник способов приема лекарств";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<DrugIntakeMethod>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(string name = "", bool enableButtons = false)
{
tbName.Text = name;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<DrugIntakeMethod>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.DrugIntakeMethods.Where(x => x.DrugIntakeMethodId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.Name, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.Name = tbName.Text;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
DrugIntakeMethod t = new()
{
Name = tbName.Text
};
_viewModel.AddType(t);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,271 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class DrugTypeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
label1 = new Label();
tbNameRu = new TextBox();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
label2 = new Label();
tbNameEn = new TextBox();
label3 = new Label();
tbNameLa = new TextBox();
label4 = new Label();
tbBrand = new TextBox();
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label4);
splitContainer1.Panel1.Controls.Add(tbBrand);
splitContainer1.Panel1.Controls.Add(label3);
splitContainer1.Panel1.Controls.Add(tbNameLa);
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(tbNameEn);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(tbNameRu);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 84);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 10);
label1.Name = "label1";
label1.Size = new Size(91, 17);
label1.TabIndex = 1;
label1.Text = "Название (ру)";
//
// tbNameRu
//
tbNameRu.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbNameRu.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbNameRu.Location = new Point(12, 33);
tbNameRu.Name = "tbNameRu";
tbNameRu.Size = new Size(208, 27);
tbNameRu.TabIndex = 0;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(226, 9);
label2.Name = "label2";
label2.Size = new Size(103, 17);
label2.TabIndex = 6;
label2.Text = "Название (англ)";
//
// tbNameEn
//
tbNameEn.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbNameEn.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbNameEn.Location = new Point(226, 32);
tbNameEn.Name = "tbNameEn";
tbNameEn.Size = new Size(208, 27);
tbNameEn.TabIndex = 5;
//
// label3
//
label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 67);
label3.Name = "label3";
label3.Size = new Size(96, 17);
label3.TabIndex = 8;
label3.Text = "Название (лат)";
//
// tbNameLa
//
tbNameLa.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbNameLa.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbNameLa.Location = new Point(12, 90);
tbNameLa.Name = "tbNameLa";
tbNameLa.Size = new Size(208, 27);
tbNameLa.TabIndex = 7;
//
// label4
//
label4.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label4.Location = new Point(226, 67);
label4.Name = "label4";
label4.Size = new Size(43, 17);
label4.TabIndex = 10;
label4.Text = "Брэнд";
//
// tbBrand
//
tbBrand.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbBrand.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbBrand.Location = new Point(226, 90);
tbBrand.Name = "tbBrand";
tbBrand.Size = new Size(208, 27);
tbBrand.TabIndex = 9;
//
// DrugTypeForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "DrugTypeForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private TextBox tbNameRu;
private Label label1;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label4;
private TextBox tbBrand;
private Label label3;
private TextBox tbNameLa;
private Label label2;
private TextBox tbNameEn;
}
}
@@ -0,0 +1,93 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class DrugTypeForm : Form
{
private TypeViewModel _viewModel;
private DrugType? _selectedType;
private string _columnIdName = "DrugTypeId";
private DrugType _temp;
public DrugTypeForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник лекарств";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<DrugType>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(string nameRu = "", string? nameEn = "",
string? nameLa = "", string? brand = "", bool enableButtons = false)
{
tbNameRu.Text = nameRu;
tbNameEn.Text = nameEn;
tbNameLa.Text = nameLa;
tbBrand.Text = brand;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<DrugType>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.DrugTypes.Where(x => x.DrugTypeId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.InternationalNameRu,
_selectedType.InternationalNameEn, _selectedType.InternationalNameLa,
_selectedType.BrandNameRu, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.InternationalNameRu = tbNameRu.Text;
_selectedType.InternationalNameEn = tbNameEn.Text.Trim() == "" ? null : tbNameEn.Text;
_selectedType.InternationalNameLa = tbNameLa.Text.Trim() == "" ? null : tbNameLa.Text;
_selectedType.BrandNameRu = tbBrand.Text.Trim() == "" ? null : tbBrand.Text;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
InternationalNameRu = tbNameRu.Text,
InternationalNameEn = tbNameEn.Text.Trim() == "" ? null : tbNameEn.Text,
InternationalNameLa = tbNameLa.Text.Trim() == "" ? null : tbNameLa.Text,
BrandNameRu = tbBrand.Text.Trim() == "" ? null : tbBrand.Text
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,220 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class ExaminationTypeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
label2 = new Label();
cbCategory = new ComboBox();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
label1 = new Label();
tbName = new TextBox();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(cbCategory);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(tbName);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(260, 13);
label2.Name = "label2";
label2.Size = new Size(70, 17);
label2.TabIndex = 6;
label2.Text = "Категория";
//
// cbCategory
//
cbCategory.DropDownStyle = ComboBoxStyle.DropDownList;
cbCategory.FormattingEnabled = true;
cbCategory.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbCategory.Location = new Point(260, 34);
cbCategory.Name = "cbCategory";
cbCategory.Size = new Size(192, 25);
cbCategory.TabIndex = 5;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 10);
label1.Name = "label1";
label1.Size = new Size(65, 17);
label1.TabIndex = 1;
label1.Text = "Название";
//
// tbName
//
tbName.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbName.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbName.Location = new Point(12, 33);
tbName.Name = "tbName";
tbName.Size = new Size(242, 27);
tbName.TabIndex = 0;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// ExaminationTypeForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "ExaminationTypeForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private TextBox tbName;
private Label label1;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label2;
private ComboBox cbCategory;
}
}
@@ -0,0 +1,84 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class ExaminationTypeForm : Form
{
private TypeViewModel _viewModel;
private ExaminationType? _selectedType;
private string _columnIdName = "ExaminationTypeId";
private ExaminationType _temp;
public ExaminationTypeForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник обследований";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<ExaminationType>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(string txt1 = "", string txt2 = "", bool enableButtons = false)
{
tbName.Text = txt1;
cbCategory.Text = txt2;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<ExaminationType>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.ExaminationTypes.Where(x => x.ExaminationTypeId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.Name, _selectedType.Category, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.Name = tbName.Text;
_selectedType.Category = cbCategory.Text;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
Name = tbName.Text,
Category = cbCategory.Text
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,193 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class ProcedureTypeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
label1 = new Label();
tbName = new TextBox();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
splitContainer1.Panel1.Controls.Add(label1);
splitContainer1.Panel1.Controls.Add(tbName);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// label1
//
label1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(12, 10);
label1.Name = "label1";
label1.Size = new Size(65, 17);
label1.TabIndex = 1;
label1.Text = "Название";
//
// tbName
//
tbName.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
tbName.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
tbName.Location = new Point(12, 33);
tbName.Name = "tbName";
tbName.Size = new Size(242, 27);
tbName.TabIndex = 0;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// DrugIntakeMethodForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "DrugIntakeMethodForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private TextBox tbName;
private Label label1;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
}
}
@@ -0,0 +1,81 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class ProcedureTypeForm : Form
{
private TypeViewModel _viewModel;
private ProcedureType? _selectedType;
private string _columnIdName = "ProcedureTypeId";
private ProcedureType _temp;
public ProcedureTypeForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник процедур";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<ProcedureType>(dgv);
UpdateDgv();
UpdateElements();
}
private void UpdateElements(string name = "", bool enableButtons = false)
{
tbName.Text = name;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<ProcedureType>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.ProcedureTypes.Where(x => x.ProcedureTypeId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.Name, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.Name = tbName.Text;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
Name = tbName.Text
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,291 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class ReferenceValueForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnOpen = new Button();
label5 = new Label();
label4 = new Label();
nudAgeMax = new NumericUpDown();
nudAgeMin = new NumericUpDown();
label3 = new Label();
cbGender = new ComboBox();
label2 = new Label();
cbExamination = new ComboBox();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)nudAgeMax).BeginInit();
((System.ComponentModel.ISupportInitialize)nudAgeMin).BeginInit();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(btnOpen);
splitContainer1.Panel1.Controls.Add(label5);
splitContainer1.Panel1.Controls.Add(label4);
splitContainer1.Panel1.Controls.Add(nudAgeMax);
splitContainer1.Panel1.Controls.Add(nudAgeMin);
splitContainer1.Panel1.Controls.Add(label3);
splitContainer1.Panel1.Controls.Add(cbGender);
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(cbExamination);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(btnUpdate);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnOpen
//
btnOpen.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnOpen.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnOpen.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnOpen.Location = new Point(260, 78);
btnOpen.Name = "btnOpen";
btnOpen.Size = new Size(192, 33);
btnOpen.TabIndex = 15;
btnOpen.Text = "Открыть подробности";
btnOpen.UseVisualStyleBackColor = true;
btnOpen.Click += btnOpen_Click;
//
// label5
//
label5.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label5.AutoSize = true;
label5.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label5.Location = new Point(142, 63);
label5.Name = "label5";
label5.Size = new Size(93, 17);
label5.TabIndex = 14;
label5.Text = "Макс. возраст";
//
// label4
//
label4.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label4.Location = new Point(21, 63);
label4.Name = "label4";
label4.Size = new Size(88, 17);
label4.TabIndex = 13;
label4.Text = "Мин. возраст";
//
// nudAgeMax
//
nudAgeMax.Location = new Point(142, 83);
nudAgeMax.Minimum = new decimal(new int[] { 1, 0, 0, int.MinValue });
nudAgeMax.Name = "nudAgeMax";
nudAgeMax.Size = new Size(96, 25);
nudAgeMax.TabIndex = 12;
//
// nudAgeMin
//
nudAgeMin.Location = new Point(21, 83);
nudAgeMin.Minimum = new decimal(new int[] { 1, 0, 0, int.MinValue });
nudAgeMin.Name = "nudAgeMin";
nudAgeMin.Size = new Size(96, 25);
nudAgeMin.TabIndex = 11;
//
// label3
//
label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(260, 14);
label3.Name = "label3";
label3.Size = new Size(32, 17);
label3.TabIndex = 10;
label3.Text = "Пол";
//
// cbGender
//
cbGender.DropDownStyle = ComboBoxStyle.DropDownList;
cbGender.FormattingEnabled = true;
cbGender.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbGender.Location = new Point(260, 35);
cbGender.Name = "cbGender";
cbGender.Size = new Size(192, 25);
cbGender.TabIndex = 9;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(21, 14);
label2.Name = "label2";
label2.Size = new Size(96, 17);
label2.TabIndex = 8;
label2.Text = "Обследование";
//
// cbExamination
//
cbExamination.DropDownStyle = ComboBoxStyle.DropDownList;
cbExamination.FormattingEnabled = true;
cbExamination.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbExamination.Location = new Point(21, 35);
cbExamination.Name = "cbExamination";
cbExamination.Size = new Size(214, 25);
cbExamination.TabIndex = 7;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 78);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 33);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// ReferenceValueForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "ReferenceValueForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)nudAgeMax).EndInit();
((System.ComponentModel.ISupportInitialize)nudAgeMin).EndInit();
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label2;
private ComboBox cbExamination;
private Label label3;
private ComboBox cbGender;
private Label label5;
private Label label4;
private NumericUpDown nudAgeMax;
private NumericUpDown nudAgeMin;
private Button btnOpen;
}
}
@@ -0,0 +1,110 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class ReferenceValueForm : Form
{
private TypeViewModel _viewModel;
private ReferenceValue? _selectedType;
private string _columnIdName = "ReferenceValueId";
private ReferenceValue _temp;
public ReferenceValueForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник нормалей обследований";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<ReferenceValueWrapper>(dgv);
UpdateDgv();
UpdateElements();
SetDataSourceToComboBoxes();
}
private void SetDataSourceToComboBoxes()
{
cbExamination.DataSource = _viewModel.General.Context.ExaminationTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.ExaminationTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbExamination.DisplayMember = "Name";
cbExamination.ValueMember = "Id";
cbGender.DataSource = new string[] { "Мужчина", "Женщина" };
}
private void UpdateElements(int examination = -1, string gender = "",
int? ageMin = null, int? ageMax = null, bool enableButtons = false)
{
cbExamination.SelectedValue = examination;
cbGender.Text = gender;
nudAgeMin.Value = ageMin ?? -1;
nudAgeMax.Value = ageMax ?? -1;
btnDelete.Enabled = btnUpdate.Enabled = btnOpen.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<ReferenceValue>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int id = int.Parse(selectedRow.Cells[_columnIdName].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.ReferenceValues.Where(x => x.ReferenceValueId == id).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.ExaminationTypeId, _selectedType.Gender,
_selectedType.AgeMin, _selectedType.AgeMax, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.ExaminationTypeId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "1");
_selectedType.Gender = cbGender.Text;
_selectedType.AgeMin = nudAgeMin.Value == -1 ? null : (int)nudAgeMin.Value;
_selectedType.AgeMax = nudAgeMax.Value == -1 ? null : (int)nudAgeMax.Value;
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
ExaminationTypeId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "1"),
Gender = cbGender.Text,
AgeMin = nudAgeMin.Value == -1 ? null : (int)nudAgeMin.Value,
AgeMax = nudAgeMax.Value == -1 ? null : (int)nudAgeMax.Value,
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
private void btnOpen_Click(object sender, EventArgs e)
{
ReferenceValueQNForm f = new(_selectedType.ReferenceValueId);
f.ShowDialog();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,214 @@
namespace Register_office.View.TypesV
{
partial class ReferenceValueQNForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
nudMinValue = new NumericUpDown();
label4 = new Label();
label1 = new Label();
nudMaxValue = new NumericUpDown();
rtbDescriptionTrue = new RichTextBox();
label2 = new Label();
label3 = new Label();
rtbDescriptionFalse = new RichTextBox();
btnCancel = new Button();
btnSave = new Button();
label5 = new Label();
cbUnit = new ComboBox();
((System.ComponentModel.ISupportInitialize)nudMinValue).BeginInit();
((System.ComponentModel.ISupportInitialize)nudMaxValue).BeginInit();
SuspendLayout();
//
// nudMinValue
//
nudMinValue.DecimalPlaces = 2;
nudMinValue.Increment = new decimal(new int[] { 1, 0, 0, 65536 });
nudMinValue.Location = new Point(12, 29);
nudMinValue.Minimum = new decimal(new int[] { 1, 0, 0, int.MinValue });
nudMinValue.Name = "nudMinValue";
nudMinValue.Size = new Size(120, 25);
nudMinValue.TabIndex = 0;
nudMinValue.Value = new decimal(new int[] { 1, 0, 0, int.MinValue });
//
// label4
//
label4.AutoSize = true;
label4.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label4.Location = new Point(12, 9);
label4.Name = "label4";
label4.Size = new Size(96, 17);
label4.TabIndex = 14;
label4.Text = "Мин. значение";
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label1.Location = new Point(153, 9);
label1.Name = "label1";
label1.Size = new Size(101, 17);
label1.TabIndex = 16;
label1.Text = "Макс. значение";
//
// nudMaxValue
//
nudMaxValue.DecimalPlaces = 2;
nudMaxValue.Increment = new decimal(new int[] { 1, 0, 0, 65536 });
nudMaxValue.Location = new Point(153, 29);
nudMaxValue.Minimum = new decimal(new int[] { 1, 0, 0, int.MinValue });
nudMaxValue.Name = "nudMaxValue";
nudMaxValue.Size = new Size(120, 25);
nudMaxValue.TabIndex = 15;
nudMaxValue.Value = new decimal(new int[] { 1, 0, 0, int.MinValue });
//
// rtbDescriptionTrue
//
rtbDescriptionTrue.Location = new Point(12, 87);
rtbDescriptionTrue.Name = "rtbDescriptionTrue";
rtbDescriptionTrue.Size = new Size(436, 122);
rtbDescriptionTrue.TabIndex = 17;
rtbDescriptionTrue.Text = "";
//
// label2
//
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 67);
label2.Name = "label2";
label2.Size = new Size(119, 17);
label2.TabIndex = 18;
label2.Text = "Описание наличия";
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(12, 222);
label3.Name = "label3";
label3.Size = new Size(132, 17);
label3.TabIndex = 20;
label3.Text = "Описание отсутствия";
//
// rtbDescriptionFalse
//
rtbDescriptionFalse.Location = new Point(12, 242);
rtbDescriptionFalse.Name = "rtbDescriptionFalse";
rtbDescriptionFalse.Size = new Size(436, 122);
rtbDescriptionFalse.TabIndex = 19;
rtbDescriptionFalse.Text = "";
//
// btnCancel
//
btnCancel.Anchor = AnchorStyles.Bottom;
btnCancel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnCancel.DialogResult = DialogResult.Cancel;
btnCancel.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnCancel.Location = new Point(286, 373);
btnCancel.Name = "btnCancel";
btnCancel.Size = new Size(162, 33);
btnCancel.TabIndex = 22;
btnCancel.Text = "Отмена";
btnCancel.UseVisualStyleBackColor = true;
//
// btnSave
//
btnSave.Anchor = AnchorStyles.Bottom;
btnSave.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnSave.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnSave.Location = new Point(12, 373);
btnSave.Name = "btnSave";
btnSave.Size = new Size(162, 33);
btnSave.TabIndex = 21;
btnSave.Text = "Сохранить";
btnSave.UseVisualStyleBackColor = true;
btnSave.Click += btnSave_Click;
//
// label5
//
label5.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label5.AutoSize = true;
label5.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label5.Location = new Point(286, 8);
label5.Name = "label5";
label5.Size = new Size(126, 17);
label5.TabIndex = 24;
label5.Text = "Единица измерения";
//
// cbUnit
//
cbUnit.DropDownStyle = ComboBoxStyle.DropDownList;
cbUnit.FormattingEnabled = true;
cbUnit.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbUnit.Location = new Point(286, 28);
cbUnit.Name = "cbUnit";
cbUnit.Size = new Size(162, 25);
cbUnit.TabIndex = 23;
//
// ReferenceValueQNForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(460, 418);
Controls.Add(label5);
Controls.Add(cbUnit);
Controls.Add(btnCancel);
Controls.Add(btnSave);
Controls.Add(label3);
Controls.Add(rtbDescriptionFalse);
Controls.Add(label2);
Controls.Add(rtbDescriptionTrue);
Controls.Add(label1);
Controls.Add(nudMaxValue);
Controls.Add(label4);
Controls.Add(nudMinValue);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "ReferenceValueQNForm";
Text = "Справочник нормалей для числовых и качественных обследований";
((System.ComponentModel.ISupportInitialize)nudMinValue).EndInit();
((System.ComponentModel.ISupportInitialize)nudMaxValue).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private NumericUpDown nudMinValue;
private Label label4;
private Label label1;
private NumericUpDown nudMaxValue;
private RichTextBox rtbDescriptionTrue;
private Label label2;
private Label label3;
private RichTextBox rtbDescriptionFalse;
private Button btnCancel;
private Button btnSave;
private Label label5;
private ComboBox cbUnit;
}
}
@@ -0,0 +1,109 @@
using Register_office.Model;
using Register_office.ViewModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Register_office.View.TypesV
{
public partial class ReferenceValueQNForm : Form
{
private TypeViewModel _viewModel;
private int _referenceValueId;
private ReferenceNumericValue? _referenceNumericValue;
private ReferenceQualitativeValue? _referenceQualitativeValue;
public ReferenceValueQNForm(int referenceValueId)
{
InitializeComponent();
TopMost = true;
_viewModel = new();
_referenceValueId = referenceValueId;
_referenceNumericValue = _viewModel.General.Context.ReferenceNumericValues
.Where(x => x.ReferenceValueId == _referenceValueId).FirstOrDefault();
_referenceQualitativeValue = _viewModel.General.Context.ReferenceQualitativeValues
.Where(x => x.ReferenceValueId == _referenceValueId).FirstOrDefault();
SetDataSourceToComboBoxes();
GetReferenceValues();
}
private void SetDataSourceToComboBoxes()
{
cbUnit.DataSource = _viewModel.General.Context.Units
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.UnitId })
.OrderBy(cbi => cbi.Name).ToList();
cbUnit.DisplayMember = "Name";
cbUnit.ValueMember = "Id";
cbUnit.SelectedValue = -1;
}
private void GetReferenceValues()
{
if (_referenceNumericValue != null)
{
nudMinValue.Value = _referenceNumericValue.MinValue ?? -1;
nudMaxValue.Value = _referenceNumericValue.MaxValue ?? -1;
cbUnit.SelectedValue = _referenceNumericValue.UnitId;
}
if (_referenceQualitativeValue != null)
{
rtbDescriptionFalse.Text = _referenceQualitativeValue.DescriptionFalse;
rtbDescriptionTrue.Text = _referenceQualitativeValue.DescriptionTrue;
}
}
private void btnSave_Click(object sender, EventArgs e)
{
if ((nudMinValue.Value >= 0 || nudMaxValue.Value >= 0) && cbUnit.Text != "")
{
if (_referenceNumericValue == null)
{
_referenceNumericValue = new()
{
ReferenceValueId = _referenceValueId,
MinValue = nudMinValue.Value < 0 ? null : (int)nudMinValue.Value,
MaxValue = nudMaxValue.Value < 0 ? null : (int)nudMaxValue.Value,
UnitId = int.Parse(cbUnit.SelectedValue?.ToString() ?? "1")
};
_viewModel.AddType(_referenceNumericValue);
}
else
{
_referenceNumericValue.ReferenceValueId = _referenceValueId;
_referenceNumericValue.MinValue = nudMinValue.Value < 0 ? null : (int)nudMinValue.Value;
_referenceNumericValue.MaxValue = nudMaxValue.Value < 0 ? null : (int)nudMaxValue.Value;
_referenceNumericValue.UnitId = int.Parse(cbUnit.SelectedValue?.ToString() ?? "1");
_viewModel.General.Context.SaveChanges();
}
}
if (rtbDescriptionFalse.Text.Trim() != "" && rtbDescriptionTrue.Text.Trim() != "")
{
if (_referenceQualitativeValue == null)
{
_referenceQualitativeValue = new()
{
ReferenceValueId = _referenceValueId,
DescriptionFalse = rtbDescriptionFalse.Text,
DescriptionTrue = rtbDescriptionTrue.Text
};
_viewModel.AddType(_referenceQualitativeValue);
}
else
{
_referenceQualitativeValue.ReferenceValueId = _referenceValueId;
_referenceQualitativeValue.DescriptionFalse = rtbDescriptionFalse.Text;
_referenceQualitativeValue.DescriptionTrue = rtbDescriptionTrue.Text;
_viewModel.General.Context.SaveChanges();
}
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,221 @@
using Register_office.View;
namespace Register_office.View.TypesV
{
partial class SyndromeExaminationTypeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
splitContainer1 = new SplitContainer();
btnAdd = new Button();
btnDelete = new Button();
btnUpdate = new Button();
dgv = new DataGridView();
cmsMedicineProductCost = new ContextMenuStrip(components);
cmsMedicineProduct = new ContextMenuStrip(components);
label3 = new Label();
cbExamination = new ComboBox();
label2 = new Label();
cbSyndrome = new ComboBox();
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
splitContainer1.Panel2.SuspendLayout();
splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgv).BeginInit();
SuspendLayout();
//
// splitContainer1
//
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.FixedPanel = FixedPanel.Panel1;
splitContainer1.Location = new Point(0, 0);
splitContainer1.Name = "splitContainer1";
splitContainer1.Orientation = Orientation.Horizontal;
//
// splitContainer1.Panel1
//
splitContainer1.Panel1.Controls.Add(label3);
splitContainer1.Panel1.Controls.Add(btnAdd);
splitContainer1.Panel1.Controls.Add(cbExamination);
splitContainer1.Panel1.Controls.Add(btnDelete);
splitContainer1.Panel1.Controls.Add(label2);
splitContainer1.Panel1.Controls.Add(cbSyndrome);
splitContainer1.Panel1.Controls.Add(btnUpdate);
//
// splitContainer1.Panel2
//
splitContainer1.Panel2.Controls.Add(dgv);
splitContainer1.Size = new Size(800, 647);
splitContainer1.SplitterDistance = 120;
splitContainer1.SplitterWidth = 5;
splitContainer1.TabIndex = 0;
//
// btnAdd
//
btnAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnAdd.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnAdd.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnAdd.Location = new Point(458, 72);
btnAdd.Name = "btnAdd";
btnAdd.Size = new Size(330, 33);
btnAdd.TabIndex = 3;
btnAdd.Text = "Добавить";
btnAdd.UseVisualStyleBackColor = true;
btnAdd.Click += btnAdd_Click;
//
// btnDelete
//
btnDelete.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnDelete.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnDelete.Enabled = false;
btnDelete.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnDelete.Location = new Point(626, 33);
btnDelete.Name = "btnDelete";
btnDelete.Size = new Size(162, 33);
btnDelete.TabIndex = 4;
btnDelete.Text = "Удалить";
btnDelete.UseVisualStyleBackColor = true;
btnDelete.Click += btnDelete_Click;
//
// btnUpdate
//
btnUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
btnUpdate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
btnUpdate.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204);
btnUpdate.Location = new Point(458, 32);
btnUpdate.Name = "btnUpdate";
btnUpdate.Size = new Size(162, 33);
btnUpdate.TabIndex = 1;
btnUpdate.Text = "Изменить";
btnUpdate.UseVisualStyleBackColor = true;
btnUpdate.Click += btnUpdate_Click;
//
// dgv
//
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToOrderColumns = true;
dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgv.Dock = DockStyle.Fill;
dgv.Location = new Point(0, 0);
dgv.MultiSelect = false;
dgv.Name = "dgv";
dgv.ReadOnly = true;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.Size = new Size(800, 522);
dgv.TabIndex = 8;
dgv.SelectionChanged += dgv_SelectionChanged;
//
// cmsMedicineProductCost
//
cmsMedicineProductCost.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
cmsMedicineProductCost.Name = "cmsMedicineProductCost";
cmsMedicineProductCost.Size = new Size(61, 4);
//
// cmsMedicineProduct
//
cmsMedicineProduct.Name = "contextMenuStrip1";
cmsMedicineProduct.Size = new Size(61, 4);
//
// label3
//
label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label3.Location = new Point(232, 17);
label3.Name = "label3";
label3.Size = new Size(96, 17);
label3.TabIndex = 14;
label3.Text = "Обследование";
//
// cbExamination
//
cbExamination.DropDownStyle = ComboBoxStyle.DropDownList;
cbExamination.FormattingEnabled = true;
cbExamination.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbExamination.Location = new Point(232, 37);
cbExamination.Name = "cbExamination";
cbExamination.Size = new Size(211, 25);
cbExamination.TabIndex = 13;
//
// label2
//
label2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
label2.AutoSize = true;
label2.Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
label2.Location = new Point(12, 16);
label2.Name = "label2";
label2.Size = new Size(62, 17);
label2.TabIndex = 12;
label2.Text = "Синдром";
//
// cbSyndrome
//
cbSyndrome.DropDownStyle = ComboBoxStyle.DropDownList;
cbSyndrome.FormattingEnabled = true;
cbSyndrome.Items.AddRange(new object[] { "Физикальное", "Лабораторное", "Инструментальное" });
cbSyndrome.Location = new Point(12, 37);
cbSyndrome.Name = "cbSyndrome";
cbSyndrome.Size = new Size(214, 25);
cbSyndrome.TabIndex = 11;
//
// SyndromeExaminationTypeForm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 647);
Controls.Add(splitContainer1);
Font = new Font("Segoe UI", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204);
FormBorderStyle = FormBorderStyle.FixedSingle;
Name = "SyndromeExaminationTypeForm";
Text = "Лекарственные препараты";
splitContainer1.Panel1.ResumeLayout(false);
splitContainer1.Panel1.PerformLayout();
splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dgv).EndInit();
ResumeLayout(false);
}
#endregion
private SplitContainer splitContainer1;
private DataGridView dgv;
private Button btnUpdate;
private Button btnDelete;
private Button btnAdd;
private ContextMenuStrip cmsMedicineProduct;
private ContextMenuStrip cmsMedicineProductCost;
private Label label3;
private ComboBox cbExamination;
private Label label2;
private ComboBox cbSyndrome;
}
}
@@ -0,0 +1,101 @@
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Register_office.Model;
using Register_office.ViewModel;
using System.Data;
namespace Register_office.View.TypesV
{
public partial class SyndromeExaminationTypeForm : Form
{
private TypeViewModel _viewModel;
private SyndromeExaminationType? _selectedType;
private SyndromeExaminationType _temp;
public SyndromeExaminationTypeForm()
{
InitializeComponent();
TopMost = true;
Text = "Справочник соответствий синдромов и обследований";
_viewModel = new();
_viewModel.ConfigureSettingsDGV<SyndromeExaminationTypeWrapper>(dgv);
UpdateDgv();
SetDataSourceToComboBoxes();
UpdateElements();
}
private void SetDataSourceToComboBoxes()
{
cbExamination.DataSource = _viewModel.General.Context.ExaminationTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.ExaminationTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbExamination.DisplayMember = "Name";
cbExamination.ValueMember = "Id";
cbSyndrome.DataSource = _viewModel.General.Context.SyndromeTypes
.Select(x => new ComboBoxItem { Name = x.Name, Id = x.SyndromeTypeId })
.OrderBy(cbi => cbi.Name).ToList();
cbSyndrome.DisplayMember = "Name";
cbSyndrome.ValueMember = "Id";
}
private void UpdateElements(int idExam = -1, int idSynd = -1, bool enableButtons = false)
{
cbExamination.SelectedValue = idExam;
cbSyndrome.SelectedValue = idSynd;
btnDelete.Enabled = btnUpdate.Enabled = enableButtons;
}
private void UpdateDgv()
{
_viewModel.SetDefaultDataSource<SyndromeExaminationType>(dgv);
}
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count != 0 && !dgv.CurrentRow.IsNewRow)
{
DataGridViewRow selectedRow = dgv.SelectedRows[0];
int idExam = int.Parse(selectedRow.Cells["ExaminationTypeId"].Value.ToString() ?? "");
int idSynd = int.Parse(selectedRow.Cells["SyndromeId"].Value.ToString() ?? "");
_selectedType = _viewModel.General.Context.SyndromeExaminationTypes
.Where(x => x.ExaminationTypeId == idExam && x.SyndromeId == idSynd).FirstOrDefault();
if (_selectedType != null)
UpdateElements(_selectedType.ExaminationTypeId, _selectedType.SyndromeId, true);
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_selectedType.ExaminationTypeId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "-1");
_selectedType.SyndromeId = int.Parse(cbSyndrome.SelectedValue?.ToString() ?? "-1");
_viewModel.General.Context.SaveChanges();
UpdateElements();
UpdateDgv();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (_selectedType != null)
{
_viewModel.DeleteType(_selectedType);
UpdateElements();
UpdateDgv();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
_temp = new()
{
ExaminationTypeId = int.Parse(cbExamination.SelectedValue?.ToString() ?? "-1"),
SyndromeId = int.Parse(cbSyndrome.SelectedValue?.ToString() ?? "-1")
};
_viewModel.AddType(_temp);
UpdateElements();
UpdateDgv();
}
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsMedicineProductCost.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 17</value>
</metadata>
<metadata name="cmsMedicineProduct.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

Some files were not shown because too many files have changed in this diff Show More