Browse Source

Добавлен экспорт в CSV

Ahatov Artur 7 months ago
parent
commit
4bbc3d5d5b

+ 11 - 3
src/DontHarmDesktop/Pages/AuthPage.xaml

@@ -17,8 +17,15 @@
             <RowDefinition Height="48"/>
         </Grid.RowDefinitions>
 
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="0.25*"/>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="0.25*"/>
+        </Grid.ColumnDefinitions>
+
         <TextBlock
             Grid.Row="0" 
+            Grid.Column="1"
             TextAlignment="Center"
             HorizontalAlignment="Center"
             Padding="8"
@@ -26,7 +33,7 @@
             Добро пожаловать в Не навреди!<LineBreak/>Пожалуйста, авторизуйтесь
         </TextBlock>
 
-        <Grid Margin="5" Grid.Row="1">
+        <Grid Margin="5" Grid.Row="1" Grid.Column="1">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="*"/>
@@ -42,7 +49,7 @@
                 Grid.Column="1" Text="{Binding Login}"/>
         </Grid>
 
-        <Grid Margin="5" Grid.Row="2">
+        <Grid Margin="5" Grid.Row="2" Grid.Column="1">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="*"/>
@@ -60,6 +67,7 @@
         <Button 
             Margin="5"
             Grid.Row="3"
-            Command="{Binding LoginCmd}">Вход</Button>
+            Command="{Binding LoginCmd}"
+            Grid.Column="1">Вход</Button>
     </Grid>
 </Page>

+ 35 - 16
src/DontHarmDesktop/ViewModels/Reports/EmployeeCostVM.cs

@@ -6,12 +6,23 @@ using System.Linq;
 using System.Text;
 using System.Windows.Forms.DataVisualization.Charting;
 using CsvHelper;
+using CsvHelper.Configuration.Attributes;
 using System.IO;
+using System.Globalization;
 
 // https://www.c-sharpcorner.com/article/static-and-dynamic-line-chart-in-wpf-with-mvvm-pattern-using-prism-library/
 
 namespace DontHarmDesktop.ViewModels.Reports
 {
+    class CostItem
+    {
+        [Name("Имя")]
+        public string HumanName { get; set; }
+        
+        [Name("Priceness")]
+        public int Priceness { get; set; }
+    }
+
     public class EmployeeCostVM : BindableBase
     {
         /// <summary>
@@ -27,7 +38,7 @@ namespace DontHarmDesktop.ViewModels.Reports
         /// <summary>
         /// Даные для графика
         /// </summary>
-        private List<KeyValuePair<string, int>> Costs { get; set; }
+        private List<CostItem> Costs { get; set; }
 
         /// <summary>
         /// Интерфейс для отображения точек
@@ -51,7 +62,7 @@ namespace DontHarmDesktop.ViewModels.Reports
         {
             StartCmd = new DelegateCommand(StartExecuted);
             ExportCmd = new DelegateCommand(ExportExecuted);
-            Costs = new List<KeyValuePair<string, int>>();
+            Costs = new List<CostItem>();
             SeriesInterface = series;
             FilterName = "";
             PriceIndex = -1;
@@ -65,9 +76,10 @@ namespace DontHarmDesktop.ViewModels.Reports
         public void ExportExecuted()
         {
             // 1. Показать диалог выбора файла
-            var ofd = new Microsoft.Win32.OpenFileDialog();
-            ofd.Multiselect = false;
-            ofd.Filter = "CSV файлы (*.csv)|*.csv|Все файлы (*.*)|*.*";
+            var ofd = new Microsoft.Win32.SaveFileDialog
+            {
+                Filter = "CSV файлы (*.csv)|*.csv|Все файлы (*.*)|*.*"
+            };
             bool? selected = ofd.ShowDialog();
             if (selected == false)
             {
@@ -76,12 +88,19 @@ namespace DontHarmDesktop.ViewModels.Reports
             string fileName = ofd.FileName;
 
             // 2. Сгенерировать CSV
-            var writer = new StreamWriter(fileName);
-            StringBuilder sb = new StringBuilder();
-            Costs.ForEach(c =>
+            using (var writer = new StreamWriter(fileName, false, Encoding.UTF8))
             {
-                
-            });
+                using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+                {
+                    csv.WriteHeader<CostItem>();
+                    csv.NextRecord();
+                    Costs.ForEach(c =>
+                    {
+                        csv.WriteRecord(c);
+                        csv.NextRecord();
+                    });
+                }
+            }
         }
 
         private async void Refresh()
@@ -126,16 +145,16 @@ namespace DontHarmDesktop.ViewModels.Reports
                     return;
                 }
                 
-                Costs.Add(new KeyValuePair<string, int>
-                (
-                    u.HumanName,
-                    (int)priceness
-                ));
+                Costs.Add(new CostItem
+                {
+                    HumanName = u.HumanName,
+                    Priceness = (int)priceness
+                });
             });
 
             SeriesInterface.Points.Clear();
             Costs.ForEach(
-                item => SeriesInterface.Points.AddXY(item.Key, item.Value)
+                item => SeriesInterface.Points.AddXY(item.HumanName, item.Priceness)
             );
         }
     }