Bläddra i källkod

22 апреля

alpo8341 1 år sedan
förälder
incheckning
5078021c1a
36 ändrade filer med 881 tillägg och 145 borttagningar
  1. 5 5
      EmployeeTracker.sln
  2. 9 11
      EmployeeTracker/Commands/DataCommands.cs
  3. 5 0
      EmployeeTracker/EmployeeTracker.csproj
  4. 40 2
      EmployeeTracker/MainWindow.xaml
  5. 11 2
      EmployeeTracker/Styles/MainStyle.xaml
  6. 68 0
      EmployeeTracker/VM/EmployeeBrowseVM.cs
  7. 17 42
      EmployeeTracker/Views/EmployeeBrowseView.xaml
  8. 1 47
      EmployeeTracker/Views/EmployeeBrowseView.xaml.cs
  9. 4 36
      EmployeeTracker/Views/WelcomeView.xaml
  10. 13 0
      InvestTracker/App.xaml
  11. 19 0
      InvestTracker/App.xaml.cs
  12. 10 0
      InvestTracker/AssemblyInfo.cs
  13. 24 0
      InvestTracker/Commands/DataCommands.cs
  14. 32 0
      InvestTracker/Commands/NavigationCommands.cs
  15. 25 0
      InvestTracker/Entities/Employee.cs
  16. 79 0
      InvestTracker/Entities/InvestContext.cs
  17. 13 0
      InvestTracker/Entities/Title.cs
  18. BIN
      InvestTracker/Images/add.png
  19. BIN
      InvestTracker/Images/delete.png
  20. BIN
      InvestTracker/Images/edit.png
  21. BIN
      InvestTracker/Images/save.png
  22. BIN
      InvestTracker/Images/search.png
  23. BIN
      InvestTracker/Images/undo.png
  24. 54 0
      InvestTracker/InvestTracker.csproj
  25. 57 0
      InvestTracker/MainWindow.xaml
  26. 28 0
      InvestTracker/MainWindow.xaml.cs
  27. 18 0
      InvestTracker/Models/TitleList.cs
  28. 16 0
      InvestTracker/Styles/MainStyle.xaml
  29. 114 0
      InvestTracker/VM/EmployeeBrowseVM.cs
  30. 105 0
      InvestTracker/Views/EmployeeBrowseView.xaml
  31. 29 0
      InvestTracker/Views/EmployeeBrowseView.xaml.cs
  32. 14 0
      InvestTracker/Views/LoadingView.xaml
  33. 28 0
      InvestTracker/Views/LoadingView.xaml.cs
  34. 14 0
      InvestTracker/Views/WelcomeView.xaml
  35. 28 0
      InvestTracker/Views/WelcomeView.xaml.cs
  36. 1 0
      InvestTracker/update-schema.cmd

+ 5 - 5
EmployeeTracker.sln

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 17
 VisualStudioVersion = 17.5.33516.290
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmployeeTracker", "EmployeeTracker\EmployeeTracker.csproj", "{FA4A95D6-971B-46D8-A1CE-67353F39F2C4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InvestTracker", "InvestTracker\InvestTracker.csproj", "{9B1D85CC-1743-4213-AC27-833DA70FDDA5}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{FA4A95D6-971B-46D8-A1CE-67353F39F2C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FA4A95D6-971B-46D8-A1CE-67353F39F2C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FA4A95D6-971B-46D8-A1CE-67353F39F2C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FA4A95D6-971B-46D8-A1CE-67353F39F2C4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9B1D85CC-1743-4213-AC27-833DA70FDDA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9B1D85CC-1743-4213-AC27-833DA70FDDA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9B1D85CC-1743-4213-AC27-833DA70FDDA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9B1D85CC-1743-4213-AC27-833DA70FDDA5}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 9 - 11
EmployeeTracker/Commands/DataCommands.cs

@@ -1,5 +1,7 @@
-using System;
+using Prism.Commands;
+using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -9,20 +11,16 @@ namespace EmployeeTracker.Commands
 {
     class DataCommands
     {
-        public static RoutedCommand Delete { get; set; }
-        public static RoutedCommand Edit { get; set; }
+        public static DelegateCommand ExitCommand { get; set; }
 
         static DataCommands()
         {
-            InputGestureCollection inputs;
-            
-            inputs = new InputGestureCollection();
-            inputs.Add(new KeyGesture(Key.E, ModifierKeys.Control, "Ctrl+E"));
-            Edit = new RoutedCommand("Edit", typeof(DataCommands), inputs);
+            ExitCommand = new DelegateCommand(ExitCommandExecuted);
+        }
 
-            inputs = new InputGestureCollection();
-            inputs.Add(new KeyGesture(Key.D, ModifierKeys.Control, "Ctrl+D"));
-            Delete = new RoutedCommand("Delete", typeof(DataCommands), inputs);
+        public static void ExitCommandExecuted()
+        {
+            App.Current.Shutdown();
         }
     }
 }

+ 5 - 0
EmployeeTracker/EmployeeTracker.csproj

@@ -73,6 +73,7 @@
     <Compile Include="Views\WelcomeView.xaml.cs">
       <DependentUpon>WelcomeView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="VM\EmployeeBrowseVM.cs" />
     <Page Include="MainWindow.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -85,6 +86,10 @@
       <DependentUpon>MainWindow.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Page Include="Styles\MainStyle.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\EmployeeBrowseView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 40 - 2
EmployeeTracker/MainWindow.xaml

@@ -4,16 +4,54 @@
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:EmployeeTracker"
+        xmlns:commands="clr-namespace:EmployeeTracker.Commands"
         mc:Ignorable="d"
-        Title="MainWindow" Height="450" Width="800">
+        Title="ИнвестУчёт" Height="450" Width="800">
     <Grid>
         <Grid.RowDefinitions>
+            <RowDefinition Height="32px"/>
             <RowDefinition Height="*"/>
         </Grid.RowDefinitions>
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*"/>
         </Grid.ColumnDefinitions>
 
-        <Frame x:Name="MainFrame" Source="Views/WelcomeView.xaml" Grid.Row="0" Grid.Column="0"/>
+        <Grid Grid.Row="0">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="64px"/>
+            </Grid.ColumnDefinitions>
+
+            <Label Grid.Column="0" FontSize="18" HorizontalAlignment="Center">ИнвестУчёт</Label>
+            <Button Grid.Column="1" Command="{x:Static commands:DataCommands.ExitCommand}">Выход</Button>
+        </Grid>
+        
+        <!--Body-->
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="256px"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+            
+            <Grid Grid.Row="0" Grid.Column="0" Margin="10">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+
+                <Button Style="{StaticResource NavButton}" Grid.Row="0" Command="{x:Static commands:NavigationCommands.NavigateFrame}">Сотрудники</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="1">Клиенты</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="2">Договора</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="3">Ценные бумаги</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="4">Сделки</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="5">Справка</Button>
+            </Grid>
+            <Frame Padding="5" x:Name="MainFrame" Source="Views/WelcomeView.xaml" Grid.Column="1" NavigationUIVisibility="Hidden"/>
+        </Grid>
+        
     </Grid>
 </Window>

+ 11 - 2
EmployeeTracker/Styles/MainStyle.xaml

@@ -3,8 +3,17 @@
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
     <Style TargetType="{x:Type Label}">
-        <Setter Property="Background" Value="White"/>
+        <Setter Property="Background" Value="Transparent"/>
         <Setter Property="Padding" Value="0"/>
     </Style>
-    
+
+    <Style TargetType="{x:Type Frame}">
+        <Setter Property="Background" Value="#ddd"/>
+        <Setter Property="Margin" Value="8"/>
+    </Style>
+
+    <Style x:Key="NavButton" TargetType="{x:Type Button}">
+        <Setter Property="Margin" Value="0,8"/>
+    </Style>
+
 </ResourceDictionary>

+ 68 - 0
EmployeeTracker/VM/EmployeeBrowseVM.cs

@@ -0,0 +1,68 @@
+using Prism.Commands;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using System.Windows;
+
+namespace EmployeeTracker.VM
+{
+    public class EmployeeBrowseVM : BindableBase
+    {
+        public DelegateCommand UndoCommand { get; set; }
+        public DelegateCommand SaveCommand { get; set; }
+        public DelegateCommand NewCommand { get; set; }
+        public DelegateCommand EditCommand { get; set; }
+        public DelegateCommand DeleteCommand { get; set; }
+        public DelegateCommand FindCommand { get; set; }
+        private bool isDirty = false;
+
+        public EmployeeBrowseVM() 
+        {
+            UndoCommand = new DelegateCommand(Undo_Executed);
+            SaveCommand = new DelegateCommand(Save_Executed);
+            NewCommand = new DelegateCommand(New_Executed);
+            EditCommand = new DelegateCommand(Edit_Executed);
+            DeleteCommand = new DelegateCommand(Delete_Executed);
+            FindCommand = new DelegateCommand(Find_Executed);
+        }
+
+        private void Undo_Executed()
+        {
+            MessageBox.Show("Undoing");
+            isDirty = true;
+        }
+
+        private void Save_Executed()
+        {
+            MessageBox.Show("Saving");
+            isDirty = false;
+        }
+
+        private void New_Executed()
+        {
+            MessageBox.Show("Adding...");
+            isDirty = true;
+        }
+
+        private void Edit_Executed()
+        {
+            MessageBox.Show("Editing...");
+            isDirty = true;
+        }
+
+        private void Delete_Executed()
+        {
+            MessageBox.Show("Deleting...");
+            isDirty = true;
+        }
+
+        private void Find_Executed()
+        {
+            MessageBox.Show("Searching...");
+        }
+    }
+}

+ 17 - 42
EmployeeTracker/Views/EmployeeBrowseView.xaml

@@ -7,71 +7,46 @@
       xmlns:command="clr-namespace:EmployeeTracker.Commands"
       mc:Ignorable="d" 
       d:DesignHeight="450" d:DesignWidth="800"
-      Title="Список сотрудников">
-    <Page.CommandBindings>
-        <CommandBinding
-            Command="Undo"
-            Executed="Undo_Executed"
-            CanExecute="WhenDirty" />
-        <CommandBinding
-            Command="Save"
-            Executed="Save_Executed"
-            CanExecute="WhenDirty" />
-        <CommandBinding
-            Command="New"
-            Executed="New_Executed"
-            CanExecute="WhenClean" />
-        <CommandBinding
-            Command="{x:Static command:DataCommands.Edit}"
-            Executed="Edit_Executed"
-            CanExecute="WhenClean" />
-        <CommandBinding
-            Command="{x:Static command:DataCommands.Delete}"
-            Executed="Delete_Executed"
-            CanExecute="WhenClean" />
-        <CommandBinding
-            Command="Find"
-            Executed="Find_Executed"
-            CanExecute="WhenClean" />
-    </Page.CommandBindings>
-
-    <StackPanel>
+      Title="Список сотрудников"
+      Background="Transparent">
+    <StackPanel Margin="5 5 5 5" Background="Transparent">
         <Menu>
             <MenuItem Header="Действие" >
-                <MenuItem Command="Undo" Header="Отменить" ></MenuItem>
+                <MenuItem Command="{Binding UndoCommand}" Header="Отменить" ></MenuItem>
                 <Separator/>
-                <MenuItem Command="New" Header="Создать" ></MenuItem>
-                <MenuItem Command="{x:Static command:DataCommands.Edit}" Header="Редактировать" ></MenuItem>
-                <MenuItem Command="Save" Header="Сохранить" ></MenuItem>
-                <MenuItem Command="Find" Header="Найти" />
+                <MenuItem Command="{Binding NewCommand}" Header="Создать" ></MenuItem>
+                <MenuItem Command="{Binding EditCommand}" Header="Редактировать" ></MenuItem>
+                <MenuItem Command="{Binding SaveCommand}" Header="Сохранить" ></MenuItem>
+                <MenuItem Command="{Binding FindCommand}" Header="Найти" />
                 <Separator/>
-                <MenuItem Command="Delete" Header="Удалить" ></MenuItem>
+                <MenuItem Command="{Binding DeleteCommand}" Header="Удалить" ></MenuItem>
             </MenuItem>
             <MenuItem Header="Отчет"></MenuItem>
         </Menu>
 
         <ToolBar>
-            <Button Name="Undo" Command="Undo" ToolTip="Отменить редактирование/создание">
+            <Button Name="Undo" Command="{Binding UndoCommand}" ToolTip="Отменить редактирование/создание">
                 <Image Width="16" Height="16" Source="/Images/undo.png" />
             </Button>
-            <Button Name="Add" Command="New" ToolTip="Добавить">
+            <Button Name="Add" Command="{Binding NewCommand}" ToolTip="Добавить">
                 <Image Width="16" Height="16"  Source="/Images/add.png" />
             </Button>
-            <Button Name="Edit" Command="{x:Static command:DataCommands.Edit}" ToolTip="Редактировать">
+            <Button Name="Edit" Command="{Binding EditCommand}" ToolTip="Редактировать">
                 <Image Width="16" Height="16"  Source="/Images/edit.png" />
             </Button>
-            <Button Name="Search" Command="Find" ToolTip="Поиск">
+            <Button Name="Search" Command="{Binding FindCommand}" ToolTip="Поиск">
                 <Image Width="16" Height="16"  Source="/Images/search.png" />
             </Button>
-            <Button Command="Save" Name="Save" ToolTip="Сохранить">
+            <Button Name="Save" Command="{Binding SaveCommand}"  ToolTip="Сохранить">
                 <Image Width="16" Height="16"  Source="/Images/save.png" />
             </Button>
-            <Button Name="Delete" Command="{x:Static command:DataCommands.Delete}" ToolTip="Удалить">
+            <Button Name="Delete" Command="{Binding DeleteCommand}" ToolTip="Удалить">
                 <Image Width="16" Height="16"  Source="/Images/undo.png" />
             </Button>
         </ToolBar>
-        
+
         <Label>Список сотрудников</Label>
+
         <DataGrid AutoGenerateColumns="False">
             <DataGrid.Columns>
                 <DataGridTextColumn Header="Фамилия"/>

+ 1 - 47
EmployeeTracker/Views/EmployeeBrowseView.xaml.cs

@@ -20,56 +20,10 @@ namespace EmployeeTracker.Views
     /// </summary>
     public partial class EmployeeBrowseView : Page
     {
-        private bool isDirty = false;
-
         public EmployeeBrowseView()
         {
             InitializeComponent();
-        }
-
-        private void WhenDirty(object sender, CanExecuteRoutedEventArgs e)
-        {
-            e.CanExecute = isDirty;
-        }
-
-        private void WhenClean(object sender, CanExecuteRoutedEventArgs e)
-        {
-            e.CanExecute = !isDirty;
-        }
-
-        private void Undo_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Undoing");
-            isDirty = true;
-        }
-
-        private void Save_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Saving");
-            isDirty = false;
-        }
-
-        private void New_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Adding...");
-            isDirty = true;
-        }
-
-        private void Edit_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Editing...");
-            isDirty = true;
-        }
-
-        private void Delete_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Deleting...");
-            isDirty = true;
-        }
-
-        private void Find_Executed(object sender, ExecutedRoutedEventArgs e)
-        {
-            MessageBox.Show("Searching...");
+            DataContext = new VM.EmployeeBrowseVM();
         }
     }
 }

+ 4 - 36
EmployeeTracker/Views/WelcomeView.xaml

@@ -4,43 +4,11 @@
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       xmlns:local="clr-namespace:EmployeeTracker.Views"
-      xmlns:commands="clr-namespace:EmployeeTracker.Commands"
       mc:Ignorable="d" 
       d:DesignHeight="450" d:DesignWidth="800"
-      Title="Добро пожаловать">
+      Title="WelcomeView">
 
-    <StackPanel>
-        <Grid>
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition/>
-            </Grid.ColumnDefinitions>
-            <Grid.RowDefinitions>
-                <RowDefinition/>
-                <RowDefinition/>
-                <RowDefinition/>
-            </Grid.RowDefinitions>
-            
-            <Label Grid.Row="0" FontSize="28" HorizontalAlignment="Center">Система внутреннего учёта инвестиционной компании</Label>
-            
-            <Grid Grid.Row="1">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                    <ColumnDefinition/>
-                </Grid.ColumnDefinitions>
-
-                <Button Grid.Column="0" Command="{x:Static commands:NavigationCommands.NavigateFrame}">Сотрудники</Button>
-                <Button Grid.Column="1">Клиенты</Button>
-                <Button Grid.Column="2">Договора</Button>
-                <Button Grid.Column="3">Ценные бумаги</Button>
-                <Button Grid.Column="4">Сделки</Button>
-                <Button Grid.Column="5">Справка</Button>
-            </Grid>
-
-            <Button Grid.Row="2">Выход</Button>
-        </Grid>
-    </StackPanel>
+    <Grid>
+        <Label FontSize="18" Content="Добро пожаловать" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+    </Grid>
 </Page>

+ 13 - 0
InvestTracker/App.xaml

@@ -0,0 +1,13 @@
+<Application x:Class="InvestTracker.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:InvestTracker"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/Styles/MainStyle.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </Application.Resources>
+</Application>

+ 19 - 0
InvestTracker/App.xaml.cs

@@ -0,0 +1,19 @@
+using InvestTracker.Entities;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace InvestTracker
+{
+    /// <summary>
+    /// Interaction logic for App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+}

+ 10 - 0
InvestTracker/AssemblyInfo.cs

@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+                                     //(used if a resource is not found in the page,
+                                     // or application resource dictionaries)
+    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+                                              //(used if a resource is not found in the page,
+                                              // app, or any theme specific resource dictionaries)
+)]

+ 24 - 0
InvestTracker/Commands/DataCommands.cs

@@ -0,0 +1,24 @@
+using Prism.Commands;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InvestTracker.Commands
+{
+    public class DataCommands
+    {
+        public static DelegateCommand ExitCommand { get; set; }
+
+        static DataCommands()
+        {
+            ExitCommand = new DelegateCommand(ExitCommandExecuted);
+        }
+
+        public static void ExitCommandExecuted()
+        {
+            App.Current.Shutdown();
+        }
+    }
+}

+ 32 - 0
InvestTracker/Commands/NavigationCommands.cs

@@ -0,0 +1,32 @@
+using InvestTracker.Views;
+using Prism.Commands;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InvestTracker.Commands
+{
+    /// <summary>
+    /// Глобальные команды для навигации
+    /// </summary>
+    static class NavigationCommands
+    {
+        /// <summary>
+        /// При нажатии на кнопку подсистемы в WelcomeView переходит в страницу
+        /// </summary>
+        public static DelegateCommand NavigateFrame { get; set; }
+
+        static NavigationCommands()
+        {
+            NavigateFrame = new DelegateCommand(NavigateFrameExecute);
+        }
+
+        private static void NavigateFrameExecute()
+        {
+            var MainWindow = App.Current.MainWindow as MainWindow;
+            MainWindow.MainFrame.Navigate(new EmployeeBrowseView());
+        }
+    }
+}

+ 25 - 0
InvestTracker/Entities/Employee.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace InvestTracker.Entities;
+
+public partial class Employee
+{
+    public int Id { get; set; }
+
+    public string Surname { get; set; } = null!;
+
+    public string Name { get; set; } = null!;
+
+    public string? Patronymic { get; set; }
+
+    public string Phone { get; set; } = null!;
+
+    public string Email { get; set; } = null!;
+
+    public DateTime Birthday { get; set; }
+
+    public int TitleId { get; set; }
+
+    public virtual Title Title { get; set; } = null!;
+}

+ 79 - 0
InvestTracker/Entities/InvestContext.cs

@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+
+namespace InvestTracker.Entities;
+
+public partial class InvestContext : DbContext
+{
+    public InvestContext()
+    {
+    }
+
+    public InvestContext(DbContextOptions<InvestContext> options)
+        : base(options)
+    {
+    }
+
+    public virtual DbSet<Employee> Employees { get; set; }
+
+    public virtual DbSet<Title> Titles { get; set; }
+
+    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
+        => optionsBuilder.UseSqlServer("Data Source=srv-wsr\\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False");
+
+    protected override void OnModelCreating(ModelBuilder modelBuilder)
+    {
+        modelBuilder.Entity<Employee>(entity =>
+        {
+            entity.ToTable("employee");
+
+            entity.Property(e => e.Id).HasColumnName("id");
+            entity.Property(e => e.Birthday)
+                .HasColumnType("date")
+                .HasColumnName("birthday");
+            entity.Property(e => e.Email)
+                .HasMaxLength(64)
+                .IsUnicode(false)
+                .HasColumnName("email");
+            entity.Property(e => e.Name)
+                .HasMaxLength(50)
+                .IsUnicode(false)
+                .HasColumnName("name");
+            entity.Property(e => e.Patronymic)
+                .HasMaxLength(50)
+                .IsUnicode(false)
+                .HasColumnName("patronymic");
+            entity.Property(e => e.Phone)
+                .HasMaxLength(32)
+                .IsUnicode(false)
+                .HasColumnName("phone");
+            entity.Property(e => e.Surname)
+                .HasMaxLength(50)
+                .IsUnicode(false)
+                .HasColumnName("surname");
+            entity.Property(e => e.TitleId).HasColumnName("title_id");
+
+            entity.HasOne(d => d.Title).WithMany(p => p.Employees)
+                .HasForeignKey(d => d.TitleId)
+                .OnDelete(DeleteBehavior.ClientSetNull)
+                .HasConstraintName("FK_employee_title");
+        });
+
+        modelBuilder.Entity<Title>(entity =>
+        {
+            entity.ToTable("title");
+
+            entity.Property(e => e.Id).HasColumnName("id");
+            entity.Property(e => e.Name)
+                .HasMaxLength(64)
+                .IsUnicode(false)
+                .HasColumnName("name");
+        });
+
+        OnModelCreatingPartial(modelBuilder);
+    }
+
+    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}

+ 13 - 0
InvestTracker/Entities/Title.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+
+namespace InvestTracker.Entities;
+
+public partial class Title
+{
+    public int Id { get; set; }
+
+    public string Name { get; set; } = null!;
+
+    public virtual ICollection<Employee> Employees { get; set; } = new List<Employee>();
+}

BIN
InvestTracker/Images/add.png


BIN
InvestTracker/Images/delete.png


BIN
InvestTracker/Images/edit.png


BIN
InvestTracker/Images/save.png


BIN
InvestTracker/Images/search.png


BIN
InvestTracker/Images/undo.png


+ 54 - 0
InvestTracker/InvestTracker.csproj

@@ -0,0 +1,54 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net7.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <UseWPF>true</UseWPF>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <None Remove="Images\add.png" />
+    <None Remove="Images\delete.png" />
+    <None Remove="Images\edit.png" />
+    <None Remove="Images\save.png" />
+    <None Remove="Images\search.png" />
+    <None Remove="Images\undo.png" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.18" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.18">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.18" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.18">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Prism.Wpf" Version="8.1.97" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Resource Include="Images\add.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Images\delete.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Images\edit.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Images\save.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Images\search.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Images\undo.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+  </ItemGroup>
+
+</Project>

+ 57 - 0
InvestTracker/MainWindow.xaml

@@ -0,0 +1,57 @@
+<Window x:Class="InvestTracker.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:InvestTracker"
+        xmlns:commands="clr-namespace:InvestTracker.Commands"
+        mc:Ignorable="d"
+        Title="MainWindow" Height="600" Width="900">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="32px"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Row="0">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="64px"/>
+            </Grid.ColumnDefinitions>
+
+            <Label Grid.Column="0" FontSize="18" HorizontalAlignment="Center">ИнвестУчёт</Label>
+            <Button Grid.Column="1" Command="{x:Static commands:DataCommands.ExitCommand}">Выход</Button>
+        </Grid>
+
+        <!--Body-->
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="256px"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+
+            <Grid Grid.Row="0" Grid.Column="0" Margin="10">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+
+                <Button Style="{StaticResource NavButton}" Grid.Row="0" Command="{x:Static commands:NavigationCommands.NavigateFrame}">Сотрудники</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="1">Клиенты</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="2">Договора</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="3">Ценные бумаги</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="4">Сделки</Button>
+                <Button Style="{StaticResource NavButton}" Grid.Row="5">Справка</Button>
+            </Grid>
+            <Frame Padding="5" x:Name="MainFrame" Source="Views/WelcomeView.xaml" Grid.Column="1" NavigationUIVisibility="Hidden"/>
+        </Grid>
+
+    </Grid>
+</Window>

+ 28 - 0
InvestTracker/MainWindow.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace InvestTracker
+{
+    /// <summary>
+    /// Interaction logic for MainWindow.xaml
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 18 - 0
InvestTracker/Models/TitleList.cs

@@ -0,0 +1,18 @@
+using System.Collections.ObjectModel;
+using InvestTracker.Entities;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
+
+namespace InvestTracker.Models
+{
+    class TitleList : ObservableCollection<Title>
+    {
+        public TitleList() 
+        {
+            var dbContext = new InvestContext();
+            List<Title> allTitles = dbContext.Titles.Select(t => t).ToList();
+            this.AddRange(allTitles);
+        }
+    }
+}

+ 16 - 0
InvestTracker/Styles/MainStyle.xaml

@@ -0,0 +1,16 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+    <Style TargetType="{x:Type Label}">
+        <Setter Property="Background" Value="Transparent"/>
+        <Setter Property="Padding" Value="0"/>
+    </Style>
+
+    <Style TargetType="{x:Type Frame}">
+        <Setter Property="Background" Value="#ddd"/>
+        <Setter Property="Margin" Value="8"/>
+    </Style>
+
+    <Style x:Key="NavButton" TargetType="{x:Type Button}">
+        <Setter Property="Margin" Value="0,8"/>
+    </Style>
+</ResourceDictionary>

+ 114 - 0
InvestTracker/VM/EmployeeBrowseVM.cs

@@ -0,0 +1,114 @@
+using InvestTracker.Entities;
+using Microsoft.EntityFrameworkCore;
+using Prism.Commands;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace InvestTracker.VM
+{
+    public class EmployeeBrowseVM : BindableBase
+    {
+        public DelegateCommand UndoCommand { get; set; }
+        public DelegateCommand SaveCommand { get; set; }
+        public DelegateCommand NewCommand { get; set; }
+        public DelegateCommand EditCommand { get; set; }
+        public DelegateCommand DeleteCommand { get; set; }
+        public DelegateCommand FindCommand { get; set; }
+        private InvestContext _dbContext;
+        private bool isDirty = false;
+
+        /// <summary>
+        /// Список всех сотрудников
+        /// </summary>
+        public ObservableCollection<Employee> Employees { get; set; }
+
+        /// <summary>
+        /// Список всех должностей для выбора в колонках
+        /// </summary>
+        public ObservableCollection<Title> AllTitles { get; set; }
+
+        public EmployeeBrowseVM()
+        {
+            UndoCommand = new DelegateCommand(Undo_Executed, WhenDirty);
+            SaveCommand = new DelegateCommand(Save_Executed, WhenDirty);
+            NewCommand = new DelegateCommand(New_Executed, WhenClean);
+            EditCommand = new DelegateCommand(Edit_Executed, WhenClean);
+            DeleteCommand = new DelegateCommand(Delete_Executed, WhenClean);
+            FindCommand = new DelegateCommand(Find_Executed, WhenClean);
+
+            _dbContext = new InvestContext();
+            Employees = new ObservableCollection<Employee>(_dbContext.Employees.ToList());
+            AllTitles = new ObservableCollection<Title>(_dbContext.Titles.ToList());
+        }
+
+        private void Undo_Executed()
+        {
+            MessageBox.Show("Undoing");
+            isDirty = true;
+        }
+
+        private void Save_Executed()
+        {
+            MessageBox.Show("Saving");
+            isDirty = false;
+        }
+
+        private void New_Executed()
+        {
+            MessageBox.Show("Adding...");
+            isDirty = true;
+        }
+
+        private void Edit_Executed()
+        {
+            MessageBox.Show("Editing...");
+            isDirty = true;
+        }
+
+        private void Delete_Executed()
+        {
+            MessageBox.Show("Deleting...");
+            isDirty = true;
+        }
+
+        private void Find_Executed()
+        {
+            MessageBox.Show("Searching...");
+        }
+        
+        /// <summary>
+        /// CanExecute когда isDirty = false
+        /// </summary>
+        private bool WhenClean()
+        {
+            if (isDirty == false)
+            {
+                return true;
+            } else
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// CanExecute когда isDirty = true
+        /// </summary>
+        private bool WhenDirty()
+        {
+            if (isDirty == true)
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+}

+ 105 - 0
InvestTracker/Views/EmployeeBrowseView.xaml

@@ -0,0 +1,105 @@
+<Page x:Class="InvestTracker.Views.EmployeeBrowseView"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+      xmlns:local="clr-namespace:InvestTracker.Views"
+      xmlns:model="clr-namespace:InvestTracker.Models" xmlns:vm="clr-namespace:InvestTracker.VM" d:DataContext="{d:DesignInstance Type=vm:EmployeeBrowseVM}"
+      mc:Ignorable="d" 
+      d:DesignHeight="450" d:DesignWidth="800"
+      x:Name="EPage"
+      Title="EmployeeBrowseView">
+    <Page.Resources>
+        <!--Шаблон яйчейки отображения даты-->
+        <DataTemplate x:Key="RegularDateTemplate" >
+            <TextBlock
+                Text="{Binding Birthday, StringFormat={}{0:dd\.}{0:MM\.}{0:yyyy}}"
+                VerticalAlignment="Center"
+                HorizontalAlignment="Center" />
+        </DataTemplate>
+
+        <!--Шаблон яйчейки редактирования даты-->
+        <DataTemplate x:Key="EditingDateTemplate">
+            <DatePicker SelectedDate="{Binding Birthday, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
+        </DataTemplate>
+    </Page.Resources>
+
+    <StackPanel>
+        <!--Этот FrameworkElement содержит все свойства у Page-->
+        <FrameworkElement x:Name="ProxyElement" DataContext="{Binding}" Visibility="Collapsed"/>
+        
+        <Menu>
+            <MenuItem Header="Действие" >
+                <MenuItem Command="{Binding UndoCommand}" Header="Отменить" ></MenuItem>
+                <Separator/>
+                <MenuItem Command="{Binding NewCommand}" Header="Создать" ></MenuItem>
+                <MenuItem Command="{Binding EditCommand}" Header="Редактировать" ></MenuItem>
+                <MenuItem Command="{Binding SaveCommand}" Header="Сохранить" ></MenuItem>
+                <MenuItem Command="{Binding FindCommand}" Header="Найти" />
+                <Separator/>
+                <MenuItem Command="{Binding DeleteCommand}" Header="Удалить" ></MenuItem>
+            </MenuItem>
+            <MenuItem Header="Отчет"></MenuItem>
+        </Menu>
+
+        <ToolBar>
+            <Button Name="Undo" Command="{Binding UndoCommand}" ToolTip="Отменить редактирование/создание">
+                <Image Width="16" Height="16" Source="/Images/undo.png" />
+            </Button>
+            <Button Name="Add" Command="{Binding NewCommand}" ToolTip="Добавить">
+                <Image Width="16" Height="16"  Source="/Images/add.png" />
+            </Button>
+            <Button Name="Edit" Command="{Binding EditCommand}" ToolTip="Редактировать">
+                <Image Width="16" Height="16"  Source="/Images/edit.png" />
+            </Button>
+            <Button Name="Search" Command="{Binding FindCommand}" ToolTip="Поиск">
+                <Image Width="16" Height="16"  Source="/Images/search.png" />
+            </Button>
+            <Button Name="Save" Command="{Binding SaveCommand}"  ToolTip="Сохранить">
+                <Image Width="16" Height="16"  Source="/Images/save.png" />
+            </Button>
+            <Button Name="Delete" Command="{Binding DeleteCommand}" ToolTip="Удалить">
+                <Image Width="16" Height="16"  Source="/Images/undo.png" />
+            </Button>
+        </ToolBar>
+
+        <Label>Список сотрудников</Label>
+
+        <DataGrid
+            AutoGenerateColumns="False"
+            ItemsSource="{Binding Employees}"
+            RowBackground="#ddd"
+            AlternatingRowBackground="#eee"
+            CanUserAddRows="False"
+            CanUserDeleteRows="False">
+
+            <DataGrid.Columns>
+                <DataGridTextColumn
+                    Binding="{Binding Path=Surname,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+                    Header="Фамилия"/>
+                <DataGridTextColumn
+                    Binding="{Binding Path=Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+                    Header="Имя"/>
+                <DataGridTextColumn
+                    Binding="{Binding Path=Patronymic,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+                    Header="Отчество"/>
+                <DataGridComboBoxColumn
+                    ItemsSource="{Binding DataContext.AllTitles,Source={x:Reference ProxyElement}}"
+                    DisplayMemberPath="Name"
+                    SelectedValueBinding="{Binding Path=TitleId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                    SelectedValuePath="Id"
+                    Header="Должность"/>
+                <DataGridTemplateColumn
+                    CellTemplate="{StaticResource RegularDateTemplate}"
+                    CellEditingTemplate="{StaticResource EditingDateTemplate}"
+                    Header="Дата рождения" />
+                <DataGridTextColumn
+                    Binding="{Binding Path=Phone,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+                    Header="Телефон" />
+                <DataGridTextColumn
+                    Binding="{Binding Path=Email,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+                    Header="Электронная почта" />
+            </DataGrid.Columns>
+        </DataGrid>
+    </StackPanel>
+</Page>

+ 29 - 0
InvestTracker/Views/EmployeeBrowseView.xaml.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace InvestTracker.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для EmployeeBrowseView.xaml
+    /// </summary>
+    public partial class EmployeeBrowseView : Page
+    {
+        public EmployeeBrowseView()
+        {
+            InitializeComponent();
+            DataContext = new VM.EmployeeBrowseVM();
+        }
+    }
+}

+ 14 - 0
InvestTracker/Views/LoadingView.xaml

@@ -0,0 +1,14 @@
+<Page x:Class="InvestTracker.Views.LoadingView"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+      xmlns:local="clr-namespace:InvestTracker.Views"
+      mc:Ignorable="d" 
+      d:DesignHeight="450" d:DesignWidth="800"
+      Title="LoadingView">
+
+    <Grid>
+        <Label FontSize="18" Content="Загрузка..." HorizontalAlignment="Center" VerticalAlignment="Center"/>
+    </Grid>
+</Page>

+ 28 - 0
InvestTracker/Views/LoadingView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace InvestTracker.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для LoadingView.xaml
+    /// </summary>
+    public partial class LoadingView : Page
+    {
+        public LoadingView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 14 - 0
InvestTracker/Views/WelcomeView.xaml

@@ -0,0 +1,14 @@
+<Page x:Class="InvestTracker.Views.WelcomeView"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+      xmlns:local="clr-namespace:InvestTracker.Views"
+      mc:Ignorable="d" 
+      d:DesignHeight="450" d:DesignWidth="800"
+      Title="WelcomeView">
+
+    <Grid>
+        <Label FontSize="18" Content="Добро пожаловать" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+    </Grid>
+</Page>

+ 28 - 0
InvestTracker/Views/WelcomeView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace InvestTracker.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для WelcomeView.xaml
+    /// </summary>
+    public partial class WelcomeView : Page
+    {
+        public WelcomeView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 1 - 0
InvestTracker/update-schema.cmd

@@ -0,0 +1 @@
+dotnet ef dbcontext scaffold "Data Source=srv-wsr\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False" Microsoft.EntityFrameworkCore.SqlServer -o Entities -c InvestContext -f