Statistiques
| Branche: | Révision:

root / GES_PAC / ViewModel / CreateDayViewModel.cs @ a7fee243

Historique | Voir | Annoter | Télécharger (4,066 ko)

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

    
7
namespace GES_PAC.ViewModel
8
{
9
    public class CreateDayViewModel : BaseViewModel
10
    {
11
        #region Attributs
12
        private Personne _selectedPerson;
13
        private Elevage _selectedElevage;
14
        private string _regime;
15
        private bool _isFormValid;
16
        #endregion
17

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

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

    
37
        public ObservableCollection<Elevage> Elevages => ElevageViewModel.Instance.Elevages;
38

    
39
        public Elevage SelectedElevage
40
        {
41
            get => _selectedElevage;
42
            set {
43
                _selectedElevage = 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
        }
80
        #endregion
81

    
82
        #region Méthodes
83
        private async Task CreateDay()
84
        {
85
            if (IsBusy) return;
86
            IsBusy = true;
87

    
88
            var success = await App.Sicpa.LoadAnimalInDb(SelectedElevage);
89

    
90
            if (!success)
91
            {
92
                bool continuer = await Shell.Current.DisplayAlert(
93
                    "Erreur de connexion aux serveurs INRAE",
94
                    "Les données animales n'ont pas pu être chargées. Continuer quand même ?",
95
                    "Oui",
96
                    "Non"
97
                );
98
                if (!continuer)
99
                {
100
                    IsBusy = false;
101
                    return;
102
                }
103
                App.Db.Animal.RemoveRange(App.Db.Animal);
104
                    
105
            }
106

    
107
            var date = DateTime.Now;
108
            var newDay = new Journee(date, SelectedPerson, SelectedElevage, Regime);
109

    
110
            var exists = await App.Db.Elevage.AsNoTracking().AnyAsync(e => e.Id == SelectedElevage.Id);
111
            if (exists)
112
                App.Db.Attach(SelectedElevage);
113
            else
114
                App.Db.Elevage.Add(SelectedElevage);
115

    
116
            App.Db.Journee.Add(newDay);
117
            await App.Db.SaveChangesAsync();
118

    
119
            JourneeViewModel.Instance.Journees.Add(newDay);
120
            await Shell.Current.GoToAsync($"{nameof(CreateCalibrationView)}?phase={PhaseCalibration.DEBUT.Name}");
121
            IsBusy = false;
122
        }
123

    
124
        private void ValidateForm()
125
        {
126
            PersonError = SelectedPerson == null;
127
            PlaceError = SelectedElevage == null;
128
            RegimeError = string.IsNullOrWhiteSpace(Regime) || Regime.Length < 3;
129

    
130
            OnPropertyChanged(nameof(PlaceError));
131
            OnPropertyChanged(nameof(PersonError));
132
            OnPropertyChanged(nameof(RegimeError));
133

    
134
            IsFormValid = !PlaceError && !PersonError && !RegimeError;
135

    
136
            (CreateDayCommand as Command)?.ChangeCanExecute();
137
        }
138
        #endregion
139
    }
140
}