[#78] DeliveryService: Add bulk actions for attributes and modifiers
All checks were successful
Test / Run tests (push) Successful in 1m42s
All checks were successful
Test / Run tests (push) Successful in 1m42s
This commit is contained in:
@@ -1180,5 +1180,104 @@ namespace Elwig.Services {
|
||||
await ctx.SaveChangesAsync();
|
||||
});
|
||||
}
|
||||
|
||||
public static async Task<(int Year, int DId, int DPNr)[]> GetDidsFromFilters(this DeliveryAdminViewModel vm) {
|
||||
using var ctx = new AppDbContext();
|
||||
var (_, _, parts, _, _) = await vm.GetFilters(ctx);
|
||||
return [.. (await parts.Select(p => new { p.Year, p.DId, p.DPNr }).ToListAsync()).Select(p => (p.Year, p.DId, p.DPNr))];
|
||||
}
|
||||
|
||||
public static async Task BulkSetAttribute(this DeliveryAdminViewModel vm, string? attributeName) {
|
||||
try {
|
||||
string attrid;
|
||||
if (attributeName == null) {
|
||||
attrid = "NULL";
|
||||
} else {
|
||||
using var ctx = new AppDbContext();
|
||||
var attr = await ctx.WineAttributes.Where(a => a.Name == attributeName).SingleAsync();
|
||||
attrid = $"'{attr.AttrId}'";
|
||||
}
|
||||
var dids = await vm.GetDidsFromFilters();
|
||||
var res = MessageBox.Show($"Soll wirklich für {dids.Length:N0} Teillieferung(en) das Attribut\n'{attributeName}' gesetz werden?",
|
||||
"Massenaktion: Attribut setzen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK) return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
using (var cnx = await AppDbContext.ConnectAsync()) {
|
||||
await cnx.ExecuteBatch($"""
|
||||
UPDATE delivery_part SET attrid = {attrid}
|
||||
WHERE (year, did, dpnr) IN ({string.Join(", ", dids.Select(d => $"({d.Year},{d.DId},{d.DPNr})"))})
|
||||
""");
|
||||
}
|
||||
App.HintContextChange();
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
} finally {
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task BulkAddModifier(this DeliveryAdminViewModel vm, string modifierName) {
|
||||
try {
|
||||
string modid;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
var attr = await ctx.Modifiers.Where(a => a.Name == modifierName).FirstAsync();
|
||||
modid = $"'{attr.ModId}'";
|
||||
}
|
||||
|
||||
var dids = await vm.GetDidsFromFilters();
|
||||
var res = MessageBox.Show($"Soll wirklich für {dids.Length:N0} Teillieferung(en) der Zu-/Abschlag\n'{modifierName}' hinzugefügt werden?",
|
||||
"Massenaktion: Zu-/Abschlag hinzufügen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK) return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
using (var cnx = await AppDbContext.ConnectAsync()) {
|
||||
await cnx.ExecuteBatch($"""
|
||||
INSERT INTO delivery_part_modifier (year, did, dpnr, modid)
|
||||
VALUES {string.Join(", ", dids.Select(d => $"({d.Year},{d.DId},{d.DPNr},{modid})"))}
|
||||
ON CONFLICT DO NOTHING
|
||||
""");
|
||||
}
|
||||
App.HintContextChange();
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
} finally {
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task BulkRemoveModifier(this DeliveryAdminViewModel vm, string modifierName) {
|
||||
try {
|
||||
string modid;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
var attr = await ctx.Modifiers.Where(a => a.Name == modifierName).FirstAsync();
|
||||
modid = $"'{attr.ModId}'";
|
||||
}
|
||||
|
||||
var dids = await vm.GetDidsFromFilters();
|
||||
var res = MessageBox.Show($"Soll wirklich für {dids.Length:N0} Teillieferung(en) der Zu-/Abschlag\n'{modifierName}' entfernt werden?",
|
||||
"Massenaktion: Zu-/Abschlag entfernen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (res != MessageBoxResult.OK) return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
using (var cnx = await AppDbContext.ConnectAsync()) {
|
||||
await cnx.ExecuteBatch($"""
|
||||
DELETE FROM delivery_part_modifier
|
||||
WHERE (year, did, dpnr, modid) IN ({string.Join(", ", dids.Select(d => $"({d.Year},{d.DId},{d.DPNr},{modid})"))})
|
||||
""");
|
||||
}
|
||||
App.HintContextChange();
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
} finally {
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user