123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- using System;
- using System.Diagnostics;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media.Imaging;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- namespace PRSDesktop
- {
- internal class SupplierProductGrid : DynamicDataGrid<SupplierProduct>, ISupplierGrid
- {
- private static ProductsGrid pg;
- private readonly Button ActiveButton;
- private bool? bActive;
- private bool? bLinked;
- private readonly Button CreateProductButton;
- private readonly Button EditProductButton;
- private Button LinkedButton;
- private readonly Button LinkProductButton;
- private readonly BitmapImage url = PRSDesktop.Resources.view.AsBitmapImage();
- public SupplierProductGrid()
- {
- ColumnsTag = "SupplierProduct";
- Options.AddRange(
- DynamicGridOption.SelectColumns,
- DynamicGridOption.MultiSelect,
- DynamicGridOption.FilterRows,
- DynamicGridOption.RecordCount
- );
- HiddenColumns.Add(x => x.URL);
- ActionColumns.Add(new DynamicImageColumn(URLImage, URLAction) { Position = DynamicActionColumnPosition.Start });
- LinkedButton = AddButton("Linked + Unlinked", null, ToggleLinked);
- ActiveButton = AddButton("Active + Expired", null, ToggleActive);
- ActiveButton.Margin = new Thickness(ActiveButton.Margin.Left, ActiveButton.Margin.Top, 10, ActiveButton.Margin.Bottom);
- CreateProductButton = AddButton("Create Product", PRSDesktop.Resources.small_add.AsBitmapImage(), CreateProduct);
- CreateProductButton.Visibility = Visibility.Collapsed;
- LinkProductButton = AddButton("Link Product", PRSDesktop.Resources.link.AsBitmapImage(), LinkProduct);
- LinkProductButton.Visibility = Visibility.Collapsed;
- EditProductButton = AddButton("Edit Product", PRSDesktop.Resources.product.AsBitmapImage(), EditProduct);
- EditProductButton.Visibility = Visibility.Collapsed;
- HiddenColumns.Add(x => x.Product.ID);
- HiddenColumns.Add(x => x.SupplierCode);
- HiddenColumns.Add(x => x.SupplierDescription);
- HiddenColumns.Add(x => x.TaxCode.ID);
- HiddenColumns.Add(x => x.CostPrice);
- }
- public Guid ParentID { get; set; }
- private void ToggleBoolean(ref bool? value)
- {
- if (value.HasValue)
- {
- if (value.Value)
- value = false;
- else
- value = null;
- }
- else
- {
- value = true;
- }
- }
- private bool ToggleLinked(Button sender, CoreRow[] row)
- {
- ToggleBoolean(ref bLinked);
- UpdateButton(sender, null, bLinked.HasValue ? bLinked.Value ? "Linked Only" : "Unlinked Only" : "Linked + Unlinked");
- return true;
- }
- private bool ToggleActive(Button sender, CoreRow[] row)
- {
- ToggleBoolean(ref bActive);
- UpdateButton(sender, null, bActive.HasValue ? bActive.Value ? "Active Only" : "Expired Only" : "Active + Expired");
- return true;
- }
- private bool CreateProduct(Button sender, CoreRow[] arg2)
- {
- if (arg2 == null || arg2.Length != 1)
- return false;
- var sp = arg2.First().ToObject<SupplierProduct>();
- if (pg == null)
- pg = new ProductsGrid();
- var product = new Product();
- product.Code = sp.SupplierCode;
- product.Name = sp.SupplierDescription;
- product.Supplier.ID = sp.ID;
- product.UseDefaultSupplierPricing = true;
- product.PricingStrategy = ProductPricingStrategy.Standard;
- product.BaseCost = sp.CostPrice;
- product.NettCost = sp.CostPrice;
- product.TaxCode.ID = sp.TaxCode.ID;
- if (pg.EditItems(new[] { product }))
- {
- sp.Product.ID = product.ID;
- new Client<SupplierProduct>().Save(sp, "");
- return true;
- }
- return false;
- }
- private bool LinkProduct(Button arg1, CoreRow[] arg2)
- {
- if (arg2 == null || arg2.Length != 1)
- return false;
- var list = new PopupList(typeof(Product), Guid.Empty, new string[] { });
- if (list.ShowDialog() == true)
- {
- var sp = arg2.First().ToObject<SupplierProduct>();
- sp.Product.ID = list.ID;
- new Client<SupplierProduct>().Save(sp, "");
- return true;
- }
- return false;
- }
- private bool EditProduct(Button sender, CoreRow[] arg2)
- {
- if (arg2 == null || arg2.Length != 1)
- return false;
- var product = new Client<Product>()
- .Load(new Filter<Product>(x => x.ID).IsEqualTo(arg2.First().Get<SupplierProduct, Guid>(x => x.Product.ID))).FirstOrDefault();
- if (product != null)
- {
- if (pg == null)
- pg = new ProductsGrid();
- return pg.EditItems(new[] { product });
- }
- return false;
- }
- private bool URLAction(CoreRow arg)
- {
- var url = arg.Get<Product, String>(x => x.URL);
- if (!String.IsNullOrWhiteSpace(url))
- Process.Start(new ProcessStartInfo(url) { UseShellExecute = true });
- return false;
- }
- private BitmapImage URLImage(CoreRow arg)
- {
- return arg == null ? null : string.IsNullOrWhiteSpace(arg.Get<Product, string>(x => x.URL)) ? null : url;
- }
- protected override void Reload(Filters<SupplierProduct> criteria, Columns<SupplierProduct> columns, ref SortOrder<SupplierProduct> sort,
- Action<CoreTable, Exception> action)
- {
- if (bLinked.HasValue)
- {
- if (bLinked.Value)
- criteria.Add(new Filter<SupplierProduct>(x => x.Product).LinkValid());
- else
- criteria.Add(new Filter<SupplierProduct>(x => x.Product).NotLinkValid());
- }
- if (bActive.HasValue)
- {
- if (bActive.Value)
- criteria.Add(new Filter<SupplierProduct>(x => x.Expired).IsEqualTo(DateTime.MinValue));
- else
- criteria.Add(new Filter<SupplierProduct>(x => x.Expired).IsNotEqualTo(DateTime.MinValue));
- }
- criteria.Add(new Filter<SupplierProduct>(x => x.SupplierLink.ID).IsEqualTo(ParentID));
- base.Reload(criteria, columns, ref sort, action);
- }
- protected override SupplierProduct CreateItem()
- {
- var result = base.CreateItem();
- result.SupplierLink.ID = ParentID;
- return result;
- }
- protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
- {
- if (column.ColumnName.Equals("SupplierLink.ID"))
- return new NullEditor();
- return base.GetEditor(item, column);
- }
- protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
- {
- if (ParentID == Guid.Empty)
- MessageBox.Show("Please select a Supplier first!");
- else
- base.DoAdd();
- }
- protected override void SelectItems(CoreRow[] rows)
- {
- base.SelectItems(rows);
- var bSingle = rows != null && rows.Length == 1;
- var bExisting = bSingle && rows.First().IsEntityLinkValid<SupplierProduct, ProductLink>(x => x.Product);
- CreateProductButton.Visibility = bSingle && !bExisting ? Visibility.Visible : Visibility.Collapsed;
- LinkProductButton.Visibility = bSingle && !bExisting ? Visibility.Visible : Visibility.Collapsed;
- EditProductButton.Visibility = bSingle && bExisting ? Visibility.Visible : Visibility.Collapsed;
- }
- protected override Guid GetImportID()
- {
- return ParentID;
- }
- }
- }
|