From b5bbd0a1553fd3802c90c2fe642471696df99415 Mon Sep 17 00:00:00 2001 From: JLdgu Date: Wed, 17 Jun 2026 14:31:31 +0100 Subject: [PATCH] Add order type to collection labels Closes #284 --- .../Features/Phones/EmailViewModel.cs | 31 ++-- PhoneAssistant.WPF/Shared/IPrintDymoLabel.cs | 6 - PhoneAssistant.WPF/Shared/PrintDymoLabel.cs | 149 +++++++++--------- 3 files changed, 91 insertions(+), 95 deletions(-) delete mode 100644 PhoneAssistant.WPF/Shared/IPrintDymoLabel.cs diff --git a/PhoneAssistant.WPF/Features/Phones/EmailViewModel.cs b/PhoneAssistant.WPF/Features/Phones/EmailViewModel.cs index 635a7c8c..910be3e2 100644 --- a/PhoneAssistant.WPF/Features/Phones/EmailViewModel.cs +++ b/PhoneAssistant.WPF/Features/Phones/EmailViewModel.cs @@ -3,7 +3,6 @@ using PhoneAssistant.Model; using PhoneAssistant.WPF.Shared; using System.Collections.ObjectModel; -using System.Text; using System.Text.RegularExpressions; using System.Windows; @@ -41,37 +40,38 @@ public OrderDetails OrderDetails GenerateEmailHtml(); } } - [ObservableProperty] - private bool _envelopePrinted = false; - - [ObservableProperty] - private string _imei = string.Empty; [ObservableProperty] - private string _phoneNumber = string.Empty; + public partial string AssetTag { get; set; } = string.Empty; [ObservableProperty] - private string _assetTag = string.Empty; + public partial bool EnvelopePrinted { get; set; } = false; [ObservableProperty] - private string? _ticket; + public partial string Imei { get; set; } = string.Empty; [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(PrintEnvelopeCommand))] - private OrderType _orderType; + public partial OrderType OrderType { get; set; } partial void OnOrderTypeChanged(OrderType value) { OrderDetails.OrderType = OrderType; GenerateEmailHtml(); } + [ObservableProperty] + public partial string PhoneNumber { get; set; } = string.Empty; + + [ObservableProperty] + public partial string? Ticket { get; set; } + [RelayCommand] private async Task CloseAsync() { await _phonesRepository.UpdateAsync(_orderDetails!.Phone); GeneratingEmail = false; } - + private bool CanPrintEnvelope() => OrderType != OrderType.None; [RelayCommand(CanExecute = nameof(CanPrintEnvelope))] private async Task PrintEnvelope() @@ -104,14 +104,14 @@ await Task.Run(() => public ObservableCollection Locations { get; set; } = []; [ObservableProperty] - private Location? _selectedLocation; + public partial Location? SelectedLocation { get; set; } partial void OnSelectedLocationChanged(Location? value) { if (value is null) return; string deliveryAddress = value.Address; deliveryAddress = deliveryAddress.Replace("{NewUser}", _orderDetails!.Phone.NewUser); - deliveryAddress = deliveryAddress.Replace("{SR}", Ticket); + deliveryAddress = deliveryAddress.Replace("{SR}", Ticket + " " + _orderDetails.OrderType + " " + _orderDetails.DeviceType); deliveryAddress = deliveryAddress.Replace("{PhoneNumber}", PhoneNumber); DeliveryAddress = deliveryAddress; @@ -120,8 +120,7 @@ partial void OnSelectedLocationChanged(Location? value) [ObservableProperty] [NotifyPropertyChangedFor(nameof(EmailHtml))] - private string _deliveryAddress = string.Empty; - + public partial string DeliveryAddress { get; set; } = string.Empty; partial void OnDeliveryAddressChanged(string value) { if (_orderDetails is null) return; @@ -135,7 +134,7 @@ public static string ReformatDeliveryAddress(string address) { Regex regex = AddressReformat(); - string reformatted = regex.Replace(address,string.Empty); + string reformatted = regex.Replace(address, string.Empty); return reformatted; } diff --git a/PhoneAssistant.WPF/Shared/IPrintDymoLabel.cs b/PhoneAssistant.WPF/Shared/IPrintDymoLabel.cs deleted file mode 100644 index 6734332a..00000000 --- a/PhoneAssistant.WPF/Shared/IPrintDymoLabel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace PhoneAssistant.WPF.Shared; - -public interface IPrintDymoLabel -{ - void Execute(string address, string? includeDate); -} \ No newline at end of file diff --git a/PhoneAssistant.WPF/Shared/PrintDymoLabel.cs b/PhoneAssistant.WPF/Shared/PrintDymoLabel.cs index bf53faf5..a318a686 100644 --- a/PhoneAssistant.WPF/Shared/PrintDymoLabel.cs +++ b/PhoneAssistant.WPF/Shared/PrintDymoLabel.cs @@ -1,93 +1,96 @@ -using System.Drawing; +using PhoneAssistant.Model; +using System.Drawing; using System.Drawing.Printing; -using PhoneAssistant.Model; +namespace PhoneAssistant.WPF.Shared; -namespace PhoneAssistant.WPF.Shared +public interface IPrintDymoLabel { - public sealed class PrintDymoLabel(IApplicationSettingsRepository appSettings) : IPrintDymoLabel + void Execute(string address, string? includeDate); +} + +public sealed class PrintDymoLabel(IApplicationSettingsRepository appSettings) : IPrintDymoLabel +{ + // For Dymo 450 printer and Label 30256 Shipping w231 x h400 + // the largest rectangle we can draw is + // graphics.DrawRectangle(_linePen, 2, 20, 365, 193); + const int BodyHeight = 193; + const int BodyWidth = 365; + const int MarginTop = 20; + const int MarginLeft = 2; + + private readonly IApplicationSettingsRepository _appSettings = appSettings ?? throw new ArgumentNullException(nameof(appSettings)); + private string? _address; + private string? _includeDate; + + public void Execute(string address, string? includeDate) { - // For Dymo 450 printer and Label 30256 Shipping w231 x h400 - // the largest rectangle we can draw is - // graphics.DrawRectangle(_linePen, 2, 20, 365, 193); - const int BodyHeight = 193; - const int BodyWidth = 365; - const int MarginTop = 20; - const int MarginLeft = 2; - - private readonly IApplicationSettingsRepository _appSettings = appSettings ?? throw new ArgumentNullException(nameof(appSettings)); - private string? _address; - private string? _includeDate; - - public void Execute(string address, string? includeDate) + _address = address.Trim(); + _includeDate = includeDate; + + PrintDocument pd = new(); + pd.DefaultPageSettings.Landscape = true; + pd.DefaultPageSettings.Color = false; + pd.DefaultPageSettings.PaperSize = new PaperSize("30256 Shipping", 231, 400); + + if (_appSettings.ApplicationSettings.DymoPrintToFile) { - _address = address.Trim(); - _includeDate = includeDate; - - PrintDocument pd = new(); - pd.DefaultPageSettings.Landscape = true; - pd.DefaultPageSettings.Color = false; - pd.DefaultPageSettings.PaperSize = new PaperSize("30256 Shipping", 231, 400); - - if (_appSettings.ApplicationSettings.DymoPrintToFile) - { - pd.PrinterSettings.PrinterName = "Microsoft Print to PDF"; - pd.DefaultPageSettings.PrinterSettings.PrintToFile = true; - pd.DefaultPageSettings.PrinterSettings.PrintFileName = _appSettings.ApplicationSettings.DymoPrintFile; - } - else - { - pd.PrinterSettings.PrinterName = _appSettings.ApplicationSettings.DymoPrinter; - pd.DefaultPageSettings.PrinterSettings.PrintToFile = false; - } - - pd.PrintPage += new PrintPageEventHandler(PrintPage); - - if (pd.PrinterSettings.IsValid) - pd.Print(); + pd.PrinterSettings.PrinterName = "Microsoft Print to PDF"; + pd.DefaultPageSettings.PrinterSettings.PrintToFile = true; + pd.DefaultPageSettings.PrinterSettings.PrintFileName = _appSettings.ApplicationSettings.DymoPrintFile; } - - private void PrintPage(object sender, PrintPageEventArgs ev) + else { - if (ev.Graphics is null) return; - Graphics graphics = ev.Graphics; + pd.PrinterSettings.PrinterName = _appSettings.ApplicationSettings.DymoPrinter; + pd.DefaultPageSettings.PrinterSettings.PrintToFile = false; + } - Font dateFont = new("Segoe UI", 10); - int dateFontHeight = (int)dateFont.GetHeight(graphics); + pd.PrintPage += new PrintPageEventHandler(PrintPage); - int maxHeight = BodyHeight; - if (_includeDate is not null) - maxHeight -= dateFontHeight; + if (pd.PrinterSettings.IsValid) + pd.Print(); + } - float fontSize = 22; - Font font = new("Segoe UI", fontSize); - while (true) - { - SizeF stringSize = new SizeF(); - stringSize = ev.Graphics.MeasureString(_address, font, BodyWidth); + private void PrintPage(object sender, PrintPageEventArgs ev) + { + if (ev.Graphics is null) return; + Graphics graphics = ev.Graphics; + + Font dateFont = new("Segoe UI", 10); + int dateFontHeight = (int)dateFont.GetHeight(graphics); - if (stringSize.Height <= maxHeight) - break; + int maxHeight = BodyHeight; + if (_includeDate is not null) + maxHeight -= dateFontHeight; - fontSize = (float)(fontSize - 0.5); - font = new("Segoe UI", fontSize); - } + float fontSize = 22; + Font font = new("Segoe UI", fontSize); + while (true) + { + SizeF stringSize = new SizeF(); + stringSize = ev.Graphics.MeasureString(_address, font, BodyWidth); - Brush brush = new SolidBrush(Color.Black); - Rectangle rectangle = new(MarginLeft, MarginTop, BodyWidth, maxHeight); - graphics.DrawString(_address, font, brush, rectangle); + if (stringSize.Height <= maxHeight) + break; - if (_includeDate is not null) - { - StringFormat sf = new StringFormat(); - sf.LineAlignment = StringAlignment.Far; - sf.Alignment = StringAlignment.Far; + fontSize = (float)(fontSize - 0.5); + font = new("Segoe UI", fontSize); + } - rectangle = new(MarginLeft, MarginTop + BodyHeight - dateFontHeight, BodyWidth, dateFontHeight); - graphics.DrawString(_includeDate, dateFont, brush, rectangle, sf); - } + Brush brush = new SolidBrush(Color.Black); + Rectangle rectangle = new(MarginLeft, MarginTop, BodyWidth, maxHeight); + graphics.DrawString(_address, font, brush, rectangle); - ev.HasMorePages = false; + if (_includeDate is not null) + { + StringFormat sf = new StringFormat(); + sf.LineAlignment = StringAlignment.Far; + sf.Alignment = StringAlignment.Far; + + rectangle = new(MarginLeft, MarginTop + BodyHeight - dateFontHeight, BodyWidth, dateFontHeight); + graphics.DrawString(_includeDate, dateFont, brush, rectangle, sf); } + + ev.HasMorePages = false; } }