Example #1
0
        public void AddRange(CoreElement core)
        {
            if (core.Count == 0)
            {
                return;
            }

            var count         = _Count;
            var requiredCount = count + core.Count;
            var len           = _Items.Length;

            if (len < requiredCount)
            {
                var newLen = len == 0 ? InitialCapacity : len * GrowRate;
                if (newLen < requiredCount)
                {
                    newLen = requiredCount;
                }
                Array.Resize(ref _Items, newLen);
            }

            Array.Copy(core.Items, 0, _Items, count, core.Count);

            _Count += core.Count;
        }
Example #2
0
        public BaseCore(int tp, int maxhp, int minhp, CoreElement ce)
        {
            if (minhp > maxhp || maxhp > tp)
            {
                throw new Exception("核心初始化数据异常");
            }

            TotalPoint = tp;
            MaxHp      = maxhp;
            MinHp      = minhp;

            CurrentHpPoint = (MaxHp + MinHp) / 2;

            Element = ce;
            BaseCore.CoreList.Add(this);
        }
Example #3
0
        public async Task Core_Template_TemplateValidation_ReturnsErrorLst()
        {
            // Arrange
            CoreElement CElement = new CoreElement();
            //CElement.ElementList = new List<Element>();

            DateTime    startDt = DateTime.Now;
            DateTime    endDt   = DateTime.Now;
            MainElement main    = new MainElement(1, "label1", 4, "folderWithList", 1, startDt,
                                                  endDt, "Swahili", false, true, false, true, "type1", "MessageTitle",
                                                  "MessageBody", false, CElement.ElementList, "");
            // Act
            var match = await sut.TemplateValidation(main);

            // Assert
            Assert.NotNull(match);
            Assert.AreEqual(match.Count(), 0);
        }
Example #4
0
        public async Task Core_Template_TemplateCreate_CreatesTemplate()
        {
            // Arrange
            CoreElement CElement = new CoreElement();
            //CElement.ElementList = new List<Element>();

            DateTime    startDt = DateTime.Now;
            DateTime    endDt   = DateTime.Now;
            MainElement main    = new MainElement(1, "label1", 0, "folderWithList", 1, startDt,
                                                  endDt, "Swahili", false, true, true, true, "type1", "MessageTitle",
                                                  "MessageBody", false, CElement.ElementList, "");
            // Act
            var match = await sut.TemplateCreate(main);

            // Assert

            Assert.NotNull(match);
            Assert.AreEqual(match, main.Id);
        }
Example #5
0
        public async Task Core_Template_TemplateUploadData_ReturnsmainElement()
        {
            // Arrange
            CoreElement CElement = new CoreElement();
            //CElement.ElementList = new List<Element>();

            DateTime    startDt = DateTime.Now;
            DateTime    endDt   = DateTime.Now;
            MainElement main    = new MainElement(1, "label1", 0, "folderWithList", 1, startDt,
                                                  endDt, "Swahili", false, true, true, true, "type1", "MessageTitle",
                                                  "MessageBody", false, CElement.ElementList, "");
            // Act
            var match = await sut.TemplateUploadData(main);

            // Assert
            #region Assert
            Assert.NotNull(match);
            Assert.AreEqual(match.CaseType, main.CaseType);
            Assert.AreEqual(match.CheckListFolderName, main.CheckListFolderName);
            Assert.AreEqual(match.DisplayOrder, main.DisplayOrder);
            Assert.AreEqual(match.DownloadEntities, main.DownloadEntities);
            Assert.AreEqual(match.ElementList, main.ElementList);
            Assert.AreEqual(match.EndDate, main.EndDate);
            Assert.AreEqual(match.EndDateString, main.EndDateString);
            Assert.AreEqual(match.FastNavigation, main.FastNavigation);
            Assert.AreEqual(match.Id, main.Id);
            Assert.AreEqual(match.Label, main.Label);
            Assert.AreEqual(match.Language, main.Language);
            Assert.AreEqual(match.ManualSync, main.ManualSync);
            Assert.AreEqual(match.MicrotingUId, main.MicrotingUId);
            Assert.AreEqual(match.MultiApproval, main.MultiApproval);
            Assert.AreEqual(match.PushMessageBody, main.PushMessageBody);
            Assert.AreEqual(match.PushMessageTitle, main.PushMessageTitle);
            Assert.AreEqual(match.Repeated, main.Repeated);
            Assert.AreEqual(match.StartDate, main.StartDate);
            Assert.AreEqual(match.StartDateString, main.StartDateString);
            Assert.AreEqual(match, main);
            #endregion
        }
        public string PackCoreElement(CoreElement coreElement)
        {
            JObject coreElementObj = new JObject();

            //string json = JsonConvert.SerializeObject(mainElement);
            if (coreElement is MainElement)
            {
                coreElementObj = JObject.FromObject(coreElement as MainElement);
            }
            else if (coreElement is ReplyElement)
            {
                coreElementObj = JObject.FromObject(coreElement as ReplyElement);
            }
            else
            {
                coreElementObj = JObject.FromObject(coreElement);
            }
            JArray a = coreElementObj["ElementList"] as JArray;

            for (int i = 0; i < coreElement.ElementList.Count; i++)
            {
                if (coreElement.ElementList[i] is DataElement)
                {
                    a[i]["Type"] = "DataElement";
                    AddTypes(a[i]["DataItemList"] as JArray, (coreElement.ElementList[i] as DataElement).DataItemList);
                    AddTypes(a[i]["DataItemGroupList"] as JArray, (coreElement.ElementList[i] as DataElement).DataItemGroupList);
                }
                else if (coreElement.ElementList[i] is CheckListValue)
                {
                    a[i]["Type"] = "CheckListValue";
                    AddTypes(a[i]["DataItemList"] as JArray, (coreElement.ElementList[i] as CheckListValue).DataItemList);
                    AddTypes(a[i]["DataItemGroupList"] as JArray, (coreElement.ElementList[i] as CheckListValue).DataItemGroupList);
                }
            }
            return(coreElementObj.ToString());
        }
        [Test]//needs http mock done
        public async Task Core_Case_CaseCreate_CreatesCase()
        {
            // Arrange
            #region Template1
            DateTime c1_Ca = DateTime.Now;
            DateTime c1_Ua = DateTime.Now;

            check_lists cl1 = await testHelpers.CreateTemplate(c1_Ca, c1_Ua, "A", "D", "CheckList", "Template1FolderName", 1, 1);

            #endregion

            #region SubTemplate1
            check_lists cl2 = await testHelpers.CreateSubTemplate("A.1", "D.1", "CheckList", 1, 1, cl1);


            #endregion

            #region Fields
            #region field1


            fields f1 = await testHelpers.CreateField(1, "barcode", cl2, "e2f4fb", "custom", null, "", "Comment field description",
                                                      5, 1, dbContext.field_types.Where(x => x.FieldType == "picture").First(), 0, 0, 1, 0, "Comment field", 1, 55, "55", "0", 0, 0, null, 1, 0,
                                                      0, 0, "", 49);

            #endregion

            #region field2


            fields f2 = await testHelpers.CreateField(1, "barcode", cl2, "f5eafa", "custom", null, "", "showPDf Description",
                                                      45, 1, dbContext.field_types.Where(x => x.FieldType == "comment").First(), 0, 1, 0, 0,
                                                      "ShowPdf", 0, 5, "5", "0", 0, 0, null, 0, 0, 0, 0, "", 9);


            #endregion

            #region field3

            fields f3 = await testHelpers.CreateField(0, "barcode", cl2, "f0f8db", "custom", 3, "", "Number Field Description",
                                                      83, 0, dbContext.field_types.Where(x => x.FieldType == "picture").First(), 0, 0, 1, 0,
                                                      "Numberfield", 1, 8, "4865", "0", 0, 1, null, 1, 0, 0, 0, "", 1);


            #endregion

            #region field4


            fields f4 = await testHelpers.CreateField(1, "barcode", cl2, "fff6df", "custom", null, "", "date Description",
                                                      84, 0, dbContext.field_types.Where(x => x.FieldType == "picture").First(), 0, 0, 1, 0,
                                                      "Date", 1, 666, "41153", "0", 0, 1, null, 0, 1, 0, 0, "", 1);


            #endregion

            #region field5

            fields f5 = await testHelpers.CreateField(0, "barcode", cl2, "ffe4e4", "custom", null, "", "picture Description",
                                                      85, 0, dbContext.field_types.Where(x => x.FieldType == "comment").First(), 1, 0, 1, 0,
                                                      "Picture", 1, 69, "69", "1", 0, 1, null, 0, 1, 0, 0, "", 1);


            #endregion
            #endregion

            #region Worker

            workers worker = await testHelpers.CreateWorker("*****@*****.**", "Arne", "Jensen", 21);

            #endregion

            #region site
            sites site = await testHelpers.CreateSite("SiteName", 88);

            #endregion


            CoreElement CElement = new CoreElement();
            //CElement.ElementList = new List<Element>();

            MainElement main = new MainElement(1, "label1", 1, "FolderWithList",
                                               0, DateTime.Now, DateTime.Now.AddDays(2),
                                               "Swahili", false, false, false, false,
                                               "Type1", "Push", "TextForBody", false,
                                               CElement.ElementList, "Blue");
            // Act
            var match = await sut.CaseCreate(main, "", (int)site.MicrotingUid, null);

            // Assert
            Assert.NotNull(match);
        }
        private async Task <ReportModel> GetReportData(
            GenerateReportModel model,
            Item item,
            IEnumerable <ItemCase> itemCases,
            CoreElement template)
        {
            var core = await _coreHelper.GetCore();

            await using MicrotingDbContext microtingDbContext = core.DbContextHelper.GetDbContext();

            var finalModel = new ReportModel
            {
                Name        = item.Name,
                Description = item.Description,
                DateFrom    = model.DateFrom,
                DateTo      = model.DateTo
            };

            // Go through template elements and get fields and options labels
            foreach (var element in template.ElementList)
            {
                if (!(element is DataElement dataElement))
                {
                    continue;
                }

                var dataItems = dataElement.DataItemList;

                foreach (var dataItem in dataItems)
                {
                    var reportFieldModel = new ReportFormFieldModel()
                    {
                        DataItemId = dataItem.Id,
                        Label      = dataItem.Label
                    };

                    switch (dataItem)
                    {
                    case MultiSelect multiSelect:
                        // Add label for each option
                        reportFieldModel.Options = multiSelect.KeyValuePairList.Select(x => new ReportFormFieldOptionModel()
                        {
                            Key   = x.Key,
                            Label = x.Value
                        }).ToList();
                        break;

                    case SingleSelect singleSelect:
                    case CheckBox checkBox:
                    case Number number:
                    case Text text:
                        // No option label needed for these types
                        reportFieldModel.Options.Add(new ReportFormFieldOptionModel()
                        {
                            Key   = string.Empty,
                            Label = string.Empty
                        });
                        break;

                    default:
                        continue;
                    }

                    finalModel.FormFields.Add(reportFieldModel);
                }
            }

            // Get all answered cases
            TimeZoneInfo timeZoneInfo;

            try
            {
                timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Europe/Copenhagen");
            }
            catch
            {
                timeZoneInfo = TimeZoneInfo.Local;
            }

            var casesList = core.CaseReadAll(template.Id, null, null, timeZoneInfo).Result
                            .Where(c => itemCases.Select(ic => ic.MicrotingSdkCaseId).Contains(c.Id))
                            .ToList();

            // Go through all itemCases

            foreach (var ic in itemCases)
            {
                finalModel.Ids.Add($"{ic.Id} / {ic.MicrotingSdkCaseId}");
                finalModel.Dates.Add(ic.CreatedAt);

                var @case = casesList.FirstOrDefault(c => c.Id == ic.MicrotingSdkCaseId);

                // Fill with empty values, if this itemCase was not replied
                if (@case == null)
                {
                    foreach (var fieldModel in finalModel.FormFields)
                    {
                        foreach (var optionModel in fieldModel.Options)
                        {
                            optionModel.Values.Add("");
                        }
                    }

                    finalModel.DatesDoneAt.Add(null);
                    finalModel.DoneBy.Add(null);

                    continue;
                }
                else
                {
                    finalModel.DoneBy.Add(@case.WorkerName);
                    finalModel.DatesDoneAt.Add(@case.DoneAt);
                }

                // Get the reply and work with its ElementList
                var locale = await _userService.GetCurrentUserLocale();

                Language language = core.DbContextHelper.GetDbContext().Languages.Single(x => x.LanguageCode.ToLower() == locale.ToLower());

                foreach (var element in core.CaseRead((int)@case.MicrotingUId, (int)@case.CheckUIid, language).Result.ElementList)
                {
                    if (!(element is CheckListValue checkListValue))
                    {
                        continue;
                    }

                    // Get the values for each field from the reply
                    foreach (var fieldModel in finalModel.FormFields)
                    {
                        if (!(checkListValue.DataItemList.First(x => x.Id == fieldModel.DataItemId) is Field field))
                        {
                            continue;
                        }

                        // Fill values for field options
                        foreach (var optionModel in fieldModel.Options)
                        {
                            if (optionModel.Key.IsNullOrEmpty())
                            {
                                optionModel.Values.Add(field.FieldValues[0].ValueReadable);
                            }
                            else
                            {
                                var selectedKeys = field.FieldValues[0].Value.Split('|');

                                optionModel.Values.Add(
                                    selectedKeys.Contains(optionModel.Key)
                                        ? _itemsPlanningLocalizationService.GetString("Yes")
                                        : ""
                                    );
                            }
                        }
                    }
                }
            }

            return(finalModel);
        }
Example #9
0
        public void EventCaseCompleted(object sender, EventArgs args)
        {
            lock (_lockLogic)
            {
                try
                {
                    Case_Dto trigger  = (Case_Dto)sender;
                    int      siteId   = trigger.SiteUId;
                    string   caseType = trigger.CaseType;
                    string   caseUid  = trigger.CaseUId;
                    string   mUId     = trigger.MicrotingUId;
                    string   checkUId = trigger.CheckUId;


                    //--------------------
                    Random rdn = new Random();

                    #region create offering
                    if (caseType == "Step one")
                    {
                        CoreElement reply = core.CaseRead(mUId, checkUId);

                        CheckListValue replyDataE = (CheckListValue)reply.ElementList[0];
                        FieldValue     answer     = (FieldValue)replyDataE.DataItemList[0];

                        MainElement mainElement = core.TemplateRead(step2tId);
                        DataElement dataE       = (DataElement)mainElement.ElementList[0];
                        None        none        = (None)dataE.DataItemList[0];


                        none.Label                  = "Container with stat:" + answer.Value + " is ready for collection";
                        none.Description            = new CDataValue();
                        none.Description.InderValue = DateTime.Now.ToShortDateString() + "/" + DateTime.Now.ToLongTimeString();


                        foreach (int siteIdTemp in siteIdsSA)
                        {
                            core.CaseCreate(mainElement, "", siteIdTemp);
                        }
                    }
                    #endregion

                    #region create replies (winner/others)
                    if (caseType == "Step two")
                    {
                        #region is the first?
                        bool isFirst = false;
                        int  found   = 0;
                        try
                        {
                            List <Case_Dto> lst = core.CaseLookupCaseUId(caseUid);

                            foreach (var item in lst)
                            {
                                if (item.Stat == "Completed")
                                {
                                    found++;
                                }
                            }

                            if (found == 1)
                            {
                                isFirst = true;
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("isFirst failed", ex);
                        }
                        #endregion

                        if (isFirst)
                        {
                            #region send win eForm
                            CoreElement reply = core.CaseRead(mUId, checkUId);

                            DataElement replyDataE = (DataElement)reply.ElementList[0];
                            FieldValue  answer     = (FieldValue)replyDataE.DataItemList[0];

                            MainElement mainElement = core.TemplateRead(step3WtId);
                            DataElement dataE       = (DataElement)mainElement.ElementList[0];
                            Date        date        = (Date)dataE.DataItemList[0];

                            dataE.Description            = new CDataValue();
                            dataE.Description.InderValue = DateTime.Now.ToShortDateString() + "/" + DateTime.Now.ToLongTimeString();

                            date.MinValue     = DateTime.Now;
                            date.MaxValue     = DateTime.Now.AddDays(1);
                            date.DefaultValue = DateTime.Now.AddMinutes(1).ToString("u");


                            core.CaseCreate(mainElement, "", siteId);
                            #endregion
                        }
                        else
                        {
                            #region send loss eForm
                            CoreElement reply = core.CaseRead(mUId, checkUId);

                            DataElement replyDataE = (DataElement)reply.ElementList[0];
                            FieldValue  answer     = (FieldValue)replyDataE.DataItemList[0];

                            MainElement mainElement = core.TemplateRead(step3LtId);
                            DataElement dataE       = (DataElement)mainElement.ElementList[0];
                            None        none        = (None)dataE.DataItemList[0];

                            none.Description            = new CDataValue();
                            none.Description.InderValue = "Collection missed at:" + DateTime.Now.ToShortDateString() + "/" + DateTime.Now.ToLongTimeString();


                            core.CaseCreate(mainElement, "", siteId);
                            #endregion
                        }
                    }
                    #endregion

                    #region final step
                    if (caseType == "Step three")
                    {
                        CoreElement reply = core.CaseRead(mUId, checkUId);

                        DataElement replyDataE = (DataElement)reply.ElementList[0];
                        FieldValue  answer     = (FieldValue)replyDataE.DataItemList[0];

                        #region is the winner?
                        bool isWinner = false;
                        try
                        {
                            if (replyDataE.Label == "Won - Container collection")
                            {
                                isWinner = true;
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("isWinner failed", ex);
                        }
                        #endregion

                        if (isWinner)
                        {
                            MainElement mainElement = core.TemplateRead(step4tId);
                            DataElement dataE       = (DataElement)mainElement.ElementList[0];
                            None        none        = (None)dataE.DataItemList[0];

                            none.Label = "Container collect at:" + answer.Value;

                            foreach (int siteIdTemp in siteIdsDW)
                            {
                                core.CaseCreate(mainElement, "", siteIdTemp);
                            }
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    EventMessage(ex.ToString(), EventArgs.Empty);
                }
            }
        }