예제 #1
0
            public async Task <Result> Handle(Contract request, CancellationToken cancellationToken)
            {
                string config = _configuration[$"EcommerceIntegration:Active"];

                if (config == null || config != "True")
                {
                    return(Result.Fail("Acesso Negado"));
                }

                if (request.UserRole != "Admin" && request.UserRole != "HumanResources" && request.UserRole != "Recruiter")
                {
                    return(Result.Fail("Acesso Negado"));
                }

                var tracks = await GetTracksWithEcommerceId(cancellationToken);

                foreach (var track in tracks)
                {
                    track.EcommerceProducts = new List <EcommerceProduct> {
                        EcommerceProduct.Create(
                            track.EcommerceId.Value, 1, false, null, false, null, null, null, null
                            ).Data
                    };

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

                return(Result.Ok());
            }
예제 #2
0
            public async Task <Result <Contract> > Handle(Contract request, CancellationToken cancellationToken)
            {
                if (request.UserRole != "Admin" && request.UserRole != "HumanResources" && request.UserRole != "Recruiter")
                {
                    return(Result.Fail <Contract>("Acesso Negado"));
                }

                if (String.IsNullOrEmpty(request.TrackId))
                {
                    return(Result.Fail <Contract>("Id da Trilha não informado"));
                }

                var trackId = ObjectId.Parse(request.TrackId);
                var track   = await _db.TrackCollection.AsQueryable()
                              .Where(t => t.Id == trackId)
                              .FirstOrDefaultAsync();

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

                var products = new List <EcommerceProduct>();

                foreach (var product in request.Products)
                {
                    var ecommerceProduct = EcommerceProduct.Create(
                        product.EcommerceId,
                        product.UsersAmount,
                        product.DisableEcommerce,
                        product.Price,
                        product.DisableFreeTrial,
                        product.LinkEcommerce,
                        product.LinkProduct,
                        product.Subject,
                        product.Hours
                        );

                    products.Add(ecommerceProduct.Data);
                }

                track.EcommerceProducts = products;

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

                return(Result.Ok(request));
            }
예제 #3
0
        public EcommerceProduct mapProduct(ProductData p)
        {
            var product = new EcommerceProduct();

            if (p.Brand != null)
            {
                product.SetBrand(p.Brand);
            }
            else
            {
                product.SetBrand("none");
            }
            if (p.Category != null)
            {
                product.SetCategory(p.Category);
            }
            if (p.Coupon != null)
            {
                product.SetCouponCode(p.Coupon);
            }
            if (p.Id != null)
            {
                product.SetId(p.Id);
            }
            if (p.Name != null)
            {
                product.SetName(p.Name);
            }
            if (p.Position != 0)
            {
                product.SetPosition(new NSNumber(p.Position));
            }
            if (p.Price != 0)
            {
                product.SetPrice(new NSNumber(p.Price));
            }
            if (p.Quantity != 0)
            {
                product.SetQuantity(new NSNumber(p.Quantity));
            }
            if (p.Variant != null)
            {
                product.SetVariant(p.Variant);
            }

            return(product);
        }
예제 #4
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));
            }