@@ -8,107 +8,161 @@ namespace TakeMyTime.DAL
88{
99 public class WeekdayProductivityManager
1010 {
11- public WeekdayProductivityManager ( int totalEntryCount )
11+ public WeekdayProductivityManager ( )
1212 {
13- this . TotalEntryCount = totalEntryCount ;
1413 }
1514
1615 public void ProcessEntry ( Entry entry )
1716 {
18- if ( CanProcessEntries )
17+ var durationAsHours = entry . DurationAsTicks . HasValue ? TimeSpan . FromTicks ( entry . DurationAsTicks . Value ) . TotalHours : 0 ;
18+ if ( durationAsHours > 0 )
1919 {
20+ TotalWorkingHours += durationAsHours ;
2021 var date = entry . Started . HasValue ? entry . Started . Value . DayOfWeek : entry . Date . DayOfWeek ;
2122 switch ( date )
2223 {
2324 case DayOfWeek . Monday :
25+ MondayTotalWorkingHours += durationAsHours ;
2426 MondayEntryCount ++ ;
25- this . MondayValueShare = Math . Round ( ( double ) MondayEntryCount / ( double ) TotalEntryCount , 2 ) ;
27+ this . MondayAverageWorkingHours = Math . Round ( MondayTotalWorkingHours / MondayEntryCount , 2 ) ;
28+
2629 break ;
2730 case DayOfWeek . Tuesday :
31+ TuesdayTotalWorkingHours += durationAsHours ;
2832 TuesdayEntryCount ++ ;
29- this . TuesdayValueShare = Math . Round ( ( double ) TuesdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
33+ this . TuesdayAverageWorkingHours = Math . Round ( TuesdayTotalWorkingHours / TuesdayEntryCount , 2 ) ;
34+
3035 break ;
3136 case DayOfWeek . Wednesday :
37+ WednesdayTotalWorkingHours += durationAsHours ;
3238 WednesdayEntryCount ++ ;
33- this . WednesdayValueShare = Math . Round ( ( double ) WednesdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
39+ this . WednesdayAverageWorkingHours = Math . Round ( WednesdayTotalWorkingHours / WednesdayEntryCount , 2 ) ;
40+
3441 break ;
3542 case DayOfWeek . Thursday :
43+ ThursdayTotalWorkingHours += durationAsHours ;
3644 ThursdayEntryCount ++ ;
37- this . ThursdayValueShare = Math . Round ( ( double ) ThursdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
45+ this . ThursdayAverageWorkingHours = Math . Round ( ThursdayTotalWorkingHours / ThursdayEntryCount , 2 ) ;
46+
3847 break ;
3948 case DayOfWeek . Friday :
49+ FridayTotalWorkingHours += durationAsHours ;
4050 FridayEntryCount ++ ;
41- this . FridayValueShare = Math . Round ( ( double ) FridayEntryCount / ( double ) TotalEntryCount , 2 ) ;
51+ this . FridayAverageWorkingHours = Math . Round ( FridayTotalWorkingHours / FridayEntryCount , 2 ) ;
52+
4253 break ;
4354 case DayOfWeek . Saturday :
55+ SaturdayTotalWorkingHours += durationAsHours ;
4456 SaturdayEntryCount ++ ;
45- this . SaturdayValueShare = Math . Round ( ( double ) SaturdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
57+ this . SaturdayAverageWorkingHours = Math . Round ( SaturdayTotalWorkingHours / SaturdayEntryCount , 2 ) ;
58+
4659 break ;
4760 case DayOfWeek . Sunday :
61+ SundayTotalWorkingHours += durationAsHours ;
4862 SundayEntryCount ++ ;
49- this . SundayValueShare = Math . Round ( ( double ) SundayEntryCount / ( double ) TotalEntryCount , 2 ) ;
63+ this . SundayAverageWorkingHours = Math . Round ( SundayTotalWorkingHours / SundayEntryCount , 2 ) ;
5064 break ;
5165 } ;
66+
67+ CalculateShares ( ) ;
5268 }
5369 }
5470
71+ private void CalculateShares ( )
72+ {
73+ this . MondayValueShare = Math . Round ( MondayTotalWorkingHours / TotalWorkingHours , 2 ) ;
74+ this . TuesdayValueShare = Math . Round ( TuesdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
75+ this . WednesdayValueShare = Math . Round ( WednesdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
76+ this . ThursdayValueShare = Math . Round ( ThursdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
77+ this . FridayValueShare = Math . Round ( FridayTotalWorkingHours / TotalWorkingHours , 2 ) ;
78+ this . SaturdayValueShare = Math . Round ( SaturdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
79+ this . SundayValueShare = Math . Round ( SundayTotalWorkingHours / TotalWorkingHours , 2 ) ;
80+ }
81+
5582 public IEnumerable < MostProductiveWeekDaysViewModel > GetResults ( )
5683 {
5784 return new List < MostProductiveWeekDaysViewModel >
5885 {
5986 new MostProductiveWeekDaysViewModel
6087 {
6188 Day = DayOfWeek . Monday ,
62- Value = MondayValueShare
89+ Value = MondayValueShare ,
90+ AverageHours = MondayAverageWorkingHours ,
91+ TotalHours = MondayTotalWorkingHours
6392 } ,
6493 new MostProductiveWeekDaysViewModel
6594 {
6695 Day = DayOfWeek . Tuesday ,
67- Value = TuesdayValueShare
96+ Value = TuesdayValueShare ,
97+ AverageHours = TuesdayAverageWorkingHours ,
98+ TotalHours = TuesdayTotalWorkingHours
6899 } ,
69100 new MostProductiveWeekDaysViewModel
70101 {
71102 Day = DayOfWeek . Wednesday ,
72- Value = WednesdayValueShare
103+ Value = WednesdayValueShare ,
104+ AverageHours = WednesdayAverageWorkingHours ,
105+ TotalHours = WednesdayTotalWorkingHours
73106 } ,
74107 new MostProductiveWeekDaysViewModel
75108 {
76109 Day = DayOfWeek . Thursday ,
77- Value = ThursdayValueShare
110+ Value = ThursdayValueShare ,
111+ AverageHours = ThursdayAverageWorkingHours ,
112+ TotalHours = ThursdayTotalWorkingHours
78113 } ,
79114 new MostProductiveWeekDaysViewModel
80115 {
81116 Day = DayOfWeek . Friday ,
82- Value = FridayValueShare
117+ Value = FridayValueShare ,
118+ AverageHours = FridayAverageWorkingHours ,
119+ TotalHours = FridayTotalWorkingHours
83120 } ,
84121 new MostProductiveWeekDaysViewModel
85122 {
86123 Day = DayOfWeek . Saturday ,
87- Value = SaturdayValueShare
124+ Value = SaturdayValueShare ,
125+ AverageHours = SaturdayAverageWorkingHours ,
126+ TotalHours = SaturdayTotalWorkingHours
88127 } ,
89128 new MostProductiveWeekDaysViewModel
90129 {
91130 Day = DayOfWeek . Sunday ,
92- Value = SundayValueShare
131+ Value = SundayValueShare ,
132+ AverageHours = SundayAverageWorkingHours ,
133+ TotalHours = SundayTotalWorkingHours
93134 } ,
94135 } ;
95136 }
96137
97- public int TotalEntryCount { get ; private set ; }
98- public int MondayEntryCount { get ; private set ; }
138+ public double TotalWorkingHours { get ; private set ; }
139+ public double MondayTotalWorkingHours { get ; private set ; }
99140 public double MondayValueShare { get ; private set ; }
100- public int TuesdayEntryCount { get ; private set ; }
141+ public double MondayAverageWorkingHours { get ; private set ; }
142+ public double MondayEntryCount { get ; set ; }
143+ public double TuesdayTotalWorkingHours { get ; private set ; }
101144 public double TuesdayValueShare { get ; private set ; }
102- public int WednesdayEntryCount { get ; private set ; }
145+ public double TuesdayAverageWorkingHours { get ; private set ; }
146+ public double TuesdayEntryCount { get ; set ; }
147+ public double WednesdayTotalWorkingHours { get ; private set ; }
103148 public double WednesdayValueShare { get ; private set ; }
104- public int ThursdayEntryCount { get ; private set ; }
149+ public double WednesdayAverageWorkingHours { get ; private set ; }
150+ public double WednesdayEntryCount { get ; set ; }
151+ public double ThursdayTotalWorkingHours { get ; private set ; }
105152 public double ThursdayValueShare { get ; private set ; }
106- public int FridayEntryCount { get ; private set ; }
153+ public double ThursdayAverageWorkingHours { get ; private set ; }
154+ public double ThursdayEntryCount { get ; set ; }
155+ public double FridayTotalWorkingHours { get ; private set ; }
107156 public double FridayValueShare { get ; private set ; }
108- public int SaturdayEntryCount { get ; private set ; }
157+ public double FridayAverageWorkingHours { get ; private set ; }
158+ public double FridayEntryCount { get ; set ; }
159+ public double SaturdayTotalWorkingHours { get ; private set ; }
109160 public double SaturdayValueShare { get ; private set ; }
110- public int SundayEntryCount { get ; private set ; }
161+ public double SaturdayAverageWorkingHours { get ; private set ; }
162+ public double SaturdayEntryCount { get ; set ; }
163+ public double SundayTotalWorkingHours { get ; private set ; }
111164 public double SundayValueShare { get ; private set ; }
112- public bool CanProcessEntries { get => this . TotalEntryCount > 0 ; }
165+ public double SundayAverageWorkingHours { get ; private set ; }
166+ public double SundayEntryCount { get ; set ; }
113167 }
114168}
0 commit comments