367 lines
15 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|