demko_v/EditAgentWindow.axaml.cs

153 lines
4.9 KiB
C#
Raw Normal View History

2025-04-15 21:00:02 +00:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Media.Imaging;
using System.Linq;
using Avalonia.Platform.Storage;
using demko_v.Models;
namespace demko_v;
public partial class EditAgentWindow : Window
{
public string PathToImage = string.Empty;
public Agent agentPresenter;
public List<string> AgentTypesList { get; }
public EditAgentWindow(Agent agentInput)
{
using var ctx = new DemoAgentsContext();
InitializeComponent();
agentPresenter = agentInput;
AgentTypesList = ctx.AgentTypes.Select(a => a.Title).ToList();
TypeAgentAddCombobox.ItemsSource = AgentTypesList;
Otrisovka();
}
private async void EditAgent_OnClick(object? sender, RoutedEventArgs e)
{
using var ctx = new DemoAgentsContext();
if (string.IsNullOrWhiteSpace(TitleTextBox.Text)) return;
agentPresenter.Title = TitleTextBox.Text;
if (!int.TryParse(PriorityTextBox.Text, out int priority)) return;
agentPresenter.Priority = priority;
if (string.IsNullOrWhiteSpace(AddressTextBox.Text)) return;
agentPresenter.Address = AddressTextBox.Text;
if (string.IsNullOrWhiteSpace(InnTextBox.Text)) return;
agentPresenter.Inn = InnTextBox.Text;
if (string.IsNullOrWhiteSpace(KppTextBox.Text)) return;
agentPresenter.Kpp = KppTextBox.Text;
if (string.IsNullOrWhiteSpace(DirectorNameTextBox.Text)) return;
agentPresenter.DirectorName = DirectorNameTextBox.Text;
if (string.IsNullOrWhiteSpace(PhoneNumberTextBox.Text)) return;
agentPresenter.Phone = PhoneNumberTextBox.Text;
if (string.IsNullOrWhiteSpace(EmailTextBox.Text)) return;
agentPresenter.Email = EmailTextBox.Text;
if (TypeAgentAddCombobox.SelectedItem is AgentType selectedAgentType)
{
agentPresenter.AgentTypeId = selectedAgentType.Id;
}
if (!string.IsNullOrEmpty(PathToImage))
{
agentPresenter.Logo = PathToImage;
}
ctx.Agents.Update(agentPresenter);
await ctx.SaveChangesAsync();
Close(agentPresenter);
}
private async Task<Bitmap?> SelectAndSaveImage()
{
var showDialog = StorageProvider.OpenFilePickerAsync(
options: new Avalonia.Platform.Storage.FilePickerOpenOptions()
{
Title = "Select an image",
FileTypeFilter = new[] { FilePickerFileTypes.ImageAll }
});
var storageFile = await showDialog;
try
{
var bmp = new Bitmap(storageFile.First().TryGetLocalPath());
string shortGuid = Guid.NewGuid().ToString("N").Substring(0, 8);
string path = $"/Users/feitanportor/dev/C#/demko_v/demko_v/bin/Debug/net8.0/agents/{shortGuid}.jpg";
bmp.Save(path);
PathToImage = $"agents/{shortGuid}.jpg";
return bmp;
}
catch
{
return null;
}
}
private async void SelectImage(object? sender, RoutedEventArgs e)
{
AgentImage.Source = await SelectAndSaveImage();
}
private void TypeAgentAddCombobox_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
using var ctx = new DemoAgentsContext();
if (TypeAgentAddCombobox.SelectedItem is string selectedTitle)
{
var agentType = ctx.AgentTypes.FirstOrDefault(t => t.Title == selectedTitle);
if (agentType != null)
{
agentPresenter.AgentTypeId = agentType.Id;
}
}
}
private void Otrisovka()
{
using var ctx = new DemoAgentsContext();
TitleTextBox.Text = agentPresenter.Title;
PriorityTextBox.Text = agentPresenter.Priority.ToString();
AddressTextBox.Text = agentPresenter.Address;
InnTextBox.Text = agentPresenter.Inn;
KppTextBox.Text = agentPresenter.Kpp;
DirectorNameTextBox.Text = agentPresenter.DirectorName;
PhoneNumberTextBox.Text = agentPresenter.Phone;
EmailTextBox.Text = agentPresenter.Email;
if (!string.IsNullOrEmpty(agentPresenter.Logo))
{
string imagePath = Path.Combine(Environment.CurrentDirectory, agentPresenter.Logo);
if (File.Exists(imagePath))
{
var bitmap = new Bitmap(imagePath);
AgentImage.Source = bitmap;
PathToImage = agentPresenter.Logo;
}
}
if (agentPresenter.AgentTypeId != 0)
{
var selectedType = ctx.AgentTypes.FirstOrDefault(t => t.Id == agentPresenter.AgentTypeId)?.Title;
if (selectedType != null)
{
TypeAgentAddCombobox.SelectedItem = selectedType;
}
}
}
}