Statistiques
| Branche: | Révision:

root / GES_PAC / ViewModel / Controls / ChamberButtonViewModel.cs @ 42456640

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

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

    
5
namespace GES_PAC.ViewModel.Controls
6
{
7
    public class ChamberButtonViewModel : BaseViewModel
8
    {
9
        #region Attributs
10
        private Serie _currentSet;
11
        private string _buttonText;
12
        private int _chamberId;
13
        private Color _buttonBackgroundColor;
14
        private bool _buttonIsEnabled;
15
        private string _buttonLabel;
16
        private string _timeIn;
17
        private ICommand _onClickChamberCommand;
18
        private readonly TimerPublisher _timer;
19

    
20
        #endregion
21

    
22
        #region Propriétés
23
        public Serie? CurrentSet
24
        {
25
            get => _currentSet;
26
            set
27
            {
28
                _currentSet = value;
29
                OnPropertyChanged();
30
            }
31
        }
32
        public string ButtonText {
33
            get => _buttonText;
34
            set
35
            {
36
                _buttonText = value;
37
                OnPropertyChanged();
38
            }
39
        }
40
        public int ChamberId
41
        {
42
            get => _chamberId;
43
            set
44
            {
45
                _chamberId = value;
46
                OnPropertyChanged();
47
            }
48
        }
49
        public Color ButtonBackgroundColor
50
        {
51
            get => _buttonBackgroundColor;
52
            set
53
            {
54
                _buttonBackgroundColor = value;
55
                OnPropertyChanged();
56
            }
57
        }
58
        public bool ButtonIsEnabled
59
        {
60
            get => _buttonIsEnabled;
61
            set
62
            {
63
                _buttonIsEnabled = value;
64
                OnPropertyChanged();
65
            }
66
        }
67
        public string ButtonLabel
68
        {
69
            get => _buttonLabel;
70
            set
71
            {
72
                _buttonLabel = value;
73
                OnPropertyChanged();
74
            }
75
        }
76
        public string TimeIn
77
        {
78
            get => _timeIn;
79
            set
80
            {
81
                _timeIn = value;
82
                OnPropertyChanged();
83
            }
84
        }
85
        public SerieAnimal? AnimalSet;
86
        private bool _isSubscribed = false;
87

    
88
        #endregion
89

    
90
        #region Commandes
91
        public ICommand OnClickChamberCommand
92
        {
93
            get => _onClickChamberCommand;
94
            set
95
            {
96
                _onClickChamberCommand = value;
97
                OnPropertyChanged();
98
            }
99
        }
100
        #endregion
101

    
102
        #region Constructeurs
103

    
104
        public ChamberButtonViewModel(int chamberId, TimerPublisher timerPublisher)
105
        {
106
            ChamberId = chamberId;
107
            _timer = timerPublisher;
108

    
109
            OnClickChamberCommand = new Command(async () => await GoToChamber());
110
            ButtonBackgroundColor = Colors.White;
111
            ButtonIsEnabled = true;
112
            ButtonLabel = "0";
113
            TimeIn = "";
114
            CurrentSet = JourneeViewModel.Instance?.GetCurrentSet();
115

    
116
            UpdateChamberId(chamberId);
117
        }
118

    
119
        #endregion
120

    
121
        #region Méthodes
122
        public void UpdateChamberId(int chamberId)
123
        {
124
            ChamberId = chamberId;
125
            UpdateProperties();
126
        }
127
        public void UpdateProperties()
128
        {
129
            CurrentSet = JourneeViewModel.Instance?.GetCurrentSet();
130
            AnimalSet = CurrentSet?.GetSerieAnimalByNumBoite(ChamberId);
131
            ButtonText = ChamberId.ToString();
132

    
133
            int measureCount = AnimalSet?.GetMeasureCount() ?? 0;
134

    
135
            if (measureCount == 0)
136
                return;
137

    
138
            if (!_isSubscribed && !AnimalSet.IsOut)
139
            {
140
                _timer.Register(OnTimerTick);
141
                _isSubscribed = true;
142
            }
143

    
144
            if (_isSubscribed && AnimalSet.IsOut)
145
            {
146
                _timer.Unregister(OnTimerTick);
147
                _isSubscribed = false;
148
            }
149

    
150
            ButtonIsEnabled = !AnimalSet.IsOut;
151
            ButtonBackgroundColor = AnimalSet.HasBehaviour() ? Colors.Yellow : Colors.LightGreen;
152
            ButtonLabel = measureCount.ToString();
153
            TimeIn = AnimalSet.GetTimeInChamber();
154
        }
155

    
156
        private async Task GoToChamber()
157
        {
158
            if (IsBusy) return;
159
            IsBusy = true;
160

    
161
            var targetView = (CurrentSet.GetSerieAnimalByNumBoite(ChamberId) == null) ? nameof(EnterAnimalView) : nameof(CreateMeasureView);
162

    
163
            await Shell.Current.GoToAsync($"{targetView}?chamberId={ChamberId}");
164

    
165
            IsBusy = false;
166
        }
167
        public void OnTimerTick(object? sender, EventArgs e)
168
        {
169
            TimeIn = AnimalSet?.GetTimeInChamber() ?? "";
170
        }
171

    
172
        #endregion
173
    }
174
}