public static bool Initialize()
        {
            if (!_IsInit)
            {
                string localResourcesPath = "";
                try
                {
                    Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                    var           con    = config.ConnectionStrings.ConnectionStrings["MedicalChartDatabase"];
                    localResourcesPath = config.AppSettings.Settings["LocalResourcesPath"].Value;
                    if (con == null)
                    {
                        MonitoringStub.Error("Error_AppInit", "Отсутствует настройка подключения к БД MedicalChartDatabase в конфигурационном фале", null, null, null);
                        return(false);
                    }
                    m_DataContext = new Cl_DataContextMegaTemplate(con.ConnectionString);

                    m_DataContext.Database.Connection.Open();

                    m_DataContext.f_Init();
                }
                catch (Exception er)
                {
                    MonitoringStub.Error("Error_AppInit", "Не удалось подключиться к базе данных", er, null, null);
                    return(false);
                }
                if (!Cl_TemplatesFacade.f_GetInstance().f_Init(m_DataContext))
                {
                    MonitoringStub.Error("Error_AppInit", "Не удалось инициализировать фасад работы с шаблонами", null, null, null);
                    return(false);
                }
                if (!Cl_RecordsFacade.f_GetInstance().f_Init(m_DataContext, localResourcesPath))
                {
                    MonitoringStub.Error("Error_AppInit", "Не удалось инициализировать фасад работы с записями", null, null, null);
                    return(false);
                }
                if (!Cl_MedicalCardsFacade.f_GetInstance().f_Init(m_DataContext))
                {
                    MonitoringStub.Error("Error_AppInit", "Не удалось инициализировать фасад работы с медкартами", null, null, null);
                    return(false);
                }
                if (!Cl_CatalogsFacade.f_GetInstance().f_Init(m_DataContext))
                {
                    MonitoringStub.Error("Error_AppInit", "Не удалось инициализировать фасад работы со справочниками", null, null, null);
                    return(false);
                }
                _IsInit = true;
            }
            return(_IsInit);
        }
Example #2
0
        static void Main(string[] args)
        {
            string local        = null;
            string path         = null;
            string dbConnection = null;
            var    medicalCards = new Dictionary <string, Cl_MedicalCard>();

            if (args != null && args.Length >= 4)
            {
                for (var i = 0; i < args.Length; i++)
                {
                    var arg = args[i];
                    if (arg == "-local" && i + 1 < args.Length)
                    {
                        local = args[i + 1];
                    }
                    else if (arg == "-path" && i + 1 < args.Length)
                    {
                        path = args[i + 1];
                    }
                    else if (arg == "-db" && i + 1 < args.Length)
                    {
                        dbConnection = args[i + 1].Replace("Data_Source", "Data Source").Replace("Data_Source", "Data Source").Replace("Initial_Catalog", "Initial Catalog").Replace("Integrated_Security", "Integrated Security");
                    }
                    else if (arg == "-log" && i + 1 < args.Length)
                    {
                        m_Loging = args[i + 1] == "1";
                    }
                }
            }
            if (local != null && path != null && dbConnection != null)
            {
                if (Directory.Exists(path))
                {
                    var db = new Cl_DataContextMegaTemplate(dbConnection);
                    db.f_Init();
                    if (!Cl_CatalogsFacade.f_GetInstance().f_Init(db))
                    {
                        f_WriteLog("Не удалось инициализировать фасад работы со справочниками");
                        Console.ReadKey(true);
                        return;
                    }
                    if (!Cl_MedicalCardsFacade.f_GetInstance().f_Init(db))
                    {
                        f_WriteLog("Не удалось инициализировать фасад работы с мед картами");
                        Console.ReadKey(true);
                        return;
                    }
                    if (!Cl_RecordsFacade.f_GetInstance().f_Init(db, local))
                    {
                        f_WriteLog("Не удалось инициализировать фасад работы с записями");
                        Console.ReadKey(true);
                        return;
                    }
                    var           records  = new List <Cl_Record>();
                    DirectoryInfo _dirInfo = new DirectoryInfo(Cl_RecordsFacade.f_GetInstance().f_GetLocalResourcesPath());
                    f_WriteLog(string.Format("Начало формирования записей папки \"{0}\"", path));
                    int      iVal  = 0;
                    Guid     gVal  = Guid.Empty;
                    DateTime dtVal = DateTime.MinValue;
                    var      dirs  = Directory.GetDirectories(path);
                    foreach (var dir in dirs)
                    {
                        var folderName = dir.Substring(dir.LastIndexOf("\\") + 1).Replace(path, "");
                        f_WriteLog(string.Format("Начало формирования записей пациента \"{0}\"", folderName));
                        var vals = folderName.Split(' ');
                        if (vals.Length >= 6 && vals.Length <= 7)
                        {
                            if (vals[5].Length > 0 && vals[5][0] == '#')
                            {
                                if (int.TryParse(vals[0], out iVal))
                                {
                                    var medicalNumber   = iVal;
                                    var patientSurName  = vals[1];
                                    var patientName     = vals[2];
                                    var patientLastName = vals[3];
                                    if (DateTime.TryParse(vals[4], out dtVal))
                                    {
                                        var  patientDateBirth = dtVal;
                                        bool validID          = false; //ID пациента
                                        int  patientID        = 0;
                                        Guid patientUID       = Guid.Empty;
                                        if (vals.Length == 6)
                                        {
                                            validID = int.TryParse(vals[5].Substring(1), out patientID);
                                        }
                                        else if (vals.Length == 7)
                                        {
                                            validID = Guid.TryParse(vals[6], out patientUID);
                                        }
                                        if (validID)
                                        {
                                            var dirsCliniks = Directory.GetDirectories(dir);
                                            foreach (var dirClinik in dirsCliniks)
                                            {
                                                var clinik         = dirClinik.Substring(dirClinik.LastIndexOf("\\") + 1);
                                                var dirsCategories = Directory.GetDirectories(dirClinik);
                                                foreach (var dirCategory in dirsCategories)
                                                {
                                                    var cat      = dirCategory.Substring(dirCategory.LastIndexOf("\\") + 1);
                                                    var category = Cl_CatalogsFacade.f_GetInstance().f_GetCategory(cat);
                                                    if (category == null)
                                                    {
                                                        category = Cl_CatalogsFacade.f_GetInstance().f_AddCategory(Cl_Category.E_CategoriesTypes.Total, cat);
                                                    }
                                                    if (category != null)
                                                    {
                                                        var curRecords = new Dictionary <string, Cl_Record>();
                                                        //var curImages = new Dictionary<string, List<Cl_ImageFileData>>();
                                                        var filesRecords = Directory.GetFiles(dirCategory);
                                                        foreach (var fileRecord in filesRecords)
                                                        {
                                                            var valsRecord         = fileRecord.Replace(dirCategory + "\\", "");
                                                            var pathRelativeFile   = fileRecord.Replace(path, "");
                                                            var pathRelativeFolder = pathRelativeFile.Replace(valsRecord, "");
                                                            if (DateTime.TryParse(valsRecord.Substring(0, 8), out dtVal))
                                                            {
                                                                var record = new Cl_Record();
                                                                record.p_Version     = 1;
                                                                record.p_Type        = E_RecordType.FinishedFile;
                                                                record.p_IsAutomatic = true;
                                                                record.p_DateCreate  = record.p_DateLastChange = record.p_DateReception = dtVal;

                                                                string         patID          = patientUID != Guid.Empty ? patientUID.ToString() : patientID.ToString();
                                                                string         medicalCardKey = $"{medicalNumber}_{patID}";
                                                                Cl_MedicalCard medicalCard    = null;
                                                                if (!medicalCards.TryGetValue(medicalCardKey, out medicalCard))
                                                                {
                                                                    if (patientUID != Guid.Empty)
                                                                    {
                                                                        medicalCard = Cl_MedicalCardsFacade.f_GetInstance().f_GetMedicalCard(medicalNumber.ToString(), patientUID);
                                                                    }
                                                                    else
                                                                    {
                                                                        medicalCard = Cl_MedicalCardsFacade.f_GetInstance().f_GetMedicalCard(medicalNumber.ToString(), patientID);
                                                                    }
                                                                    if (medicalCard == null)
                                                                    {
                                                                        medicalCard              = new Cl_MedicalCard();
                                                                        medicalCard.p_Number     = medicalNumber.ToString();
                                                                        medicalCard.p_DateCreate = record.p_DateCreate;
                                                                        medicalCard.p_PatientID  = patientID;
                                                                        if (patientUID != Guid.Empty)
                                                                        {
                                                                            medicalCard.p_PatientUID = patientUID;
                                                                        }
                                                                        medicalCard.p_PatientSurName   = patientSurName;
                                                                        medicalCard.p_PatientName      = patientName;
                                                                        medicalCard.p_PatientLastName  = patientLastName;
                                                                        medicalCard.p_PatientDateBirth = patientDateBirth;
                                                                        medicalCards.Add(medicalCardKey, medicalCard);
                                                                    }
                                                                }
                                                                record.p_MedicalCard = medicalCard;

                                                                record.p_ClinicName      = clinik;
                                                                record.p_CategoryTotalID = category.p_ID;
                                                                record.p_CategoryTotal   = category;
                                                                bool isAuthorValid = false;
                                                                var  authorStart   = valsRecord.IndexOf('[');
                                                                if (authorStart == -1 && valsRecord.LastIndexOf('.') > 9)
                                                                {
                                                                    record.p_Title          = valsRecord.Substring(9, valsRecord.LastIndexOf('.') - 9);
                                                                    record.p_DateLastChange = record.p_DateCreate;
                                                                    isAuthorValid           = true;
                                                                }
                                                                else if (authorStart > 10)
                                                                {
                                                                    record.p_Title = valsRecord.Substring(9, valsRecord.IndexOf('[') - 10);
                                                                    var authorEnd = valsRecord.IndexOf(']');
                                                                    if (authorEnd > 11 && authorEnd > authorStart + 22)
                                                                    {
                                                                        if (DateTime.TryParse(valsRecord.Substring(authorStart + 1, 19).Replace("-", ":"), out dtVal))
                                                                        {
                                                                            record.p_DateLastChange = dtVal;
                                                                            var authorName     = valsRecord.Substring(authorStart + 22, authorEnd - authorStart - 22);
                                                                            var valsAuthorName = authorName.Split(' ');
                                                                            if (valsAuthorName.Length == 4)
                                                                            {
                                                                                record.p_DoctorSurName  = valsAuthorName[1];
                                                                                record.p_DoctorName     = valsAuthorName[2];
                                                                                record.p_DoctorLastName = valsAuthorName[3];
                                                                                isAuthorValid           = true;
                                                                            }
                                                                            else
                                                                            {
                                                                                f_WriteLog(string.Format("Не корректные данные имени автора записи {0}", fileRecord), E_MessageType.Warning);
                                                                                continue;
                                                                            }
                                                                        }
                                                                        else if (valsRecord.IndexOf("_[") > 0 && valsRecord.IndexOf("]-") > 0 && valsRecord.LastIndexOf(".") > valsRecord.IndexOf("]-") + 2)
                                                                        {
                                                                            if (int.TryParse(valsRecord.Substring(valsRecord.IndexOf("]-") + 2, valsRecord.LastIndexOf(".") - valsRecord.IndexOf("]-") - 2), out iVal))
                                                                            {
                                                                                //var fileStream = File.OpenRead(fileRecord);
                                                                                //MemoryStream ms = new MemoryStream();
                                                                                //fileStream.CopyTo(ms);
                                                                                //Regex rgx = new Regex("]-\\d*?.");
                                                                                //var keyRecord = rgx.Replace(valsRecord.Replace("_", " "), "]");
                                                                                //keyRecord = keyRecord.Substring(0, keyRecord.LastIndexOf("."));

                                                                                //var recordFileType = f_GetFileType(valsRecord);
                                                                                //if (recordFileType != null)
                                                                                //{
                                                                                //    if (curImages.ContainsKey(keyRecord))
                                                                                //    {
                                                                                //        curImages[keyRecord].Add(new Cl_ImageFileData() { m_FileName = valsRecord, m_FileType = (E_RecordFileType)recordFileType, m_FileData = ms.ToArray() });
                                                                                //    }
                                                                                //    else
                                                                                //    {
                                                                                //        curImages.Add(keyRecord, new List<Cl_ImageFileData>() { new Cl_ImageFileData() { m_FileName = valsRecord, m_FileType = (E_RecordFileType)recordFileType, m_FileData = ms.ToArray() } });
                                                                                //    }
                                                                                //}
                                                                                //ms.Dispose();



                                                                                continue;
                                                                            }
                                                                            else
                                                                            {
                                                                                f_WriteLog(string.Format("Не корректное время изменения записи автором {0}", fileRecord), E_MessageType.Warning);
                                                                                continue;
                                                                            }
                                                                        }
                                                                        else
                                                                        {
                                                                            f_WriteLog(string.Format("Не корректное время изменения записи автором {0}", fileRecord), E_MessageType.Warning);
                                                                            continue;
                                                                        }
                                                                    }
                                                                    else
                                                                    {
                                                                        f_WriteLog(string.Format("Не корректные данные автора записи {0}", fileRecord), E_MessageType.Warning);
                                                                        continue;
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    f_WriteLog(string.Format("Не корректные данные автора записи {0}", fileRecord), E_MessageType.Warning);
                                                                    continue;
                                                                }
                                                                if (isAuthorValid)
                                                                {
                                                                    var attrs   = File.GetAttributes(fileRecord);
                                                                    var isPrint = attrs.HasFlag(FileAttributes.ReadOnly);
                                                                    if (isPrint)
                                                                    {
                                                                        record.p_DatePrintDoctor = record.p_DatePrintPatient = DateTime.Now;
                                                                    }

                                                                    //var fileStream = File.OpenRead(fileRecord);

                                                                    var fileName  = "";
                                                                    var extension = Path.GetExtension(fileRecord);
                                                                    fileName = fileRecord.Replace(extension, "");
                                                                    if (extension == ".x")
                                                                    {
                                                                        record.p_IsDelete = true;
                                                                        extension         = Path.GetExtension(fileRecord.Substring(0, fileRecord.Length - 2));
                                                                        fileName          = fileRecord.Replace(extension, "");
                                                                    }
                                                                    else if (extension == ".tag")
                                                                    {
                                                                        extension = Path.GetExtension(fileRecord.Substring(0, fileRecord.Length - 4));
                                                                        fileName  = fileRecord.Replace(extension, "");
                                                                    }
                                                                    var recordFileType = f_GetFileType(valsRecord);
                                                                    if (recordFileType != null)
                                                                    {
                                                                        record.p_FileType = (E_RecordFileType)recordFileType;
                                                                    }
                                                                    else
                                                                    {
                                                                        f_WriteLog(string.Format("Неизвестный формат файла записи {0}", fileRecord), E_MessageType.Error);
                                                                        continue;
                                                                    }
                                                                    record.p_FilePath = pathRelativeFile;
                                                                    //MemoryStream ms = new MemoryStream();
                                                                    //fileStream.CopyTo(ms);
                                                                    //record.p_FilePath = $"{local}\\{clinik}\\{patID}\\{valsRecord}";

                                                                    //record.p_FilePath = Cl_RecordsFacade.f_GetInstance().f_GetLocalResourcesRelativeFilePath(record);
                                                                    //var filePath = Cl_RecordsFacade.f_GetInstance().f_GetLocalResourcesPath() + "/" + record.p_FilePath;

                                                                    //if (record.p_FileType == E_RecordFileType.HTML)
                                                                    //{
                                                                    //    ms.Position = 0;
                                                                    //    var sr = new StreamReader(ms);
                                                                    //    var htmlText = sr.ReadToEnd();
                                                                    //    sr.Dispose();
                                                                    //    htmlText = htmlText.Replace(@"img src=\\family-doctor.local\fd$\FD.med\Images\Logo.jpg", @"img class=""record_title_img"" src=""Images/title.jpg""");
                                                                    //    File.WriteAllBytes(filePath, Encoding.UTF8.GetBytes(htmlText));
                                                                    //}
                                                                    //else
                                                                    //{
                                                                    //    File.WriteAllBytes(filePath, ms.ToArray());
                                                                    //}
                                                                    //ms.Dispose();
                                                                    f_WriteLog(string.Format("Сформирована новая запись {0}", fileRecord), E_MessageType.Info);
                                                                    curRecords.Add(valsRecord, record);
                                                                }
                                                                else
                                                                {
                                                                    f_WriteLog(string.Format("Не корректные данные автора записи {0}", fileRecord), E_MessageType.Warning);
                                                                    continue;
                                                                }
                                                            }
                                                            else
                                                            {
                                                                f_WriteLog(string.Format("Не корректная дата записи {0}", fileRecord), E_MessageType.Warning);
                                                                continue;
                                                            }
                                                        }
                                                        //foreach (var record in curRecords)
                                                        //{
                                                        //    var fileName = record.Key.Substring(0, record.Key.IndexOf("].") + 1);
                                                        //    var patID = record.Value.p_MedicalCard.p_PatientUID != Guid.Empty ? record.Value.p_MedicalCard.p_PatientUID.ToString() : record.Value.p_MedicalCard.p_PatientID.ToString();
                                                        //    var folderPath = $"{local}\\{clinik}\\{patID}\\";
                                                        //    if (curImages.ContainsKey(fileName))
                                                        //    {
                                                        //        var images = curImages[fileName];
                                                        //        var html = Encoding.UTF8.GetString(record.Value.p_FileBytes);
                                                        //        foreach (var img in images)
                                                        //        {
                                                        //            html = html.Replace(img.m_FileName, string.Format(@"data:image/{0};base64,{1}", Enum.GetName(typeof(E_RecordFileType), img.m_FileType).ToLower(), Convert.ToBase64String(img.m_FileData)));
                                                        //        }
                                                        //        record.Value.p_FileBytes = Encoding.UTF8.GetBytes(html);
                                                        //    }
                                                        //}
                                                        records.AddRange(curRecords.Values);
                                                    }
                                                    else
                                                    {
                                                        f_WriteLog("Категория записей не найдена", E_MessageType.Error);
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            f_WriteLog("Не корректный ID пациента", E_MessageType.Warning);
                                        }
                                    }
                                    else
                                    {
                                        f_WriteLog("Не корректная дата рождения пациента", E_MessageType.Warning);
                                    }
                                }
                                else
                                {
                                    f_WriteLog("Не корректный номер медкарты", E_MessageType.Warning);
                                }
                            }
                            else
                            {
                                f_WriteLog("Не корректное название архива записей", E_MessageType.Warning);
                            }
                        }
                        else
                        {
                            f_WriteLog("Не корректное название архива записей", E_MessageType.Warning);
                        }
                    }
                    f_WriteLog("Начало сохранения сформированных записей", E_MessageType.Info);
                    if (Cl_RecordsFacade.f_GetInstance().f_AddRecords(records))
                    {
                        f_WriteLog("Конец сохранения сформированных записей", E_MessageType.Info);

                        f_WriteLog("Начало копирования папки с файлами", E_MessageType.Info);

                        foreach (string _path in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories))
                        {
                            try
                            {
                                var fileName     = Path.GetFileName(_path);
                                var relativePath = _path.Replace(path, "").Replace("\\" + fileName, "");
                                Cl_RecordsFacade.f_GetInstance().f_SaveFileFromSql(relativePath, fileName, File.ReadAllBytes(_path));
                            }
                            catch (Exception e)
                            {
                                f_WriteLog("Не удалось скопировать файл " + _path, E_MessageType.Info);
                            }
                        }

                        f_WriteLog("Конец копирования папки с файлами", E_MessageType.Info);
                    }
                    else
                    {
                        f_WriteLog("Не удалось сохраненить сформированные записи", E_MessageType.Info);
                    }
                    f_WriteLog(string.Format("Конец формирования записей папки \"{0}\"", path));
                }
                else
                {
                    f_WriteLog("Папка архива записей для загрузки не существует.", E_MessageType.Error);
                }
            }
            else
            {
                f_WriteLog("Не указана папка архива записей для загрузки.", E_MessageType.Error);
            }
            f_FixedLog();
            Console.ReadKey(true);
        }
        public void f_TestCreateRecord()
        {
            var temlName = "Тест проверки создания API работы с записями";
            var dc       = new Cl_DataContextMegaTemplate(f_GetConnectionString());

            dc.f_Init();
            var result = Cl_MedicalCardsFacade.f_GetInstance().f_Init(dc);

            Assert.AreEqual(true, result);
            result = Cl_TemplatesFacade.f_GetInstance().f_Init(dc);
            Assert.AreEqual(true, result);
            result = Cl_RecordsFacade.f_GetInstance().f_Init(dc, f_GetLocalResourcesPath());
            Assert.AreEqual(true, result);
            result = Cl_CatalogsFacade.f_GetInstance().f_Init(dc);
            Assert.AreEqual(true, result);

            var groupTpl = dc.p_Groups.FirstOrDefault(g => g.p_Type == Cl_Group.E_Type.Templates && g.p_Name == "test");

            if (groupTpl == null)
            {
                groupTpl = new Cl_Group()
                {
                    p_Name = "test", p_Type = Cl_Group.E_Type.Elements
                };
                dc.p_Groups.Add(groupTpl);
                dc.SaveChanges();
            }
            var groupEl = dc.p_Groups.FirstOrDefault(g => g.p_Type == Cl_Group.E_Type.Templates && g.p_Name == "test");

            if (groupEl == null)
            {
                groupEl = new Cl_Group()
                {
                    p_Name = "test", p_Type = Cl_Group.E_Type.Elements
                };
                dc.p_Groups.Add(groupEl);
                dc.SaveChanges();
            }

            if (!Cl_CatalogsFacade.f_GetInstance().f_HasCategory("Осмотр"))
            {
                Cl_CatalogsFacade.f_GetInstance().f_AddCategory(Cl_Category.E_CategoriesTypes.Total, "Осмотр");
            }
            if (!Cl_CatalogsFacade.f_GetInstance().f_HasCategory("Клиническая 1"))
            {
                Cl_CatalogsFacade.f_GetInstance().f_AddCategory(Cl_Category.E_CategoriesTypes.Clinic, "Клиническая 1");
            }

            var catTotal = Cl_CatalogsFacade.f_GetInstance().f_GetCategory("Осмотр");

            Assert.AreNotEqual(null, catTotal);
            var catClinic = Cl_CatalogsFacade.f_GetInstance().f_GetCategory("Клиническая 1");

            Assert.AreNotEqual(null, catClinic);

            var tmpl = Cl_TemplatesFacade.f_GetInstance().f_GetTemplateByName(temlName);

            if (tmpl == null)
            {
                tmpl = new Cl_Template()
                {
                    p_Name = temlName, p_Type = Cl_Template.E_TemplateType.Template
                };
                var elements = new List <Cl_TemplateElement>();

                var element = new Cl_Element()
                {
                    p_ParentGroupID = groupEl.p_ID,
                    p_ParentGroup   = groupEl,
                    p_Name          = "Формула 1",
                    p_Tag           = "one",
                    p_IsNumber      = true,
                    p_NumberRound   = 3
                };
                element.p_ParamsValues = new List <Cl_ElementParam>();
                for (int i = 1; i < 4; i++)
                {
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString()
                    });
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString()
                    });
                }
                elements.Add(new Cl_TemplateElement()
                {
                    p_Template = tmpl, p_ChildElement = element, p_Index = 0
                });

                element = new Cl_Element()
                {
                    p_ParentGroupID = groupEl.p_ID,
                    p_ParentGroup   = groupEl,
                    p_Name          = "Формула 2",
                    p_Tag           = "dva",
                    p_IsNumber      = true,
                    p_NumberRound   = 2
                };
                element.p_ParamsValues = new List <Cl_ElementParam>();
                for (int i = 1; i < 4; i++)
                {
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString()
                    });
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString()
                    });
                }
                elements.Add(new Cl_TemplateElement()
                {
                    p_Template = tmpl, p_ChildElement = element, p_Index = 1
                });
                element = new Cl_Element()
                {
                    p_ParentGroupID = groupEl.p_ID,
                    p_ParentGroup   = groupEl,
                    p_Name          = "Формула 3",
                    p_Tag           = "tri",
                    p_IsNumber      = true,
                    p_NumberRound   = 2
                };
                element.p_ParamsValues = new List <Cl_ElementParam>();
                for (int i = 1; i < 4; i++)
                {
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString()
                    });
                    element.p_ParamsValues.Add(new Cl_ElementParam()
                    {
                        p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString()
                    });
                }
                elements.Add(new Cl_TemplateElement()
                {
                    p_Template = tmpl, p_ChildElement = element, p_Index = 2
                });
                tmpl.p_ParentGroupID    = groupTpl.p_ID;
                tmpl.p_ParentGroup      = groupTpl;
                tmpl.p_TemplateElements = elements;
                tmpl.p_CategoryTotalID  = catTotal.p_ID;
                tmpl.p_CategoryTotal    = catTotal;
                tmpl.p_CategoryClinicID = catClinic.p_ID;
                tmpl.p_CategoryClinic   = catClinic;

                dc.p_Templates.Add(tmpl);
                dc.SaveChanges();
            }
            Assert.AreNotEqual(null, tmpl);

            var elts = Cl_TemplatesFacade.f_GetInstance().f_GetElements(tmpl);

            Assert.AreNotEqual(null, elts);
            var vals = new List <Cl_RecordValue>();

            foreach (var el in elts)
            {
                vals.Add(new Cl_RecordValue()
                {
                    p_ElementID = el.p_ID, p_Element = el, p_ValueUser = "******"
                });
            }
            var medicalCard1 = Cl_MedicalCardsFacade.f_GetInstance().f_GetMedicalCard("777", 1);

            if (medicalCard1 == null)
            {
                medicalCard1 = Cl_MedicalCardsFacade.f_GetInstance().f_CreateMedicalCard("777", 1, Core.Permision.Cl_User.E_Sex.Man, "Иванов", "Иван", "Иванович", new DateTime(1996, 3, 11), "Медкарта API тест 777");
            }
            Assert.IsNotNull(medicalCard1);
            result = Cl_RecordsFacade.f_GetInstance().f_CreateRecord(medicalCard1, catTotal, catClinic, "Заголовок API тест - значения", "Клиника API тест значения", 56369,
                                                                     "Доктор_Фамилия", "Доктор_Имя", "Доктор_Отчество",
                                                                     tmpl, vals);
            Assert.AreEqual(true, result);
            result = Cl_RecordsFacade.f_GetInstance().f_CreateRecord(medicalCard1, catTotal, catClinic, "Заголовок API тест - файл", "Клиника API тест файл", 56369,
                                                                     "Доктор_Фамилия", "Доктор_Имя", "Доктор_Отчество",
                                                                     E_RecordFileType.HTML, Encoding.UTF8.GetBytes("<h1>API тест файл<h1>"));
            Assert.AreEqual(true, result);
        }