ids, bool forceDelete = false)
{
var batchErrorHeader = $"{_localizer["Common_BatchDelete_Failed"].Value}
";
var batchResult = new BatchResponseVm(batchErrorHeader) { Success = true };
foreach (var id in ids)
{
var item = await _voucherCampaignService.GetAsync(id);
if (item != null)
{
//await _customerService.ResetTypeAsync(item.Id); //Spezial zurücksetzen wenn nötig
var usedCount = 0;
//var productsCount = await _productService.CountByAdvertisementCategoryAsync(item.Id);
//usedCount += productsCount;
if (usedCount == 0)
{
//TODO: Gibt es Resets die notwendig sind?
//await _productService.ResetAdvertisementCategoryAsync(item.Id, true);
batchResult.BatchResponseList.Add(new BatchResponseItemVm() { Id = item.Id.ToString(), Name = item.Name, Success = true, NotFound = false, ErrorMessage = "" });
if (forceDelete)
{
var postingPath = FileServiceHelper.GetVoucherCampaignPath(item.Id);
await FileService.ClearDirectoryAsync(FileServiceHelper.DocumentContainer, postingPath);
await RemoveThumbnail(FileServiceHelper.DocumentContainer, item.Image, 400);
await RemoveThumbnail(FileServiceHelper.DocumentContainer, item.Image, 200);
await RemoveThumbnail(FileServiceHelper.DocumentContainer, item.Image, 100);
var languages = item.GetLanguages("ImageLanguage");
foreach (var language in languages)
{
item.SetLanguage(language);
var imageLocalized = item.ImageLanguage;
if (!string.IsNullOrWhiteSpace(imageLocalized))
{
await RemoveThumbnail(FileServiceHelper.DocumentContainer, imageLocalized, 400);
await RemoveThumbnail(FileServiceHelper.DocumentContainer, imageLocalized, 200);
await RemoveThumbnail(FileServiceHelper.DocumentContainer, imageLocalized, 100);
}
}
await _voucherCampaignService.RemoveVouchersAsync(item.Id);
_voucherCampaignService.Remove(item);
}
else
{
item.Deleted = true;
item.UpdatedAt = DateTimeOffset.UtcNow;
await _voucherCampaignService.RemoveVouchersAsync(item.Id);
}
}
else
{
if (usedCount != 0)
{
batchResult.Success = false;
batchResult.BatchResponseList.Add(new BatchResponseItemVm() { Id = id.ToString(), Name = item.Name, Success = false, NotFound = false, ErrorMessage = string.Format(_localizer["Common_BatchDelete_InUse"], $"{item.Name}", $"{usedCount}") + "
" });
}
}
}
else
{
batchResult.Success = false;
batchResult.BatchResponseList.Add(new BatchResponseItemVm() { Id = id.ToString(), Name = "", Success = false, NotFound = true, ErrorMessage = string.Format(_localizer["Common_BatchDelete_NotFound"], $"{id}") + "
" });
}
}
if (batchResult.BatchResponseList.Any(c => c.Success))
await _voucherCampaignService.CommitAsync(User.Identity.Name);
return Json(batchResult);
}
///
/// Exportiert die Gutscheine einer Kampagne
///
/// Id der Kampagne
/// Task
[Authorize(Policy = Policies.PowerUserOnly)]
[HasPermission(Permission.VouchersManage, Permission.VouchersEdit)]
[HttpPost]
public async Task Export(string voucherCampaignId)
{
var result = new ResponseVm { Success = false };
var exportItems = new List();
var item = await _voucherCampaignService.GetAsync(voucherCampaignId);
if (item is { Deleted: false })
{
var vouchers = await _voucherCampaignService.GetVouchersForCampaignAsync(voucherCampaignId);
foreach (var voucher in vouchers)
{
exportItems.Add(new VoucherExportDto()
{
Code = voucher.Code,
QrCode = voucher.QrCode,
VoucherAmmount = voucher.VoucherAmmount
});
}
if (exportItems.Count > 0)
{
await using var writer = new StringWriter();
await using (var csv = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";" }))
{
await csv.WriteRecordsAsync(exportItems);
}
var csvContent = writer.ToString();
var fileName = $"Vouchers_{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}-{DateTime.Now.Hour}-{DateTime.Now.Minute}-{DateTime.Now.Second}.csv";
var filenameToUse = FileServiceHelper.GetCustomerPath(item.CustomerId) + fileName;
var file = Encoding.UTF8.GetBytes(csvContent);
await _fileService.StoreAsync(FileServiceHelper.TempContainer, filenameToUse, file, true);
var targetFile = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}/File/{FileServiceHelper.TempContainer}/{FileServiceHelper.GetCustomerPath(item.CustomerId)}{fileName}";
result.Data = targetFile;
result.Success = true;
result.Html = string.Empty;
return Json(result);
}
}
else
{
ModelState.AddModelError("", _localizer["Err_Entity_Deleted"].Value);
}
return Json(result);
}
#endregion
#region Helper
///
/// Überprüft ob ein Präfix für eine Kampagne verfügbar ist
///
/// true wenn möglich, false sonst
[HttpPost]
public async Task IsPrefixAvailable(string prefix, string id)
{
return Json(await _voucherCampaignService.IsPrefixAvailableAsync(prefix, id));
}
#endregion
}
}