Exemple #1
0
        public SpResult CopyTempSalesToSales(Guid sessionId)
        {
            if (sessionId == Guid.Empty)
            {
                return new SpResult()
                       {
                           ErrorNumber = -1, ErrorMessage = "sessionId cannot be empty."
                       }
            }
            ;

            SqlParameter sessionIdParam = new SqlParameter("@SessionId", System.Data.SqlDbType.UniqueIdentifier);

            sessionIdParam.Value = sessionId;
            SpResult res = _context.Database.SqlQuery <SpResult>("exec Sales.dbo.CopyTempSales @SessionId", sessionIdParam).FirstOrDefault();

            return(res);
        }
Exemple #2
0
        public static ReadResult ReadToDatabase(IOperatorParamsFactory paramFactory)
        {
            ReadResult res = new ReadResult()
            {
                HasError  = false,
                IsIOError = false,
                Message   = ""
            };

            using (var unit = paramFactory.CreateUnit())
            {
                Guid sessionId = Guid.NewGuid();

                try
                {
                    using (var reader = paramFactory.CreateReader())
                    {
                        int         i = 0;
                        TempSaleDTO sale;

                        while ((sale = reader.ReadNext()) != null)
                        {
                            sale.SessionId = sessionId;
                            unit.TempSales.Add(sale);
                            i++;
                            if (i >= paramFactory.RecordsPerPass)
                            {
                                unit.SaveChanges();
                            }
                        }

                        unit.SaveChanges();
                    }
                }
                catch (LineParseException lineEx)
                {
                    res.Message = lineEx.Message + Environment.NewLine + "Line:  " + lineEx.Line + Environment.NewLine
                                  + "Reason: " + lineEx.InnerException.Message;
                    res.HasError = true;
                }
                catch (Exception e)
                {
                    res.Message   = e.Message;
                    res.HasError  = true;
                    res.IsIOError = true;
                }

                if (!res.HasError)
                {
                    try
                    {
                        SpResult spRes = unit.CopyTempSalesToSales(sessionId);
                        if (spRes.ErrorNumber != 0)
                        {
                            res.HasError = true;
                            res.Message  = "Data not copied for source " + paramFactory.Source + " ."
                                           + Environment.NewLine + spRes.ErrorMessage;
                        }
                    }
                    catch (Exception e)
                    {
                        res.HasError = true;
                        res.Message  = "Data not copied for source " + paramFactory.Source + ". "
                                       + Environment.NewLine + e.Message;
                    }
                }

                if (res.HasError)
                {
                    unit.DeleteTempSales(sessionId);
                }
            }

            return(res);
        }
        public static SaveMap Publish(SaveMap wgSaveMap, IEnumerable <int> svrWgIds, int loggedInPersonId,
                                      EFContextProvider <EcatContext> ctxProvider)
        {
            var infos = wgSaveMap.Single(map => map.Key == tWg).Value;

            var pubWgs = GetPublishingWgData(svrWgIds, ctxProvider);

            if (pubWgs == null)
            {
                var errorMessage = "The database did not return a publishable workgroup.";
                var error        = infos.Select(
                    info => new EFEntityError(info, "Publication Error", errorMessage, "MpSpStatus"));
                throw new EntityErrorsException(error);
            }

            if (pubWgs.Count() < svrWgIds.Count())
            {
                var missingGrps = pubWgs.Where(wg => {
                    if (svrWgIds.Contains(wg.Id))
                    {
                        return(false);
                    }
                    return(true);
                });

                var errorMessage = "Some groups were found to be unpublishable";
                var error        = infos.Select(
                    info => new EFEntityError(info, "Publication Error", errorMessage, "MpSpStatus"));
                throw new EntityErrorsException(error);
            }

            foreach (var wg in pubWgs)
            {
                var stratScoreInterval = 1m / wg.PubWgMembers.Count();
                stratScoreInterval = decimal.Round(stratScoreInterval, 4);
                var stratKeeper   = new List <PubWgMember>();
                var countOfGrp    = wg.PubWgMembers.Count();
                var totalStratPos = 0;
                for (var i = 1; i <= countOfGrp; i++)
                {
                    totalStratPos += i;
                }

                foreach (var me in wg.PubWgMembers)
                {
                    var stratSum = me.PubStratResponses.Sum(strat => strat.StratPosition);
                    stratSum += me.SelfStratPosition;

                    if (me.PeersDidNotAssessMe.Any() || me.PeersIdidNotAssess.Any() || me.PeersDidNotStratMe.Any() ||
                        me.PeersIdidNotStrat.Any() || me.FacStratPosition == 0 || stratSum != totalStratPos)
                    {
                        var errorMessage =
                            $"There was a problem validating necessary information . Problem Flags Are: [Them => Me] NA: !{me.PeersDidNotAssessMe.Count()}, NS: {me.PeersDidNotStratMe.Any()} | [Me => Them] NA: {me.PeersIdidNotAssess.Count()}, NS: {me.PeersIdidNotStrat.Any()} | FacStrat: {me.FacStratPosition}";

                        var error = infos.Select(
                            info => new EFEntityError(info, "Publication Error", errorMessage, "MpSpStatus"));
                        throw new EntityErrorsException(error);
                    }
                    var peerCount   = countOfGrp - 1;
                    var resultScore = ((decimal)me.SpResponseTotalScore / (me.CountSpResponses * 6)) * 100;
                    var spResult    = new SpResult
                    {
                        CourseId             = wg.CourseId,
                        WorkGroupId          = wg.Id,
                        StudentId            = me.StudentId,
                        AssignedInstrumentId = wg.InstrumentId,
                        CompositeScore       = (int)resultScore,
                        BreakOut             = new SpResultBreakOut
                        {
                            NotDisplay = me.BreakOut.NotDisplayed,
                            IneffA     = me.BreakOut.IneffA,
                            IneffU     = me.BreakOut.IneffU,
                            EffA       = me.BreakOut.EffA,
                            EffU       = me.BreakOut.EffU,
                            HighEffA   = me.BreakOut.HighEffA,
                            HighEffU   = me.BreakOut.HighEffU
                        },
                        MpAssessResult = ConvertScoreToOutcome((int)resultScore),
                    };

                    var resultInfo = ctxProvider.CreateEntityInfo(spResult,
                                                                  me.HasSpResult ? EntityState.Modified : EntityState.Added);

                    resultInfo.ForceUpdate = me.HasSpResult;

                    if (!wgSaveMap.ContainsKey(tSpResult))
                    {
                        wgSaveMap[tSpResult] = new List <EntityInfo> {
                            resultInfo
                        };
                    }
                    else
                    {
                        wgSaveMap[tSpResult].Add(resultInfo);
                    }

                    var stratResult = new StratResult
                    {
                        CourseId       = wg.CourseId,
                        StudentId      = me.StudentId,
                        WorkGroupId    = wg.Id,
                        ModifiedById   = loggedInPersonId,
                        ModifiedDate   = DateTime.Now,
                        StratCummScore = decimal.Round(me.StratTable.Select(strat =>
                        {
                            var multipler = 1 - (strat.Position - 1) * stratScoreInterval;
                            return(multipler * strat.Count);
                        }).Sum(), 4)
                    };

                    me.StratResult = stratResult;
                    stratKeeper.Add(me);
                }

                var cummScores = new List <decimal>();
                var oi         = 1;

                foreach (var strat in stratKeeper.OrderByDescending(sk => sk.StratResult.StratCummScore))
                {
                    if (cummScores.Contains(strat.StratResult.StratCummScore) || !cummScores.Any())
                    {
                        strat.StratResult.OriginalStratPosition = oi;
                        cummScores.Add(strat.StratResult.StratCummScore);
                        continue;
                    }
                    ;
                    cummScores.Add(strat.StratResult.StratCummScore);

                    oi += 1;
                    strat.StratResult.OriginalStratPosition = oi;
                }

                var fi          = 0;
                var spInterval  = wg.WgSpTopStrat / wg.StratDivisor;
                var facInterval = wg.WgFacTopStrat / wg.StratDivisor;


                foreach (
                    var gm in
                    stratKeeper.OrderByDescending(sk => sk.StratResult.StratCummScore)
                    .ThenBy(sk => sk.FacStratPosition))
                {
                    var studAwardedPoints = Math.Max(0, wg.WgSpTopStrat - spInterval * fi);
                    var instrAwardPoints  = Math.Max(0, wg.WgFacTopStrat - (facInterval * (gm.FacStratPosition - 1)));

                    //var totalAward = studAwardedPoints + instrAwardPoints;

                    gm.StratResult.StudStratAwardedScore = studAwardedPoints;
                    gm.StratResult.FacStratAwardedScore  = instrAwardPoints;
                    gm.StratResult.FinalStratPosition    = fi + 1;

                    var info = ctxProvider.CreateEntityInfo(gm.StratResult,
                                                            gm.HasStratResult ? EntityState.Modified : EntityState.Added);
                    info.ForceUpdate = gm.HasStratResult;

                    if (!wgSaveMap.ContainsKey(tStratResult))
                    {
                        wgSaveMap[tStratResult] = new List <EntityInfo> {
                            info
                        };
                    }
                    else
                    {
                        wgSaveMap[tStratResult].Add(info);
                    }

                    fi += 1;
                }
            }
            return(wgSaveMap);
        }