123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Controls;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- namespace PRSDesktop
- {
- /// <summary>
- /// Interaction logic for QuoteDetails.xaml
- /// </summary>
- public partial class QuoteDetails : UserControl, IPanel<Quote>, IQuotePage, IDynamicEditorHost
- {
- private CoreRow[] _rows;
-
- public QuoteDetails()
- {
- InitializeComponent();
- }
- public event DataModelUpdateEvent OnUpdateDataModel;
- public bool IsReady { get; set; }
- public void CreateToolbarButtons(IPanelHost host)
- {
- }
- public string SectionName => "Quotes";
- public DataModel DataModel(Selection selection)
- {
- return new QuoteDataModel(new Filter<Quote>(x => x.ID).IsEqualTo(ParentID));
- }
- public void Heartbeat(TimeSpan time)
- {
- }
- public void Refresh()
- {
- new Client<Quote>().Query(
- new Filter<Quote>(x => x.ID).IsEqualTo(ParentID),
- new Columns<Quote>(
- col => col.Number,
- col => col.Customer.ID,
- col => col.Customer.Code,
- col => col.Customer.Name,
- col => col.SiteAddress.Street,
- col => col.SiteAddress.City,
- col => col.SiteAddress.State,
- col => col.SiteAddress.PostCode,
- col => col.Account.ID,
- col => col.Account.Code,
- col => col.Account.Name,
- col => col.Title,
- col => col.Notes,
- col => col.Status.ID,
- col => col.ExTax
- ),
- null,
- (o, e) => { UpdateScreen(o, e); }
- );
- Proposals.ParentID = ParentID;
- }
- public Dictionary<string, object[]> Selected()
- {
- return new Dictionary<String, object[]>() { { typeof(Quote).EntityName(), _rows } };
- }
- public void Setup()
- {
- UpdateScreen(null, null);
- var statuscodes = new Dictionary<Guid, string> { { Guid.Empty, "" } };
- var statuses = new Client<QuoteStatus>().Query();
- foreach (var row in statuses.Rows)
- statuscodes[row.Get<QuoteStatus, Guid>(x => x.ID)] = row.Get<QuoteStatus, string>(x => x.Description);
- Status.ItemsSource = statuscodes;
- Proposals.Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns);
- Proposals.Refresh(true, false);
- Title.EditorDefinition = new TextBoxEditor();
- Title.ColumnName = "Title";
- Title.Configure();
- Title.OnEditorValueChanged += Title_OnEditorValueChanged;
- Title.Loaded = true;
- Customer.EditorDefinition = new CodePopupEditor(typeof(Customer));
- Customer.ColumnName = "Customer.ID";
- Customer.CodeColumn = "Code";
- Customer.OtherColumns["Code"] = "Customer.Code";
- Customer.OtherColumns["Name"] = "Customer.Name";
- Customer.OtherColumns["Account.ID"] = "Account.ID";
- Customer.OtherColumns["Account.Code"] = "Account.Code";
- Customer.OtherColumns["Account.Name"] = "Account.Name";
- Customer.Host = this;
- Customer.Configure();
- Customer.OnEditorValueChanged += Customer_OnEditorValueChanged;
- Customer.Loaded = true;
- Account.EditorDefinition = new CodePopupEditor(typeof(Customer));
- Account.ColumnName = "Account.ID";
- Account.CodeColumn = "Code";
- Account.OtherColumns["Code"] = "Account.Code";
- Account.OtherColumns["Name"] = "Account.Name";
- Account.Host = this;
- Account.Configure();
- Account.OnEditorValueChanged += Account_OnEditorValueChanged;
- Account.Loaded = true;
- }
- public void Shutdown()
- {
- }
- public Guid ParentID { get; set; }
- public Dictionary<Type, CoreTable> DataEnvironment()
- {
- return new Dictionary<Type, CoreTable>();
- }
- private void UpdateScreen(CoreTable o, Exception e)
- {
- _rows = o?.Rows.ToArray() ?? new CoreRow[] { };
- Dispatcher.Invoke(() =>
- {
- var bIsReady = IsReady;
- IsReady = false;
- Title.Value = o?.Rows.FirstOrDefault()?.Get<Quote, string>(col => col.Title) ?? "";
- Customer.Value = o?.Rows.FirstOrDefault()?.Get<Quote, Guid>(col => col.Customer.ID) ?? Guid.Empty;
- Address.Text = o?.Rows.FirstOrDefault()?.Get<Quote, string>(col => col.SiteAddress.Street) ?? "";
- City.Text = o?.Rows.FirstOrDefault()?.Get<Quote, string>(col => col.SiteAddress.City) ?? "";
- State.Text = o?.Rows.FirstOrDefault()?.Get<Quote, string>(col => col.SiteAddress.State) ?? "";
- PostCode.Text = o?.Rows.FirstOrDefault()?.Get<Quote, string>(col => col.SiteAddress.PostCode) ?? "";
- Account.Value = o?.Rows.FirstOrDefault()?.Get<Quote, Guid>(col => col.Account.ID) ?? Guid.Empty;
- var notes = o?.Rows.FirstOrDefault()?.Get<Quote, string[]>(col => col.Notes) ?? null;
- Notes.Text = notes != null ? string.Join("\n\n", notes).Replace("\r\n\r\n", "\r\n").Replace("\n\n", "\n") : "";
- Status.SelectedValue = o?.Rows.FirstOrDefault()?.Get<Quote, Guid>(col => col.Status.ID) ?? Guid.Empty;
- QuoteValue.Text = o != null && o.Rows.Any() ? string.Format("${0:F2}", o.Rows.First().Get<Quote, double>(col => col.ExTax)) : "";
- IsReady = bIsReady;
- });
- }
- private void Title_OnEditorValueChanged(IDynamicEditorControl sender, Dictionary<string, object> values)
- {
- if (IsReady)
- {
- var quote = new Quote { ID = ParentID };
- quote.Number = _rows?.FirstOrDefault()?.Get<Quote, string>(col => col.Number) ?? "";
- quote.Title = Title.Value;
- new Client<Quote>().Save(quote, "Updated Title", (j, err) => { });
- }
- }
- private void Customer_OnEditorValueChanged(IDynamicEditorControl sender, Dictionary<string, object> values)
- {
- Account.Value = (Guid)values["Account.ID"];
- if (IsReady)
- {
- var quote = new Quote { ID = ParentID };
- quote.Number = _rows.FirstOrDefault()?.Get<Quote, string>(col => col.Number) ?? "";
- quote.Customer.ID = (Guid)values["Customer.ID"];
- quote.Account.ID = (Guid)values["Account.ID"];
- new Client<Quote>().Save(quote, "Updated Customer ID", (j, err) => { });
- }
- }
- private void Account_OnEditorValueChanged(IDynamicEditorControl sender, Dictionary<string, object> values)
- {
- if (IsReady)
- {
- var quote = new Quote { ID = ParentID };
- quote.Number = _rows?.FirstOrDefault()?.Get<Quote, string>(col => col.Number) ?? "";
- quote.Account.ID = (Guid)values["Account.ID"];
- new Client<Quote>().Save(quote, "Updated Account ID", (j, err) => { });
- }
- }
- private void Status_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (IsReady)
- {
- var quote = new Quote { ID = ParentID };
- quote.Number = _rows?.FirstOrDefault()?.Get<Quote, string>(col => col.Number) ?? "";
- quote.Status.ID = Status.SelectedValue != null ? (Guid)Status.SelectedValue : Guid.Empty;
- new Client<Quote>().Save(quote, "Updated Quote Status", (j, err) => { });
- }
- }
-
- #region IDynamicEditorHost
- public IEnumerable<DynamicGridColumn> Columns { get; } = InitialiseColumns();
- private static DynamicGridColumns InitialiseColumns()
- {
- var columns = new DynamicGridColumns();
- columns.ExtractColumns(typeof(Quote));
- return columns;
- }
- public void LoadColumns(string column, Dictionary<string, string> columns)
- {
- columns.Clear();
- var comps = column.Split('.').ToList();
- comps.RemoveAt(comps.Count - 1);
- var prefix = string.Format("{0}.", string.Join(".", comps));
- var cols = Columns.Where(x => !x.ColumnName.Equals(column) && x.ColumnName.StartsWith(prefix));
- foreach (var col in cols)
- columns[col.ColumnName.Replace(prefix, "")] = col.ColumnName;
- }
- public IFilter? DefineFilter(Type type) => LookupFactory.DefineFilter<Quote>(new Quote[] { new Quote() }, type);
- public void LoadLookups(ILookupEditorControl editor)
- {
- //if (editor == Activity) Activity_OnDefineLookups(editor);
- //else if (editor == Kanban) Task_OnDefineLookups(editor);
- //else if (editor == ITP) ITP_OnDefineLookups(editor);
- }
- public Document? FindDocument(string filename)
- {
- return new Client<Document>().Load(new Filter<Document>(x => x.FileName).IsEqualTo(filename)).FirstOrDefault();
- }
- public Document? GetDocument(Guid id)
- {
- Document? doc = null;
- if (id != Guid.Empty)
- doc = new Client<Document>().Load(new Filter<Document>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
- return doc;
- }
- public void SaveDocument(Document document)
- {
- new Client<Document>().Save(document, "");
- }
- object?[] IDynamicEditorHost.GetItems() => new object?[] { new Quote() };
- public BaseEditor? GetEditor(DynamicGridColumn column) => column.Editor.CloneEditor();
-
- #endregion
- }
- }
|