123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Globalization;
- using System.Linq;
- using System.Reflection;
- using System.Windows;
- using System.Windows.Controls;
- using InABox.Core;
- using InABox.Wpf;
- using InABox.WPF;
- using Syncfusion.Windows.Shared;
- using Xceed.Wpf.AvalonDock.Themes;
- namespace InABox.DynamicGrid
- {
- /// <summary>
- /// Interaction logic for DynamicExportForm.xaml
- /// </summary>
- public partial class DynamicExportForm : ThemableWindow
- {
- private readonly Type _entitytype;
- public DynamicExportForm(Type entitytype, IEnumerable<string> Selected)
- {
- InitializeComponent();
- Fields = Array.Empty<string>();
- ChildMappings = new();
- var codeProperty = EntityCode(entitytype);
- if (codeProperty != null)
- {
- var m2mTypes = DynamicGridUtils.GetManyToManyTypes(entitytype)
- .Where(x => x.GetInterfaces().Contains(typeof(IExportable)));
- var o2mTypes = DynamicGridUtils.GetOneToManyTypes(entitytype)
- .Where(x => x.GetInterfaces().Contains(typeof(IExportable)));
- foreach(var type in m2mTypes)
- {
- var otherType = CoreUtils.GetManyToManyOtherType(type, entitytype);
- var result = new Inflector.Inflector(new CultureInfo("en")).Pluralize(otherType.Name);
- AddOtherTab(type, result);
- }
- foreach(var type in o2mTypes)
- {
- var caption = type.GetCustomAttribute(typeof(Caption));
- var result = caption != null ?
- ((Caption)caption).Text :
- new Inflector.Inflector(new CultureInfo("en")).Pluralize(type.Name);
- AddOtherTab(type, result);
- }
- }
- _entitytype = entitytype;
- ShowHelpImage.Source = Properties.Resources.help.AsBitmapImage();
- var mappings = ImportFactory.ExtractMappings(_entitytype, ImportMappingType.Export);
- Mappings.HideBlank = true;
- Mappings.Items.AddRange(mappings);
- Mappings.Selected.AddRange(mappings.Where(x => x.Key || Selected.Contains(x.Property)));
- Mappings.Refresh(true, true);
- }
- private DynamicExportMappingGrid CreateOtherTab(Type tabType)
- {
- var mappingsGrid = new DynamicExportMappingGrid();
- var mappings = ImportFactory.ExtractMappings(tabType, ImportMappingType.Export);
- mappingsGrid.HideBlank = true;
- mappingsGrid.Items.AddRange(mappings);
- mappingsGrid.Selected.Clear();
- mappingsGrid.Refresh(true, true);
- return mappingsGrid;
- }
- private void AddOtherTab(Type tabType, string caption)
- {
- var tab = new TabItem() { Header = caption };
- var grid = CreateOtherTab(tabType);
- ChildMappings[tabType] = grid;
- tab.Content = grid;
- TabControl.Items.Add(tab);
- }
- private DynamicExportMappingGrid CurrentMappings
- {
- get => (TabControl.SelectedContent as DynamicExportMappingGrid)!;
- }
- public string[] Fields { get; private set; }
- private Dictionary<Type, DynamicExportMappingGrid> ChildMappings;
- private void ClearAll_Click(object sender, RoutedEventArgs e)
- {
- CurrentMappings.ClearAll();
- }
- private void SelectAll_Click(object sender, RoutedEventArgs e)
- {
- CurrentMappings.SelectAll();
- }
- private void HideBlank_Click(object sender, RoutedEventArgs e)
- {
- CurrentMappings.HideBlank = !CurrentMappings.HideBlank;
- HideBlank.Content = CurrentMappings.HideBlank ? "Show All" : "Hide Blank";
- CurrentMappings.Refresh(false, true);
- }
- private void Cancel_Click(object sender, RoutedEventArgs e)
- {
- DialogResult = false;
- }
- private void OK_Click(object sender, RoutedEventArgs e)
- {
- Fields = Mappings.Selected.Select(x => x.Property).ToArray();
- DialogResult = true;
- }
- private void ShowHelp_Click(object sender, RoutedEventArgs e)
- {
- Process.Start(new ProcessStartInfo("https://prs-software.com.au/wiki/index.php/Export_Data") { UseShellExecute = true });
- }
- private IProperty? EntityCode(Type entityType)
- {
- foreach(var property in DatabaseSchema.Properties(entityType))
- {
- var editor = property.Editor;
- if(editor is UniqueCodeEditor)
- {
- return property;
- }
- }
- return null;
- }
- public Dictionary<Type, IEnumerable<string>> GetChildFields()
- {
- return ChildMappings.ToDictionary(
- x => x.Key,
- x => x.Value.Selected.Select(x => x.Property));
- }
- }
- }
|