Initial Commit

This commit is contained in:
Andre Beging
2017-09-11 05:46:57 +02:00
parent 20199ef17c
commit 3d2d4851cc
37 changed files with 2513 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GalaSoft.MvvmLight;
namespace DebtMgr.ViewModel.Dialogs
{
public class AddTransactionViewModel : ViewModelBase
{
}
}

View File

@@ -0,0 +1,301 @@
using DebtMgr.Model;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using SQLiteNetExtensions.Extensions;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows;
namespace DebtMgr.ViewModel.Dialogs
{
public class AddTransactionViewModel : ViewModelBase
{
#region Public Properties
public event EventHandler RequestClose;
public TransactionType DialogMode { get; set; }
public Person PreselectedPerson { get; set; }
#endregion
#region WindowTitle (string) Property
/// <summary>
/// Privater Teil von <see cref="WindowTitle" />
/// </summary>
private string _windowTitle;
/// <summary>
/// Comment
///</summary>
public string WindowTitle
{
get { return _windowTitle; }
set
{
_windowTitle = value;
RaisePropertyChanged(() => WindowTitle);
}
}
#endregion
#region AmountTextBoxText (string) Property
/// <summary>
/// Privater Teil von <see cref="AmountTextBoxText" />
/// </summary>
private string _amountTextBoxText;
/// <summary>
/// Comment
///</summary>
public string AmountTextBoxText
{
get
{
return _amountTextBoxText;
}
set
{
_amountTextBoxText = value;
RaisePropertyChanged(() => AmountTextBoxText);
AddTransactionButtonClickCommand.RaiseCanExecuteChanged();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Gets the amount text box text as number representation. </summary>
///
/// <value> The amount text box text number representation. </value>
////////////////////////////////////////////////////////////////////////////////////////////////////
public double AmountTextBoxTextNumberRepresentation
{
get
{
if (string.IsNullOrWhiteSpace(_amountTextBoxText)) return 0.0;
return double.Parse(_amountTextBoxText, CultureInfo.InvariantCulture);
}
}
#endregion
#region DescriptionTextBoxText (string) Property
/// <summary>
/// Privater Teil von <see cref="DescriptionTextBoxText" />
/// </summary>
private string _descriptionTextBoxText;
/// <summary>
/// DescriptionTextBoxText
///</summary>
public string DescriptionTextBoxText
{
get { return _descriptionTextBoxText; }
set
{
_descriptionTextBoxText = value;
RaisePropertyChanged(() => DescriptionTextBoxText);
AddTransactionButtonClickCommand.RaiseCanExecuteChanged();
}
}
#endregion
#region DatePickerSelectedDate (DateTime?) Property
/// <summary>
/// Privater Teil von <see cref="DatePickerSelectedDate" />
/// </summary>
private DateTime? _datePickerSelectedDate;
/// <summary>
/// Comment
///</summary>
public DateTime? DatePickerSelectedDate
{
get { return _datePickerSelectedDate; }
set
{
_datePickerSelectedDate = value;
RaisePropertyChanged(() => DatePickerSelectedDate);
AddTransactionButtonClickCommand.RaiseCanExecuteChanged();
}
}
#endregion
#region PersonComboBoxItemSource (List<Person>) Property
/// <summary>
/// Privater Teil von <see cref="PersonComboBoxItemSource" />
/// </summary>
private List<Person> _personComboBoxItemSource;
/// <summary>
/// Comment
///</summary>
public List<Person> PersonComboBoxItemSource
{
get { return _personComboBoxItemSource; }
set
{
_personComboBoxItemSource = value;
RaisePropertyChanged(() => PersonComboBoxItemSource);
}
}
#endregion
#region PersonComboBoxSelectedItem (Person) Property
/// <summary>
/// Privater Teil von <see cref="PersonComboBoxSelectedItem" />
/// </summary>
private Person _personComboBoxSelectedItem;
/// <summary>
/// Comment
///</summary>
public Person PersonComboBoxSelectedItem
{
get { return _personComboBoxSelectedItem; }
set
{
_personComboBoxSelectedItem = value;
RaisePropertyChanged(() => PersonComboBoxSelectedItem);
AddTransactionButtonClickCommand.RaiseCanExecuteChanged();
}
}
#endregion
#region AddTransactionButtonClickCommand Command
/// <summary>
/// Private member backing variable for <see cref="AddTransactionButtonClickCommand" />
/// </summary>
private RelayCommand _addTransactionButtonClickCommand = null;
/// <summary>
/// Comment
/// </summary>
public RelayCommand AddTransactionButtonClickCommand => _addTransactionButtonClickCommand ?? (_addTransactionButtonClickCommand = new RelayCommand(AddTransactionButtonClickCommand_Execute, AddTransactionButtonClickCommand_CanExecute));
private bool AddTransactionButtonClickCommand_CanExecute()
{
if (AmountTextBoxTextNumberRepresentation < 0.01) return false;
if (string.IsNullOrWhiteSpace(DescriptionTextBoxText)) return false;
if (PersonComboBoxSelectedItem == null) return false;
if (DatePickerSelectedDate == null) return false;
return true;
}
private void AddTransactionButtonClickCommand_Execute()
{
if (AddTransactionButtonClickCommand_CanExecute())
{
try
{
var person = App.Database.Get<Person>(PersonComboBoxSelectedItem.Id);
App.Database.GetChildren(person);
if (DatePickerSelectedDate != null)
person.Transactions.Add(new Transaction
{
Amount = AmountTextBoxTextNumberRepresentation,
Type = DialogMode,
Description = DescriptionTextBoxText,
PersonId = person.Id,
Time = DatePickerSelectedDate.Value
});
App.Database.InsertOrReplaceWithChildren(person);
RequestClose?.Invoke(null, null);
App.Locator.MainView.UpdatePersonsList();
}
catch (Exception)
{
MessageBox.Show("Something bad happened", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Default constructor. </summary>
///
/// <remarks> Andre Beging, 10.09.2017. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////
public AddTransactionViewModel()
{
UpdatesPersonsComboBox();
}
#region UpdatesPersonsComboBox()
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Updates persons combo box. </summary>
///
/// <remarks> Andre Beging, 09.09.2017. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////
public void UpdatesPersonsComboBox()
{
var personList = App.Database.Table<Person>().OrderBy(x => x.FirstName).ToList();
PersonComboBoxItemSource = personList;
}
#endregion
#region SetModeSpecificStrings()
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Sets mode specific strings. </summary>
///
/// <remarks> Andre Beging, 09.09.2017. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////
public void SetModeSpecificStrings()
{
if (DialogMode == TransactionType.Deposit)
{
WindowTitle = "Add Deposit";
}
if (DialogMode == TransactionType.Charge)
{
WindowTitle = "Add Charge";
}
PersonComboBoxSelectedItem =
PersonComboBoxItemSource.FirstOrDefault(x => x.Id == PreselectedPerson?.Id);
}
#endregion
#region ClearView()
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Clears the view. </summary>
///
/// <remarks> Andre Beging, 09.09.2017. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////
public void ClearView()
{
AmountTextBoxText = string.Empty;
DescriptionTextBoxText = string.Empty;
PersonComboBoxSelectedItem = null;
DatePickerSelectedDate = DateTime.Now;
}
#endregion
}
}

View File

@@ -0,0 +1,124 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using DebtMgr.Model;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Win32;
using SQLite.Net;
using SQLite.Net.Platform.Generic;
namespace DebtMgr.ViewModel.Dialogs
{
public class DatabaseSelectorDialogViewModel : ViewModelBase
{
public event EventHandler RequestClose;
#region SelectDatabasePathText (string) Property
/// <summary>
/// Privater Teil von <see cref="SelectDatabasePathText" />
/// </summary>
private string _selectDatabasePathText;
/// <summary>
/// Comment
///</summary>
public string SelectDatabasePathText
{
get { return _selectDatabasePathText; }
set
{
_selectDatabasePathText = value;
RaisePropertyChanged(() => SelectDatabasePathText);
}
}
#endregion
#region SelectDatabaseButtonClick Command
/// <summary>
/// Private member backing variable for <see cref="SelectDatabaseButtonClick" />
/// </summary>
private RelayCommand _selectDatabaseButtonClick = null;
/// <summary>
/// Comment
/// </summary>
public RelayCommand SelectDatabaseButtonClick => _selectDatabaseButtonClick ?? (_selectDatabaseButtonClick = new RelayCommand(SelectDatabaseButtonClick_Execute));
private void SelectDatabaseButtonClick_Execute()
{
var openFileDialog = new OpenFileDialog();
openFileDialog.CheckFileExists = true;
openFileDialog.Filter = "Debt Manager Database|*.dmdb|All files|*.*";
//Application.Current.Shutdown();
if (openFileDialog.ShowDialog() == true)
{
var x = new SQLiteConnection(new SQLitePlatformGeneric(), openFileDialog.FileName);
try
{
x.Table<Person>().ToList();
Properties.Settings.Default["Database"] = openFileDialog.FileName;
Properties.Settings.Default.Save();
RequestClose?.Invoke(null, null);
}
catch (Exception)
{
MessageBox.Show(
string.Format("File is not a Debt Manager database\n\n{0}", openFileDialog.FileName),
"File invalid",
MessageBoxButton.OK,
MessageBoxImage.Error);
}
finally
{
x.Close();
}
}
}
#endregion
#region CreateDatabaseButtonClick Command
/// <summary>
/// Private member backing variable for <see cref="CreateDatabaseButtonClick" />
/// </summary>
private RelayCommand _createDatabaseButtonClick = null;
/// <summary>
/// Comment
/// </summary>
public RelayCommand CreateDatabaseButtonClick => _createDatabaseButtonClick ?? (_createDatabaseButtonClick = new RelayCommand(CreateDatabaseButtonClick_Execute));
private void CreateDatabaseButtonClick_Execute()
{
var saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Debt Manager Database|*.dmdb|Standard database|*.db";
saveFileDialog.CreatePrompt = true;
if (saveFileDialog.ShowDialog() == true)
{
Properties.Settings.Default["Database"] = saveFileDialog.FileName;
Properties.Settings.Default.Save();
RequestClose?.Invoke(null, null);
}
}
#endregion
}
}

View File

@@ -0,0 +1,125 @@
using System;
using System.Windows;
using DebtMgr.Model;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
namespace DebtMgr.ViewModel.Dialogs
{
public class NewPersonDialogViewModel : ViewModelBase
{
public event EventHandler RequestClose;
#region FirstNameTextBoxText (string) Property
/// <summary>
/// Privater Teil von <see cref="FirstNameTextBoxText" />
/// </summary>
private string _firstNameTextBoxText;
/// <summary>
/// Comment
///</summary>
public string FirstNameTextBoxText
{
get { return _firstNameTextBoxText; }
set
{
_firstNameTextBoxText = value;
RaisePropertyChanged(() => FirstNameTextBoxText);
CreatePersonButtonClickCommand.RaiseCanExecuteChanged();
}
}
#endregion
#region LastNameTextBoxText (string) Property
/// <summary>
/// Privater Teil von <see cref="LastNameTextBoxText" />
/// </summary>
private string _lastNameTextBoxText;
/// <summary>
/// Comment
///</summary>
public string LastNameTextBoxText
{
get { return _lastNameTextBoxText; }
set
{
_lastNameTextBoxText = value;
RaisePropertyChanged(() => LastNameTextBoxText);
CreatePersonButtonClickCommand.RaiseCanExecuteChanged();
}
}
#endregion
#region CreatePersonButtonClickCommand Command
/// <summary>
/// Private member backing variable for <see cref="CreatePersonButtonClickCommand" />
/// </summary>
private RelayCommand _createPersonButtonClickCommand = null;
/// <summary>
/// Comment
/// </summary>
public RelayCommand CreatePersonButtonClickCommand => _createPersonButtonClickCommand ?? (_createPersonButtonClickCommand = new RelayCommand(CreatePersonButtonClickCommand_Execute, CreatePersonButtonClickCommand_CanExecute));
private bool CreatePersonButtonClickCommand_CanExecute()
{
if (string.IsNullOrWhiteSpace(FirstNameTextBoxText) || string.IsNullOrWhiteSpace(LastNameTextBoxText))
{
return false;
}
return true;
}
private void CreatePersonButtonClickCommand_Execute()
{
if (CreatePersonButtonClickCommand_CanExecute())
{
var newPerson = new Person
{
FirstName = FirstNameTextBoxText,
LastName = LastNameTextBoxText
};
var resultId = App.Database.Insert(newPerson);
if (resultId == 1)
{
App.Locator.MainView.UpdatePersonsList();
App.Locator.AddTransactionView.UpdatesPersonsComboBox();
RequestClose?.Invoke(null, null);
ClearView();
}
else
{
MessageBox.Show("Something bad happened", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
#endregion
#region ClearView()
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary> Clears the view. </summary>
///
/// <remarks> Andre Beging, 08.09.2017. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////
private void ClearView()
{
FirstNameTextBoxText = string.Empty;
LastNameTextBoxText = string.Empty;
}
#endregion
}
}