12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235 |
- 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.Reports.Common;
- using InABox.WPF;
- 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 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,
- new Columns<ManufacturingTemplateStage>
- (
- 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 = packet.Issues;
- 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;
- 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
- };
- if (orderitem != null)
- descrip.Add(orderitem.Item3);
- model.Description = string.Join("\n", descrip);
- model.TemplateID = packet.ManufacturingTemplateLink.ID;
- model.Image = !barcodeprinted.IsEmpty() ? barcode : barcodetype == BarcodeType.None ? disabled : null;
- model.Tags = new 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
- : speechbubble;
- 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;
- 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));
- IEntityDocument[] docs = table.Rows.Select(r => r.ToObject<SetoutDocument>()).ToArray();
- 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 issue = menu.Items[2] as MenuItem;
- var progress = menu.Items[3] as MenuItem;
- var split = menu.Items[4] as MenuItem;
- var revert = menu.Items[5] as MenuItem;
- var progress_separator = menu.Items[6] as Separator;
- var cancel = menu.Items[7] as MenuItem;
- var cancel_separator = menu.Items[8] as Separator;
- var bHasCancel = false;
- var complete = menu.Items[9] as MenuItem;
- var complete_separator = menu.Items[10] as Separator;
- var bHasComplete = false;
- var template = menu.Items[11] as MenuItem;
- var template_separator = menu.Items[12] as Separator;
- var bHasTemplate = true;
- var changedate = menu.Items[13] as MenuItem;
- var changedate_separator = menu.Items[14] as Separator;
- var setpriority = menu.Items[15] as MenuItem;
- var clearpriority = menu.Items[16] as MenuItem;
- var priority_separator = menu.Items[17] as Separator;
- var editissues = menu.Items[18] as MenuItem;
- var sethold = menu.Items[19] as MenuItem;
- var clearhold = menu.Items[20] as MenuItem;
- var hold_separator = menu.Items[21] as Separator;
- var generate = menu.Items[22] as MenuItem;
- var reprint = menu.Items[23] as MenuItem;
- var revoke = menu.Items[24] as MenuItem;
- var barcode_separator = menu.Items[25] as Separator;
- var bHasBarcode = false;
- var archive = menu.Items[26] 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;
- 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;
- 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);
- }
- private void ProgressSetout_Click(object sender, RoutedEventArgs e)
- {
- var item = (MenuItem)sender;
- var model = (ManufacturingKanban)item.Tag;
- ProgressPacket(model, null);
- }
- private void ProgressPacket(ManufacturingKanban model, DateTime? date)
- {
- Progress.Show("");
- var pkts = GetSelectedPackets(model.ID).ToList();
- 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>().Load(stgflt, new SortOrder<ManufacturingPacketStage>(x => x.Sequence));
- 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 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>().Load(stgflt, new SortOrder<ManufacturingPacketStage>(x => x.Sequence));
- 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,
- new Columns<ManufacturingPacketStage>(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 (new DynamicIssuesEditor(pkts, true).ShowDialog() == true)
- {
- Progress.ShowModal("Updating Issues", progress => { new Client<ManufacturingPacket>().Save(pkts, "Updated Issues"); });
- ClearSelectedKanbans();
- OnChanged?.Invoke(this, new EventArgs());
- }
- }
- 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)
- {
- //Filter<DeliveryItem> filter = null;
- //foreach (var pkt in pkts)
- //{
- // if (filter == null)
- // filter = new Filter<DeliveryItem>(x => x.ManufacturingPacketLink.ID).IsEqualTo(pkt.ID);
- // else
- // filter.Ors.Add(new Filter<DeliveryItem>(x => x.ManufacturingPacketLink.ID).IsEqualTo(pkt.ID));
- //}
- //Dictionary<Type, CoreTable> dataenvironment = new Dictionary<Type, CoreTable>();
- //Client<DeliveryItem> delclient = new Client<DeliveryItem>();
- //CoreTable items = delclient.Query(
- // filter,
- // null,
- // //new Columns<DeliveryItem>(
- // // x => x.ID,
- // // x => x.Barcode,
- // // x => x.SetoutLink.Reference,
- // // x => x.SetoutLink.Location,
- // // x => x.SetoutLink.JobLink.JobNumber,
- // // x => x.SetoutLink.JobLink.Name,
- // // x => x.ManufacturingPacketLink.Serial,
- // // x => x.Description,
- // // x => x.Attributes
- // //),
- // new SortOrder<DeliveryItem>(x => x.Sequence)
- //);
- //dataenvironment[typeof(DeliveryItem)] = items;
- 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 };
- });
- });
- }
- }
- }
- }
|