Приоритет владельца: sysadmin проверяет весы/принтер/сканер на ноутбуке магазина без входа в кассу. Отдельный exe (food-market.pos.hwcheck), ссылается ТОЛЬКО на pos.core ради Hardware/* — не умеет быть кассой (нет логина, сервера, БД, токенов, сетевых запросов). - pos.core/Hardware/HardwareProbe.cs: детект COM-портов (занят/свободен, VID/PID, описание) и принтеров Windows (имя/порт/в сети/число заданий) — только чтение, очередь не трогаем. WMI под OperatingSystem.IsWindows(); на Linux — базовый COM. - pos.core/Hardware/BarcodeScan.cs: контрольная цифра EAN-13/EAN-8 и оценка «сканер vs ручной набор» по среднему интервалу между символами (чистая логика). - food-market.pos.hwcheck: окно на Avalonia (код, без XAML), светлая тема, русский. Весы (Найти/Прочитать/Запустить-Остановить, live-вес ~350 мс, сырой hex, ручной выбор порта/скорости/протокола), COM-порты с пометкой «занят», принтеры (только чтение), сканер (EAN + тип ввода), «Сохранить/Копировать отчёт». Тестовая печать ВЫКЛ по умолчанию, включается только --allow-test-print. - tests: EAN контрольная цифра (13/8, валид/битый) + классификация ввода. 50/50. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23 lines
668 B
C#
23 lines
668 B
C#
using Avalonia;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Avalonia.Styling;
|
|
using Avalonia.Themes.Fluent;
|
|
|
|
namespace foodmarket.Pos.HwCheck;
|
|
|
|
public class App : Application
|
|
{
|
|
public override void Initialize()
|
|
{
|
|
Styles.Add(new FluentTheme());
|
|
RequestedThemeVariant = ThemeVariant.Light; // светлый, читаемо (требование)
|
|
}
|
|
|
|
public override void OnFrameworkInitializationCompleted()
|
|
{
|
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
desktop.MainWindow = new MainWindow(Program.AllowTestPrint);
|
|
base.OnFrameworkInitializationCompleted();
|
|
}
|
|
}
|