123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Input;
- using System.Windows.Media.Imaging;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Reports;
- using InABox.Core.Reports;
- using InABox.Wpf.Reports;
- using InABox.WPF;
- using InABox.Scripting;
- using System.Threading;
- using InABox.Wpf;
- using InABox.Wpf.Editors;
- namespace PRSDesktop
- {
- [ValueConversion(typeof(DateTime), typeof(Visibility))]
- public class DateTimeToVisibilityConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- var dateTime = (DateTime)value;
- if (dateTime.IsEmpty())
- return Visibility.Collapsed;
- return Visibility.Visible;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
- public class TemplateViewModel
- {
- public Guid TemplateID { get; set; }
- public string Name { get; set; }
- public string Time { get; set; }
- public TemplateViewModel()
- {
- TemplateID = Guid.Empty;
- Name = "";
- Time = "";
- }
- }
- public delegate void CollapsingEventHandler(object sender, bool collapsed);
- /// <summary>
- /// Interaction logic for ManufacturingPanelColumn.xaml
- /// </summary>
- public partial class ManufacturingPanelColumn : UserControl, IManufacturingPanelColumn
- {
- private static readonly BitmapImage barcode = PRSDesktop.Resources.barcode.AsBitmapImage();
- private static readonly BitmapImage disabled = PRSDesktop.Resources.disabled.AsBitmapImage();
- private static readonly BitmapImage speechbubble = PRSDesktop.Resources.speechbubble.AsBitmapImage();
- private static readonly BitmapImage grayspeechbubble = PRSDesktop.Resources.speechbubble.AsGrayScale().AsBitmapImage();
- private bool _collapsed;
- private bool _compactview;
- private DynamicDataGrid<ManufacturingPacket>? pg;
- //public List<String> CheckedKanbans = new List<string>();
- public ManufacturingPanelColumn()
- {
- InitializeComponent();
- LoadTemplates();
- }
- private void LoadTemplates()
- {
- Task.Run(() =>
- {
- CoreTable table = new Client<ManufacturingTemplateStage>().Query(null,
- Columns.None<ManufacturingTemplateStage>().Add
- (
- x => x.Template.ID,
- x => x.Section.Name,
- x => x.Time
- )
- );
- foreach (CoreRow row in table.Rows)
- {
- TemplateViewModel model = new TemplateViewModel
- {
- TemplateID = row.Get<ManufacturingTemplateStage, Guid>(x => x.Template.ID),
- Name = row.Get<ManufacturingTemplateStage, string>(x => x.Section.Name),
- Time = row.Get<ManufacturingTemplateStage, TimeSpan>(x => x.Time).ToString()
- };
- templateStages.Add(model);
- }
- });
- }
- public string Title
- {
- get => (string)ColumnTitle.Content;
- set
- {
- ColumnTitle.Content = value;
- HiddenTitle.Content = value;
- }
- }
- public bool CompactView
- {
- get => _compactview;
- set
- {
- _compactview = value;
- Items.ItemTemplate = _compactview
- ? Resources["CompactManufacturingPanel"] as DataTemplate
- : Resources["FullManufacturingPanel"] as DataTemplate;
- }
- }
- public bool Collapsed
- {
- get => _collapsed;
- set
- {
- _collapsed = value;
- ColumnGrid.ColumnDefinitions[0].Width = value ? new GridLength(0, GridUnitType.Pixel) : new GridLength(1, GridUnitType.Star);
- ColumnGrid.ColumnDefinitions[1].Width = value ? new GridLength(1, GridUnitType.Auto) : new GridLength(0, GridUnitType.Pixel);
- MinWidth = _collapsed ? 35.0F : 300.0F;
- OnCollapsed?.Invoke(this, value);
- }
- }
- public Guid Category { get; set; }
- public ManufacturingKanban[] Kanbans
- {
- get => (ManufacturingKanban[])Items.ItemsSource;
- set
- {
- Items.ItemsSource = value;
- ItemCount.Content = string.Format("{0} Items", value.Length);
- HiddenCount.Content = string.Format(" ({0} items)", value.Length);
- Task.Run(() =>
- {
- try
- {
- var time = CalcTime(value);
- Dispatcher.Invoke(() => { TimeRequired.Content = string.Format("Time Required: {0:F2} hrs", time); });
- }
- catch (Exception e)
- {
- Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
- }
- });
- Collapsed = value.Length == 0;
- }
- }
- public ManufacturingPanelData Data { get; set; }
- public List<ManufacturingPacket> Packets { get; set; }
- private List<TemplateViewModel> templateStages = new List<TemplateViewModel>();
- private ManufacturingTemplateStage[] TemplateStages { get; set; }
- private double CalcTime(IEnumerable<ManufacturingKanban> kanbans)
- {
- return Kanbans.Sum(x => x.Time.TotalHours * ((100.0F - x.PercentageComplete) / 100.0F));
- }
- public event EventHandler OnChanged;
- public event CollapsingEventHandler OnCollapsed;
- private static string GetColor(DateTime duedate, DateTime estdate)
- {
- var color = "LightGreen";
- if (duedate < estdate)
- color = "Salmon";
- else if (duedate < estdate.AddDays(7))
- color = "LightYellow";
- return color;
- }
- public void SetPackets(IEnumerable<ManufacturingPacket> packets)
- {
- var checkedKanbans = GetSelectedKanbans("").Select(x => x.ID).ToList();
- var kanbans = new List<ManufacturingKanban>();
- Packets = packets.ToList();
- foreach (var packet in Packets)
- {
- var bOK = true;
- var completed = packet.Completed;
- var onhold = packet.OnHold;
- var issues = NotesEditor.FormatNotes(packet.Problem.Notes);
- var issuesResolved = packet.Problem.Resolved;
- var orderitemid = packet.OrderItem.ID;
- var orderitem = orderitemid != Guid.Empty ? Data.OrderItems.FirstOrDefault(x => x.Item1.Equals(orderitemid)) : null;
- var itp = packet.ITP.ID;
- var jobid = packet.SetoutLink.JobLink.ID;
- var sectionid = packet.StageLink.SectionID;
- var title = packet.Title;
- var serial = packet.Serial;
- var watermark = packet.WaterMark;
- var location = packet.Location;
- var setoutlocation = packet.SetoutLink.Location;
- var setoutnumber = packet.SetoutLink.Number;
- var setoutdescription = packet.SetoutLink.Description;
- var templateid = packet.ManufacturingTemplateLink.ID;
- var templatecode = Data.Templates.FirstOrDefault(x => x.ID.Equals(templateid))?.Code;
- var groupid = packet.SetoutLink.Group.ID;
- var groupname = packet.SetoutLink.Group.Name;
- groupname = !string.IsNullOrWhiteSpace(groupname) ? packet.SetoutLink.Group.Job.JobNumber + ": " + groupname
- : "";
- if (bOK)
- {
- var id = packet.ID;
- var priority = packet.Priority;
- var distributed = packet.Distributed;
- var barcodeqty = packet.BarcodeQty;
- var quantity = packet.Quantity;
- var estimateddate = packet.EstimatedDate;
- var created = packet.Created;
- var duedate = packet.DueDate;
- var barcodeprinted = packet.BarcodePrinted;
- var barcodetype = packet.BarcodeType;
- var stageid = packet.StageLink.ID;
- var stageValid = packet.StageLink.IsValid();
- var station = packet.StageLink.Station;
- var time = packet.StageLink.Time;
- var percentagecomplete = packet.StageLink.PercentageComplete;
- var jobrow = Data.Jobs.Rows.FirstOrDefault(r => r.Get<Job, Guid>(c => c.ID).Equals(jobid));
- var jobname = jobrow?.Get<Job, string>(c => c.Name);
- var jobnumber = jobrow?.Get<Job, string>(c => c.JobNumber);
- var model = new ManufacturingKanban();
- var flags = new List<string>();
- if (onhold)
- flags.Add("HOLD");
- if (priority)
- flags.Add("PRIORITY");
- if (distributed)
- flags.Add("DISTRIB");
- model.ID = id.ToString();
- var sTitle = string.Format("{0}{1}", quantity != barcodeqty ? string.Format("{0} x ", quantity) : "",
- packet.Title);
- model.Title = CompactView
- ? string.Format("{0} x {1} / {2} {3}",
- barcodeqty,
- setoutnumber,
- serial,
- sTitle
- )
- : string.Format("{0}: {1}",
- serial,
- sTitle
- );
- if (!string.IsNullOrWhiteSpace(watermark))
- model.Title = "[" + watermark + "] " + model.Title;
- model.Quantity = barcodeqty;
- model.JobName = string.Format("{0}: {1}", setoutnumber, jobname);
- model.CreatedDate = created;
- model.DueDate = duedate;
- model.Time = time;
- model.PercentageComplete = percentagecomplete;
- if (string.IsNullOrEmpty(location))
- location = setoutlocation;
- var descrip = new List<string>
- {
- location
- };
-
- model.Description = string.Join("\n", descrip);
-
- model.Consignment = orderitem?.Item3 ?? "";
- // if (orderitem != null)
- // descrip.Add(orderitem.Item3);
- model.TemplateID = packet.ManufacturingTemplateLink.ID;
- model.Image = !barcodeprinted.IsEmpty() ? barcode : barcodetype == BarcodeType.None ? disabled : null;
- model.Tags = Array.Empty<string>();
- model.Category = completed != DateTime.MinValue ? CoreUtils.FullGuid : sectionid;
- if (priority)
- model.ColorKey = "Red";
- else if (onhold)
- model.ColorKey = "Silver";
- else
- model.ColorKey = GetColor(
- duedate.IsEmpty() ? DateTime.Today : duedate,
- estimateddate.IsEmpty() ? DateTime.Today : estimateddate
- );
- model.IssuesImage = string.IsNullOrWhiteSpace(issues)
- ? null
- : issuesResolved.IsEmpty()
- ? speechbubble
- : grayspeechbubble;
- model.Issues = issues;
- if (orderitem != null)
- {
- var bOnOrder = orderitem.Item2.IsEmpty();
- model.OrderColor = bOnOrder ? "Plum" : "DarkOrchid";
- model.OrderStatus = bOnOrder ? "ON ORDER" : "RECEIVED";
- }
- else
- {
- model.OrderColor = model.ColorKey;
- model.OrderStatus = "";
- }
- model.Checked = checkedKanbans.Contains(id.ToString());
- model.Flags = string.Join("\n", flags);
- model.Template = templatecode;
- model.GroupID = groupid;
- model.GroupName = groupname;
- if (!stageValid || stageid.Equals(Guid.Empty) || stageid.Equals(CoreUtils.FullGuid))
- {
- model.Status = "";
- }
- else
- {
- if (station == 0)
- model.Status = "Not Started";
- else
- model.Status = string.Format("{0} ({1:F0}%)", station == -1 ? "Shared" : "Stn " + station, percentagecomplete);
- }
- kanbans.Add(model);
- }
- }
- Kanbans = kanbans.ToArray();
- }
- public void ClearSelectedKanbans()
- {
- var kanbans = GetSelectedKanbans(Guid.Empty.ToString());
- foreach (var kanban in kanbans)
- kanban.Checked = false;
- var tmp = Kanbans;
- Items.ItemsSource = null;
- Items.ItemsSource = tmp;
- }
- public ManufacturingKanban[] GetSelectedKanbans(string currentid)
- {
- return Kanbans != null ? Kanbans.Where(x => x.Checked || x.ID.Equals(currentid)).ToArray() : new ManufacturingKanban[] { };
- }
- public IEnumerable<ManufacturingPacket> GetPackets() => Packets;
- public IEnumerable<ManufacturingPacket> GetSelectedPackets() => GetSelectedPackets(Guid.Empty.ToString());
- public IEnumerable<ManufacturingPacket> GetSelectedPackets(string currentid)
- {
- var selectedkanbans = GetSelectedKanbans(currentid);
- return Packets.Where(pkt => selectedkanbans.Any(x => x.ID.Equals(pkt.ID.ToString())));
- }
- private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- if (e.ClickCount == 2)
- {
- var model = ((Border)sender).Tag as ManufacturingKanban;
- var packet = Packets.Where(r => r.ID.ToString().Equals(model.ID)).FirstOrDefault();
- var setoutid = packet.SetoutLink.ID;
- var table = new Client<SetoutDocument>().Query(
- new Filter<SetoutDocument>(x => x.EntityLink.ID).IsEqualTo(setoutid)
- );
- SetoutDocument[] docs = table.Rows.Select(r => r.ToObject<SetoutDocument>()).ToArray();
- // If this document is actually the cutting group document,
- // redirect any annotations to the cutting group id rather than the setout
- var sgdoc = docs.FirstOrDefault(x => (x.DocumentLink.ID == packet.SetoutLink.Group.OptimizationDocument.ID));
- if (sgdoc != null)
- sgdoc.SetID(packet.SetoutLink.Group.ID);
-
- var viewer = new DocumentEditor(docs);
- viewer.ButtonsVisible = true;
- //viewer.PrintAllowed = Security.IsAllowed<CanPrintFactoryFloorDrawings>();
- viewer.SaveAllowed = Security.IsAllowed<CanSaveFactoryFloorDrawings>();
- viewer.Watermark = packet.WaterMark;
- viewer.ShowDialog();
- e.Handled = true;
- }
- }
- private void CheckBox_Checked(object sender, RoutedEventArgs e)
- {
- //ManufacturingKanban task = ((CheckBox)sender).Tag as ManufacturingKanban;
- //if (CheckedKanbans.Contains(task.ID))
- // CheckedKanbans.Remove(task.ID);
- //else
- // CheckedKanbans.Add(task.ID);
- }
- private void PacketMenu_Opened(object sender, RoutedEventArgs e)
- {
- var menu = sender as ContextMenu;
- var createPickingList = menu.Items[2] as MenuItem;
- var issue = menu.Items[3] as MenuItem;
- var issuegroup = menu.Items[4] as MenuItem;
- var progress = menu.Items[5] as MenuItem;
- var split = menu.Items[6] as MenuItem;
- var revert = menu.Items[7] as MenuItem;
- var progress_separator = menu.Items[8] as Separator;
- var cancel = menu.Items[9] as MenuItem;
- var cancel_separator = menu.Items[10] as Separator;
- var bHasCancel = false;
- var complete = menu.Items[11] as MenuItem;
- var complete_separator = menu.Items[12] as Separator;
- var bHasComplete = false;
- var template = menu.Items[13] as MenuItem;
- var template_separator = menu.Items[14] as Separator;
- var bHasTemplate = true;
- var changedate = menu.Items[15] as MenuItem;
- var changedate_separator = menu.Items[16] as Separator;
- var setpriority = menu.Items[17] as MenuItem;
- var clearpriority = menu.Items[18] as MenuItem;
- var priority_separator = menu.Items[19] as Separator;
- var editissues = menu.Items[20] as MenuItem;
- var sethold = menu.Items[21] as MenuItem;
- var clearhold = menu.Items[22] as MenuItem;
- var hold_separator = menu.Items[23] as Separator;
- var generate = menu.Items[24] as MenuItem;
- var reprint = menu.Items[25] as MenuItem;
- var revoke = menu.Items[26] as MenuItem;
- var barcode_separator = menu.Items[27] as Separator;
- var bHasBarcode = false;
- var archive = menu.Items[28] as MenuItem;
- var bHasArchive = false;
- var model = menu.Tag as ManufacturingKanban;
- var packets = GetSelectedPackets(model.ID).ToList();
- var current = packets.FirstOrDefault(x => x.ID.Equals(Guid.Parse(model.ID)));
- //CoreRow row = packets.Rows.Where(r => r.Get<ManufacturingPacket, Guid>(c => c.ID).ToString().Equals(model.ID)).FirstOrDefault();
- var OnlyOne = packets.Count == 1; // (!CheckedKanbans.Any()) || (CheckedKanbans.Count == 1) && (CheckedKanbans.Contains(model.ID));
- var pktid = current != null ? current.ID : Guid.Empty; // row.Get<ManufacturingPacket, Guid>(x => x.ID);
- var stageid = current != null ? current.StageLink.ID : Guid.Empty; // row.Get<ManufacturingPacket, Guid>(x => x.StageLink.ID);
- var stageValid = current?.StageLink.IsValid() ?? false;
- var completed = current != null ? current.Completed : DateTime.MinValue; //row.Get<ManufacturingPacket, DateTime>(x => x.Completed);
- var printed = current != null
- ? current.BarcodePrinted
- : DateTime.MinValue; // row.Get<ManufacturingPacket, DateTime>(x => x.BarcodePrinted);
- var priority = current != null ? current.Priority : false; // row.Get<ManufacturingPacket, bool>(x => x.Priority);
- //bool onhold = current != null ? current.OnHold : false; // row.Get<ManufacturingPacket, bool>(x => x.OnHold);
- var onhold = current?.OnHold == true; // row.Get<ManufacturingPacket, bool>(x => x.OnHold);
- var qty = current != null ? current.Quantity : 0; //row.Get<ManufacturingPacket, int>(x => x.Quantity);
- var barcodetype =
- current != null ? current.BarcodeType : BarcodeType.None; // row.Get<ManufacturingPacket, BarcodeType>(x => x.BarcodeType);
- issue.Visibility = !stageValid && Security.IsAllowed<CanIssuePackets>() ? Visibility.Visible : Visibility.Collapsed;
- createPickingList.Visibility = !stageValid && Security.IsAllowed<CanIssuePackets>() ? Visibility.Visible : Visibility.Collapsed;
- issuegroup.Visibility = !stageValid && Security.IsAllowed<CanIssuePackets>() ? Visibility.Visible : Visibility.Collapsed;
- progress.Visibility = stageid.Equals(CoreUtils.FullGuid) || !stageValid ? Visibility.Collapsed : Visibility.Visible;
- split.Visibility = !stageValid && qty > 1 && printed.IsEmpty() && OnlyOne ? Visibility.Visible : Visibility.Collapsed;
- revert.Visibility = !stageValid && completed.Equals(DateTime.MinValue) ? Visibility.Collapsed : Visibility.Visible;
- cancel.Visibility = !stageValid ? Visibility.Visible : Visibility.Collapsed;
- bHasCancel = cancel.Visibility == Visibility.Visible;
- complete.Visibility = stageid.Equals(CoreUtils.FullGuid) ? Visibility.Collapsed : Visibility.Visible;
- bHasComplete = complete.Visibility == Visibility.Visible;
- template.Visibility = !stageValid ? Visibility.Visible : Visibility.Collapsed;
- template.Items.Clear();
- var menus = new Dictionary<string, MenuItem>();
- foreach (var Factory in Data.Factories)
- {
- if (!menus.ContainsKey(Factory.Name))
- {
- menus[Factory.Name] = new MenuItem { Header = Factory.Name };
- template.Items.Add(menus[Factory.Name]);
- }
- var group = menus[Factory.Name];
- foreach (var temp in Data.Templates.Where(x => x.Factory.ID == Factory.ID).OrderBy(x => x.Code))
- {
- var item = new MenuItem
- {
- Header = string.Format("{0}: {1}", temp.Code, temp.Name),
- Tag = new Tuple<Guid, ManufacturingTemplate>(pktid, temp)
- };
- item.Click += ChangeTemplateClick;
- group.Items.Add(item);
- }
- }
- bHasTemplate = template.Visibility == Visibility.Visible;
- changedate.Visibility = stageid.Equals(CoreUtils.FullGuid) || !stageValid ? Visibility.Collapsed : Visibility.Visible;
- changedate_separator.Visibility = changedate.Visibility;
- setpriority.Visibility = priority ? Visibility.Collapsed : Visibility.Visible;
- clearpriority.Visibility = priority ? Visibility.Visible : Visibility.Collapsed;
- editissues.Visibility = Visibility.Visible;
- editissues.Header = packets.Count == 1 ? "View/Update Issues" : "Add Issue";
- sethold.Visibility = Security.IsAllowed<CanManagePacketHolds>() && !onhold ? Visibility.Visible : Visibility.Collapsed;
- clearhold.Visibility = Security.IsAllowed<CanManagePacketHolds>() && onhold ? Visibility.Visible : Visibility.Collapsed;
- generate.Visibility = printed.IsEmpty() && barcodetype != BarcodeType.None ? Visibility.Visible : Visibility.Collapsed;
- reprint.Visibility = !printed.IsEmpty() ? Visibility.Visible : Visibility.Collapsed;
- revoke.Visibility = !printed.IsEmpty() ? Visibility.Visible : Visibility.Collapsed;
- bHasBarcode = generate.Visibility == Visibility.Visible || reprint.Visibility == Visibility.Visible ||
- revoke.Visibility == Visibility.Visible;
- archive.Visibility = !printed.IsEmpty() ? Visibility.Visible : Visibility.Collapsed;
- bHasArchive = archive.Visibility == Visibility.Visible;
- progress_separator.Visibility = bHasCancel || bHasTemplate || bHasBarcode || bHasArchive ? Visibility.Visible : Visibility.Collapsed;
- cancel_separator.Visibility = bHasCancel && (bHasComplete || bHasTemplate || bHasBarcode || bHasArchive)
- ? Visibility.Visible
- : Visibility.Collapsed;
- complete_separator.Visibility = bHasComplete && (bHasTemplate || bHasBarcode || bHasArchive) ? Visibility.Visible : Visibility.Collapsed;
- template_separator.Visibility = bHasTemplate && (bHasBarcode || bHasArchive) ? Visibility.Visible : Visibility.Collapsed;
- hold_separator.Visibility = bHasBarcode || bHasArchive ? Visibility.Visible : Visibility.Collapsed;
- barcode_separator.Visibility = bHasBarcode && bHasArchive ? Visibility.Visible : Visibility.Collapsed;
- }
- private void ChangeTemplateClick(object sender, RoutedEventArgs e)
- {
- var menu = (MenuItem)sender;
- var binding = (Tuple<Guid, ManufacturingTemplate>)menu.Tag;
- var template = binding.Item2;
- if (TemplateStages == null)
- TemplateStages = new Client<ManufacturingTemplateStage>().Load(null, new SortOrder<ManufacturingTemplateStage>(x => x.Sequence));
- var templatestages = TemplateStages.Where(x => x.Template.ID.Equals(template.ID));
- var packets = GetSelectedPackets(binding.Item1.ToString());
- if (!packets.Any())
- {
- MessageBox.Show("Please select a packet before continuing");
- return;
- }
- Progress.Show("Loading Packet Stages");
- Filter<ManufacturingPacketStage> stgflt = null;
- Filter<ManufacturingPacket> pktflt = null;
- foreach (var packet in packets)
- {
- stgflt = stgflt == null
- ? new Filter<ManufacturingPacketStage>(x => x.Parent.ID).IsEqualTo(packet.ID)
- : stgflt.Or(x => x.Parent.ID).IsEqualTo(packet.ID);
- pktflt = pktflt == null ? new Filter<ManufacturingPacket>(x => x.ID).IsEqualTo(packet.ID) : pktflt.Or(x => x.ID).IsEqualTo(packet.ID);
- }
- var packetstages = new Client<ManufacturingPacketStage>().Load(stgflt).ToList();
- foreach (var packetstage in packetstages)
- new Client<ManufacturingPacketStage>().Delete(packetstage, "");
- packetstages.Clear();
- var pkts = new Client<ManufacturingPacket>().Load(pktflt);
- foreach (var packet in pkts)
- {
- packet.ManufacturingTemplateLink.ID = template.ID;
- packet.ManufacturingTemplateLink.Code = template.Code;
- packet.Group = template.Factory.Name;
- var attributes = new Dictionary<string, string>();
- //if (packet.CustomAttributes == null)
- // packet.CustomAttributes = new PackableList<CoreAttribute>();
- //foreach (var attribute in packet.CustomAttributes)
- // attributes[attribute.Name] = attribute.Value;
- //packet.CustomAttributes.Clear();
- //if (template.CustomAttributes != null)
- // packet.CustomAttributes.AddRange(template.CustomAttributes);
- //foreach (var attribute in packet.CustomAttributes)
- //{
- // if (attributes.ContainsKey(attribute.Name))
- // attribute.Value = attributes[attribute.Name];
- //}
- packet.StageLink.ID = Guid.Empty;
- foreach (var templatestage in templatestages)
- {
- var packetstage = new ManufacturingPacketStage
- {
- Time = templatestage.Time,
- Sequence = templatestage.Sequence,
- SequenceType = templatestage.SequenceType,
- Started = DateTime.MinValue,
- PercentageComplete = 0.0F,
- Completed = DateTime.MinValue,
- QualityChecks = templatestage.QualityChecks,
- QualityStatus = QualityStatus.NotChecked,
- QualityNotes = ""
- };
- packetstage.ManufacturingSectionLink.ID = templatestage.Section.ID;
- packetstage.ManufacturingSectionLink.Name = templatestage.Section.Name;
- packetstage.Parent.ID = packet.ID;
- packetstages.Add(packetstage);
- }
- }
- if (packetstages.Any())
- {
- Progress.SetMessage("Updating Packets");
- new Client<ManufacturingPacket>().Save(pkts, "Packet Template changed by User");
- new Client<ManufacturingPacketStage>().Save(packetstages, "Packet Template changed by User");
- OnChanged?.Invoke(this, new EventArgs());
- }
- Progress.Close();
- }
- private void ViewSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkt = Packets.Where(r => r.ID.ToString().Equals(model.ID)).FirstOrDefault();
- if (pkt == null)
- {
- MessageBox.Show("Cannot find selected Manufacturing Packet!");
- return;
- }
- var id = pkt.ID;
- pg ??= new DynamicDataGrid<ManufacturingPacket>();
- ManufacturingPacket? editPacket = null;
- using (new WaitCursor())
- {
- var columns = pg.LoadEditorColumns();
- editPacket = new Client<ManufacturingPacket>()
- .Query(
- new Filter<ManufacturingPacket>(x => x.ID).IsEqualTo(id),
- columns)
- .Rows.FirstOrDefault()?.ToObject<ManufacturingPacket>();
- }
- if (editPacket == null)
- {
- MessageBox.Show("Unable to load packet from database");
- return;
- }
- if (pg.EditItems(new[] { editPacket }))
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void IssueSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var date = model.DueDate.IsEmpty() ? DateTime.Today.AddDays(14) : model.DueDate;
- if (DateEdit.Execute("Required Completion Date", ref date))
- ProgressPacket(model, date, Guid.Empty);
- }
- private static List<RequisitionItem>? CustomisePickingList(Requisition requisition, List<RequisitionItem> items, Func<ManufacturingPanelProperties> properties)
- {
- var script = properties().PickingListOptimisationScript;
- if (!script.IsNullOrWhiteSpace())
- {
- var scriptDocument = new ScriptDocument(script);
- if (!scriptDocument.Compile())
- {
- throw new Exception("Script failed to compile!");
- }
- var method = scriptDocument.GetMethod(methodName: ManufacturingPanelProperties.PickingListOptimisationMethodName())
- ?? throw new Exception($"Script has no method {ManufacturingPanelProperties.PickingListOptimisationMethodName()}()!");
- var result = (method.Invoke(scriptDocument.GetObject(), new object?[] { requisition, items }) as List<RequisitionItem>)!;
- return result;
- }
- return items;
- }
- public static void CreatePickingList(IList<ManufacturingPacket> packets, bool allowNoComponents, Func<ManufacturingPanelProperties> properties)
- {
- var jobs = packets.Select(x => x.SetoutLink.JobLink.ID).Distinct().ToArray();
- if(jobs.Length > 1)
- {
- MessageWindow.ShowMessage("Cannot create picking list: packets from more than one job are selected.", "Multiple jobs selected");
- return;
- }
- var jobID = jobs.First();
- var components =
- Client.Query(
- new Filter<ManufacturingPacketComponent>(x => x.Packet.ID).InList(packets.Select(x => x.ID).ToArray())
- .And(x => x.Requisition.ID).IsEqualTo(Guid.Empty),
- Columns.None<ManufacturingPacketComponent>()
- .Add(x => x.ID)
- .Add(x => x.Description)
- .Add(x => x.Packet.ID)
- .Add(x => x.Product.ID)
- .Add(x => x.Product.Code)
- .Add(x => x.Product.DefaultInstance.Style.ID)
- .Add(x => x.Product.DefaultInstance.Style.Code)
- .Add(x => x.Product.DefaultInstance.Style.Description)
- .Add(x => x.Product.DefaultLocation.ID)
- .Add(x => x.Product.DefaultLocation.Code)
- .Add(x => x.Product.DefaultLocation.Description)
- .Add(x => x.Quantity)
- .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Local))
- .ToList<ManufacturingPacketComponent>();
- if (components.Count == 0 && !allowNoComponents)
- {
- MessageWindow.ShowMessage("No items to create picking list; all selected components already have requisitions.", "No components");
- return;
- }
- var requisitionItems = new List<RequisitionItem>();
- foreach(var component in components)
- {
- var packet = packets.FirstOrDefault(x => x.ID == component.Packet.ID);
- if(packet is null)
- {
- continue;
- }
- var requisitionItem = new RequisitionItem
- {
- Quantity = component.Quantity,
- Description = component.Description
- };
- requisitionItem.JobLink.ID = jobID;
- requisitionItem.Product.ID = component.Product.ID;
- requisitionItem.Product.Synchronise(component.Product);
- requisitionItem.Style.ID = component.Product.DefaultInstance.Style.ID;
- requisitionItem.Style.Synchronise(component.Product.DefaultInstance.Style);
- requisitionItem.Location.ID = component.Product.DefaultLocation.ID;
- requisitionItem.Location.Synchronise(component.Product.DefaultLocation);
- requisitionItem.Dimensions.CopyFrom(component.Dimensions);
- requisitionItems.Add(requisitionItem);
- }
- var requisition = new Requisition
- {
- Title = $"Materials for {string.Join(',', packets.Select(x => x.Serial))}"
- };
- requisition.Notes = new[] { requisition.Title };
- requisition.RequestedBy.ID = App.EmployeeID;
- requisition.JobLink.ID = jobID;
- requisition.Due = DateTime.Now;
- try
- {
- requisitionItems = CustomisePickingList(requisition, requisitionItems, properties);
- if (requisitionItems is null)
- {
- MessageWindow.ShowMessage("Creating picking list cancelled.", "Cancelled");
- return;
- }
- var grid = DynamicGridUtils.CreateDynamicGrid<Requisition>(typeof(DynamicGrid<>));
- if (grid.EditItems(new Requisition[] { requisition }, t =>
- {
- if (t == typeof(RequisitionItem))
- {
- var table = new CoreTable();
- table.LoadColumns(typeof(RequisitionItem));
- table.LoadRows(requisitionItems);
- return table;
- }
- return null;
- }))
- {
- foreach (var component in components)
- {
- component.Requisition.ID = requisition.ID;
- }
- new Client<ManufacturingPacketComponent>().Save(components, $"Created picking list for requisition {requisition.Number}.");
- MessageWindow.ShowMessage($"Created requisition {requisition.Number}", "Success");
- }
- }
- catch(Exception err)
- {
- MessageWindow.ShowError("Error creating picking list.", err);
- }
- }
- private void CreatePickingList_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkts = GetSelectedPackets(model.ID).ToList();
- if(pkts.Count == 0)
- {
- MessageWindow.ShowMessage("Cannot create picking list: no packets selected.", "No packets selected");
- return;
- }
- CreatePickingList(pkts, false, () => Data.Properties);
- }
- private void IssueGroup_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var date = model.DueDate.IsEmpty() ? DateTime.Today.AddDays(14) : model.DueDate;
- if (DateEdit.Execute("Required Completion Date", ref date))
- ProgressPacket(model, date, model.GroupID);
- }
- private void ProgressSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- ProgressPacket(model, null, Guid.Empty);
- }
- private void ProgressPacket(ManufacturingKanban model, DateTime? date, Guid groupID)
- {
- Progress.Show("");
- var pkts = groupID == Guid.Empty ?
- GetSelectedPackets(model.ID).ToList()
- : GetPacketsOfGroup(groupID);
- if (pkts.Count == 0)
- return;
- Progress.SetMessage("Loading Stages");
- Filter<ManufacturingPacketStage>? stgflt = null;
- foreach (var pkt in pkts)
- stgflt = stgflt == null
- ? new Filter<ManufacturingPacketStage>(x => x.Parent.ID).IsEqualTo(pkt.ID)
- : stgflt.Or(x => x.Parent.ID).IsEqualTo(pkt.ID);
-
- var stgs = new Client<ManufacturingPacketStage>().Query(stgflt,
- Columns.None<ManufacturingPacketStage>().Add(x=>x.ID).Add(x=>x.Parent.ID).Add(x=>x.Sequence),
- new SortOrder<ManufacturingPacketStage>(x => x.Sequence))
- .ToObjects<ManufacturingPacketStage>().ToArray();
- ManufacturingPacket.Progress(pkts, stgs);
- Progress.SetMessage("Progressing Items");
- var stgupdate = stgs.Where(x => x.IsChanged()).ToArray();
- Logger.Send(LogType.Information, ClientFactory.UserID,
- string.Format("ManufacturingPanelColumn.ProgressPacket() - Updating [{0}] stages", stgupdate.Length));
- new Client<ManufacturingPacketStage>().Save(stgupdate, "ManufacturingPacket Progressed by Menu Click");
- var pktupdate = pkts; //.Where(x => x.IsChanged()).ToArray();
- if (date.HasValue)
- foreach (var pkt in pktupdate)
- pkt.DueDate = date.Value;
- Logger.Send(LogType.Information, ClientFactory.UserID,
- string.Format("ManufacturingPanelColumn.ProgressPacket() - Updating [{0}] packets: {1}", pktupdate.Count,
- string.Join(", ", pktupdate.Select(x => x.Serial))));
- new Client<ManufacturingPacket>().Save(pktupdate, "ManufacturingPacket Progressed by Menu Click");
- Progress.Close();
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- OnChanged?.Invoke(this, new EventArgs());
- }
- private List<ManufacturingPacket> GetPacketsOfGroup(Guid groupID)
- {
- return Packets.Where(x => x.SetoutLink.Group.ID == groupID).ToList();
- }
- private void SplitSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkts = GetSelectedPackets(model.ID).ToList();
- if (pkts.Count != 1)
- {
- MessageBox.Show("You can only split one Packet at a time!");
- return;
- }
- var pkt = pkts.First();
- var packets = new List<ManufacturingPacket> { pkt };
- var Quantity = 1;
- if (NumberEdit.Execute("Quantity to Issue", 1, pkt.Quantity, ref Quantity))
- {
- if (Quantity != pkt.Quantity)
- {
- var packet2 = CoreUtils.Clone(pkt, null);
- packet2.ID = Guid.Empty;
- packet2.Quantity = Quantity;
- pkt.Quantity -= Quantity;
- packets.Add(packet2);
- }
- new Client<ManufacturingPacket>().Save(packets, "Split Manufacturing Packet");
- var stages = new Client<ManufacturingPacketStage>().Load(
- new Filter<ManufacturingPacketStage>(x => x.Parent.ID).IsEqualTo(pkt.ID));
- foreach (var stage in stages)
- {
- stage.ID = Guid.Empty;
- stage.Parent.ID = pkt.ID;
- }
- new Client<ManufacturingPacketStage>().Save(stages, "");
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- private void RevertSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID).ToList();
- Filter<ManufacturingPacketStage>? stgflt = null;
- foreach (var pkt in pkts)
- stgflt = stgflt == null
- ? new Filter<ManufacturingPacketStage>(x => x.Parent.ID).IsEqualTo(pkt.ID)
- : stgflt.Or(x => x.Parent.ID).IsEqualTo(pkt.ID);
- var stgs = new Client<ManufacturingPacketStage>().Query(stgflt,
- Columns.None<ManufacturingPacketStage>().Add(x=>x.ID).Add(x=>x.Parent.ID).Add(x=>x.Sequence),
- new SortOrder<ManufacturingPacketStage>(x => x.Sequence)
- ).ToObjects<ManufacturingPacketStage>().ToArray();
- ManufacturingPacket.Regress(pkts, stgs);
- Progress.SetMessage("Regressing Items");
- new Client<ManufacturingPacketStage>().Save(stgs.Where(x => x.IsChanged()), "ManufacturingPacket Regressed by Menu Click");
- new Client<ManufacturingPacket>().Save(pkts.Where(x => x.IsChanged()), "ManufacturingPacket Regressed by Menu Click");
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void CancelSetout_Click(object sender, RoutedEventArgs e)
- {
- if (MessageBox.Show(
- "This will cancel the selected packet (and any associated barcodes) and remove it from view.\n\nAre you sure you wish to continue?",
- "Confirm packet cancellation", MessageBoxButton.YesNo).Equals(MessageBoxResult.Yes))
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID);
- var updates = new List<ManufacturingPacket>();
- foreach (var packet in pkts)
- {
- packet.BarcodePrinted = DateTime.MinValue;
- packet.Archived = DateTime.Now;
- updates.Add(packet);
- }
- Progress.SetMessage("Archiving Packets");
- new Client<ManufacturingPacket>().Save(updates, "ManufacturingPacket Cancelled by Menu Click");
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- private void CompeteItem_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID);
- Progress.SetMessage("Loading Stages");
- Filter<ManufacturingPacketStage>? stgflt = null;
- foreach (var pkt in pkts)
- stgflt = stgflt == null
- ? new Filter<ManufacturingPacketStage>(x => x.Parent.ID).IsEqualTo(pkt.ID)
- : stgflt.Or(x => x.Parent.ID).IsEqualTo(pkt.ID);
- var stgs = new Client<ManufacturingPacketStage>().Query(
- stgflt,
- Columns.Required<ManufacturingPacketStage>().Add(x => x.ID)
- .Add(x => x.Parent.ID)
- .Add(x => x.Sequence),
- new SortOrder<ManufacturingPacketStage>(x => x.Sequence)
- ).Rows.Select(x => x.ToObject<ManufacturingPacketStage>()).ToArray();
- while (pkts.Any(x => x.Completed.IsEmpty())) ManufacturingPacket.Progress(pkts, stgs);
- Progress.SetMessage("Progressing Items");
- new Client<ManufacturingPacketStage>().Save(stgs.Where(x => x.IsChanged()), "ManufacturingPacket Marked as Complete");
- new Client<ManufacturingPacket>().Save(pkts.Where(x => x.IsChanged()), "ManufacturingPacket Marked as Complete");
- Progress.Close();
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void ChangeDate_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkts = GetSelectedPackets(model.ID);
- DateTime? date = null;
- foreach (var pkt in pkts)
- if (!date.HasValue)
- date = pkt.DueDate;
- else if (!date.Value.Equals(pkt.DueDate))
- date = date > pkt.DueDate ? date : pkt.DueDate;
- var date2 = date ?? DateTime.Today.AddDays(14) ;
- if (DateEdit.Execute("Required Completion Date", ref date2))
- {
- Progress.SetMessage("Updating Packets");
- foreach (var pkt in pkts)
- pkt.DueDate = date2;
- new Client<ManufacturingPacket>().Save(pkts, string.Format("Changed Due Date To {0:dd MMM yy}", date2));
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- private void UpdatePriority(object sender, bool priority)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID).ToList();
- foreach(var packet in pkts)
- {
- packet.Priority = priority;
- }
- Logger.Send(LogType.Information, ClientFactory.UserID,
- string.Format("ManufacturingPanelColumn.UpdatePriority() - Updating [{0}] packets: {1}", pkts.Count,
- string.Join(", ", pkts.Select(x => x.Serial))));
- Progress.SetMessage("Updating Packets");
- new Client<ManufacturingPacket>().Save(pkts, "Priority Flag " + (priority ? "Set" : "Cleared"));
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void SetPriority_Click(object sender, RoutedEventArgs e)
- {
- UpdatePriority(sender, true);
- }
- private void ClearPriority_Click(object sender, RoutedEventArgs e)
- {
- UpdatePriority(sender, false);
- }
- private void UpdateHold(object sender, bool hold)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- if (MessageBox.Show(
- hold
- ? "Are you sure you want to place a hold on this packet?"
- : "Are you sure you want to release this packet from hold?",
- hold
- ? "Confirm Hold"
- : "Confirm Release",
- MessageBoxButton.YesNo,
- MessageBoxImage.Question
- ) != MessageBoxResult.Yes
- )
- return;
- Progress.ShowModal("Updating Hold Flags", (Action<IProgress<string>>)(progress =>
- {
- var pkts = GetSelectedPackets(model.ID).Select(x =>
- {
- x.OnHold = hold;
- return x;
- });
- progress.Report("Updating Packets");
- new Client<ManufacturingPacket>().Save(pkts, "Hold Flag " + (hold ? "Set" : "Cleared"));
- }));
- ClearSelectedKanbans();
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void EditIssues_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkts = GetSelectedPackets(model.ID).ToArray();
- if (pkts.Length == 1)
- {
- var pkt = pkts.First();
- var _grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), pkt.Problem.GetType());
- if (_grid.EditItems(new object[] { pkt.Problem }))
- {
- Progress.ShowModal("Updating Issues", progress => { Client.Save(pkts, "Updated Issues"); });
- ClearSelectedKanbans();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- else
- {
- var issue = "";
- if(TextBoxDialog.Execute("Enter new issue: ", ref issue) && !issue.IsNullOrWhiteSpace())
- {
- issue = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {ClientFactory.UserID}: {issue}";
- foreach(var pkt in pkts)
- {
- pkt.Problem.Notes = pkt.Problem.Notes.Concatenate([issue]);
- }
- Progress.ShowModal("Updating Issues", progress => { Client.Save(pkts, "Updated Issues"); });
- }
- }
- }
-
- private void SetHold_Click(object sender, RoutedEventArgs e)
- {
- UpdateHold(sender, true);
- }
-
- private void ClearHold_Click(object sender, RoutedEventArgs e)
- {
- UpdateHold(sender, false);
- }
- private void PrintBarcodes(IEnumerable<ManufacturingPacket> pkts)
- {
- var ids = pkts.Select(x => x.ID).ToArray();
- var datamodel = new DeliveryItemDataModel(new Filter<DeliveryItem>(x => x.ManufacturingPacketLink.ID).InList(ids));
- var repclient = new Client<ReportTemplate>();
- var ReportName = "Print Bar Codes" + (!string.IsNullOrWhiteSpace(pkts.First().Group) ? " - " + pkts.First().Group : "");
- var report = repclient.Load(new Filter<ReportTemplate>(x => x.DataModel).IsEqualTo(datamodel.Name).And(x => x.Name).IsEqualTo(ReportName))
- .FirstOrDefault();
- if (report == null)
- {
- ReportName = "Print Bar Codes";
- report = repclient.Load(new Filter<ReportTemplate>(x => x.DataModel).IsEqualTo(datamodel.Name).And(x => x.Name).IsEqualTo(ReportName))
- .FirstOrDefault();
- }
- if (report == null)
- {
- MessageBox.Show(string.Format("{0} -> [{1}] report does not exist!", datamodel.Name, ReportName));
- return;
- }
- ReportUtils.PreviewReport(report, datamodel, false, Security.IsAllowed<CanDesignReports>());
- }
- private void GenerateBarcodes_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID).Where(x => x.BarcodePrinted.IsEmpty() && x.BarcodeType != BarcodeType.None).ToArray();
- if (!pkts.Any())
- {
- MessageBox.Show("Please select a packet before continuing");
- return;
- }
- Filter<ManufacturingPacket> pktflt = null;
- foreach (var packet in pkts)
- pktflt = pktflt == null ? new Filter<ManufacturingPacket>(x => x.ID).IsEqualTo(packet.ID) : pktflt.Or(x => x.ID).IsEqualTo(packet.ID);
- pkts = new Client<ManufacturingPacket>().Load(pktflt);
- for (var i = 0; i < pkts.Length; i++)
- {
- var packet = pkts[i];
- packet.BarcodePrinted = DateTime.Now;
- }
- Progress.SetMessage("Creating Barcodes");
- Logger.Send(LogType.Information, ClientFactory.UserID,
- string.Format("ManufacturingPanelColumn.GenerateBarcodes() - Updating [{0}] packets: {1}", pkts.Length,
- string.Join(", ", pkts.Select(x => x.Serial))));
- new Client<ManufacturingPacket>().Save(pkts, "Delivery Barcodes created");
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- PrintBarcodes(pkts);
- OnChanged?.Invoke(this, new EventArgs());
- }
- private void ReprintBarcodes_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- var pkts = GetSelectedPackets(model.ID);
- PrintBarcodes(pkts.Where(x => !x.BarcodePrinted.IsEmpty()));
- }
- private void RevokeBarcodes_Click(object sender, RoutedEventArgs e)
- {
- if (MessageBox.Show("This will clear out any delivery items already assigned to racks!\n\nAre you sure you wish to continue?",
- "Confirm revocation", MessageBoxButton.YesNo).Equals(MessageBoxResult.Yes))
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID).Where(x => !x.BarcodePrinted.IsEmpty()).ToArray();
- for (var i = 0; i < pkts.Length; i++)
- {
- Progress.SetMessage(string.Format("Revoking: {0:F2}% complete", (double)i * 100.0F / pkts.Length));
- var packet = pkts[i];
- packet.BarcodePrinted = DateTime.MinValue;
- }
- Progress.SetMessage("Revoking Barcodes");
- new Client<ManufacturingPacket>().Save(pkts, "Delivery Barcodes revoked");
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- private void ArchiveSetout_Click(object sender, RoutedEventArgs e)
- {
- if (MessageBox.Show("This will remove the selected packet from view.\n\nAre you sure you wish to continue?", "Confirm item completion",
- MessageBoxButton.YesNo).Equals(MessageBoxResult.Yes))
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- Progress.Show("");
- var updates = new List<ManufacturingPacket>();
- foreach(var packet in GetSelectedPackets(model.ID))
- {
- if (!packet.BarcodePrinted.IsEmpty())
- {
- //while (packet.Completed.IsEmpty())
- // packet.MoveNext();
- packet.Archived = DateTime.Now;
- updates.Add(packet);
- }
- }
- Progress.SetMessage("Archiving Items");
- new Client<ManufacturingPacket>().Save(updates, "ManufacturingPacket Archived by Menu Click");
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- Progress.Close();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- private void SelectAll_Click(object sender, RoutedEventArgs e)
- {
- //CheckedKanbans.Clear();
- foreach (var kanban in Kanbans)
- kanban.Checked = true;
- var tmp = Kanbans;
- Items.ItemsSource = null;
- Items.ItemsSource = tmp;
- }
- private void ClearAll_Click(object sender, RoutedEventArgs e)
- {
- ClearSelectedKanbans();
- //CheckedKanbans.Clear();
- //foreach (var kanban in Kanbans)
- //{
- // kanban.Checked = false;
- // CheckedKanbans.Add(kanban.ID);
- //}
- var tmp = Kanbans;
- Items.ItemsSource = null;
- Items.ItemsSource = tmp;
- }
- private void ExpandColumn_Click(object sender, MouseButtonEventArgs e)
- {
- Collapsed = false;
- }
- private void CollapseColumn_Click(object sender, MouseButtonEventArgs e)
- {
- Collapsed = true;
- }
- private void Template_MouseEnter(object sender, MouseEventArgs e)
- {
- }
- private void Template_MouseLeave(object sender, MouseEventArgs e)
- {
- }
- private void ToolTip_Opened(object sender, RoutedEventArgs e)
- {
- if (sender.GetType().FullName.Equals(
- "System.Windows.Controls.ToolTip"))
- {
- ToolTip t = (ToolTip)sender;
- Dispatcher.Invoke(() =>
- {
- t.Content = new TextBlock { Text = "Loading..." };
- });
- ManufacturingKanban kanban = t.DataContext as ManufacturingKanban;
- Task.Run(() =>
- {
- string s = "";
- int count = 1;
- var list = templateStages.Where(x => x.TemplateID == kanban.TemplateID);
- foreach (var stage in list)
- {
- if (count > 1)
- s = s + System.Environment.NewLine;
- s = s + count + ". " + stage.Name + " (" + stage.Time + ")";
- count++;
- }
- Dispatcher.Invoke(() =>
- {
- t.Content = new TextBlock { Text = s };
- });
- });
- }
- }
- }
- }
|