lastlast 1.0.0

dotnet add package lastlast --version 1.0.0
NuGet\Install-Package lastlast -Version 1.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="lastlast" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add lastlast --version 1.0.0
#r "nuget: lastlast, 1.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install lastlast as a Cake Addin
#addin nuget:?package=lastlast&version=1.0.0

// Install lastlast as a Cake Tool
#tool nuget:?package=lastlast&version=1.0.0

Пакеты Microsoft.EntityFrameworkCore.Proxies Microsoft.EntityFrameworkCore.Tools Pomelo.EntityFrameworkCore.MySql

Подключение

dotnet tool install --global dotnet-ef --version 5.0.0 cd ./WpfApp6 dotnet ef dbcontext scaffold "server=localhost;user=root;password=2580;database=trade" "Pomelo.EntityFrameworkCore.MySql" --output-dir Models using название проекта.Models;

Models context

public static sakilaContext context { get; } = new sakilaContext();

public static CafeManagementContext _context;

public static CafeManagementContext GetContext()
{
    if (_context == null) _context = new CafeManagementContext();
    return _context;
}

Models User

public string FIO
{
    get
    {
        Employee emp = App.context.Employees.ToList().Find(u => u.UserId == UserId);
        return $"{emp.FirstName} {emp.LastName}";
    }

}
public string Id
{
    get
    {
        Employee emp = App.context.Employees.ToList().Find(u => u.UserId == UserId);
        return $"{emp.EmployeeId}";
    }

}
public string dolgnost
{
    get
    {
        return $"{Role}";

    }
}

Alldata cs

internal class AllData
{
    public static int ID;
}

Авторизация xaml

Title="Авторизация" Height="498" Width="384" FontSize="20" WindowStartupLocation="CenterScreen">

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="338*"/> <ColumnDefinition Width="31*"/> </Grid.ColumnDefinitions> <StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" Background="#FF8CFD93" Grid.ColumnSpan="2" Margin="15,0,0,0"> <Image Height="203" Width="194" Source="/Images/free-icon-cafe-1223041.png" /> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="80" >Логин:</TextBlock> <Label/> <TextBox x:Name="Login" Width="250" /> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="80">Пароль:</TextBlock> <Label/> <PasswordBox x:Name="Password" Visibility="Collapsed" Width="250" /> <TextBox x:Name="Password2" Visibility="Collapsed" Width="250" TextChanged="Password2_TextChanged"/> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <Label Width="76"/> <CheckBox x:Name="Safety" Checked="Safety_Checked" Unchecked="Safety_Unchecked">Показать/Скрыть пароль</CheckBox> </StackPanel> <Label/> <Button x:Name="Enter" Background="#FF5687FF" Click="Enter_Click">Войти</Button> <Label/> <Button x:Name="Exit" Background="#FF5687FF" Click="Exit_Click">Выход</Button> </StackPanel> </Grid>

Авторизация cs

using CafeManagement.Classes; using CafeManagement.Model; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для Authorization.xaml /// </summary> public partial class Authorization : System.Windows.Window { public Authorization() { InitializeComponent(); Password.PasswordChanged += Password_PasswordChanged; Password.Visibility = Visibility.Visible; Password.Password = Password2.Text; } private void Password_PasswordChanged(object sender, RoutedEventArgs e) { Password2.Text = Password.Password; } private void GuestEnter_Click(object sender, RoutedEventArgs e) { this.Close(); } private void Password2_TextChanged(object sender, TextChangedEventArgs e) { Password.Password = Password2.Text; } private void Safety_Checked(object sender, RoutedEventArgs e) { Password2.Visibility = Visibility.Visible; Password.Visibility = Visibility.Collapsed; Password2.Text = Password.Password; }

    private void Safety_Unchecked(object sender, RoutedEventArgs e)
    {
        Password2.Visibility = Visibility.Collapsed;
        Password.Visibility = Visibility.Visible;
        Password.Password = Password2.Text;
    }

    private void Enter_Click(object sender, RoutedEventArgs e)
    {
        if (Login.Text.Length != 0 && Password.Password.Length != 0 && Password2.Text.Length != 0)
        {
            User user = App.context.Users.ToList().Find(u => u.Username == Login.Text && u.Password == Password.Password && u.Password == Password2.Text);

            if (user != null)
            {

                if (user.Role == "Администратор")
                {
                    AllData.ID = user.UserId;
                    MessageBox.Show($"Добро пожаловать, {user.dolgnost} {user.FIO} !");
                    MenuAdmin adminMenu = new MenuAdmin();
                    adminMenu.Show();
                    this.Close();
                    return;
                }
                else if (user.Role == "Повар")
                {
                    AllData.ID = user.UserId;
                    MessageBox.Show($"Добро пожаловать, {user.dolgnost} {user.FIO} !");
                    MenuCook cookMenu = new MenuCook();
                    cookMenu.Show();
                    this.Close();
                    return;
                }
                else if (user.Role == "Официант")
                {
                    AllData.ID = user.UserId;
                    MessageBox.Show($"Добро пожаловать, {user.dolgnost} {user.FIO} !");
                    MenuWaiter waiterMenu = new MenuWaiter();
                    waiterMenu.Show();
                    this.Close();
                    return;
                }
            }

            else
            {
                MessageBox.Show("Вы ввели неверные данные!");
            }
        }
        else
        {
            MessageBox.Show("Вы должны заполнить все поля!");
        }
    }



    private void Exit_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}

}

AddEmployee xaml

WindowStartupLocation="CenterScreen" Title="Добавить сотрудника" Height="361" Width="600"  FontSize="20">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FF8CFD93" Width="580"> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Фамилия</TextBlock> <TextBox x:Name="Surname" Width="300" Text="{Binding FirstName}" /> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Имя</TextBlock> <TextBox x:Name="Name" Width="300" Text="{Binding LastName}"></TextBox> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Роль</TextBlock> <ComboBox x:Name="Role" Width="300" Text="{Binding User.Role}"> <ComboBoxItem>Администратор</ComboBoxItem> <ComboBoxItem>Повар</ComboBoxItem> <ComboBoxItem>Официант</ComboBoxItem> </ComboBox> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Логин</TextBlock> <TextBox x:Name="Username" Width="300" Text="{Binding User.Username}"></TextBox> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Пароль</TextBlock> <TextBox x:Name="Password" Width="300" Text="{Binding User.Password}"></TextBox> </StackPanel> <Label/> <Button x:Name="Add" Click="Add_Click" Background="#FF5687FF " Width="534">Сохранить</Button> <Label/> <Button x:Name="Back" Click="Back_Click" Background="#FF5687FF " Width="537">Вернуться</Button> </StackPanel> </Grid>

AddEmployee cs

using CafeManagement.Model; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для AddEmployeee.xaml /// </summary> public partial class AddEmployeee : System.Windows.Window { public AddEmployeee() { InitializeComponent(); }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        MessageBoxResult result = MessageBox.Show("Вы уверены, что хотите выйти? Новые данные не сохранятся.", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question);

        if (result == MessageBoxResult.Yes)
        {
            UsersAdmin usersAdmin = new UsersAdmin();
            usersAdmin.Show();
            this.Close();
        }
    }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        User newUser = new User
        {
            Role = Role.Text,
            Username = Username.Text,
            Password = Password.Text,
        };
        CafeManagementContext context = CafeManagementContext.GetContext();
        context.Users.Add(newUser);
        context.SaveChanges();
        Employee newEmployee = new Employee
        {
            FirstName = Surname.Text,
            LastName = Name.Text,
            Status = "Работает",
            UserId = newUser.UserId,
        };
        context.Employees.Add(newEmployee);
        context.SaveChanges();

        MessageBox.Show("Успешно добавлено");
        UsersAdmin usersAdmin = new UsersAdmin();
        usersAdmin.Show();
        this.Close();

    }

}

}

AddOrder xaml

WindowStartupLocation="CenterScreen" Title="Создание заказа" Height="717" Width="600"  FontSize="20">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FF8CFD93 " Width="580" Height="676"> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Номер столика</TextBlock> <TextBox x:Name="Number" Width="300" Text="{Binding TableNumber}" /> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Количество клиентов</TextBlock> <TextBox x:Name="QuantityClient" Width="300" Text="{Binding CustomerCount}"></TextBox> </StackPanel> <Label/> <StackPanel Orientation="Horizontal"> <TextBlock Width="230">Блюдо</TextBlock> <ComboBox x:Name="Diches" Width="300" SelectedValuePath="DishId"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock> <Run Text="{Binding DishName}" /> <Run Text=" " /> <Run Text="{Binding Price}" /> </TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>

    </StackPanel>
    <Label/>
    <StackPanel Orientation="Horizontal">
        <TextBlock Width="230" Text="{Binding Quantity}">Количество</TextBlock>
        <TextBox x:Name="Quantity" Width="300">
        </TextBox>
    </StackPanel>
    <Label/>
    <Button x:Name="AddDish" Background="#FF5687FF " Click="AddDish_Click_1" >Добавить блюдо в заказ</Button>
    <Label/>
    <StackPanel Orientation="Vertical" Height="381">
        <TextBlock Width="574" TextAlignment="Center">Выбранные блюда:</TextBlock>
        <Label x:Name="EmployeeId" Height="8"/>
        <DataGrid x:Name="ordersListView" Height="338" Width="588" Background="{x:Null}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="№" Binding="{Binding Номер}" Width="80"/>
                <DataGridTextColumn Header="Блюдо" Binding="{Binding Блюдо}" Width="200"/>
                <DataGridTextColumn Header="Количество (шт.)" Binding="{Binding Количество}" Width="130"/>
                <DataGridTextColumn Header="Цена (руб.)" Binding="{Binding Цена}" Width="130"/>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
    <Button x:Name="Add" Click="Add_Click" Background="#FF5687FF " Width="534">Сохранить</Button>
    <Label/>
    <Button x:Name="Back" Click="Back_Click" Background="#FF5687FF " Width="537">Вернуться</Button>
</StackPanel>

</Grid>

AddOrder cs

using CafeManagement.Classes; using CafeManagement.Model; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Metadata; 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.Shapes; using System.Xml.Linq;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для AddOrder.xaml /// </summary> public partial class AddOrder : System.Windows.Window { private int dishCounter = 1; private int? orderNumber; public AddOrder() { InitializeComponent();

        List<Dish> participantsList = App.context.Dishes.ToList();
        Diches.ItemsSource = participantsList;
        orderNumber = null;
    }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        OrdersWaiter ordersWaiter = new OrdersWaiter();
        ordersWaiter.Show();
        this.Close();
    }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Заказ успешно создан!", "Уведомление", MessageBoxButton.OK);
        OrdersWaiter ordersWaiter = new OrdersWaiter();
        ordersWaiter.Show();
        this.Close();
    }

    private void AddDish_Click_1(object sender, RoutedEventArgs e)
    {
        if (string.IsNullOrWhiteSpace(Diches.Text) || string.IsNullOrWhiteSpace(Quantity.Text) || string.IsNullOrWhiteSpace(Number.Text) || string.IsNullOrWhiteSpace(QuantityClient.Text) || Convert.ToInt32(Number.Text) == 0)
        {
            MessageBox.Show("Пожалуйста, заполните все поля перед сохранением.", "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
            return;
        }
        if (orderNumber == null)
        {
            Order newOrder = new()
            {
                OrderStatus = "Новый",
                ShiftId = 3,
                TableNumber = int.Parse(QuantityClient.Text),
                CustomerCount = int.Parse(QuantityClient.Text)
            };

            App.context.Orders.Add(newOrder);
            App.context.SaveChanges();
            orderNumber = newOrder.OrderId;
            QuantityClient.IsEnabled = false;
            Number.IsEnabled = false;
        }
        Dish selectedDish = Diches.SelectedItem as Dish;

        if (selectedDish != null)
        {
            if (App.context.Orderdishes.Any(od => od.OrderId == orderNumber && od.DishId == selectedDish.DishId))
            {
                MessageBox.Show("Это блюдо уже добавлено в заказ.", "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }
            Orderdish orderDish = new()
            {
                OrderId = orderNumber,
                DishId = selectedDish.DishId,
                Quantity = int.Parse(Quantity.Text)
            };

            App.context.Orderdishes.Add(orderDish);
            App.context.SaveChanges();

            ordersListView.Items.Add(new
            {
                Номер = dishCounter,
                Блюдо = selectedDish.DishName,
                Количество = orderDish.Quantity,
                Цена = selectedDish.Price
            });

            dishCounter++;
            Diches.SelectedIndex = -1;
            Quantity.Clear();
        }
    }
}

}

MenuAdmin xaml

Title="Меню администартора" Height="515" Width="521" FontSize="20" WindowStartupLocation="CenterScreen" Background="#FF8CFD93 "> <Grid> <StackPanel Margin="15,0,12,9" Grid.RowSpan="2"> <StackPanel Orientation="Horizontal" Width="448" > <Label/> <Image Source="/images/free-icon-cafe-1223041.png" Height="60" Width="60"/> <Label Content="Меню администратора" Margin="14,11,0,0" VerticalAlignment="Top" FontSize="32" Width="365"/> </StackPanel> <Label Height="37"/> <StackPanel Width="450" Height="368" > <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <Button x:Name="Users" Background="#FF5687FF " Click="Users_Click" Height="45" Width="434">Сотрудники</Button> <Label/> <Button x:Name="Shifts" Background="#FF5687FF " Click="Shifts_Click" Height="45" Width="437">Смены</Button> <Label/> <Button x:Name="Orders" Background="#FF5687FF " Click="Orders_Click" Height="45" Width="439">Заказы</Button> <Label Height="61"/> <Button x:Name="Back" Background="#FF5687FF " Click="Back_Click" Height="31" Width="439">Вернуться</Button> <Label/> <Button x:Name="Exit" Background="#FF5687FF " Click="Exit_Click" Height="32" Width="441">Выход</Button> <Label/> </StackPanel> </StackPanel> </Grid>

MenuAdmin cs

using CafeManagement.Classes; using CafeManagement.Model; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для MenuAdmin.xaml /// </summary> public partial class MenuAdmin : System.Windows.Window { public MenuAdmin() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } }

    private void Users_Click(object sender, RoutedEventArgs e)
    {
        UsersAdmin usersAdmin = new UsersAdmin();
        usersAdmin.Show();
        this.Close();
    }

    private void Shifts_Click(object sender, RoutedEventArgs e)
    {
        ShiftsAdmin shiftsAdmin = new ShiftsAdmin();
        shiftsAdmin.Show();
        this.Close();
    }

    private void Orders_Click(object sender, RoutedEventArgs e)
    {
        OrdersMenu ordersMenu = new OrdersMenu();
        ordersMenu.Show();
        this.Close();
    }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        Authorization authorization = new Authorization();
        authorization.Show();
        this.Close();
    }

    private void Exit_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}

}

MenuCook xaml

Title="Меню повара" Height="515" Width="521" FontSize="20" WindowStartupLocation="CenterScreen" Background="#FF8CFD93 "> <Grid> <Grid.RowDefinitions> <RowDefinition Height="217*"/> <RowDefinition Height="230*"/> </Grid.RowDefinitions> <StackPanel Margin="15,0,12,9" Grid.RowSpan="2"> <StackPanel Orientation="Horizontal" Width="326" > <Label/> <Image Source="/images/free-icon-cafe-1223041.png" Height="60" Width="60"/> <Label Content="Меню повара" Margin="14,11,0,0" VerticalAlignment="Top" FontSize="32" Width="365"/> </StackPanel> <Label Height="37"/> <StackPanel Width="450" Height="368" > <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <Button x:Name="Orders" Background="#FF5687FF " Click="Orders_Click" Height="45" Width="434">Заказы</Button> <Label/> <Button x:Name="Back" Background="#FF5687FF " Click="Back_Click" Height="31" Width="439">Вернуться</Button> <Label/> <Button x:Name="Exit" Background="#FF5687FF " Click="Exit_Click" Height="32" Width="441">Выход</Button> <Label/> </StackPanel> </StackPanel> </Grid>

MenuCook cs

using CafeManagement.Classes; using CafeManagement.Model; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для MenuCook.xaml /// </summary> public partial class MenuCook : System.Windows.Window { public MenuCook() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        Authorization authorization = new Authorization();
        authorization.Show();
        this.Close();
    }

    private void Exit_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    private void Orders_Click(object sender, RoutedEventArgs e)
    {
        OrdersCook ordersCook = new OrdersCook();
        ordersCook.Show();
        this.Close();
    }
}

}

MenuWaiter xaml

Title="Меню администартора" Height="515" Width="521" FontSize="20" WindowStartupLocation="CenterScreen" Background="#FF8CFD93 "> <Grid> <Grid.RowDefinitions> <RowDefinition Height="217*"/> <RowDefinition Height="230*"/> </Grid.RowDefinitions> <StackPanel Margin="15,0,12,9" Grid.RowSpan="2"> <StackPanel Orientation="Horizontal" Width="377" > <Label/> <Image Source="/images/free-icon-cafe-1223041.png" Height="60" Width="60"/> <Label Content="Меню официанта" Margin="14,11,0,0" VerticalAlignment="Top" FontSize="32" Width="365"/> </StackPanel> <Label Height="37"/> <StackPanel Width="450" Height="368" > <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <Button x:Name="Orders" Background="#FF5687FF " Click="Orders_Click" Height="45" Width="439">Заказы</Button> <Label/> <Button x:Name="Back" Background="#FF5687FF " Click="Back_Click" Height="31" Width="439">Вернуться</Button> <Label/> <Button x:Name="Exit" Background="#FF5687FF " Click="Exit_Click" Height="32" Width="441">Выход</Button> <Label/> </StackPanel> </StackPanel> </Grid>

MenuWaiter cs

using CafeManagement.Classes; using CafeManagement.Model; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для MenuWaiter.xaml /// </summary> public partial class MenuWaiter : System.Windows.Window { public MenuWaiter() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        Authorization authorization = new Authorization();
        authorization.Show();
        this.Close();
    }

    private void Exit_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    private void Orders_Click(object sender, RoutedEventArgs e)
    {
        OrdersWaiter ordersWaiter = new OrdersWaiter();
        ordersWaiter.Show();
        this.Close();
    }
}

}

OrdersCook xaml

Title="Заказы" MinHeight="300" MinWidth="700" FontSize="22" Background="#FF8CFD93 " WindowStartupLocation="CenterScreen" Height="926" Width="1003" DataContext="{Binding RelativeSource={RelativeSource Self}}">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Height="883" Width="884"> <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <ListView x:Name="ordersListView" Height="663" AlternationCount="2" MouseUp="ordersListView_MouseUp"> <ListView.View> <GridView> <GridViewColumn Header="Номер столика" DisplayMemberBinding="{Binding TableNumber}" /> <GridViewColumn Header="Количество клиентов" DisplayMemberBinding="{Binding CustomerCount}" /> <GridViewColumn Header="Статус заказа" DisplayMemberBinding="{Binding OrderStatus}" /> <GridViewColumn Header="Блюда в заказе"> <GridViewColumn.CellTemplate> <DataTemplate> <ItemsControl ItemsSource="{Binding DishList}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding DishName}" Margin="5"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> <Label Height="14"/> <Button Content="Заказ готов" Background="#FF5687FF " Height="51" Click="MarkOrderAsReady_Click"/> <Label Height="20"/> <Button x:Name="back" Background="#FF5687FF " Height="51" Click="back_Click" >Вернуться</Button>

</StackPanel>

</Grid>

OrdersCook cs

using CafeManagement.Classes; using CafeManagement.Model; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для OrdersCook.xaml /// </summary> public partial class OrdersCook : System.Windows.Window { public OrdersCook() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } LoadOrders(); } private void LoadOrders() { using (var dbContext = new CafeManagementContext()) { var orders = dbContext.Orders .Include(o ⇒ o.Orderdishes) .ThenInclude(od ⇒ od.Dish) .ToList();

            var orderData = orders.Select(order => new
            {
                order.OrderId,
                order.TableNumber,
                order.CustomerCount,
                order.OrderStatus,
                DishList = order.Orderdishes.Select(od => new
                {
                    DishName = od.Dish?.DishName
                }).ToList()
            }).ToList();

            ordersListView.ItemsSource = orderData;
        }
    }
    private void MarkOrderAsReady_Click(object sender, RoutedEventArgs e)
    {
        if (ordersListView.SelectedItem != null)
        {
            var selectedOrder = (dynamic)ordersListView.SelectedItem;
            int orderId = selectedOrder.OrderId; // Используем OrderId вместо TableNumber
            UpdateOrderStatus(orderId, "Готов");
            LoadOrders();
        }
    }

    private void UpdateOrderStatus(int tableNumber, string newStatus)
    {
        using (var dbContext = new CafeManagementContext())
        {
            var orderToUpdate = dbContext.Orders.FirstOrDefault(o => o.OrderId == tableNumber);

            if (orderToUpdate != null)
            {
                orderToUpdate.OrderStatus = newStatus;
                dbContext.SaveChanges();
            }
        }
    }

    private void ordersListView_MouseUp(object sender, MouseButtonEventArgs e)
    {
        if (ordersListView.SelectedItem != null)
        {
            var selectedOrder = (dynamic)ordersListView.SelectedItem;
            int orderId = selectedOrder.OrderId; // Используем OrderId вместо TableNumber

            MessageBox.Show($"Выбран заказ с номером {orderId}!");
        }
    }



    private void back_Click(object sender, RoutedEventArgs e)
    {
        MenuCook menuCook = new MenuCook();
        menuCook.Show();
        this.Close();
    }
}

}

OrdersMenu xaml

Title="Заказы" MinHeight="300" MinWidth="700" FontSize="22" Background="#FF8CFD93 " WindowStartupLocation="CenterScreen" Height="926" Width="1003">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Height="883" Width="884"> <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <ListView x:Name="ordersListView" Height="745" AlternationCount="2"> <ListView.View> <GridView> <GridViewColumn Header="Номер столика" DisplayMemberBinding="{Binding TableNumber}" /> <GridViewColumn Header="Количество клиентов" DisplayMemberBinding="{Binding CustomerCount}" /> <GridViewColumn Header="Статус заказа" DisplayMemberBinding="{Binding OrderStatus}" /> <GridViewColumn Header="Блюда в заказе"> <GridViewColumn.CellTemplate> <DataTemplate> <ItemsControl ItemsSource="{Binding DishList}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding DishName}" Margin="5"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> <Label Height="17"/> <Button x:Name="back" Background="#FF5687FF " Height="50" Click="back_Click">Вернуться</Button> </StackPanel> </Grid>

OrdersMenu cs

using CafeManagement.Classes; using CafeManagement.Model; using Microsoft.EntityFrameworkCore; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для OrdersMenu.xaml /// </summary> public partial class OrdersMenu : System.Windows.Window { public OrdersMenu() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } LoadOrders(); } private void LoadOrders() { using (var dbContext = new CafeManagementContext()) { var orders = dbContext.Orders .Include(o ⇒ o.Orderdishes) .ThenInclude(od ⇒ od.Dish) .ToList();

            var orderData = orders.Select(order => new
            {
                order.TableNumber,
                order.CustomerCount,
                order.OrderStatus,
                DishList = order.Orderdishes.Select(od => new
                {
                    DishName = od.Dish?.DishName
                }).ToList()
            }).ToList();

            ordersListView.ItemsSource = orderData;
        }
    }




    private void back_Click(object sender, RoutedEventArgs e)
    {
        MenuAdmin menuAdmin = new MenuAdmin();
        menuAdmin.Show();
        this.Close();
    }
}

}

OrdersWaiter xaml

Title="Заказы" MinHeight="300" MinWidth="700" FontSize="22" Background="#FF8CFD93 " WindowStartupLocation="CenterScreen" Height="926" Width="1003" DataContext="{Binding RelativeSource={RelativeSource Self}}">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Height="883" Width="884"> <StackPanel> <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <Button x:Name="AddOrder" Height="48" Width="246" HorizontalAlignment="Left" Background="#FF5687FF " Click="AddOrder_Click">+ Новый заказ</Button> </StackPanel> <Label/> <ListView x:Name="ordersListView" Height="615" AlternationCount="2" MouseUp="ordersListView_MouseUp"> <ListView.View> <GridView> <GridViewColumn Header="Номер столика" DisplayMemberBinding="{Binding TableNumber}" /> <GridViewColumn Header="Количество клиентов" DisplayMemberBinding="{Binding CustomerCount}" /> <GridViewColumn Header="Статус заказа" DisplayMemberBinding="{Binding OrderStatus}" /> <GridViewColumn Header="Блюда в заказе"> <GridViewColumn.CellTemplate> <DataTemplate> <ItemsControl ItemsSource="{Binding DishList}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding DishName}" Margin="5"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> <Label Height="14"/> <Button Content="Заказ оплачен" Background="#FF5687FF " Height="51" Click="MarkOrderAsReady_Click"/> <Label/> <Button x:Name="back" Background="#FF5687FF " Height="51" Click="back_Click" >Вернуться</Button> </StackPanel> </Grid>

OrdersWaiter cs

using CafeManagement.Classes; using CafeManagement.Model; using Microsoft.EntityFrameworkCore; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для OrdersWaiter.xaml /// </summary> public partial class OrdersWaiter : System.Windows.Window { public OrdersWaiter() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } LoadOrders(); } private void LoadOrders() { using (var dbContext = new CafeManagementContext()) { var orders = dbContext.Orders .Include(o ⇒ o.Orderdishes) .ThenInclude(od ⇒ od.Dish) .ToList();

            var orderData = orders.Select(order => new
            {
                order.OrderId,
                order.TableNumber,
                order.CustomerCount,
                order.OrderStatus,
                DishList = order.Orderdishes.Select(od => new
                {
                    DishName = od.Dish?.DishName
                }).ToList()
            }).ToList();

            ordersListView.ItemsSource = orderData;
        }
    }
    private void MarkOrderAsReady_Click(object sender, RoutedEventArgs e)
    {
        if (ordersListView.SelectedItem != null)
        {
            var selectedOrder = (dynamic)ordersListView.SelectedItem;
            int orderId = selectedOrder.OrderId; // Используем OrderId вместо TableNumber
            UpdateOrderStatus(orderId, "Оплачен");
            LoadOrders();
        }
    }

    private void UpdateOrderStatus(int tableNumber, string newStatus)
    {
        using (var dbContext = new CafeManagementContext())
        {
            var orderToUpdate = dbContext.Orders.FirstOrDefault(o => o.OrderId == tableNumber);

            if (orderToUpdate != null)
            {
                orderToUpdate.OrderStatus = newStatus;
                dbContext.SaveChanges();
            }
        }
    }

    private void ordersListView_MouseUp(object sender, MouseButtonEventArgs e)
    {
        if (ordersListView.SelectedItem != null)
        {
            var selectedOrder = (dynamic)ordersListView.SelectedItem;
            int orderId = selectedOrder.OrderId; // Используем OrderId вместо TableNumber

            MessageBox.Show($"Выбран заказ с номером {orderId}!");
        }
    }
    private void back_Click(object sender, RoutedEventArgs e)
    {
        MenuCook menuCook = new MenuCook();
        menuCook.Show();
        this.Close();
    }

    private void AddOrder_Click(object sender, RoutedEventArgs e)
    {
        int newOrderNumber = GetNewOrderNumber();

        AddOrder addorder = new AddOrder();
        addorder.Show();
        this.Close();
    }

    private int GetNewOrderNumber()
    {
        return 1;
    }
}

}

ShiftsAdmin xaml

Title="Cмены" MinHeight="300" MinWidth="700" FontSize="22" Background="#FF8CFD93 " WindowStartupLocation="CenterScreen" Height="926" Width="1003">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Height="883" Width="884"> <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <StackPanel/> <Label Height="34"/> <DataGrid x:Name="shiftsDataGrid" CanUserAddRows="False" AutoGenerateColumns="False" SelectionMode="Single" Height="241" Width="690" SelectionChanged="shiftsDataGrid_SelectionChanged"> <DataGrid.Columns> <DataGridTextColumn Header="Тип смены" Binding="{Binding ShiftType}" /> <DataGridTextColumn Header="Начало" Binding="{Binding StartTime}" /> <DataGridTextColumn Header="Окончание" Binding="{Binding EndTime}" /> </DataGrid.Columns> </DataGrid> <StackPanel Orientation="Horizontal" Width="685"> <Label Width="120">Смена:</Label> <TextBlock x:Name="Shifts1" Width="563"/> </StackPanel> <Label/> <DataGrid x:Name="employeesDataGrid" CanUserAddRows="False" AutoGenerateColumns="False" SelectionMode="Single" Height="289" SelectionChanged="employeesDataGrid_SelectionChanged" Width="687"> <DataGrid.Columns> <DataGridTextColumn Header="Имя" Binding="{Binding FirstName}" /> <DataGridTextColumn Header="Фамилия" Binding="{Binding LastName}" /> <DataGridTextColumn Header="Должность" Binding="{Binding Role}" /> </DataGrid.Columns> </DataGrid> <StackPanel Orientation="Horizontal" Width="684"> <Label Width="132">Сотрудник:</Label> <TextBlock x:Name="Emp" Width="551"/> </StackPanel> <Label/> <Button Content="Назначить" Background="#FF5687FF " Click="AssignButton_Click"/> <Label Height="17"/> <Button x:Name="back" Background="#FF5687FF " Click="back_Click">Вернуться</Button>

</StackPanel>

</Grid>

ShiftsAdmin cs

using CafeManagement.Classes; using CafeManagement.Model; using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для ShiftsAdmin.xaml /// </summary> public partial class ShiftsAdmin : System.Windows.Window { // Используйте List вместо ObservableCollection для простоты примера public List<Shift> Shifts { get; set; } = new List<Shift>(); public List<Employee> Employees { get; set; } = new List<Employee>();

    // Выбранные элементы
    private Shift selectedShift;
    private Employee selectedEmployee;

    public ShiftsAdmin()
    {
        InitializeComponent();
        if (AllData.ID != 0)
        {
            User user = App.context.Users.ToList().Find(u => u.UserId == AllData.ID);
            name.Content = user.FIO;
            dolj.Content = user.dolgnost;
        }
        shiftsDataGrid.ItemsSource = Shifts;
        employeesDataGrid.ItemsSource = Employees;

        LoadShifts();
        LoadEmployees();
    }

    private void AssignButton_Click(object sender, RoutedEventArgs e)
    {
        if (selectedShift == null)
        {
            MessageBox.Show("Выберите смену для назначения.", "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
            return;
        }

        if (selectedEmployee == null)
        {
            MessageBox.Show("Выберите сотрудника для назначения.", "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
            return;
        }

        // Проверка, что сотрудник не назначен на выбранную смену
        if (IsEmployeeAssigned(selectedShift.ShiftId, selectedEmployee.EmployeeId))
        {
            MessageBox.Show($"Сотрудник {selectedEmployee.FirstName} {selectedEmployee.LastName} уже назначен на выбранную смену.", "Предупреждение", MessageBoxButton.OK, MessageBoxImage.Warning);
            return;
        }

        Shiftemployee newAssignment = new Shiftemployee
        {
            ShiftId = selectedShift.ShiftId,
            EmployeeId = selectedEmployee.EmployeeId
        };

        SaveAssignment(newAssignment);

        LoadShifts();
        LoadEmployees();

        MessageBox.Show($"Сотрудник {selectedEmployee.FirstName} {selectedEmployee.LastName} успешно назначен на смену '{selectedShift.ShiftType}' с {selectedShift.StartTime} до {selectedShift.EndTime}.", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information);
    }

    private bool IsEmployeeAssigned(int shiftId, int employeeId)
    {
        using (var dbContext = new CafeManagementContext())
        {
            return dbContext.Shiftemployees.Any(se => se.ShiftId == shiftId && se.EmployeeId == employeeId);
        }
    }


    private void LoadShifts()
    {
        using (var dbContext = new CafeManagementContext())
        {
            Shifts.Clear();
            var shifts = dbContext.Shifts.ToList();
            foreach (var shift in shifts)
            {
                Shifts.Add(shift);
            }
        }
    }


    private void LoadEmployees()
    {
        using (var dbContext = new CafeManagementContext())
        {
            var workingEmployees = dbContext.Employees.Where(employee => employee.Status == "Работает").ToList();
            Employees.Clear();

            foreach (var employee in workingEmployees)
            {
                Employees.Add(employee);
            }
        }
    }


    private void shiftsDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        selectedShift = shiftsDataGrid.SelectedItem as Shift;
        Shifts1.Text = selectedShift != null ? $"{selectedShift.ShiftType} {selectedShift.StartTime} {selectedShift.EndTime}" : "";
    }

    private void employeesDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        selectedEmployee = employeesDataGrid.SelectedItem as Employee;

        User user = App.context.Users.ToList().Find(u => u.UserId == selectedEmployee.UserId);
        string dolj = user.dolgnost;

        Emp.Text = selectedEmployee != null ? $"{selectedEmployee.FirstName} {selectedEmployee.LastName} {dolj}" : "";
    }

    private void SaveAssignment(Shiftemployee assignment)
    {
        using (var dbContext = new CafeManagementContext())
        {
            dbContext.Shiftemployees.Add(assignment);
            dbContext.SaveChanges();
        }
    }

    private void back_Click(object sender, RoutedEventArgs e)
    {
        MenuAdmin menuAdmin = new MenuAdmin();
        menuAdmin.Show();
        this.Close();
    }
}

}

UserAdmin xaml

Title="Сотрудники" MinHeight="300" MinWidth="700" FontSize="22" Background="#FF8CFD93 " WindowStartupLocation="CenterScreen" Height="810" Width="1229">

<Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Height="751" Width="1214"> <Label x:Name="dolj" Content="Вы вошли как " HorizontalAlignment="Right"/> <Label x:Name="name" Content="" HorizontalAlignment="Right"/> <StackPanel> <Button x:Name="Add" Background="#FF5687FF " Click="Add_Click" Width="301" >+ Добавить нового сотрудника</Button> </StackPanel> <StackPanel Orientation="Horizontal" Height="23"> <Label x:Name="RecordsCountLabel"/> <Label x:Name="FilteredRecordsCountLabel"/> </StackPanel> <Label/> <DataGrid x:Name="usersView" AutoGenerateColumns="False" Width="1084" Height="523" CanUserAddRows="False" MouseDoubleClick="usersView_MouseDoubleClick"> <DataGrid.Columns> <DataGridTextColumn Header="Номер сотрудника" Binding="{Binding EmployeeId}" /> <DataGridTextColumn Header="Фамилия" Binding="{Binding FirstName}" /> <DataGridTextColumn Header="Имя" Binding="{Binding LastName}" /> <DataGridTextColumn Header="Роль" Binding="{Binding User.Role}" /> <DataGridTextColumn Header="Статус" Binding="{Binding Status}" /> </DataGrid.Columns>

    </DataGrid>
    <Label Height="17"/>
    <Button x:Name="back" Background="#FF5687FF " Click="back_Click">Вернуться</Button>

</StackPanel>

</Grid>

UsersAdmin cs

using CafeManagement.Classes; using CafeManagement.Model; using Microsoft.EntityFrameworkCore; 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.Shapes;

namespace CafeManagement.Window { /// <summary> /// Логика взаимодействия для UsersAdmin.xaml /// </summary> public partial class UsersAdmin : System.Windows.Window { private CafeManagementContext dbContext = new CafeManagementContext(); public List<Employee> Employees { get; set; } = new List<Employee>(); public UsersAdmin() { InitializeComponent(); if (AllData.ID != 0) { User user = App.context.Users.ToList().Find(u ⇒ u.UserId == AllData.ID); name.Content = user.FIO; dolj.Content = user.dolgnost; } Loadata(); } public void Loadata() { List<Employee> tabularsections = dbContext.Employees.Include(t ⇒ t.User).ToList(); usersView.ItemsSource = tabularsections; } private void back_Click(object sender, RoutedEventArgs e) { MenuAdmin menuAdmin = new MenuAdmin(); menuAdmin.Show(); this.Close(); }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        AddEmployeee addEmployeee = new AddEmployeee();
        addEmployeee.Show();
        this.Close();
    }

    private void usersView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (usersView.SelectedItem != null)
        {
            Employee selectedEmployee = (Employee)usersView.SelectedItem;

            // Отображение диалогового окна с вопросом
            MessageBoxResult result = MessageBox.Show($"Вы действительно хотите сменить статус сотрудника {selectedEmployee.FirstName} {selectedEmployee.LastName} на 'Уволен'?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (result == MessageBoxResult.Yes)
            {
                // Если пользователь выбрал 'Да', меняем статус
                selectedEmployee.Status = "Уволен";
                dbContext.SaveChanges();
                Loadata();

                MessageBox.Show($"Статус сотрудника {selectedEmployee.FirstName} {selectedEmployee.LastName} изменен на 'Уволен'.", "Уведомление", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }
    }
}

}

Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0-windows7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 96 4/16/2024