public async Task <OperationResult> CreateCaseTemplate(int id)
        {
            try
            {
                Core _core = new Core();
                _core.StartSqlOnly(
                    "host= localhost;Database=759_SDK;user = root;port=3306;Convert Zero Datetime = true;SslMode=none;");

                Dictionary <int, string> laRoutes = new Dictionary <int, string>()
                {
                    { 24, "Ã…rhus H - Aalborg" },
                    { 25, "Aalborg - Lindholm" }
                };

                string checkSum;

                DateTime dt            = DateTime.Now;
                var      dayofWeek     = dt.AddDays(1).ToString("dddd", new System.Globalization.CultureInfo("da-DK"));
                var      dayOfWeek2    = dt.AddDays(2).ToString("dddd", new System.Globalization.CultureInfo("da-DK"));
                var      date          = dt.AddDays(1).ToString("dd");
                var      date2         = dt.AddDays(2).ToString("dd");
                var      monthOfYear   = dt.ToString("MMMM", new System.Globalization.CultureInfo("da-DK"));
                var      year          = dt.ToString("yyyy");
                string   dateFormatted = dt.ToString("-yyyy-MM-dd-yyyy-MM-dd");
                string   laNumber;
                string   laTitle;

                foreach (KeyValuePair <int, string> entry in laRoutes)
                {
                    laNumber = entry.Key.ToString();
                    laTitle  = "La-" + laNumber + dateFormatted;

                    CaseTemplate existingCaseTemplate = await _dbContext.CaseTemplates.SingleOrDefaultAsync(x =>
                                                                                                            x.Title == entry.Value && x.StartAt.ToString("dd-MM-yyyy") == dt.AddDays(1).ToString("dd-MM-yyyy") &&
                                                                                                            x.EndAt.ToString("dd-MM-yyyy") == dt.AddDays(2).ToString("dd-MM-yyyy"));

                    if (existingCaseTemplate == null)
                    {
                        string fileCheckSum = GetLa(laNumber, _core);
                        checkSum = fileCheckSum;

                        MainElement mainElement = _core.TemplateRead(9);
                        mainElement.Repeated                   = 1;
                        mainElement.Label                      = $"Banedanmark LA: {entry.Value}";
                        mainElement.ElementList[0].Label       = mainElement.Label;
                        mainElement.ElementList[0].Description = new CDataValue()

                        {
                            InderValue =
                                $"Fra: {dayofWeek} den {date}. {monthOfYear} {year}<br>Til: {dayOfWeek2} den {date2}. {monthOfYear} {year}"
                        };

                        DataElement dataElement = (DataElement)mainElement.ElementList[0];
                        dataElement.DataItemList[0].Label = entry.Value;
                        ShowPdf showPdf = (ShowPdf)dataElement.DataItemList[1];
                        showPdf.Value = fileCheckSum;

                        CaseTemplate newCaseTemplate = new CaseTemplate();
                        newCaseTemplate.Title    = entry.Value;
                        newCaseTemplate.StartAt  = dt.AddDays(1);
                        newCaseTemplate.EndAt    = dt.AddDays(2);
                        newCaseTemplate.PdfTitle = fileCheckSum;
                        newCaseTemplate.Create(_dbContext);

                        List <SiteName_Dto> sites = _core.Advanced_SiteItemReadAll(false);

                        foreach (var site in sites)
                        {
                            int?sdkCaseId = _core.CaseCreate(mainElement, "", site.SiteUId);

                            CaseTemplateSite caseTemplateSite = new CaseTemplateSite()
                            {
                                CaseTemplateId = newCaseTemplate.Id,
                                SdkSiteId      = site.SiteUId,
                                SdkCaseId      = (int)sdkCaseId
                            };

                            caseTemplateSite.Create(_dbContext);
                        }
                    }

                    UploadedData existingUploadedData = await _dbContext.UploadedDatas.SingleOrDefaultAsync(x =>
                                                                                                            x.FileName == laTitle);

                    if (existingUploadedData == null)
                    {
                        UploadedData uploadedData = new UploadedData()
                        {
                            FileName       = laTitle,
                            ExpirationDate = existingCaseTemplate.EndAt
                        };

                        uploadedData.Create(_dbContext);
                    }
                }

                return(new OperationResult(true, "Created successfully"));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                return(new OperationDataResult <CaseTemplatesModel>(false,
                                                                    _baneDanmarkLaLocalizationService.GetString("Failure creating LA") + $" {e.Message}"));
            }
        }
        private DataItem UnpackDataItem(JObject dataItemObj)
        {
            DataItem dataItem = dataItemObj.ToObject <DataItem>();

            if (dataItemObj["Type"].ToString() == "Picture")
            {
                Picture picture = new Picture(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                              dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy,
                                              int.Parse(dataItemObj["Multi"].ToString()), bool.Parse(dataItemObj["GeolocationEnabled"].ToString()));
                return(picture);
            }
            else if (dataItemObj["Type"].ToString() == "SaveButton")
            {
                SaveButton saveButton = new SaveButton(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                                       dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy,
                                                       dataItemObj["Value"].ToString());
                return(saveButton);
            }
            else if (dataItemObj["Type"].ToString() == "Timer")
            {
                Timer timer = new Timer(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                        dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy,
                                        bool.Parse(dataItemObj["StopOnSave"].ToString()));
                return(timer);
            }
            else if (dataItemObj["Type"].ToString() == "None")
            {
                None none = new None(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                     dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy);
                return(none);
            }
            else if (dataItemObj["Type"].ToString() == "Signature")
            {
                Signature signature = new Signature(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                                    dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy);
                return(signature);
            }
            else if (dataItemObj["Type"].ToString() == "Date")
            {
                Date date = new Date(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                     dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, (bool)dataItem.Dummy,
                                     DateTime.ParseExact(dataItemObj["MinValue"].ToString(), "yyyy-MM-dd hh:mm:ss", null),
                                     DateTime.ParseExact(dataItemObj["MaxValue"].ToString(), "yyyy-MM-dd hh:mm:ss", null),
                                     dataItemObj["DefaultValue"].ToString());
                return(date);
            }
            else if (dataItemObj["Type"].ToString() == "ShowPdf")
            {
                ShowPdf showPdf = new ShowPdf(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                              dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy,
                                              dataItemObj["Value"].ToString());
                return(showPdf);
            }
            else if (dataItemObj["Type"].ToString() == "CheckBox")
            {
                CheckBox checkBox = new CheckBox(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                                 dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy,
                                                 bool.Parse(dataItemObj["DefaultValue"].ToString()), bool.Parse(dataItemObj["Selected"].ToString()));
                return(checkBox);
            }
            else if (dataItemObj["Type"].ToString() == "MultiSelect")
            {
                List <KeyValuePair> keyValuePairList = new List <KeyValuePair>();
                foreach (JObject keyValuePairObj in dataItemObj["KeyValuePairList"])
                {
                    KeyValuePair keyValuePair = keyValuePairObj.ToObject <KeyValuePair>();
                    keyValuePairList.Add(keyValuePair);
                }
                MultiSelect multiSelect = new MultiSelect(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                                          dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy, keyValuePairList);
                return(multiSelect);
            }
            else if (dataItemObj["Type"].ToString() == "SingleSelect")
            {
                List <KeyValuePair> keyValuePairList = new List <KeyValuePair>();
                foreach (JObject keyValuePairObj in dataItemObj["KeyValuePairList"])
                {
                    KeyValuePair keyValuePair = keyValuePairObj.ToObject <KeyValuePair>();
                    keyValuePairList.Add(keyValuePair);
                }
                SingleSelect singleSelect = new SingleSelect(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                                             dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy, keyValuePairList);
                return(singleSelect);
            }
            else if (dataItemObj["Type"].ToString() == "Number")
            {
                Number number = new Number(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                           dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy,
                                           dataItemObj["MinValue"].ToString(), dataItemObj["MaxValue"].ToString(),
                                           int.Parse(dataItemObj["DefaultValue"].ToString()), int.Parse(dataItemObj["DecimalCount"].ToString()),
                                           dataItemObj["UnitName"].ToString());
                return(number);
            }
            else if (dataItemObj["Type"].ToString() == "Text")
            {
                Text text = new Text(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                     dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy,
                                     dataItemObj["Value"].ToString(), int.Parse(dataItemObj["MaxLength"].ToString()),
                                     bool.Parse(dataItemObj["GeolocationEnabled"].ToString()), bool.Parse(dataItemObj["GeolocationForced"].ToString()),
                                     bool.Parse(dataItemObj["GeolocationHidden"].ToString()), bool.Parse(dataItemObj["BarcodeEnabled"].ToString()),
                                     dataItemObj["BarcodeType"].ToString());
                return(text);
            }
            else if (dataItemObj["Type"].ToString() == "Comment")
            {
                Comment comment = new Comment(dataItem.Id, dataItem.Mandatory, dataItem.ReadOnly, dataItem.Label,
                                              dataItem.Description.ToString(), dataItem.Color, dataItem.DisplayOrder, dataItem.Dummy,
                                              dataItemObj["Value"].ToString(), int.Parse(dataItemObj["MaxLength"].ToString()),
                                              bool.Parse(dataItemObj["SplitScreen"].ToString()));
                return(comment);
            }
            else if (dataItemObj["Type"].ToString() == "FieldContainer")
            {
                List <DataItem> dataItemList = new List <DataItem>();
                foreach (JObject diObj in dataItemObj["DataItemList"])
                {
                    DataItem di = UnpackDataItem(diObj);
                    dataItemList.Add(di);
                }
                FieldContainer fieldContainer = new FieldContainer(dataItem.Id, dataItem.Label, dataItem.Description,
                                                                   dataItem.Color, dataItem.DisplayOrder, dataItemObj["Value"].ToString(), dataItemList);
                return(fieldContainer);
            }
            return(dataItem);
        }