To Be Continued

main
itjustworks1 2026-04-06 11:59:02 +10:00
parent cbf2b3c1d3
commit 780c9aad7c
29 changed files with 385 additions and 55 deletions

View File

@ -4,6 +4,8 @@
<option name="projectPerEditor">
<map>
<entry key="AvaloniaApplication14_Inventory_300326/App.axaml" value="AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326.csproj" />
<entry key="AvaloniaApplication14_Inventory_300326/Views/EmployeeEditingWindow.axaml" value="AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326.csproj" />
<entry key="AvaloniaApplication14_Inventory_300326/Views/EquipmentEditingWindow.axaml" value="AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326.csproj" />
<entry key="AvaloniaApplication14_Inventory_300326/Views/MainWindow.axaml" value="AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326.csproj" />
</map>
</option>

View File

@ -32,7 +32,7 @@ public partial class App : Application
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
DisableAvaloniaDataAnnotationValidation();
var win = _serviceProvider.GetService<MainWindow>();
var win = _serviceProvider.GetRequiredService<MainWindow>();
desktop.MainWindow = win;
}

View File

@ -82,4 +82,9 @@ public class EmployeeRepository : BaseRepository<Employee>, IDisposable
{
throw new NotImplementedException();
}
public void Dispose()
{
base.Dispose();
}
}

View File

@ -8,9 +8,9 @@ using MySqlConnector;
namespace AvaloniaApplication14_Inventory_300326.Models.DataBase;
public class EquipmeentRepository : BaseRepository<Equipment>, IDisposable
public class EquipmentRepository : BaseRepository<Equipment>, IDisposable
{
public EquipmeentRepository(IOptions<DatabaseSettings> ConnectionString) : base(ConnectionString)
public EquipmentRepository(IOptions<DatabaseSettings> ConnectionString) : base(ConnectionString)
{
OpenConnection();
}

View File

@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using AvaloniaApplication14_autoTest_190326.Models;
using AvaloniaApplication14_Di_test_1125.Models;
using AvaloniaApplication14_Inventory_300326.Models.Models;
using Microsoft.Extensions.Options;
using MySqlConnector;
namespace AvaloniaApplication14_Inventory_300326.Models.DataBase;
public class PositionRepository : BaseRepository<Position>, IDisposable
{
public PositionRepository(IOptions<DatabaseSettings> ConnectionString) : base(ConnectionString)
{
OpenConnection();
}
public override List<Position>? GetAll()
{
List<Position> result = new List<Position>();
string sql = "SELECT * FROM Positions";
using (var mc = new MySqlCommand(sql, connection))
{
using (var reader = mc.ExecuteReader())
{
while (reader.Read())
{
Position position = new Position()
{
Id = reader.GetInt32("Id"),
Name = reader.GetString("Name"),
};
result.Add(position);
}
}
}
return result;
}
public override Position? GetById(int id)
{
string sql = "SELECT * FROM Positions WHERE Id = @Id";
Position result = null;
using (var mc = new MySqlCommand(sql, connection))
{
mc.Parameters.AddWithValue("@Id", id);
using (var reader = mc.ExecuteReader())
{
while (reader.Read())
{
result = new Position()
{
Id = reader.GetInt32("Id"),
Name = reader.GetString("Name")
};
}
}
}
return result;
}
public override bool Delete(int id)
{
throw new NotImplementedException();
}
public override bool Update(Position item)
{
throw new NotImplementedException();
}
public override bool Add(Position item)
{
throw new NotImplementedException();
}
public void Dispose()
{
base.Dispose();
}
}

View File

@ -0,0 +1,14 @@
namespace AvaloniaApplication14_Inventory_300326.Models.Models;
public class EmployeeVisual
{
public int Id { get; set; }
public string FullName { get; set; }
public Position Position { get; set; }
public void CreateFromEmployee(Employee employee)
{
Id = employee.Id;
FullName = employee.FullName;
}
}

View File

@ -26,7 +26,10 @@ sealed class Program
service.Configure<DatabaseSettings>(context.Configuration.GetSection("DatabaseSettings"));
service.AddTransient<MainWindow>();
service.AddTransient<MainWindowViewModel>();
service.AddTransient<EquipmeentRepository>();
service.AddTransient<EmployeeRepository>();
service.AddTransient<EquipmentRepository>();
service.AddTransient<PositionRepository>();
}).Build();
BuildAvaloniaApp(host.Services)

View File

@ -0,0 +1,6 @@
namespace AvaloniaApplication14_Inventory_300326.ViewModels;
public class EmployeeEditingWindowViewModel : ViewModelBase
{
}

View File

@ -0,0 +1,6 @@
namespace AvaloniaApplication14_Inventory_300326.ViewModels;
public class EquipmentEditingWindowViewModel : ViewModelBase
{
}

View File

@ -1,12 +1,17 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Input;
using Avalonia.LogicalTree;
using AvaloniaApplication14_Inventory_300326.Models.DataBase;
using AvaloniaApplication14_Inventory_300326.Models.Models;
using AvaloniaApplication14_Inventory_300326.Views;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
namespace AvaloniaApplication14_Inventory_300326.ViewModels;
@ -19,14 +24,12 @@ public partial class MainWindowViewModel : ViewModelBase
[ObservableProperty] private ObservableCollection<Entity> _entities;
[ObservableProperty] private Entity _selectedEntity;
[ObservableProperty] private ObservableCollection<EquipmentVisual> _techs;
[ObservableProperty] private ObservableCollection<Employee> _employees;
[ObservableProperty] private ObservableCollection<EmployeeVisual> _employees;
[ObservableProperty] private ObservableCollection<Position> _positions;
partial void OnEntitiesChanged(ObservableCollection<Entity> value)
{
Console.WriteLine("OnEntitiesChanged");
}
[ObservableProperty] private EquipmentVisual _selectedEquipmentVisual;
[ObservableProperty] private EmployeeVisual _selectedEmployeeVisual;
[ObservableProperty] private Position _selectedPosition;
partial void OnSelectedEntityChanged(Entity value)
{
if (_currentWindow != null)
@ -35,18 +38,33 @@ public partial class MainWindowViewModel : ViewModelBase
{
case 0:
GetTeches();
ShowTeches();
break;
case 1:
GetEmployees();
ShowEmployees();
break;
case 2:
GetPositions();
ShowPositions();
break;
}
}
}
public MainWindowViewModel(IServiceProvider serviceProvider, EquipmeentRepository equipmeentRepository)
//###################################################################################################################
public MainWindowViewModel(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
@ -57,11 +75,80 @@ public partial class MainWindowViewModel : ViewModelBase
Entities.Add(new Entity(){Id = 2, Name = "Должности"});
SelectedEntity = Entities[0];
List<Equipment> test = equipmeentRepository.GetAll();
Techs = new ObservableCollection<EquipmentVisual>();
using (var equipmentRepository = _serviceProvider.GetService<EquipmentRepository>())
{
List<Equipment> equipments = equipmentRepository.GetAll();
Techs = new ObservableCollection<EquipmentVisual>(ConvertListEqToEqVis(equipments));
}
}
//###################################################################################################################
private void GetTeches()
{
using (var equipmentRepository = _serviceProvider.GetService<EquipmentRepository>())
{
List<Equipment> teches = equipmentRepository.GetAll();
Techs = new ObservableCollection<EquipmentVisual>(ConvertListEqToEqVis(teches));
}
}
public void GetEmployees()
{
using (var employeeRepository = _serviceProvider.GetService<EmployeeRepository>())
{
var employees = employeeRepository.GetAll();
Employees = new ObservableCollection<EmployeeVisual>(ConvertListEmplToEmplVis(employees));
}
}
public void GetPositions()
{
using (var positionRepository = _serviceProvider.GetService<PositionRepository>())
{
var positions = positionRepository.GetAll();
Positions = new ObservableCollection<Position>(positions);
}
}
public void ShowTeches()
{
_currentWindow.ScrollViewerDataGridTech.IsVisible = true;
_currentWindow.ScrollViewerDataGridEmpl.IsVisible = false;
_currentWindow.ScrollViewerDataGridPos.IsVisible = false;
}
public void ShowEmployees()
{
_currentWindow.ScrollViewerDataGridTech.IsVisible = false;
_currentWindow.ScrollViewerDataGridEmpl.IsVisible = true;
_currentWindow.ScrollViewerDataGridPos.IsVisible = false;
}
public void ShowPositions()
{
_currentWindow.ScrollViewerDataGridTech.IsVisible = false;
_currentWindow.ScrollViewerDataGridEmpl.IsVisible = false;
_currentWindow.ScrollViewerDataGridPos.IsVisible = true;
}
private void DoubleTappedTechDataGrid()
{
Console.WriteLine("DoubleTappedTechDataGrid");
}
private void DoubleTappedEmployeeDataGrid()
{
}
private void DoubleTappedPositionDataGrid()
{
}
public List<EquipmentVisual> ConvertListEqToEqVis(List<Equipment> equipments)
{
List<EquipmentVisual> result = new List<EquipmentVisual>();
@ -77,9 +164,35 @@ public partial class MainWindowViewModel : ViewModelBase
}
return result;
}
public List<EmployeeVisual> ConvertListEmplToEmplVis(List<Employee> employees)
{
List<EmployeeVisual> result = new List<EmployeeVisual>();
foreach (var item in employees)
{
EmployeeVisual eve = new EmployeeVisual();
using (var posRepo = _serviceProvider.GetRequiredService<PositionRepository>())
{
eve.CreateFromEmployee(item);
eve.Position = posRepo.GetById(item.PositionId);
}
result.Add(eve);
}
return result;
}
public void SetScreen(MainWindow window)
{
_currentWindow = window;
Console.WriteLine(window);
ShowTeches();
INIT();
}
private void INIT()
{
_currentWindow.DataGridTech.DoubleTapped += (sender, args) => DoubleTappedTechDataGrid();
_currentWindow.DataGridEmployees.DoubleTapped += (sender, args) => DoubleTappedEmployeeDataGrid();
_currentWindow.DataGridPositions.DoubleTapped += (sender, args) => DoubleTappedPositionDataGrid();
}
}

View File

@ -0,0 +1,5 @@
namespace AvaloniaApplication14_Inventory_300326.ViewModels;
public class PositionEditingWindowViewModel : ViewModelBase
{
}

View File

@ -0,0 +1,14 @@
<Window xmlns="https://github.com/avaloniaui"
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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="AvaloniaApplication14_Inventory_300326.Views.EmployeeEditingWindow"
Title="EmployeeEditingWindow">
<StackPanel>
<TextBox Watermark="ФИО"></TextBox>
<ComboBox></ComboBox>
</StackPanel>
</Window>

View File

@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace AvaloniaApplication14_Inventory_300326.Views;
public partial class EmployeeEditingWindow : Window
{
public EmployeeEditingWindow()
{
InitializeComponent();
}
}

View File

@ -0,0 +1,9 @@
<Window xmlns="https://github.com/avaloniaui"
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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="AvaloniaApplication14_Inventory_300326.Views.EquipmentEditingWindow"
Title="EquipmentEditingWindow">
</Window>

View File

@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace AvaloniaApplication14_Inventory_300326.Views;
public partial class EquipmentEditingWindow : Window
{
public EquipmentEditingWindow()
{
InitializeComponent();
}
}

View File

@ -11,39 +11,47 @@
<TabControl>
<TabItem Header="Справочники">
<StackPanel>
<ComboBox ItemsSource="{Binding Entities}" SelectedItem="{Binding SelectedEntity}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Grid RowDefinitions="*" ColumnDefinitions="*">
<ScrollViewer>
<DataGrid x:Name="ScrollViewerDataGridTech" ItemsSource="{Binding Techs}">
<DataGrid.Columns>
<DataGridTextColumn Header="Инвентарный номер" Binding="{Binding InvNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="Название" Binding="{Binding Name}"></DataGridTextColumn>
<DataGridTextColumn Header="Дата приобретения" Binding="{Binding Date}"></DataGridTextColumn>
<DataGridTextColumn Header="Стоимость" Binding="{Binding Cost}"></DataGridTextColumn>
<DataGridTextColumn Header="Списано ли" Binding="{Binding IsWrittenOff}"></DataGridTextColumn>
<DataGridTextColumn Header="Текущий владелец" Binding="{Binding CurrentEmployeeId}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
<ScrollViewer>
<DataGrid x:Name="ScrollViewerDataGridEmpl" ItemsSource="{Binding Employees}">
</DataGrid>
</ScrollViewer>
<ScrollViewer>
<DataGrid x:Name="ScrollViewerDataGridPos" ItemsSource="{Binding Positions}">
</DataGrid>
</ScrollViewer>
</Grid>
</StackPanel>
<Grid RowDefinitions="Auto *">
<StackPanel Orientation="Horizontal" >
<ComboBox ItemsSource="{Binding Entities}" SelectedItem="{Binding SelectedEntity}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Content="Добавить" Margin="10,0,0,0"></Button>
</StackPanel>
<ScrollViewer Grid.Row="1" x:Name="ScrollViewerDataGridTech">
<DataGrid x:Name="DataGridTech" ItemsSource="{Binding Techs}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Инвентарный номер" Binding="{Binding InvNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="Название" Binding="{Binding Name}"></DataGridTextColumn>
<DataGridTextColumn Header="Дата приобретения" Binding="{Binding Date}"></DataGridTextColumn>
<DataGridTextColumn Header="Стоимость" Binding="{Binding Cost}"></DataGridTextColumn>
<DataGridTextColumn Header="Списано ли" Binding="{Binding IsWrittenOff}"></DataGridTextColumn>
<DataGridTextColumn Header="Текущий ответственный" Binding="{Binding CurrentEmployee.FullName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" x:Name="ScrollViewerDataGridEmpl">
<DataGrid x:Name="DataGridEmployees" ItemsSource="{Binding Employees}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="ФИО" Binding="{Binding FullName}"></DataGridTextColumn>
<DataGridTextColumn Header="Должность" Binding="{Binding Position.Name}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" x:Name="ScrollViewerDataGridPos">
<DataGrid x:Name="DataGridPositions" ItemsSource="{Binding Positions}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Название" Binding="{Binding Name}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
</TabItem>
<TabItem Header="Операции">

View File

@ -1,4 +1,9 @@
using System;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.LogicalTree;
using Avalonia.VisualTree;
using AvaloniaApplication14_Inventory_300326.ViewModels;
namespace AvaloniaApplication14_Inventory_300326.Views;
@ -8,7 +13,7 @@ public partial class MainWindow : Window
public MainWindow(MainWindowViewModel viewModel)
{
DataContext = viewModel;
viewModel.SetScreen(this);
InitializeComponent();
viewModel.SetScreen(this);
}
}

View File

@ -0,0 +1,9 @@
<Window xmlns="https://github.com/avaloniaui"
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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="AvaloniaApplication14_Inventory_300326.Views.PositionEditingWindow"
Title="PositionEditingWindow">
</Window>

View File

@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace AvaloniaApplication14_Inventory_300326.Views;
public partial class PositionEditingWindow : Window
{
public PositionEditingWindow()
{
InitializeComponent();
}
}

View File

@ -1 +1 @@
e1249ffb9cd09bddc505ada9ef39da7ea4d26088608c96c2743b4efc3b96e16d
2a84cdfd20fd3ba333d939c83e85ef60a8d19237a93d0faa0b7453529059536d

View File

@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("AvaloniaApplication14_Inventory_300326")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b169a275b4b92a8d251235436b93bd0960f3e459")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cbf2b3c1d343b3e775109533b3de5382ddf0d55c")]
[assembly: System.Reflection.AssemblyProductAttribute("AvaloniaApplication14_Inventory_300326")]
[assembly: System.Reflection.AssemblyTitleAttribute("AvaloniaApplication14_Inventory_300326")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
8207d089541f27ef630877f99fb8ddb693d2b2d0d47fd66842c9106296f96e66
579358abf2419881fdf5be6d074ce09167d36f918fb2742d80f5fe41cf044223

View File

@ -24,5 +24,14 @@ build_property.EnableCodeStyleSeverity =
[/home/student/RiderProjects/AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326/App.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/home/student/RiderProjects/AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326/Views/EmployeeEditingWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/home/student/RiderProjects/AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326/Views/EquipmentEditingWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/home/student/RiderProjects/AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326/Views/MainWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/home/student/RiderProjects/AvaloniaApplication14_Inventory_300326/AvaloniaApplication14_Inventory_300326/Views/PositionEditingWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml

View File

@ -1 +1 @@
05243996e8958daf2ebabc094115b0206a262c6457c45b77b7c6600d3aa1f314
bf4cf4167d1af19dcdd79f28d74d6e280f089043cf069c74a3cde874464ff374