Compare commits
	
		
			5 Commits
		
	
	
		
			v0.4.1
			...
			99c3474fb6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 99c3474fb6 | |||
| 9924795888 | |||
| 733ab0d208 | |||
| 6e2ba56a7c | |||
| 2507a2695f | 
@@ -127,7 +127,7 @@ namespace Elwig {
 | 
			
		||||
                    ZwstId = entry.Item1;
 | 
			
		||||
                    BranchName = entry.Item2;
 | 
			
		||||
                    BranchPlz = entry.Item3;
 | 
			
		||||
                    BranchLocation = entry.Item4;
 | 
			
		||||
                    BranchLocation = entry.Item4?.Split(" im ")[0];  // FIXME
 | 
			
		||||
                    BranchAddress = entry.Item5;
 | 
			
		||||
                    BranchPhoneNr = entry.Item6;
 | 
			
		||||
                    BranchFaxNr = entry.Item7;
 | 
			
		||||
@@ -138,7 +138,7 @@ namespace Elwig {
 | 
			
		||||
                ZwstId = entry.Item1;
 | 
			
		||||
                BranchName = entry.Item2;
 | 
			
		||||
                BranchPlz = entry.Item3;
 | 
			
		||||
                BranchLocation = entry.Item4;
 | 
			
		||||
                BranchLocation = entry.Item4?.Split(" im ")[0];  // FIXME
 | 
			
		||||
                BranchAddress = entry.Item5;
 | 
			
		||||
                BranchPhoneNr = entry.Item6;
 | 
			
		||||
                BranchFaxNr = entry.Item7;
 | 
			
		||||
 
 | 
			
		||||
@@ -109,9 +109,9 @@
 | 
			
		||||
                <th><b>Lese @Model.Year</b> per @($"{Model.Date:dd.MM.yyyy}") [kg]</th>
 | 
			
		||||
                <th>Lieferpflicht</th>
 | 
			
		||||
                <th>Lieferrecht</th>
 | 
			
		||||
                <th>Unterliefert<br/>(bzgl. Zuget.)</th>
 | 
			
		||||
                <th>Noch zu liefern<br/>(bzgl. Gelft.)</th>
 | 
			
		||||
                <th>Überliefert<br/>(bzgl. Gelft.)</th>
 | 
			
		||||
                <th>Unterliefert</th>
 | 
			
		||||
                <th>Noch lieferbar</th>
 | 
			
		||||
                <th>Überliefert</th>
 | 
			
		||||
                <th>Zugeteilt</th>
 | 
			
		||||
                <th>Geliefert</th>
 | 
			
		||||
            </tr>
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,7 @@
 | 
			
		||||
                <th>Lieferpflicht</th>
 | 
			
		||||
                <th>Lieferrecht</th>
 | 
			
		||||
                <th>Unterliefert</th>
 | 
			
		||||
                <th>Noch zu liefern</th>
 | 
			
		||||
                <th>Noch lieferbar</th>
 | 
			
		||||
                <th>Überliefert</th>
 | 
			
		||||
                <th>Geliefert</th>
 | 
			
		||||
            </tr>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
        xmlns:local="clr-namespace:Elwig.Windows"
 | 
			
		||||
        mc:Ignorable="d"
 | 
			
		||||
        xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
 | 
			
		||||
        Title="Flächenbindungen - Elwig" Height="480" Width="850"
 | 
			
		||||
        Title="Flächenbindungen - Elwig" Height="480" Width="1100"
 | 
			
		||||
        Loaded="Window_Loaded">
 | 
			
		||||
    <Window.Resources>
 | 
			
		||||
        <Style TargetType="Label">
 | 
			
		||||
@@ -52,7 +52,7 @@
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
        <Grid.ColumnDefinitions>
 | 
			
		||||
            <ColumnDefinition Width="*"/>
 | 
			
		||||
            <ColumnDefinition Width="330"/>
 | 
			
		||||
            <ColumnDefinition Width="340"/>
 | 
			
		||||
        </Grid.ColumnDefinitions>
 | 
			
		||||
 | 
			
		||||
        <Menu Grid.ColumnSpan="2" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White">
 | 
			
		||||
@@ -74,13 +74,15 @@
 | 
			
		||||
                    <DataGridTextColumn Header="Katastralgemeinde"  Binding="{Binding Kg.AtKg.Name}"  Width="6*"/>
 | 
			
		||||
                    <DataGridTextColumn Header="Ried"               Binding="{Binding Rd.Name}"       Width="4*"/>
 | 
			
		||||
                    <DataGridTextColumn Header="Parzelle"           Binding="{Binding GstNr}"         Width="4*"/>
 | 
			
		||||
                    <DataGridTextColumn Header="Fläche"             Binding="{Binding Area, StringFormat='{}{0:N0} m²'}" Width="4*">
 | 
			
		||||
                    <DataGridTextColumn Header="Fläche"             Binding="{Binding Area, StringFormat='{}{0:N0} m²'}" Width="3*">
 | 
			
		||||
                        <DataGridTextColumn.CellStyle>
 | 
			
		||||
                            <Style>
 | 
			
		||||
                                <Setter Property="TextBlock.TextAlignment" Value="Right"/>
 | 
			
		||||
                            </Style>
 | 
			
		||||
                        </DataGridTextColumn.CellStyle>
 | 
			
		||||
                    </DataGridTextColumn>
 | 
			
		||||
                    <DataGridTextColumn Header="Sorte"           Binding="{Binding AreaComType.WineVar.Name}" Width="4*"/>
 | 
			
		||||
                    <DataGridTextColumn Header="Attribut"           Binding="{Binding AreaComType.WineAttr1.Name}" Width="3*"/>
 | 
			
		||||
                </DataGrid.Columns>
 | 
			
		||||
            </DataGrid>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -318,7 +318,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            var filter = TextFilter.ToList();
 | 
			
		||||
            if (filter.Count > 0) {
 | 
			
		||||
                var var = await Context.WineVarieties.ToDictionaryAsync(v => v.SortId, v => v);
 | 
			
		||||
                var qual = await Context.WineQualityLevels.ToDictionaryAsync(q => q.QualId, q => q);
 | 
			
		||||
                var qual = await Context.WineQualityLevels.Where(q => !q.IsPredicate).ToDictionaryAsync(q => q.QualId, q => q);
 | 
			
		||||
                var mgnr = await Context.Members.ToDictionaryAsync(m => m.MgNr.ToString(), m => m);
 | 
			
		||||
                var zwst = await Context.Branches.ToDictionaryAsync(b => b.Name.ToLower().Split(" ")[0], b => b);
 | 
			
		||||
                var attr = await Context.WineAttributes.ToDictionaryAsync(a => a.Name.ToLower().Split(" ")[0], a => a);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,10 @@
 | 
			
		||||
using Elwig.Dialogs;
 | 
			
		||||
using Elwig.Helpers;
 | 
			
		||||
using Elwig.Helpers.Billing;
 | 
			
		||||
using Microsoft.Win32;
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Input;
 | 
			
		||||
@@ -51,7 +55,96 @@ namespace Elwig.Windows {
 | 
			
		||||
            d.Show();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
        private async void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            if (SeasonInput.Value is not int year)
 | 
			
		||||
                return;
 | 
			
		||||
            var d = new SaveFileDialog() {
 | 
			
		||||
                FileName = $"Über-Unterlieferungen-{year}.csv",
 | 
			
		||||
                DefaultExt = "csv",
 | 
			
		||||
                Filter = "CSV-Datei (*.csv)|*.csv",
 | 
			
		||||
                Title = $"Über-/Unterlieferungen {year} speichern unter - Elwig"
 | 
			
		||||
            };
 | 
			
		||||
            if (d.ShowDialog() == false)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            Mouse.OverrideCursor = Cursors.AppStarting;
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                using var file = new StreamWriter(d.FileName, false, Encoding.Latin1);
 | 
			
		||||
                using var cnx = await AppDbContext.ConnectAsync();
 | 
			
		||||
                await file.WriteLineAsync($"Auswertungen {year};;;;;;;;;;;");
 | 
			
		||||
 | 
			
		||||
                await file.WriteLineAsync($";;;;;;;;;;;");
 | 
			
		||||
                await file.WriteLineAsync($"Über-/Unterlieferungen lt. gez. GA;;;;;;;;;;;");
 | 
			
		||||
                await file.WriteLineAsync($"MgNr;Name;Vorname;Adresse;PLZ;Ort;GA;Lieferpflicht;Lieferrecht;Geliefert;Über-/Unterliefert;Prozent");
 | 
			
		||||
                using (var cmd = cnx.CreateCommand()) {
 | 
			
		||||
                    cmd.CommandText = $"""
 | 
			
		||||
                    SELECT m.mgnr, m.family_name, m.given_name, p.plz, o.name, m.address, m.business_shares,
 | 
			
		||||
                           m.business_shares * (SELECT value FROM client_parameter WHERE param = 'DELIVERY_OBLIGATION') AS min_kg,
 | 
			
		||||
                           m.business_shares * (SELECT value FROM client_parameter WHERE param = 'DELIVERY_RIGHT') AS max_kg,
 | 
			
		||||
                           COALESCE(SUM(d.weight), 0) AS sum
 | 
			
		||||
                    FROM member m
 | 
			
		||||
                        LEFT JOIN AT_plz_dest p ON p.id = m.postal_dest
 | 
			
		||||
                        LEFT JOIN AT_ort o ON o.okz = p.okz
 | 
			
		||||
                        LEFT JOIN v_delivery d ON d.mgnr = m.mgnr AND d.year = {year}
 | 
			
		||||
                    WHERE m.active = 1
 | 
			
		||||
                    GROUP BY d.year, m.mgnr
 | 
			
		||||
                    ORDER BY sum = 0 DESC, 100.0 * sum / max_kg, m.mgnr;
 | 
			
		||||
                    """;
 | 
			
		||||
                    using var reader = await cmd.ExecuteReaderAsync();
 | 
			
		||||
                    while (await reader.ReadAsync()) {
 | 
			
		||||
                        var mgnr = reader.GetInt32(0);
 | 
			
		||||
                        var familyName = reader.GetString(1);
 | 
			
		||||
                        var givenName = reader.GetString(2);
 | 
			
		||||
                        var plz = reader.GetInt32(3);
 | 
			
		||||
                        var ort = reader.GetString(4);
 | 
			
		||||
                        var addr = reader.GetString(5);
 | 
			
		||||
                        var ga = reader.GetInt32(6);
 | 
			
		||||
                        var minKg = reader.GetInt32(7);
 | 
			
		||||
                        var maxKg = reader.GetInt32(8);
 | 
			
		||||
                        var sum = reader.GetInt32(9);
 | 
			
		||||
                        var s1 = sum < minKg ? $"{sum - minKg}" : sum > maxKg ? $"{sum - maxKg}" : "";
 | 
			
		||||
                        var s2 = sum < minKg ? $"{sum * 100.0 / minKg - 100.0:0.0}" : sum > maxKg ? $"{sum * 100.0 / maxKg - 100:0.0}" : "";
 | 
			
		||||
                        await file.WriteLineAsync($"{mgnr};{familyName};{givenName};{addr};{plz};{ort};{ga};{minKg};{maxKg};{sum};{s1};{s2}");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                await file.WriteLineAsync($";;;;;;;;;;;");
 | 
			
		||||
                await file.WriteLineAsync($"Unterlieferungen lt. Flächenbindungen;;;;;;;;;;;");
 | 
			
		||||
                await file.WriteLineAsync($"MgNr;Name;Vorname;Adresse;PLZ;Ort;Vertrag;Lieferpflicht;Lieferrecht;Geliefert;Unterliefert;Prozent");
 | 
			
		||||
                using (var cmd = cnx.CreateCommand()) {
 | 
			
		||||
                    cmd.CommandText = $"""
 | 
			
		||||
                    SELECT m.mgnr, m.family_name, m.given_name, p.plz, o.name, m.address,
 | 
			
		||||
                           c.bin, c.min_kg, c.max_kg, b.weight
 | 
			
		||||
                    FROM member m
 | 
			
		||||
                        LEFT JOIN AT_plz_dest p ON p.id = m.postal_dest
 | 
			
		||||
                        LEFT JOIN AT_ort o ON o.okz = p.okz
 | 
			
		||||
                        JOIN v_area_commitment_bin c ON c.mgnr = m.mgnr AND c.year = {year}
 | 
			
		||||
                        LEFT JOIN v_payment_bin b ON (b.mgnr, b.bin) = (m.mgnr, c.bin) AND b.year = {year}
 | 
			
		||||
                    WHERE m.active = 1 AND b.weight < c.min_kg
 | 
			
		||||
                    ORDER BY m.mgnr, c.bin
 | 
			
		||||
                    """;
 | 
			
		||||
                    using var reader = await cmd.ExecuteReaderAsync();
 | 
			
		||||
                    while (await reader.ReadAsync()) {
 | 
			
		||||
                        var mgnr = reader.GetInt32(0);
 | 
			
		||||
                        var familyName = reader.GetString(1);
 | 
			
		||||
                        var givenName = reader.GetString(2);
 | 
			
		||||
                        var plz = reader.GetInt32(3);
 | 
			
		||||
                        var ort = reader.GetString(4);
 | 
			
		||||
                        var addr = reader.GetString(5);
 | 
			
		||||
                        var id = reader.GetString(6);
 | 
			
		||||
                        var minKg = reader.GetInt32(7);
 | 
			
		||||
                        var maxKg = reader.GetInt32(8);
 | 
			
		||||
                        var sum = reader.GetInt32(9);
 | 
			
		||||
                        await file.WriteLineAsync($"{mgnr};{familyName};{givenName};{addr};{plz};{ort};{id};{minKg};{maxKg};{sum};{sum - minKg};{sum * 100.0 / minKg - 100.0:0.0}");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Mouse.OverrideCursor = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void PaymentButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user