using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows; using Comal.Classes; using InABox.DynamicGrid; using InABox.Integration.Awg; using InABox.Integration.Logikal; using InABox.Wpf; using PRSDesktop.Integrations.Common; using PRSDesktop.Integrations.Logikal; namespace PRSDesktop; public enum LogikalElevationSelectionType { BOM, Elevation, } public partial class LogikalElevationSelection : Window { private void UpdateStatus(LogikalResponse response) { Status.Content = response.ToString(); } private readonly Job? _job; private LogikalProject _project = new LogikalProject(); private LogikalElevationSelectionType _type; private Func[],bool> _callback; public LogikalElevationSelection(Job? job, LogikalElevationSelectionType type, Func[],bool> callback) { _type = type; InitializeComponent(); _job = job; _callback = callback; Projects.Refresh(true, false); Phases.Refresh(true, false); Elevations.Options.MultiSelect = true; Elevations.Refresh(true, false); } private void Window_Loaded(object sender, RoutedEventArgs e) { if (LogikalClient.Instance.Settings.UseLogikalProjectNumber) { if (string.IsNullOrWhiteSpace(LogikalClient.Instance.Settings.ProjectPrefix)) Projects.JobNumber = _job?.JobNumber ?? ""; else if (_job?.JobNumber?.StartsWith(LogikalClient.Instance.Settings.ProjectPrefix) == true) Projects.JobNumber = _job?.JobNumber?.Substring(LogikalClient.Instance.Settings.ProjectPrefix.Length) ?? ""; else Projects.JobNumber = ""; Projects.Get(); } else { if (LogikalProject.ParseReference(_job?.SourceRef, out Guid _projectid)) { ProjectRow.Height = new GridLength(0); SplitterRow.Height = new GridLength(0); LogikalClient.Instance.GetProject(_projectid) .Success>(response => { _project = response.Project; }); Phases.ProjectID = _projectid; Elevations.ProjectID = _projectid; Phases.Get(); } Projects.JobNumber = ""; Projects.Get(); } } private void Projects_OnSelectItem(object sender, DynamicGridSelectionEventArgs e) { if (e.Rows?.Any() == true) { _project = Projects.Items[e.Rows[0].Index]; GetPhases(_project.ID); } } private void GetPhases(Guid id) { Phases.ProjectID = id; Elevations.ProjectID = id; Phases.Get(); } private void Phases_OnSelectItem(object sender, DynamicGridSelectionEventArgs e) { var phase = e.Rows?.FirstOrDefault()?.Get(x => x.ID) ?? ""; GetElevations(phase); } private void GetElevations(string phase) { Elevations.Phase = phase; Elevations.Get(); } private void Elevations_OnSelectItem(object sender, DynamicGridSelectionEventArgs e) { var id = e.Rows?.FirstOrDefault()?.Get(x => x.ID) ?? Guid.Empty; OK.IsEnabled = id != Guid.Empty; } private void Projects_AfterRefresh(object sender, AfterRefreshEventArgs args) { // Projects.Width = Projects.Items.Count > 1 // ? 250 // : 0; //GetPhases(Projects.Items.FirstOrDefault()?.ID ?? Guid.Empty); } private void Phases_AfterRefresh(object sender, AfterRefreshEventArgs args) { // Phases.Width = Phases.Items.Count > 1 // ? 200 // : 0; //GetElevations(Phases.Items.FirstOrDefault()?.ID ?? ""); } private void Cancel_Click(object sender, RoutedEventArgs e) { DialogResult = false; } private void OK_Click(object sender, RoutedEventArgs e) { bool close = false; var ids = Elevations.SelectedRows.Select(r => r.Get(c => c.ID)).ToArray(); if (_type == LogikalElevationSelectionType.BOM) { LogikalClient.Instance.GetBillOfMaterials(Elevations.ProjectID, ids, true, true) .Always(UpdateStatus) .Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); }) .Success>( response => { close = _callback(_project,[response.BOM]); }); } else { bool bok = true; LogikalClient.Instance.GetElevationDetails(Elevations.ProjectID, ids, true, true) .Always(UpdateStatus) //.Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); }) .Success>( response => { bok = bok && _callback(_project, response.Elevations .OfType>() .ToArray()); }); close = bok; } if (close) DialogResult = true; } private bool CreateBOM(IEnumerable finishes, IEnumerable profiles, IEnumerable gaskets, IEnumerable components, IEnumerable glass, IEnumerable labour) //where TType : IAwgBOM // where TFinish : IAwgFinish // where TProfile : IAwgProfile // where TGasket : IAwgGasket // where TComponent : IAwgComponent // where TGlass : IAwgGlass // where TLabour : IAwgLabour { return true; } }