コード例 #1
0
    /// <summary>
    /// Agrega un nuevo modulo justo dsp del ultimo que sale
    /// </summary>
    /// <param name="lastModule"></param>
    private void AddNewTrackFromLastModule(TrackModule lastModule)
    {
        MeshRenderer lastModuleRender = lastModule.GetComponentInChildren <MeshRenderer>();
        var          newTrackModule   = TrackPool.Instance.Get(GetRandomIndexToPickTrackModule());

        newTrackModule.transform.position = new Vector3(0, lastModuleRender.bounds.max.y, lastModuleRender.bounds.max.z - 0.1f);
    }
コード例 #2
0
    private void OnTriggerExit(Collider other)
    {
        TrackModule lastModule = other.transform.parent.GetComponent <TrackModule>();

        Debug.Log("Se fue el ultimo trackmodule");
        if (lastModule != null && lastModule.gameObject.layer == 10)
        {
            OnLastTrackModule(lastModule);
        }
    }
コード例 #3
0
    private void OnTriggerEnter(Collider other)
    {
        TrackModule lastModule = other.transform.parent.GetComponent <TrackModule>();

        if (lastModule != null)
        {
            Debug.Log("Hay que devolver el modulo al pool");
            OnReturnModuleToPool(lastModule);
        }
    }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: dingfeng/SmartPlayer
        /// <summary>
        /// 流程的一个壳,用来在Thread中运行并测试
        /// </summary>
        private void Go()
        {
            var trackModule = new TrackModule(this);

            //trackModule.NaivePipeline();
            try
            {
                trackModule.FacePipeLine();
            } catch (Exception e)
            {
                // handle exception
            }
            //trackModule.HandPipeLine();
        }
コード例 #5
0
            public async Task <Result <ModuleItem> > Handle(Contract request, CancellationToken cancellationToken)
            {
                Track       track = null;
                TrackModule moduleConfiguration = null;
                ModuleItem  module          = null;
                decimal?    evaluationGrade = 0;

                if (request.UserRole == "Secretary" || request.UserRole == "Recruiter")
                {
                    return(Result.Fail <ModuleItem>("Acesso Negado"));
                }

                if (String.IsNullOrEmpty(request.Id))
                {
                    return(Result.Fail <ModuleItem>("Id do Módulo não Informado"));
                }

                var      moduleId = ObjectId.Parse(request.Id);
                ObjectId userId   = ObjectId.Parse(request.UserId);

                var qry = await _db.Database
                          .GetCollection <ModuleItem>("Modules")
                          .FindAsync(x => x.Id == moduleId, cancellationToken: cancellationToken);

                module = await qry.FirstOrDefaultAsync(cancellationToken : cancellationToken);

                if (module == null)
                {
                    return(Result.Fail <ModuleItem>("Módulo não existe"));
                }

                if (request.UserRole == "Student" || request.UserRole == "Admin" && !module.Published)
                {
                    bool isInstructor = module.InstructorId.HasValue && module.InstructorId.Value == userId;

                    if (!isInstructor)
                    {
                        User user = await GetUserById(userId, cancellationToken);

                        var RecommendedModules = new List <ObjectId>();
                        if (user.ModulesInfo != null)
                        {
                            RecommendedModules = user.ModulesInfo.Select(m => m.Id).ToList();
                        }

                        if (!RecommendedModules.Contains(module.Id))
                        {
                            List <ObjectId> trackIds = new List <ObjectId>();

                            var progressTracksId = await _db.UserTrackProgressCollection
                                                   .AsQueryable()
                                                   .Where(x => x.UserId == userId)
                                                   .Select(x => x.TrackId)
                                                   .ToListAsync(cancellationToken);

                            trackIds.AddRange(progressTracksId);

                            if (user.TracksInfo != null)
                            {
                                trackIds.AddRange(user.TracksInfo.Select(t => t.Id).ToList());
                            }

                            trackIds = trackIds.Distinct().ToList();

                            bool hasAccessByTracks = await CheckModuleInTracks(trackIds, moduleId, cancellationToken);

                            if (hasAccessByTracks)
                            {
                                track = await GetTrackFromModule(trackIds, moduleId, cancellationToken);

                                moduleConfiguration = track.ModulesConfiguration.Where(x => x.ModuleId == moduleId).FirstOrDefault();
                            }
                            else
                            {
                                return(Result.Fail <ModuleItem>("Acesso Negado"));
                            }
                        }
                    }
                }

                foreach (var req in module.Requirements)
                {
                    req.Title = (await(await _db
                                       .Database
                                       .GetCollection <ModuleNameItem>("Modules")
                                       .FindAsync(x => x.Id == req.ModuleId, cancellationToken: cancellationToken))
                                 .FirstOrDefaultAsync(cancellationToken: cancellationToken)).Title;
                    req.Level            = req.RequirementValue.Level;
                    req.Percentage       = req.RequirementValue.Percentage;
                    req.RequirementValue = null;
                }

                module = await CheckQuestions(module, cancellationToken);

                module = await CheckTutors(module, cancellationToken);

                module = await CheckExtraInstructors(module, cancellationToken);

                //### Enviar tb a lista de trilhas e uma variável para usar data de corte ou não
                var moduleGrade = Module.GetModulesGrades(_db, new List <ObjectId> {
                    userId
                }, new List <ObjectId> {
                    moduleId
                }, moduleConfiguration == null ? null : moduleConfiguration.CutOffDate).Data.FirstOrDefault();

                if (moduleGrade != null && moduleGrade.UserGrades != null && moduleGrade.UserGrades.Count > 0)
                {
                    var userModuleGrade = moduleGrade.UserGrades.First();
                    module.Grade = userModuleGrade.Grade * 10;
                }

                var moduleEvaluationTestsIds = await _db.ValuationTestCollection
                                               .AsQueryable()
                                               .Where(x =>
                                                      x.CreatedBy == ObjectId.Parse(request.UserId) &&
                                                      x.TestModules.Any(y => y.Id == moduleId)
                                                      )
                                               .Select(x => x.Id)
                                               .ToListAsync();

                if (moduleEvaluationTestsIds.Count() > 0 && moduleConfiguration != null)
                {
                    if (track != null)
                    {
                        module.ModuleConfiguration = moduleConfiguration;
                    }

                    var moduleEvaluationTests = await _db.ValuationTestResponseCollection
                                                .AsQueryable()
                                                .Where(x =>
                                                       moduleEvaluationTestsIds.Contains(x.TestId)
                                                       ).ToListAsync();

                    for (int i = 0; i < moduleEvaluationTests.Count(); i++)
                    {
                        for (int k = 0; k < moduleEvaluationTests[i].Answers.Count; k++)
                        {
                            evaluationGrade += moduleEvaluationTests[i].Answers[k].Grade;
                        }
                    }

                    evaluationGrade = evaluationGrade / moduleEvaluationTestsIds.Count();

                    //Média aritmética se peso do BDQ e Prova forem zero
                    if (moduleConfiguration.BDQWeight == 0 && moduleConfiguration.EvaluationWeight == 0)
                    {
                        module.Grade = (module.Grade + evaluationGrade) / 2;
                    }
                    else
                    {
                        var BDQDividerWeight         = moduleConfiguration.BDQWeight == 0 ? 0 : moduleConfiguration.BDQWeight;
                        var BDQDividendWeight        = moduleConfiguration.BDQWeight == 0 ? 1 : moduleConfiguration.BDQWeight;
                        var EvaluationDividerWeight  = moduleConfiguration.EvaluationWeight == 0 ? 0 : moduleConfiguration.EvaluationWeight;
                        var EvaluationDividendWeight = moduleConfiguration.EvaluationWeight == 0 ? 1 : moduleConfiguration.EvaluationWeight;

                        module.Grade = (module.Grade * BDQDividendWeight + evaluationGrade * EvaluationDividendWeight)
                                       / (BDQDividerWeight + EvaluationDividerWeight);
                    }
                }

                return(Result.Ok(module));
            }
コード例 #6
0
            public async Task <Result <Contract> > Handle(Contract request, CancellationToken cancellationToken)
            {
                if (request.UserRole != "Admin" && request.UserRole != "Author")
                {
                    return(Result.Fail <Contract>("Acesso Negado"));
                }

                var mConfigResult = request.ModulesConfiguration.Select(x =>
                                                                        TrackModule.Create(
                                                                            ObjectId.Parse(x.ModuleId), x.Title,
                                                                            x.Level, x.Percentage, x.Order,
                                                                            x.Weight, x.CutOffDate, x.BDQWeight, x.EvaluationWeight,
                                                                            x.AlwaysAvailable, x.OpenDate, x.ValuationDate
                                                                            )
                                                                        ).ToArray();

                var mCombinedResult = Result.Combine(mConfigResult);

                if (mCombinedResult.IsFailure)
                {
                    return(Result.Fail <Contract>(mCombinedResult.Error));
                }

                if (request.EventsConfiguration == null)
                {
                    request.EventsConfiguration = new List <ContractTrackEvent>();
                }

                var eConfigResult = request.EventsConfiguration.Select(x =>
                                                                       TrackEvent.Create(
                                                                           ObjectId.Parse(x.EventId),
                                                                           ObjectId.Parse(x.EventScheduleId),
                                                                           x.Order, x.Title, x.Weight, x.CutOffDate, x.AlwaysAvailable,
                                                                           x.OpenDate, x.ValuationDate
                                                                           )
                                                                       ).ToArray();

                var eCombinedResult = Result.Combine(eConfigResult);

                if (eCombinedResult.IsFailure)
                {
                    return(Result.Fail <Contract>(eCombinedResult.Error));
                }

                var tags = new List <ValueObjects.Tag>();

                foreach (var tagStr in request.Tags)
                {
                    var tag = ValueObjects.Tag.Create(tagStr);
                    tags.Add(tag.Data);
                }

                var trackDuration = await GetTrackDuration(request, cancellationToken);

                ObjectId?profileTestId = null;

                if (!String.IsNullOrEmpty(request.ProfileTestId))
                {
                    profileTestId = ObjectId.Parse(request.ProfileTestId);
                }

                var newObject = Track.Create(
                    request.Title, request.Description, request.ImageUrl,
                    eConfigResult.Select(x => x.Data).ToList(),
                    mConfigResult.Select(x => x.Data).ToList(),
                    0, trackDuration, tags, request.Published,
                    request.CertificateUrl, request.StoreUrl, request.EcommerceUrl,
                    profileTestId, request.ProfileTestName, request.ValidFor
                    );

                if (newObject.IsFailure)
                {
                    return(Result.Fail <Contract>(newObject.Error));
                }

                var newTrack = newObject.Data;

                if (string.IsNullOrEmpty(request.Id))
                {
                    string config = _configuration[$"EcommerceIntegration:Active"];

                    if (request.CreateInEcommerce.HasValue && request.CreateInEcommerce.Value && config == "True")
                    {
                        var response = await CreateEcommerceProduct(newTrack);

                        string content = await response.Content.ReadAsStringAsync();

                        if (response.StatusCode == HttpStatusCode.Created)
                        {
                            var parsed = JObject.Parse(content);
                            newTrack.EcommerceProducts = new List <EcommerceProduct>();
                            newTrack.EcommerceProducts.Add(
                                EcommerceProduct.Create(
                                    (long)parsed["product"]["id"], 1, false, null, false, null, null, null, null
                                    ).Data
                                );
                        }
                        else
                        {
                            var error = ErrorLog.Create(
                                ErrorLogTypeEnum.EcommerceIntegration,
                                "create-track", content
                                ).Data;

                            await _db.ErrorLogCollection.InsertOneAsync(
                                error, cancellationToken : cancellationToken
                                );
                        }
                    }

                    newTrack.RequireUserCareer = request.RequireUserCareer;
                    newTrack.AllowedPercentageWithoutCareerInfo = request.AllowedPercentageWithoutCareerInfo;

                    await _db.TrackCollection.InsertOneAsync(
                        newTrack,
                        cancellationToken : cancellationToken
                        );

                    request.Id = newTrack.Id.ToString();
                }
                else
                {
                    var query = await _db.Database
                                .GetCollection <Track>("Tracks")
                                .FindAsync(x =>
                                           x.Id == ObjectId.Parse(request.Id),
                                           cancellationToken: cancellationToken
                                           );

                    var track = await query.FirstOrDefaultAsync(
                        cancellationToken : cancellationToken
                        );

                    if (track == null)
                    {
                        return(Result.Fail <Contract>("Trilha não Encontrada"));
                    }

                    track.Title                = newObject.Data.Title;
                    track.Description          = newObject.Data.Description;
                    track.EventsConfiguration  = newObject.Data.EventsConfiguration;
                    track.ImageUrl             = newObject.Data.ImageUrl;
                    track.ModulesConfiguration = newObject.Data.ModulesConfiguration;
                    track.UpdatedAt            = DateTimeOffset.UtcNow;
                    track.Tags                 = newObject.Data.Tags;
                    track.Duration             = newObject.Data.Duration;
                    track.Published            = newObject.Data.Published;
                    track.CertificateUrl       = newObject.Data.CertificateUrl;
                    track.VideoUrl             = request.VideoUrl;
                    track.VideoDuration        = request.VideoDuration;
                    track.MandatoryCourseVideo = request.MandatoryCourseVideo.HasValue ?
                                                 request.MandatoryCourseVideo.Value : false;
                    track.CourseVideoUrl      = request.CourseVideoUrl;
                    track.CourseVideoDuration = request.CourseVideoDuration;
                    track.StoreUrl            = request.StoreUrl;
                    track.EcommerceUrl        = request.EcommerceUrl;
                    track.RequireUserCareer   = request.RequireUserCareer;
                    track.AllowedPercentageWithoutCareerInfo = request.AllowedPercentageWithoutCareerInfo;
                    track.ProfileTestId   = profileTestId;
                    track.ProfileTestName = request.ProfileTestName;
                    track.ValidFor        = request.ValidFor;

                    await _db.TrackCollection.ReplaceOneAsync(t =>
                                                              t.Id == track.Id, track,
                                                              cancellationToken : cancellationToken
                                                              );

                    if (track.EcommerceProducts != null)
                    {
                        string config = _configuration[$"EcommerceIntegration:Active"];
                        if (config == "True")
                        {
                            foreach (var product in track.EcommerceProducts)
                            {
                                await UpdateEcommerceProduct(track, product.EcommerceId);
                            }
                        }
                    }
                }

                return(Result.Ok(request));
            }
コード例 #7
0
 /// <summary>
 /// Devuelve el modulo seleccionado a su pool correspondiente.
 /// </summary>
 /// <param name="module"></param>
 private void ReturnModuleToPool(TrackModule module)
 {
     TrackPool.Instance.ReturnToPool(module);
 }