using eJay.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 eJay.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 /// /// Privater Teil von /// private string _windowTitle; /// /// Comment /// public string WindowTitle { get { return _windowTitle; } set { _windowTitle = value; RaisePropertyChanged(() => WindowTitle); } } #endregion #region WindowIcon (string) Property /// /// Privater Teil von /// private string _windowIcon; /// /// Comment /// public string WindowIcon { get { return _windowIcon; } set { _windowIcon = value; RaisePropertyChanged(() => WindowIcon); } } #endregion #region AmountTextBoxText (string) Property /// /// Privater Teil von /// private string _amountTextBoxText; /// /// Comment /// public string AmountTextBoxText { get { return _amountTextBoxText; } set { _amountTextBoxText = value; RaisePropertyChanged(() => AmountTextBoxText); AddTransactionButtonClickCommand.RaiseCanExecuteChanged(); } } //////////////////////////////////////////////////////////////////////////////////////////////////// /// Gets the amount text box text as number representation. /// /// The amount text box text number representation. //////////////////////////////////////////////////////////////////////////////////////////////////// public double AmountTextBoxTextNumberRepresentation { get { if (string.IsNullOrWhiteSpace(_amountTextBoxText)) return 0.0; return double.Parse(_amountTextBoxText, CultureInfo.InvariantCulture); } } #endregion #region DescriptionTextBoxText (string) Property /// /// Privater Teil von /// private string _descriptionTextBoxText; /// /// DescriptionTextBoxText /// public string DescriptionTextBoxText { get { return _descriptionTextBoxText; } set { _descriptionTextBoxText = value; RaisePropertyChanged(() => DescriptionTextBoxText); AddTransactionButtonClickCommand.RaiseCanExecuteChanged(); } } #endregion #region DatePickerSelectedDate (DateTime?) Property /// /// Privater Teil von /// private DateTime? _datePickerSelectedDate; /// /// Comment /// public DateTime? DatePickerSelectedDate { get { return _datePickerSelectedDate; } set { _datePickerSelectedDate = value; RaisePropertyChanged(() => DatePickerSelectedDate); AddTransactionButtonClickCommand.RaiseCanExecuteChanged(); } } #endregion #region PersonComboBoxItemSource (List) Property /// /// Privater Teil von /// private List _personComboBoxItemSource; /// /// Comment /// public List PersonComboBoxItemSource { get { return _personComboBoxItemSource; } set { _personComboBoxItemSource = value; RaisePropertyChanged(() => PersonComboBoxItemSource); } } #endregion #region PersonComboBoxSelectedItem (Person) Property /// /// Privater Teil von /// private Person _personComboBoxSelectedItem; /// /// Comment /// public Person PersonComboBoxSelectedItem { get { return _personComboBoxSelectedItem; } set { _personComboBoxSelectedItem = value; RaisePropertyChanged(() => PersonComboBoxSelectedItem); AddTransactionButtonClickCommand.RaiseCanExecuteChanged(); } } #endregion #region AddTransactionButtonClickCommand Command /// /// Private member backing variable for /// private RelayCommand _addTransactionButtonClickCommand = null; /// /// Comment /// 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(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.AddHours(12) }); 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 //////////////////////////////////////////////////////////////////////////////////////////////////// /// Default constructor. /// /// Andre Beging, 10.09.2017. //////////////////////////////////////////////////////////////////////////////////////////////////// public AddTransactionViewModel() { UpdatesPersonsComboBox(); } #region UpdatesPersonsComboBox() //////////////////////////////////////////////////////////////////////////////////////////////////// /// Updates persons combo box. /// /// Andre Beging, 09.09.2017. //////////////////////////////////////////////////////////////////////////////////////////////////// public void UpdatesPersonsComboBox() { var personList = App.Database.Table().OrderBy(x => x.FirstName).ToList(); PersonComboBoxItemSource = personList; } #endregion #region SetModeSpecificStrings() //////////////////////////////////////////////////////////////////////////////////////////////////// /// Sets mode specific strings. /// /// Andre Beging, 09.09.2017. //////////////////////////////////////////////////////////////////////////////////////////////////// public void SetModeSpecificStrings() { if (DialogMode == TransactionType.Deposit) { WindowTitle = "Add Deposit"; WindowIcon = "../../Content/money_green.ico"; } if (DialogMode == TransactionType.Charge) { WindowTitle = "Add Charge"; WindowIcon = "../../Content/money_red.ico"; } PersonComboBoxSelectedItem = PersonComboBoxItemSource.FirstOrDefault(x => x.Id == PreselectedPerson?.Id); } #endregion #region ClearView() //////////////////////////////////////////////////////////////////////////////////////////////////// /// Clears the view. /// /// Andre Beging, 09.09.2017. //////////////////////////////////////////////////////////////////////////////////////////////////// public void ClearView() { AmountTextBoxText = string.Empty; DescriptionTextBoxText = string.Empty; PersonComboBoxSelectedItem = null; DatePickerSelectedDate = DateTime.Now; } #endregion } }