ChartWindow: Use BillingData and Curve
This commit is contained in:
@ -68,14 +68,14 @@
|
||||
SelectionChanged="GraphList_SelectionChanged"
|
||||
Margin="5,15,5,0" Grid.Row="0" FontSize="14" Grid.ColumnSpan="3">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Nr." Binding="{Binding Num}" Width="40">
|
||||
<DataGridTextColumn Header="Nr." Binding="{Binding Id}" Width="40">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style>
|
||||
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="Typ" Binding="{Binding Type}" Width="40"/>
|
||||
<DataGridTextColumn Header="Modus" Binding="{Binding Mode}" Width="40"/>
|
||||
<DataGridTextColumn Header="Angewandte Verträge" Binding="{Binding Contracts}" Width="4*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
@ -75,27 +75,15 @@ namespace Elwig.Windows {
|
||||
var data = ParseData(paymentVar);
|
||||
if (data == null) return;
|
||||
|
||||
var auszahlungsSorten = data["AuszahlungSorten"]?.AsObject();
|
||||
if (auszahlungsSorten == null) {
|
||||
return;
|
||||
var curves = BillingData.GetCurves(data, BillingData.CalculationMode.Elwig);
|
||||
List<Graph> graphs = [];
|
||||
|
||||
foreach (var (id, curve) in curves) {
|
||||
graphs.Add(new Graph(id, curve.Mode, curve.Normal, MinOechsle, MaxOechsle));
|
||||
}
|
||||
|
||||
var Graphs = auszahlungsSorten["Kurven"]?.AsArray();
|
||||
|
||||
if (Graphs == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Graph> GraphsList = [];
|
||||
|
||||
int i = 1;
|
||||
foreach (var graph in Graphs) {
|
||||
GraphsList.Add(new Graph("Oe", i, graph?.AsObject(), ParseContracts(auszahlungsSorten, i - 1), 50, 140));
|
||||
i++;
|
||||
}
|
||||
|
||||
ControlUtils.RenewItemsSource(GraphList, GraphsList, g => (g as Graph)?.Num);
|
||||
if (GraphsList.Count == 1) {
|
||||
ControlUtils.RenewItemsSource(GraphList, graphs, g => (g as Graph)?.Id);
|
||||
if (graphs.Count == 1) {
|
||||
GraphList.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
@ -125,46 +113,63 @@ namespace Elwig.Windows {
|
||||
var data = ParseData(paymentVar);
|
||||
if (data == null) return false;
|
||||
|
||||
var auszahlungsSorten = data["AuszahlungSorten"]?.AsObject();
|
||||
if (auszahlungsSorten == null) {
|
||||
MessageBox.Show("1");
|
||||
|
||||
|
||||
JsonArray? curves;
|
||||
JsonObject? payment;
|
||||
|
||||
if (data["mode"]?.GetValue<string>() == "elwig") {
|
||||
curves = data["curves"]?.AsArray();
|
||||
payment = data["payment"]?.AsObject();
|
||||
} else if (data["mode"]?.GetValue<string>() == "wgmaster") {
|
||||
curves = data["Kurven"]?.AsArray();
|
||||
payment = data["AuszahlungSorten"]?.AsObject();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
var Graphs = auszahlungsSorten["Kurven"]?.AsObject();
|
||||
if (Graphs == null) {
|
||||
MessageBox.Show("2");
|
||||
|
||||
|
||||
if (curves == null || payment == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int i = 1;
|
||||
foreach (var graph in Graphs) {
|
||||
if (i == num) {
|
||||
Graphs.Remove(graph.Key);
|
||||
MessageBox.Show("3");
|
||||
|
||||
foreach (var curve in curves) {
|
||||
MessageBox.Show("LOOP");
|
||||
if (curve?.AsObject()?["id"]?.GetValue<int>() == num) {
|
||||
MessageBox.Show(curve.ToJsonString());
|
||||
curves.Remove(curve);
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
foreach (var sorte in auszahlungsSorten) {
|
||||
if (sorte.Key == "Kurven") continue;
|
||||
foreach (var attribut in sorte.Value.AsObject()) {
|
||||
var bindungen = attribut.Value.AsObject();
|
||||
foreach (var bindung in bindungen) {
|
||||
int v = (int)bindung.Value;
|
||||
if (v == num - 1) {
|
||||
bindungen.Remove(bindung.Key);
|
||||
} else if (v > num - 1) {
|
||||
bindungen[bindung.Key] = v - 1;
|
||||
}
|
||||
}
|
||||
MessageBox.Show("4");
|
||||
|
||||
var keysToRemove = new List<string>();
|
||||
foreach (var sorte in payment) {
|
||||
MessageBox.Show(sorte.Value.GetType().ToString());
|
||||
if (sorte.Value.AsValue().TryGetValue(out string? curve) && curve.Equals($"curve:{num}")) {
|
||||
keysToRemove.Add(sorte.Key);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var key in keysToRemove) {
|
||||
payment.Remove(key);
|
||||
}
|
||||
|
||||
MessageBox.Show("5");
|
||||
|
||||
EntityEntry<PaymentVar>? tr = null;
|
||||
try {
|
||||
paymentVar.Data = data.ToString();
|
||||
tr = Context.Update(paymentVar);
|
||||
|
||||
await Context.SaveChangesAsync();
|
||||
await App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
if (tr != null) await tr.ReloadAsync();
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank gelöscht werden!\n\n" + exc.Message;
|
||||
@ -175,6 +180,62 @@ namespace Elwig.Windows {
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task<int?> UpdateGraph(Graph g) {
|
||||
var paymentVar = await Context.PaymentVariants.FindAsync(Year, AvNr);
|
||||
if (paymentVar == null) return null;
|
||||
|
||||
var data = ParseData(paymentVar);
|
||||
if (data == null) return null;
|
||||
|
||||
JsonArray? curves;
|
||||
JsonObject? payment;
|
||||
|
||||
if (data["mode"]?.GetValue<string>() == "elwig") {
|
||||
curves = data["curves"]?.AsArray();
|
||||
payment = data["payment"]?.AsObject();
|
||||
} else if (data["mode"]?.GetValue<string>() == "wgmaster") {
|
||||
curves = data["Kurven"]?.AsArray();
|
||||
payment = data["AuszahlungSorten"]?.AsObject();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (curves == null || payment == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (IsEditing) {
|
||||
int i = 0;
|
||||
foreach (var curve in curves) {
|
||||
if (curve?.AsObject()?["id"]?.GetValue<int>() == g.Id) {
|
||||
curves[i] = g.ToJson();
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
} else if(IsCreating) {
|
||||
curves.Add(g.ToJson());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
EntityEntry<PaymentVar>? tr = null;
|
||||
try {
|
||||
paymentVar.Data = data.ToString();
|
||||
tr = Context.Update(paymentVar);
|
||||
|
||||
await Context.SaveChangesAsync();
|
||||
await App.HintContextChange();
|
||||
} catch (Exception exc) {
|
||||
if (tr != null) await tr.ReloadAsync();
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank gelöscht werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Graph löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
return g.Id;
|
||||
}
|
||||
|
||||
private void RefreshInputs(bool validate = false) {
|
||||
ResetPlot();
|
||||
ClearInputStates();
|
||||
@ -199,10 +260,10 @@ namespace Elwig.Windows {
|
||||
|
||||
Graph = (Graph)g.Clone();
|
||||
|
||||
GraphNumberInput.Text = Graph.Num.ToString();
|
||||
if (Graph.Type == "oe") {
|
||||
GraphNumberInput.Text = Graph.Id.ToString();
|
||||
if (Graph.Mode == BillingData.CurveMode.Oe) {
|
||||
OechsleGraphType_Input.IsChecked = true;
|
||||
} else if (Graph.Type == "kmw") {
|
||||
} else if (Graph.Mode == BillingData.CurveMode.Kmw) {
|
||||
KmwGraphType_Input.IsChecked = true;
|
||||
}
|
||||
|
||||
@ -604,7 +665,7 @@ namespace Elwig.Windows {
|
||||
PriceInput.IsReadOnly = false;
|
||||
OechsleInput.IsReadOnly = false;
|
||||
InitInputs();
|
||||
FillInputs(new Graph(GraphList.Items.Count + 1, MinOechsle, MaxOechsle));
|
||||
FillInputs(new Graph(GraphList.Items.Count + 1, BillingData.CurveMode.Oe, MinOechsle, MaxOechsle)); //TODO not hardcode oe
|
||||
EnableOptionButtons();
|
||||
}
|
||||
|
||||
@ -629,10 +690,10 @@ namespace Elwig.Windows {
|
||||
if (g == null) return;
|
||||
|
||||
var r = MessageBox.Show(
|
||||
$"Soll der Graph {g.Num} (verwendet in folgenden Verträgen: {g.Contracts}) wirklich unwiderruflich gelöscht werden?",
|
||||
$"Soll der Graph {g.Id} (verwendet in folgenden Verträgen: {g.Contracts}) wirklich unwiderruflich gelöscht werden?",
|
||||
"Graph löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r == MessageBoxResult.Yes) {
|
||||
bool success = await RemoveGraph(g.Num);
|
||||
bool success = await RemoveGraph(g.Id);
|
||||
if (!success) {
|
||||
MessageBox.Show("Der Graph konnte nicht gelöscht werden", "Graph löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
@ -658,50 +719,6 @@ namespace Elwig.Windows {
|
||||
GraphList.SelectedIndex = index.Value;
|
||||
}
|
||||
|
||||
private async Task<int?> UpdateGraph(Graph g) {
|
||||
List<PaymentVar> paymentVars = await Context.PaymentVariants.Where(p => p.Year == Year && p.AvNr == AvNr).ToListAsync();
|
||||
|
||||
if (paymentVars.Count != 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
PaymentVar paymentVar = paymentVars[0];
|
||||
var data = JsonNode.Parse(paymentVar.Data).AsObject();
|
||||
|
||||
var auszahlungsSorten = data["AuszahlungSorten"];
|
||||
if (auszahlungsSorten == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var Graphs = auszahlungsSorten["Kurven"].AsArray();
|
||||
if (Graphs == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (IsEditing) {
|
||||
Graphs[g.Num - 1] = g.ToJson();
|
||||
} else if(IsCreating) {
|
||||
Graphs.Add(g.ToJson());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
EntityEntry<PaymentVar>? tr = null;
|
||||
try {
|
||||
paymentVar.Data = data.ToString();
|
||||
tr = Context.Update(paymentVar);
|
||||
|
||||
await Context.SaveChangesAsync();
|
||||
} catch (Exception exc) {
|
||||
if (tr != null) await tr.ReloadAsync();
|
||||
var str = "Der Eintrag konnte nicht in der Datenbank gelöscht werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Graph löschen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
return g.Num - 1;
|
||||
}
|
||||
|
||||
private void ResetButton_Click(object sender, RoutedEventArgs e) {
|
||||
if (IsEditing) {
|
||||
RefreshInputs();
|
||||
|
Reference in New Issue
Block a user