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()); }
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)); }
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); }
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)); }