Statistiques
| Branche: | Révision:

root / GES_PAC / ViewModel / CreateDayViewModel.cs @ 6f451cc1

Historique | Voir | Annoter | Télécharger (3,47 ko)

1
using GES_PAC.Model;
2
using GES_PAC.View;
3
using System.Collections.ObjectModel;
4
using System.Windows.Input;
5

    
6
namespace GES_PAC.ViewModel
7
{
8
    public class CreateDayViewModel : BaseViewModel
9
    {
10

    
11
        #region Attributs
12
        private Personne _selectedPerson;
13
        private string _regime;
14
        private bool _isFormValid;
15
        #endregion
16

    
17
        #region Commandes
18
        public ICommand CreateDayCommand { get; }
19
        public ICommand AddPersonCommand { get; }
20
        public ICommand AddPlaceCommand { get; }
21
        #endregion
22

    
23
        #region Propriétés
24
        public ObservableCollection<Personne> Persons => PersonViewModel.Instance.Persons;
25
        public Personne SelectedPerson
26
        {
27
            get => _selectedPerson;
28
            set
29
            {
30
                _selectedPerson = value;
31
                OnPropertyChanged();
32
                ValidateForm();
33
            }
34
        }
35

    
36
        public ObservableCollection<Lieu> Places => PlaceViewModel.Instance.Places;
37

    
38
        private Lieu _selectedPlace;
39
        public Lieu SelectedPlace
40
        {
41
            get => _selectedPlace;
42
            set {
43
                _selectedPlace = value;
44
                OnPropertyChanged();
45
                ValidateForm();
46
            }
47
        }
48
        
49
        public string Regime
50
        {
51
            get => _regime;
52
            set
53
            {
54
                _regime = value;
55
                OnPropertyChanged();
56
                ValidateForm();
57
            }
58
        }
59
        
60
        public bool IsFormValid
61
        {
62
            get => _isFormValid;
63
            set
64
            {
65
                _isFormValid = value;
66
                OnPropertyChanged();
67
            }
68
        }
69

    
70
        public bool PlaceError { get; private set; } = true;
71
        public bool PersonError { get; private set; } = true;
72
        public bool RegimeError { get; private set; } = true;
73
        #endregion
74

    
75
        #region Constructeurs
76
        public CreateDayViewModel()
77
        {
78
            CreateDayCommand = new Command(async () => await CreateDay());
79
            AddPersonCommand = new Command(async () => await AddPerson());
80
            AddPlaceCommand = new Command(async () => await AddPlace());
81
        }
82
        #endregion
83

    
84
        #region Méthodes
85
        private async Task AddPerson() => await Shell.Current.GoToAsync(nameof(CreatePersonView));
86
        private async Task AddPlace() => await Shell.Current.GoToAsync(nameof(CreatePlaceView));
87
        private async Task CreateDay()
88
        {
89
            if (IsBusy) return;
90
            IsBusy = true;
91
            var date = DateTime.Now;
92
            var newDay = new Journee(date, SelectedPerson, SelectedPlace, Regime);
93
            App.Db.Journee.Add(newDay);
94
            await App.Db.SaveChangesAsync();
95
            JourneeViewModel.Instance.Journees.Add(newDay);
96
            await Shell.Current.GoToAsync($"{nameof(CreateCalibrationView)}?phase={PhaseCalibration.DEBUT.Name}");
97
            IsBusy = false;
98
        }
99

    
100
        private void ValidateForm()
101
        {
102
            PersonError = SelectedPerson == null;
103
            PlaceError = SelectedPlace == null;
104
            RegimeError = string.IsNullOrWhiteSpace(Regime) || Regime.Length < 3;
105

    
106
            OnPropertyChanged(nameof(PlaceError));
107
            OnPropertyChanged(nameof(PersonError));
108
            OnPropertyChanged(nameof(RegimeError));
109

    
110
            IsFormValid = !PlaceError && !PersonError && !RegimeError;
111

    
112
            (CreateDayCommand as Command)?.ChangeCanExecute();
113
        }
114
        #endregion
115
    }
116
}