public async Task <List <Guid> > OrderByLongestImpression(
            IEnumerable <Guid> cards,
            int historyDepth,
            CardSide side)
        {
            using (var context = new MainDatabaseContext())
            {
                var accountedForImpressions = await context.CardImpressions
                                              .Where(x => cards.Any(y => y == x.CardId))
                                              .Where(x => x.TestedSide == side)
                                              .GroupBy(x => x.CardId)
                                              .ToDictionaryAsync(
                    x => x.Key,
                    x => x.OrderByDescending(y => y.Date).Take(historyDepth));

                var impressionsOrderedBySpentMedian = accountedForImpressions
                                                      .OrderByDescending(x => x.Value.Select(y => side == CardSide.Front
                        ? y.FrontMillisecondsSpent
                        : y.BackMillisecondsSpent)
                                                                         .Median())
                                                      .Select(x => x.Key);

                var newCards = cards.Except(impressionsOrderedBySpentMedian);
                return(newCards.Union(impressionsOrderedBySpentMedian).ToList());
            }
        }
Example #2
0
        public CObstetricParalysisCard(int hospitalizationId, int visitId)
        {
            HospitalizationId = hospitalizationId;
            VisitId           = visitId;
            SideOfCard        = CardSide.Left;

            GlobalAbductionPicturesSelection    = new bool[5];
            GlobalAbductionPicturesSelection[0] = true;

            GlobalExternalRotationPicturesSelection    = new bool[5];
            GlobalExternalRotationPicturesSelection[0] = true;

            HandToNeckPicturesSelection    = new bool[5];
            HandToNeckPicturesSelection[0] = true;

            HandToSpinePicturesSelection    = new bool[5];
            HandToSpinePicturesSelection[0] = true;

            HandToMouthPicturesSelection    = new bool[5];
            HandToMouthPicturesSelection[0] = true;

            ComboBoxes = new string[7];
            for (int i = 0; i < ComboBoxes.Length; i++)
            {
                ComboBoxes[i] = "да";
            }
        }
Example #3
0
 public NextCardToTest(
     Guid cardId,
     CardSide sideToTest,
     Guid collectionId)
 {
     this.CardSideToTest = sideToTest;
     this.CardId         = cardId;
     this.CollectionId   = collectionId;
 }
Example #4
0
 private GraphicsInfo BuildGraphicsInfo(ZebraCardImageI zebraCardImage, CardSide side, PrintType printType)
 {
     return(new GraphicsInfo {
         GraphicData = zebraCardImage ?? null,
         GraphicType = zebraCardImage != null ? GraphicType.BMP : GraphicType.NA,
         Side = side,
         PrintType = printType
     });
 }
Example #5
0
 public CCard(CCard cardInfo)
 {
     HospitalizationId = cardInfo.HospitalizationId;
     VisitId           = cardInfo.VisitId;
     CurrentCardType   = cardInfo.CurrentCardType;
     CurrentSideOfCard = cardInfo.CurrentSideOfCard;
     Picture           = new Bitmap(cardInfo.Picture);
     NotInDatabase     = cardInfo.NotInDatabase;
 }
Example #6
0
        /// <summary>
        /// Получить карту обследования по переданному id госпитализации,
        /// id консультации, типа карты и стороны
        /// </summary>
        /// <param name="hospitalizationId">id госпитализации</param>
        /// <param name="visitId">id консультации</param>
        /// <param name="cardSide">Сторона карты</param>
        /// <param name="cardType">Тип карты</param>
        /// <returns></returns>
        public CCard GetByGeneralData(
            int hospitalizationId, int visitId, CardSide cardSide, CardType cardType)
        {
            int n = GetIndexFromList(hospitalizationId, visitId, cardSide, cardType);

            if (n == _cardList.Count)
            {
                var newCardInfo = new CCard
                {
                    HospitalizationId = hospitalizationId,
                    VisitId           = visitId,
                    CurrentSideOfCard = cardSide,
                    CurrentCardType   = cardType,
                    NotInDatabase     = true
                };

                Bitmap packedPicture;
                switch (cardType)
                {
                case CardType.HandCutaneousNerves:
                    packedPicture = Properties.Resources.CardHandCutaneousNerves;
                    break;

                case CardType.HandDermatome:
                    packedPicture = Properties.Resources.CardHandDermatome;
                    break;

                case CardType.LegCutaneousNerves:
                    packedPicture = Properties.Resources.CardLegCutaneousNerves;
                    break;

                case CardType.LegDermatome:
                    packedPicture = Properties.Resources.CardLegDermatome;
                    break;

                case CardType.PamplegiaCard:
                    packedPicture = Properties.Resources.CardPamplegiaCard;
                    break;

                case CardType.SacriplexCard:
                    packedPicture = Properties.Resources.CardSacriplexCard;
                    break;

                default:
                    throw new ArgumentException(cardType + " неизвестный тип карты обследования");
                }

                newCardInfo.Picture = new Bitmap(packedPicture);
                _cardList.Add(newCardInfo);
                return(new CCard(newCardInfo));
            }

            return(new CCard(_cardList[n]));
        }
        public async Task <NextCardToTest> GetNextFlashcard()
        {
            CardSide cardSideToTest = this.GetCardSideToTest();

            var orderByUnseenTime = await this.impressionStorageService.OrderByLongestUnseen(this.Cards.SelectMany(x => x.Value));

            var orderByImpressionLength = await this.impressionStorageService.OrderByLongestImpression(this.Cards.SelectMany(x => x.Value), 3, cardSideToTest);

            var orderByUnsuccess = await this.impressionStorageService.OrderByMostUnsuccessful(this.Cards.SelectMany(x => x.Value), 5, cardSideToTest);

            var rankings = this.Cards.SelectMany(x => x.Value).Select(card =>
            {
                int unseenOrder           = orderByUnseenTime.IndexOf(card);
                int impressionLengthOrder = orderByImpressionLength.IndexOf(card);
                int unsuccessOrder        = orderByUnsuccess.IndexOf(card);

                int rank;

                if (this.LastCardId == card)
                {
                    // Must not present the same card twice.
                    rank = System.Int32.MaxValue;
                }
                else
                {
                    rank =
                        unsuccessOrder * 55 +
                        impressionLengthOrder * 10 +
                        unseenOrder * 20 +
                        random.Next(this.Cards.Count - 1) * 15;
                }

                return(new
                {
                    CardId = card,
                    Rank = rank
                });
            })
                           .OrderBy(x => x.Rank)
                           .ToList();

            if (rankings.Count == 0)
            {
                throw new InvalidOperationException();
            }

            var cardId = rankings.First().CardId;

            this.LastCardId = cardId;

            return(new NextCardToTest(cardId, cardSideToTest, this.Cards.First(x => x.Value.Any(y => y == cardId)).Key));
        }
Example #8
0
 public CObstetricParalysisCard(CObstetricParalysisCard obstetricParalysisCard)
 {
     HospitalizationId = obstetricParalysisCard.HospitalizationId;
     VisitId           = obstetricParalysisCard.VisitId;
     SideOfCard        = obstetricParalysisCard.SideOfCard;
     GlobalAbductionPicturesSelection        = CConvertEngine.CopyArray(obstetricParalysisCard.GlobalAbductionPicturesSelection);
     GlobalExternalRotationPicturesSelection = CConvertEngine.CopyArray(obstetricParalysisCard.GlobalExternalRotationPicturesSelection);
     HandToNeckPicturesSelection             = CConvertEngine.CopyArray(obstetricParalysisCard.HandToNeckPicturesSelection);
     HandToSpinePicturesSelection            = CConvertEngine.CopyArray(obstetricParalysisCard.HandToSpinePicturesSelection);
     HandToMouthPicturesSelection            = CConvertEngine.CopyArray(obstetricParalysisCard.HandToMouthPicturesSelection);
     ComboBoxes    = CConvertEngine.CopyArray(obstetricParalysisCard.ComboBoxes);
     NotInDatabase = obstetricParalysisCard.NotInDatabase;
 }
Example #9
0
        private GraphicsInfo BuildGraphicsInfo(ZebraCardImageI zebraCardImage, CardSide side, PrintType printType)
        {
            GraphicsInfo graphicsInfo = new GraphicsInfo {
                Side        = side,
                PrintType   = printType,
                GraphicType = zebraCardImage != null ? GraphicType.BMP : GraphicType.NA
            };

            if (zebraCardImage != null)
            {
                graphicsInfo.GraphicData = zebraCardImage;
            }
            return(graphicsInfo);
        }
 private static GraphicsInfo AddImage(CardSide side, PrintType printType, int xOffset, int yOffset, int fillColor, ZebraCardImageI zebraCardImage)
 {
     return(new GraphicsInfo
     {
         Side = side,
         PrintType = printType,
         GraphicType = zebraCardImage != null ? GraphicType.BMP : GraphicType.NA,
         XOffset = xOffset,
         YOffset = yOffset,
         FillColor = fillColor,
         Opacity = 0,
         Overprint = false,
         GraphicData = zebraCardImage ?? null
     });
 }
Example #11
0
        /// <summary>
        /// Получить индекс карты обследования в списке для указанного id госпитализации,
        /// id консультации, типа карты и стороны
        /// </summary>
        /// <param name="hospitalizationId">id госпитализации</param>
        /// <param name="visitId">id консультации</param>
        /// <param name="cardSide">Сторона карты</param>
        /// <param name="cardType">Тип карты</param>
        /// <returns></returns>
        private int GetIndexFromList(
            int hospitalizationId, int visitId, CardSide cardSide, CardType cardType)
        {
            int n = 0;

            while (n < _cardList.Count &&
                   (_cardList[n].HospitalizationId != hospitalizationId ||
                    _cardList[n].VisitId != visitId ||
                    _cardList[n].CurrentSideOfCard != cardSide ||
                    _cardList[n].CurrentCardType != cardType))
            {
                n++;
            }

            return(n);
        }
 public CBrachialPlexusCard(int hospitalizationId, int visitId)
 {
     HospitalizationId    = hospitalizationId;
     VisitId              = visitId;
     SideOfCard           = CardSide.Left;
     VascularStatus       = "N";
     Diaphragm            = "N";
     HornersSyndrome      = "нет";
     TinelsSymptom        = "N";
     IsMyelographyEnabled = false;
     Myelography          = "N";
     MyelographyType      = "КТ";
     IsEMNGEnabled        = false;
     EMNG            = "N";
     MyelographyDate = DateTime.Now;
     EMNGDate        = DateTime.Now;
 }
Example #13
0
    public Card(CardRank rank, CardSuit suit)
    {
        if (rank < CardRank.Two || rank > CardRank.Ace)
        {
            throw new ArgumentNullException("Карта не может быть меньшь 2 и больше Туза");
        }
        _rank = rank;

        //Релизовать через оператор сравнения с перечислением CardSuit
        if (!"♠♣♦♥".Contains(dicCardSuit[(CardSuit)suit]))
        {
            throw new ArgumentNullException("Данная масть не существует");
        }
        _suit = suit;

        _side = CardSide.Back;
        _name = dicCardRank[rank] + dicCardSuit[suit];
    }
 public CBrachialPlexusCard(CBrachialPlexusCard brachialPlexusCardInfo)
 {
     HospitalizationId = brachialPlexusCardInfo.HospitalizationId;
     VisitId           = brachialPlexusCardInfo.VisitId;
     SideOfCard        = brachialPlexusCardInfo.SideOfCard;
     Picture           = new Bitmap(brachialPlexusCardInfo.Picture);
     Diaphragm         = brachialPlexusCardInfo.Diaphragm;
     EMNG                 = brachialPlexusCardInfo.EMNG;
     EMNGDate             = CConvertEngine.CopyDateTime(brachialPlexusCardInfo.EMNGDate);
     HornersSyndrome      = brachialPlexusCardInfo.HornersSyndrome;
     IsEMNGEnabled        = brachialPlexusCardInfo.IsEMNGEnabled;
     IsMyelographyEnabled = brachialPlexusCardInfo.IsMyelographyEnabled;
     Myelography          = brachialPlexusCardInfo.Myelography;
     MyelographyDate      = CConvertEngine.CopyDateTime(brachialPlexusCardInfo.MyelographyDate);
     MyelographyType      = brachialPlexusCardInfo.MyelographyType;
     TinelsSymptom        = brachialPlexusCardInfo.TinelsSymptom;
     VascularStatus       = brachialPlexusCardInfo.VascularStatus;
     NotInDatabase        = brachialPlexusCardInfo.NotInDatabase;
 }
        private CardSide GetCardSideToTest()
        {
            CardSide cardSideToTest = CardSide.Front;

            switch (this.sideToTest)
            {
            case CardSideToTest.Both:
                cardSideToTest = this.random.Next(100) > 50
                        ? CardSide.Back
                        : CardSide.Front;
                break;

            case CardSideToTest.Front:
                cardSideToTest = CardSide.Front;
                break;

            case CardSideToTest.Back:
                cardSideToTest = CardSide.Back;
                break;
            }

            return(cardSideToTest);
        }
Example #16
0
    public Quaternion GetNextCardRotation(CardSide side)
    {
        GameObject tmpObj = new GameObject("tmpObj");

        if(IsPerspective)
        {
            if(side == CardSide.Front)
                tmpObj.transform.up = transform.forward;
            else
                tmpObj.transform.LookAt(tmpObj.transform.position + transform.up, transform.forward);
        }
        else
        {
            if(side == CardSide.Front)
                tmpObj.transform.up = GameGui.Instance.GameCamera.transform.up;
            else
                tmpObj.transform.up = -GameGui.Instance.GameCamera.transform.up;
        }

        Quaternion result = tmpObj.transform.rotation;
        Destroy(tmpObj);
        return result;
    }
        public async Task <List <Guid> > OrderByMostUnsuccessful(
            IEnumerable <Guid> cardIds,
            int historyDepth,
            CardSide side)
        {
            using (var context = new MainDatabaseContext())
            {
                var accountedForImpressions = await context.CardImpressions
                                              .Where(x => cardIds.Any(y => y == x.CardId))
                                              .Where(x => x.TestedSide == side)
                                              .GroupBy(x => x.CardId)
                                              .ToDictionaryAsync(
                    x => x.Key,
                    x => x.OrderByDescending(y => y.Date).Take(historyDepth));

                var impressionsOrderedBySuccessAverage = accountedForImpressions
                                                         .OrderBy(x => x.Value.Select(y => y.GuessedCorrectly ? 10 : 0)
                                                                  .Average())
                                                         .Select(x => x.Key);

                var newCards = cardIds.Except(impressionsOrderedBySuccessAverage);
                return(newCards.Union(impressionsOrderedBySuccessAverage).ToList());
            }
        }
 public uint GetSide(CardSide side)
 {
     return((uint)typeof(Card).GetRuntimeProperty(side.ToString()).GetValue(this));
 }
Example #19
0
 public void ShowSide(CardSide side)
 {
     spriteRenderer.sprite = side == CardSide.Front ? sprite : GameManager.Instance.cardBack;
     CurrentlyShowingSide  = side;
 }
Example #20
0
 public void FlipSide()
 {
     _side = CardSide.Face;
 }
Example #21
0
        private List <GraphicsInfo> CreateGraphicsInfo(ZebraGraphics graphics, Dictionary <PrintType, string> imageInfo, CardSide side)
        {
            List <GraphicsInfo> graphicsInfoList = new List <GraphicsInfo>();

            foreach (PrintType type in imageInfo.Keys)
            {
                graphics.Initialize(0, 0, OrientationType.Landscape, type, -1);

                if (type == PrintType.Overlay && imageInfo[type] == null)
                {
                    GraphicsInfo graphicsInfo = new GraphicsInfo {
                        Side        = side,
                        PrintType   = type,
                        GraphicType = GraphicType.NA
                    };
                    graphicsInfoList.Add(graphicsInfo);
                }
                else
                {
                    byte[] imageData = File.ReadAllBytes(imageInfo[type]);
                    graphics.DrawImage(imageData, 0, 0, 0, 0, RotationType.RotateNoneFlipNone);
                    graphicsInfoList.Add(BuildGraphicsInfo(graphics.CreateImage(), side, type));
                }

                graphics.Clear();
            }

            return(graphicsInfoList);
        }