PipefyProspUpdate/Home.xaml.cs

367 lines
15 KiB
C#

using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System;
using System.Windows.Media;
using System.Threading.Tasks;
using System.Globalization;
using System.Text;
namespace PipefyProspUpdate
{
public partial class Home : Page
{
public Home()
{
InitializeComponent();
ProgressBar.Value = 100;
Loaded += Page_Loaded;
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
await LoadSuggestions();
}
private async Task LoadSuggestions()
{
if (AppState.Instance.Suggestions!.Count == 0)
{
await App.LoadSuggestions();
}
string _uf = AppState.Instance.selectedUF ?? "Paraná (PR)";
UFComboBox.ItemsSource = AppState.Instance.Suggestions!.AsEnumerable()
.Select(x => x.UF!.ToString())
.Distinct()
.ToList();
UFComboBox.SelectedItem = _uf;
UpdateSuggestionsLists();
UFComboBox.SelectionChanged += ComboBox_TextChanged;
MesoSearchBox.TextChanged += SearchBox_TextChanged;
CitySearchBox.TextChanged += SearchBox_TextChanged;
MesoChangeBox.ItemsSource = AppState.Instance.MesoChangeBoxItems;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
}
private void ComboBox_TextChanged(object sender, SelectionChangedEventArgs e)
{
UpdateSuggestionsLists();
AppState.Instance.selectedUF = UFComboBox.SelectedItem.ToString() ?? "Paraná (PR)";
AppState.Instance.Save();
}
private void SearchBox_TextChanged(object sender, TextChangedEventArgs e)
{
UpdateSuggestionsLists();
}
static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder(capacity: normalizedString.Length);
for (int i = 0; i < normalizedString.Length; i++)
{
char c = normalizedString[i];
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder
.ToString()
.Normalize(NormalizationForm.FormC);
}
private void UpdateSuggestionsLists()
{
var filteredSuggestions = AppState.Instance.Suggestions ?? Enumerable.Empty<Models.Suggestion>();
var list = filteredSuggestions.Where(
x =>
(RemoveDiacritics(x.City!.ToString())!.ToLower()!.Contains(CitySearchBox.Text.ToLower())) &&
(RemoveDiacritics(x.Meso!.ToString())!.ToLower()!.Contains(MesoSearchBox.Text.ToLower())) &&
(x.UF!.ToString()!.ToLower()!.Contains((UFComboBox.SelectedItem.ToString() ?? string.Empty).ToLower())));
MesoSuggestionsList.ItemsSource = list.Select(
x =>
x.UF + "****" + x.Meso
).Distinct().Select(
y =>
new Models.Suggestion {
UF = y.Split("****")[0],
Meso = y.Split("****")[1]
}
).Distinct();
CitySuggestionsList.ItemsSource = list.Select(
x =>
x.ID + "****" + x.UF + "****" + x.Meso + "****" + x.City
).Distinct().Select(
y =>
new Models.Suggestion
{
ID = y.Split("****")[0],
UF = y.Split("****")[1],
Meso = y.Split("****")[2],
City = y.Split("****")[3],
}
).Distinct();
}
private void ListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var clickedItem = e.OriginalSource as FrameworkElement;
while (clickedItem != null && clickedItem is not ListBoxItem)
{
clickedItem = VisualTreeHelper.GetParent(clickedItem) as FrameworkElement;
}
if (sender is ListBox listBox && clickedItem is ListBoxItem listBoxItem)
{
listBox.SelectedItem = listBoxItem.Content;
Models.Suggestion selectedItem = (Models.Suggestion)listBoxItem.Content;
if (selectedItem != null)
{
DragDrop.DoDragDrop(listBox, selectedItem, DragDropEffects.Move);
}
}
}
private void ListBox_DragOver(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Move;
e.Handled = true;
}
private void HandleDrop(object sender, DragEventArgs e)
{
Models.Suggestion? droppedData = (Models.Suggestion?)e.Data.GetData(typeof(Models.Suggestion));
if (droppedData != null && sender is ListBox origin)
{
switch (origin.Name)
{
case ("CityChangeBox"):
var meso = droppedData.Meso;
if (!AppState.Instance.CityChangeBoxItems!.Where(x => x.City == droppedData.City).Any() &&
AppState.Instance.Suggestions!.Select(x => x.City).Contains(droppedData.City) &&
!AppState.Instance.MesoChangeBoxItems!.Where(x => x.Meso == meso).Any()
)
{
AppState.Instance.CityChangeBoxItems.Add(droppedData);
}
break;
case ("MesoChangeBox"):
List<Models.Suggestion>? cities = null;
if (!AppState.Instance.MesoChangeBoxItems!.Where(x => x.Meso == droppedData.Meso).Any() &&
AppState.Instance.Suggestions!.Select(x => x.Meso).Contains(droppedData.Meso) && droppedData.City == null)
{
AppState.Instance.MesoChangeBoxItems.Add(droppedData);
cities = AppState.Instance.Suggestions!.Where(x => x.Meso == droppedData.Meso).ToList();
}
List<Models.Suggestion> mylist = AppState.Instance.CityChangeBoxItems.ToList();
if (cities != null)
{
foreach (Models.Suggestion city in mylist)
{
if (cities.Where(x => x.ID == city.ID).Any())
{
AppState.Instance.CityChangeBoxItems.Remove(city);
}
}
}
break;
}
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
CityChangeBox.ItemsSource = null;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
MesoChangeBox.ItemsSource = null;
MesoChangeBox.ItemsSource = AppState.Instance.MesoChangeBoxItems;
}
}
private void ChangeBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (sender is ListBox origin)
{
int index = origin.SelectedIndex;
if (index > -1)
{
Models.Suggestion selectedItem = (Models.Suggestion)origin.Items[index];
if (sender != null && (e.Key == Key.Delete || e.Key == Key.Back))
{
switch (origin!.Name)
{
case ("CityChangeBox"):
Models.Suggestion city = AppState.Instance.CityChangeBoxItems.Where(x => x.City == selectedItem.City).First();
AppState.Instance.CityChangeBoxItems.Remove(selectedItem);
CityChangeBox.ItemsSource = null;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
CityChangeBox.SelectedIndex = 0;
break;
case ("MesoChangeBox"):
Models.Suggestion meso = AppState.Instance.MesoChangeBoxItems.Where(x => x.Meso == selectedItem.Meso).First();
AppState.Instance.MesoChangeBoxItems.Remove(meso);
MesoChangeBox.ItemsSource = null;
MesoChangeBox.ItemsSource = AppState.Instance.MesoChangeBoxItems;
MesoChangeBox.SelectedIndex = 0;
break;
}
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
}
}
}
}
private void Filter_Click(object sender, RoutedEventArgs e)
{
if(MesoChangeBox.Items.Count > 0 | CityChangeBox.Items.Count > 0)
{
AppState.Instance.Save();
NavigationService?.Navigate(new Users());
}
}
private void MesoAdd_Click(object sender, RoutedEventArgs e)
{
var selectedItems = MesoSuggestionsList.SelectedItems.OfType<Models.Suggestion>().ToList();
if (selectedItems.Count > 0 && selectedItems != null)
{
foreach (var item in selectedItems)
{
List<Models.Suggestion>? cities = null;
if (!AppState.Instance.MesoChangeBoxItems!.Where(x => x.UF == item.UF && x.Meso == item.Meso && x.ID == null && x.City == null).Any() &&
AppState.Instance.Suggestions!.Select(x => x.Meso).Contains(item.Meso) && item.City == null && item.ID == null)
{
AppState.Instance.MesoChangeBoxItems.Add(item);
cities = AppState.Instance.Suggestions!.Where(x => x.UF == item.UF && x.Meso == item.Meso).ToList();
}
List<Models.Suggestion> mylist = AppState.Instance.CityChangeBoxItems.ToList();
if (cities != null && mylist.Count > 0)
{
foreach (Models.Suggestion city in mylist)
{
if (cities.Where(x => x.ID == city.ID).Any())
{
AppState.Instance.CityChangeBoxItems.Remove(city);
}
}
}
}
MesoSuggestionsList.SelectedIndex = -1;
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
CityChangeBox.ItemsSource = null;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
MesoChangeBox.ItemsSource = null;
MesoChangeBox.ItemsSource = AppState.Instance.MesoChangeBoxItems;
}
}
private void MesoRemove_Click(object sender, RoutedEventArgs e)
{
var selectedItems = MesoChangeBox.SelectedItems.OfType<Models.Suggestion>().ToList();
if (selectedItems.Count > 0 && selectedItems != null)
{
foreach (var item in selectedItems)
{
if (item != null && AppState.Instance.MesoChangeBoxItems.Count != 0)
{
var select = AppState.Instance.MesoChangeBoxItems.Where(x => x.UF == item.UF && x.Meso == item.Meso && x.ID == null && x.City == null).First();
AppState.Instance.MesoChangeBoxItems.Remove(select);
}
}
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
MesoChangeBox.ItemsSource = null;
MesoChangeBox.ItemsSource = AppState.Instance.MesoChangeBoxItems;
MesoChangeBox.SelectedIndex = 0;
}
}
private void CityAdd_Click(object sender, RoutedEventArgs e)
{
var selectedItems = CitySuggestionsList.SelectedItems.OfType<Models.Suggestion>().ToList();
if (selectedItems.Count > 0 && selectedItems != null)
{
foreach (var item in selectedItems)
{
var meso = item.Meso;
if (!AppState.Instance.CityChangeBoxItems!.Where(x => x.City == item.City).Any() &&
AppState.Instance.Suggestions!.Select(x => x.City).Contains(item.City) &&
!AppState.Instance.MesoChangeBoxItems!.Where(x => x.Meso == meso).Any()
)
{
AppState.Instance.CityChangeBoxItems.Add(item);
}
}
CitySuggestionsList.SelectedIndex = -1;
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
CityChangeBox.ItemsSource = null;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
}
}
private void CityRemove_Click(object sender, RoutedEventArgs e)
{
var selectedItems = CityChangeBox.SelectedItems.OfType<Models.Suggestion>().ToList();
if (selectedItems.Count > 0 && selectedItems != null)
{
foreach (var item in selectedItems)
{
if (item != null)
{
var select = AppState.Instance.CityChangeBoxItems.Where(x => x.ID == item.ID).First();
AppState.Instance.CityChangeBoxItems.Remove(select);
}
}
AppState.Instance.filterFlag = true;
AppState.Instance.Save();
CityChangeBox.ItemsSource = null;
CityChangeBox.ItemsSource = AppState.Instance.CityChangeBoxItems;
CityChangeBox.SelectedIndex = 0;
}
}
}
}