@@ -57,8 +57,9 @@ impl<'a> CommandClient<'a> {
5757 Ok ( ( ) )
5858 }
5959
60- pub ( crate ) async fn get ( & self , week : Option < u8 > , format : Format ) {
61- let week = week. map ( WeekNumber :: from) ;
60+ pub ( crate ) async fn get ( & self , week : Option < u8 > , year : Option < i32 > , format : Format ) {
61+ let week = create_week_with_fallback ( week, year) ;
62+
6263 match format {
6364 Format :: Json => self . get_json ( week. as_ref ( ) ) . await . context ( "JSON" ) ,
6465 Format :: Table => self . get_table ( week. as_ref ( ) ) . await . context ( "table" ) ,
@@ -73,6 +74,7 @@ impl<'a> CommandClient<'a> {
7374 hours : f32 ,
7475 days : Option < Days > ,
7576 week : Option < u8 > ,
77+ year : Option < i32 > ,
7678 job : & str ,
7779 task : & str ,
7880 ) {
@@ -81,7 +83,7 @@ impl<'a> CommandClient<'a> {
8183 }
8284
8385 let day = get_days ( days) ;
84- let week = week . map ( WeekNumber :: from ) ;
86+ let week = create_week_with_fallback ( week , year ) ;
8587
8688 self . time_sheet_service
8789 . lock ( )
@@ -103,12 +105,13 @@ impl<'a> CommandClient<'a> {
103105 task : & str ,
104106 days : Option < Days > ,
105107 week : Option < u8 > ,
108+ year : Option < i32 > ,
106109 ) {
107110 if days. as_ref ( ) . is_some_and ( |days| days. is_empty ( ) ) {
108111 exit_with_error ! ( "`--day` is set but no day was provided" ) ;
109112 }
110113
111- let week = week . map ( WeekNumber :: from ) ;
114+ let week = create_week_with_fallback ( week , year ) ;
112115 self . time_sheet_service
113116 . lock ( )
114117 . await
@@ -129,8 +132,13 @@ impl<'a> CommandClient<'a> {
129132 } ) ;
130133 }
131134
132- pub ( crate ) async fn delete ( & mut self , line_number : & LineNumber , week : Option < u8 > ) {
133- let week = week. map ( WeekNumber :: from) ;
135+ pub ( crate ) async fn delete (
136+ & mut self ,
137+ line_number : & LineNumber ,
138+ week : Option < u8 > ,
139+ year : Option < i32 > ,
140+ ) {
141+ let week = create_week_with_fallback ( week, year) ;
134142
135143 self . repository
136144 . lock ( )
@@ -163,10 +171,10 @@ fn get_days(days: Option<Days>) -> Days {
163171 } )
164172}
165173
166- impl From < Option < u8 > > for WeekNumber {
167- fn from ( week : Option < u8 > ) -> Self {
168- // Fall back to today's week
169- week . unwrap_or_else ( || Local :: now ( ) . date_naive ( ) . iso_week ( ) . week ( ) as u8 )
170- . into ( )
171- }
174+ fn create_week_with_fallback ( week : Option < u8 > , year : Option < i32 > ) -> Option < WeekNumber > {
175+ week . map ( | week| {
176+ // Fall back to today's year
177+ let year = year . unwrap_or_else ( || year . unwrap_or_else ( || chrono :: Utc :: now ( ) . year ( ) ) ) ;
178+ WeekNumber :: new ( week , year ) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) )
179+ } )
172180}
0 commit comments