Загрузка данных


using AutoServiceWinForms.Data;
using AutoServiceWinForms.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Windows.Forms;

namespace AutoServiceWinForms.Forms
{
    public partial class ServiceRequestsForm : Form
    {
        public ServiceRequestsForm()
        {
            InitializeComponent();
            this.Text = "Управление заявками";
            this.StartPosition = FormStartPosition.CenterParent;
            LoadData();
        }

        private void LoadData()
        {
            using var context = new AutoServiceDbContext();
            var requests = context.ServiceRequests
                .Include(r => r.Vehicle)
                .ThenInclude(v => v.Client)
                .OrderByDescending(r => r.CreatedAt)
                .ToList();

            dgvRequests.DataSource = requests;

            // Настройка отображения колонок
            dgvRequests.Columns["Id"].Visible = false;
            dgvRequests.Columns["VehicleId"].Visible = false;
            dgvRequests.Columns["Vehicle"].Visible = false;
            
            dgvRequests.Columns["RequestNumber"].HeaderText = "№ Заявки";
            dgvRequests.Columns["CreatedAt"].HeaderText = "Дата создания";
            dgvRequests.Columns["Description"].HeaderText = "Описание работ";
            dgvRequests.Columns["Status"].HeaderText = "Статус";
            dgvRequests.Columns["EstimatedCost"].HeaderText = "Стоимость (₽)";
            dgvRequests.Columns["MasterNotes"].HeaderText = "Примечания мастера";

            // Форматирование стоимости
            dgvRequests.Columns["EstimatedCost"].DefaultCellStyle.Format = "C";
            
            // Автоподбор ширины
            dgvRequests.AutoResizeColumns();
        }

        private void btnRefresh_Click(object sender, EventArgs e) => LoadData();

        private void btnAdd_Click(object sender, EventArgs e)
        {
            using var editForm = new RequestEditForm();
            if (editForm.ShowDialog() == DialogResult.OK)
                LoadData();
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (dgvRequests.CurrentRow == null)
            {
                MessageBox.Show("Выберите заявку для редактирования.", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            var selectedId = (int)dgvRequests.CurrentRow.Cells["Id"].Value;
            using var editForm = new RequestEditForm(selectedId);
            if (editForm.ShowDialog() == DialogResult.OK)
                LoadData();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dgvRequests.CurrentRow == null) return;

            var selectedId = (int)dgvRequests.CurrentRow.Cells["Id"].Value;
            var result = MessageBox.Show("Удалить выбранную заявку?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    using var context = new AutoServiceDbContext();
                    var request = context.ServiceRequests.Find(selectedId);
                    if (request != null)
                    {
                        context.ServiceRequests.Remove(request);
                        context.SaveChanges();
                        LoadData();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка удаления: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            var keyword = txtSearch.Text.Trim().ToLower();
            using var context = new AutoServiceDbContext();
            var filtered = context.ServiceRequests
                .Include(r => r.Vehicle)
                .Where(r => r.RequestNumber.ToLower().Contains(keyword) || r.Description.ToLower().Contains(keyword))
                .OrderByDescending(r => r.CreatedAt)
                .ToList();

            dgvRequests.DataSource = filtered;
        }

        private void txtSearch_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                btnSearch_Click(sender, EventArgs.Empty);
        }
    }
}