public async Task <UpdateCampaignError> UpdateAsync(VoucherCampaign campaign) { var oldCampaign = await _campaignsRepository.GetByIdAsync(campaign.Id, true); if (oldCampaign == null) { _log.Error($"Campaign {campaign.Id} not found for update"); return(UpdateCampaignError.VoucherCampaignNotFound); } if (oldCampaign.State == CampaignState.Published && oldCampaign.FromDate <= DateTime.UtcNow) { return(UpdateCampaignError.CampaignAlreadyStarted); } if (campaign.VouchersTotalCount < oldCampaign.BoughtVouchersCount) { return(UpdateCampaignError.TotalCountMustBeGreaterThanBoughtVouchersCount); } campaign.CreatedBy = oldCampaign.CreatedBy; campaign.CreationDate = oldCampaign.CreationDate; if (campaign.LocalizedContents != null) { for (int i = 0; i < campaign.LocalizedContents.Count; ++i) { if (!string.IsNullOrWhiteSpace(campaign.LocalizedContents[i].Value)) { continue; } campaign.LocalizedContents.RemoveAt(i); --i; } } var contentsToRemove = oldCampaign.LocalizedContents .Where(c1 => campaign.LocalizedContents.All(c2 => c1.Id != c2.Id)) .ToList(); await _campaignContentsRepository.DeleteAsync(contentsToRemove); foreach (var content in contentsToRemove) { if (content.ContentType == CampaignContentType.ImageUrl) { await _fileService.DeleteAsync(content.Id); } } await _campaignsRepository.UpdateAsync(campaign); _log.Info("Campaign was updated", context: campaign); return(UpdateCampaignError.None); }
public async Task UpdateAsync(VoucherCampaign campaign) { var entity = _mapper.Map <VoucherCampaignEntity>(campaign); using (var context = _contextFactory.CreateDataContext()) { context.VoucherCampaigns.Update(entity); await context.SaveChangesAsync(); } }
private async Task PublishVoucherSoldEvent(Guid?paymentRequestId, VoucherCampaign voucherCampaign, Voucher voucher) { await _voucherSoldPublisher.PublishAsync(new SmartVoucherSoldEvent { Amount = voucherCampaign.VoucherPrice, Currency = voucherCampaign.Currency, CustomerId = voucher.OwnerId.Value, PartnerId = voucherCampaign.PartnerId, Timestamp = DateTime.UtcNow, CampaignId = voucher.CampaignId, VoucherShortCode = voucher.ShortCode, PaymentRequestId = paymentRequestId?.ToString(), }); }
private async Task PublishVoucherTransferredEvent(VoucherCampaign voucherCampaign, Voucher voucher, Guid oldOwnerId) { await _voucherTransferredPublisher.PublishAsync(new SmartVoucherTransferredEvent { Amount = voucherCampaign.VoucherPrice, Currency = voucherCampaign.Currency, PartnerId = voucherCampaign.PartnerId, Timestamp = DateTime.UtcNow, CampaignId = voucher.CampaignId, VoucherShortCode = voucher.ShortCode, NewCustomerId = voucher.OwnerId.Value, OldCustomerId = oldOwnerId, }); }
private async Task PublishVoucherUsedEvent(VoucherCampaign voucherCampaign, Voucher voucher) { await _voucherUsedPublisher.PublishAsync(new SmartVoucherUsedEvent { CustomerId = voucher.OwnerId.Value, Timestamp = DateTime.UtcNow, PartnerId = voucherCampaign.PartnerId, CampaignId = voucher.CampaignId, Amount = voucherCampaign.VoucherPrice, Currency = voucherCampaign.Currency, LinkedCustomerId = voucher.SellerId, VoucherShortCode = voucher.ShortCode, }); }
private bool IsCampaignEditable(VoucherCampaign existingCampaign, VoucherCampaign updatedCampaign) { if (existingCampaign.State == CampaignState.Draft || existingCampaign.FromDate > DateTime.UtcNow) { return(true); } if (existingCampaign.VoucherPrice != updatedCampaign.VoucherPrice || existingCampaign.VouchersTotalCount != updatedCampaign.VouchersTotalCount || existingCampaign.Currency != updatedCampaign.Currency || existingCampaign.PartnerId != updatedCampaign.PartnerId || existingCampaign.ToDate != updatedCampaign.ToDate || existingCampaign.FromDate != updatedCampaign.FromDate || existingCampaign.ExpirationDate != updatedCampaign.ExpirationDate || existingCampaign.State != updatedCampaign.State) { return(false); } return(true); }
public async Task <Guid> CreateAsync(VoucherCampaign campaign) { campaign.CreationDate = DateTime.UtcNow; if (campaign.LocalizedContents != null) { for (int i = 0; i < campaign.LocalizedContents.Count; ++i) { if (!string.IsNullOrWhiteSpace(campaign.LocalizedContents[i].Value)) { continue; } campaign.LocalizedContents.RemoveAt(i); --i; } } var result = await _campaignsRepository.CreateAsync(campaign); _log.Info("Campaign was added", context: campaign); return(result); }
private bool IsCampaignDateValid(VoucherCampaign campaign) => DateTime.UtcNow > campaign.FromDate && (!campaign.ExpirationDate.HasValue || campaign.ExpirationDate.Value > DateTime.UtcNow);
private bool IsCampaignStateValid(VoucherCampaign campaign) => campaign.State == CampaignState.Published;