@@ -8,45 +8,53 @@ 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 :
24- MondayEntryCount ++ ;
25- this . MondayValueShare = Math . Round ( ( double ) MondayEntryCount / ( double ) TotalEntryCount , 2 ) ;
25+ MondayTotalWorkingHours += durationAsHours ;
26+ this . MondayAverageWorkingHours = Math . Round ( durationAsHours / MondayTotalWorkingHours , 2 ) ;
27+ this . MondayValueShare = Math . Round ( MondayAverageWorkingHours / TotalWorkingHours , 2 ) ;
2628 break ;
2729 case DayOfWeek . Tuesday :
28- TuesdayEntryCount ++ ;
29- this . TuesdayValueShare = Math . Round ( ( double ) TuesdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
30+ TuesdayTotalWorkingHours += durationAsHours ;
31+ this . TuesdayAverageWorkingHours = Math . Round ( durationAsHours / TuesdayTotalWorkingHours , 2 ) ;
32+ this . TuesdayValueShare = Math . Round ( TuesdayAverageWorkingHours / TotalWorkingHours , 2 ) ;
3033 break ;
3134 case DayOfWeek . Wednesday :
32- WednesdayEntryCount ++ ;
33- this . WednesdayValueShare = Math . Round ( ( double ) WednesdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
35+ WednesdayTotalWorkingHours += durationAsHours ;
36+ this . WednesdayAverageWorkingHours = Math . Round ( durationAsHours / WednesdayTotalWorkingHours , 2 ) ;
37+ this . WednesdayValueShare = Math . Round ( WednesdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
3438 break ;
3539 case DayOfWeek . Thursday :
36- ThursdayEntryCount ++ ;
37- this . ThursdayValueShare = Math . Round ( ( double ) ThursdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
40+ ThursdayTotalWorkingHours += durationAsHours ;
41+ this . ThursdayAverageWorkingHours = Math . Round ( durationAsHours / ThursdayTotalWorkingHours , 2 ) ;
42+ this . ThursdayValueShare = Math . Round ( ThursdayTotalWorkingHours / TotalWorkingHours , 2 ) ;
3843 break ;
3944 case DayOfWeek . Friday :
40- FridayEntryCount ++ ;
41- this . FridayValueShare = Math . Round ( ( double ) FridayEntryCount / ( double ) TotalEntryCount , 2 ) ;
45+ FridayTotalWorkingHours += durationAsHours ;
46+ this . FridayAverageWorkingHours = Math . Round ( durationAsHours / FridayTotalWorkingHours , 2 ) ;
47+ this . FridayValueShare = Math . Round ( FridayAverageWorkingHours / TotalWorkingHours , 2 ) ;
4248 break ;
4349 case DayOfWeek . Saturday :
44- SaturdayEntryCount ++ ;
45- this . SaturdayValueShare = Math . Round ( ( double ) SaturdayEntryCount / ( double ) TotalEntryCount , 2 ) ;
50+ SaturdayTotalWorkingHours += durationAsHours ;
51+ this . SaturdayAverageWorkingHours = Math . Round ( durationAsHours / SaturdayTotalWorkingHours , 2 ) ;
52+ this . SaturdayValueShare = Math . Round ( SaturdayAverageWorkingHours / TotalWorkingHours , 2 ) ;
4653 break ;
4754 case DayOfWeek . Sunday :
48- SundayEntryCount ++ ;
49- this . SundayValueShare = Math . Round ( ( double ) SundayEntryCount / ( double ) TotalEntryCount , 2 ) ;
55+ SundayTotalWorkingHours += durationAsHours ;
56+ this . SundayAverageWorkingHours = Math . Round ( durationAsHours / SundayTotalWorkingHours , 2 ) ;
57+ this . SundayValueShare = Math . Round ( SundayAverageWorkingHours / TotalWorkingHours , 2 ) ;
5058 break ;
5159 } ;
5260 }
@@ -59,56 +67,76 @@ public IEnumerable<MostProductiveWeekDaysViewModel> GetResults()
5967 new MostProductiveWeekDaysViewModel
6068 {
6169 Day = DayOfWeek . Monday ,
62- Value = MondayValueShare
70+ Value = MondayValueShare ,
71+ AverageHours = MondayAverageWorkingHours ,
72+ TotalHours = MondayTotalWorkingHours
6373 } ,
6474 new MostProductiveWeekDaysViewModel
6575 {
6676 Day = DayOfWeek . Tuesday ,
67- Value = TuesdayValueShare
77+ Value = TuesdayValueShare ,
78+ AverageHours = TuesdayAverageWorkingHours ,
79+ TotalHours = TuesdayTotalWorkingHours
6880 } ,
6981 new MostProductiveWeekDaysViewModel
7082 {
7183 Day = DayOfWeek . Wednesday ,
72- Value = WednesdayValueShare
84+ Value = WednesdayValueShare ,
85+ AverageHours = WednesdayAverageWorkingHours ,
86+ TotalHours = WednesdayTotalWorkingHours
7387 } ,
7488 new MostProductiveWeekDaysViewModel
7589 {
7690 Day = DayOfWeek . Thursday ,
77- Value = ThursdayValueShare
91+ Value = ThursdayValueShare ,
92+ AverageHours = ThursdayAverageWorkingHours ,
93+ TotalHours = ThursdayTotalWorkingHours
7894 } ,
7995 new MostProductiveWeekDaysViewModel
8096 {
8197 Day = DayOfWeek . Friday ,
82- Value = FridayValueShare
98+ Value = FridayValueShare ,
99+ AverageHours = FridayAverageWorkingHours ,
100+ TotalHours = FridayTotalWorkingHours
83101 } ,
84102 new MostProductiveWeekDaysViewModel
85103 {
86104 Day = DayOfWeek . Saturday ,
87- Value = SaturdayValueShare
105+ Value = SaturdayValueShare ,
106+ AverageHours = SaturdayAverageWorkingHours ,
107+ TotalHours = SaturdayTotalWorkingHours
88108 } ,
89109 new MostProductiveWeekDaysViewModel
90110 {
91111 Day = DayOfWeek . Sunday ,
92- Value = SundayValueShare
112+ Value = SundayValueShare ,
113+ AverageHours = SundayAverageWorkingHours ,
114+ TotalHours = SundayTotalWorkingHours
93115 } ,
94116 } ;
95117 }
96118
97- public int TotalEntryCount { get ; private set ; }
98- public int MondayEntryCount { get ; private set ; }
119+ public double TotalWorkingHours { get ; private set ; }
120+ public double MondayTotalWorkingHours { get ; private set ; }
99121 public double MondayValueShare { get ; private set ; }
100- public int TuesdayEntryCount { get ; private set ; }
122+ public double MondayAverageWorkingHours { get ; private set ; }
123+ public double TuesdayTotalWorkingHours { get ; private set ; }
101124 public double TuesdayValueShare { get ; private set ; }
102- public int WednesdayEntryCount { get ; private set ; }
125+ public double TuesdayAverageWorkingHours { get ; private set ; }
126+ public double WednesdayTotalWorkingHours { get ; private set ; }
103127 public double WednesdayValueShare { get ; private set ; }
104- public int ThursdayEntryCount { get ; private set ; }
128+ public double WednesdayAverageWorkingHours { get ; private set ; }
129+ public double ThursdayTotalWorkingHours { get ; private set ; }
105130 public double ThursdayValueShare { get ; private set ; }
106- public int FridayEntryCount { get ; private set ; }
131+ public double ThursdayAverageWorkingHours { get ; private set ; }
132+ public double FridayTotalWorkingHours { get ; private set ; }
107133 public double FridayValueShare { get ; private set ; }
108- public int SaturdayEntryCount { get ; private set ; }
134+ public double FridayAverageWorkingHours { get ; private set ; }
135+ public double SaturdayTotalWorkingHours { get ; private set ; }
109136 public double SaturdayValueShare { get ; private set ; }
110- public int SundayEntryCount { get ; private set ; }
137+ public double SaturdayAverageWorkingHours { get ; private set ; }
138+ public double SundayTotalWorkingHours { get ; private set ; }
111139 public double SundayValueShare { get ; private set ; }
112- public bool CanProcessEntries { get => this . TotalEntryCount > 0 ; }
140+ public double SundayAverageWorkingHours { get ; private set ; }
113141 }
114142}
0 commit comments