@@ -12,6 +12,10 @@ import { ActivityState, LoadActivities } from '../../../activities-management/st
12
12
13
13
import * as entryActions from '../../store/entry.actions' ;
14
14
15
+ import * as moment from 'moment' ;
16
+ import { ToastrService } from 'ngx-toastr' ;
17
+ import { formatDate } from '@angular/common' ;
18
+
15
19
type Merged = TechnologyState & ProjectState & ActivityState ;
16
20
17
21
@Component ( {
@@ -26,56 +30,75 @@ export class EntryFieldsComponent implements OnInit {
26
30
activeEntry ;
27
31
newData ;
28
32
29
- constructor ( private formBuilder : FormBuilder , private store : Store < Merged > , private actionsSubject$ : ActionsSubject ) {
33
+ constructor (
34
+ private formBuilder : FormBuilder ,
35
+ private store : Store < Merged > ,
36
+ private actionsSubject$ : ActionsSubject ,
37
+ private toastrService : ToastrService
38
+ ) {
30
39
this . entryForm = this . formBuilder . group ( {
31
40
description : '' ,
32
41
uri : '' ,
33
42
activity_id : '' ,
43
+ start_hour : '' ,
44
+ start_date : '' ,
34
45
} ) ;
35
46
}
36
47
37
48
ngOnInit ( ) : void {
38
49
this . store . dispatch ( new LoadActivities ( ) ) ;
39
50
40
- this . actionsSubject$ . pipe (
41
- filter ( ( action : any ) => ( action . type === ActivityManagementActionTypes . LOAD_ACTIVITIES_SUCCESS ) )
42
- ) . subscribe ( ( action ) => {
43
- this . activities = action . payload ;
44
- this . store . dispatch ( new LoadActiveEntry ( ) ) ;
45
- } ) ;
46
-
47
- this . actionsSubject$ . pipe (
48
- filter ( ( action : any ) => ( action . type === EntryActionTypes . CREATE_ENTRY_SUCCESS ) )
49
- ) . subscribe ( ( action ) => {
50
- if ( ! action . payload . end_date ) {
51
+ this . actionsSubject$
52
+ . pipe ( filter ( ( action : any ) => action . type === ActivityManagementActionTypes . LOAD_ACTIVITIES_SUCCESS ) )
53
+ . subscribe ( ( action ) => {
54
+ this . activities = action . payload ;
51
55
this . store . dispatch ( new LoadActiveEntry ( ) ) ;
52
- }
53
- } ) ;
56
+ } ) ;
54
57
55
- this . actionsSubject$ . pipe (
56
- filter ( ( action : any ) => ( action . type === EntryActionTypes . LOAD_ACTIVE_ENTRY_SUCCESS ) )
57
- ) . subscribe ( ( action ) => {
58
- this . activeEntry = action . payload ;
59
- this . setDataToUpdate ( this . activeEntry ) ;
60
- this . newData = {
61
- id : this . activeEntry . id ,
62
- project_id : this . activeEntry . project_id ,
63
- uri : this . activeEntry . uri ,
64
- activity_id : this . activeEntry . activity_id ,
65
- } ;
66
- } ) ;
58
+ this . actionsSubject$
59
+ . pipe (
60
+ filter ( ( action : any ) => (
61
+ action . type === EntryActionTypes . CREATE_ENTRY_SUCCESS ||
62
+ action . type === EntryActionTypes . UPDATE_ENTRY_SUCCESS
63
+ ) )
64
+ ) . subscribe ( ( action ) => {
65
+ if ( ! action . payload . end_date ) {
66
+ this . store . dispatch ( new LoadActiveEntry ( ) ) ;
67
+ this . store . dispatch ( new entryActions . LoadEntriesSummary ( ) ) ;
68
+ }
69
+ } ) ;
70
+
71
+ this . actionsSubject$
72
+ . pipe ( filter ( ( action : any ) => action . type === EntryActionTypes . LOAD_ACTIVE_ENTRY_SUCCESS ) )
73
+ . subscribe ( ( action ) => {
74
+ this . activeEntry = action . payload ;
75
+ this . setDataToUpdate ( this . activeEntry ) ;
76
+ this . newData = {
77
+ id : this . activeEntry . id ,
78
+ project_id : this . activeEntry . project_id ,
79
+ uri : this . activeEntry . uri ,
80
+ activity_id : this . activeEntry . activity_id ,
81
+ start_date : this . activeEntry . start_date ,
82
+ start_hour : formatDate ( this . activeEntry . start_date , 'HH:mm:ss' , 'en' ) ,
83
+ } ;
84
+ } ) ;
67
85
}
68
86
69
87
get activity_id ( ) {
70
88
return this . entryForm . get ( 'activity_id' ) ;
71
89
}
72
90
91
+ get start_hour ( ) {
92
+ return this . entryForm . get ( 'start_hour' ) ;
93
+ }
94
+
73
95
setDataToUpdate ( entryData : NewEntry ) {
74
96
if ( entryData ) {
75
97
this . entryForm . patchValue ( {
76
98
description : entryData . description ,
77
99
uri : entryData . uri ,
78
100
activity_id : entryData . activity_id ,
101
+ start_hour : formatDate ( entryData . start_date , 'HH:mm:ss' , 'en' ) ,
79
102
} ) ;
80
103
if ( entryData . technologies ) {
81
104
this . selectedTechnologies = entryData . technologies ;
@@ -93,6 +116,19 @@ export class EntryFieldsComponent implements OnInit {
93
116
this . store . dispatch ( new entryActions . UpdateEntryRunning ( { ...this . newData , ...this . entryForm . value } ) ) ;
94
117
}
95
118
119
+ onUpdateStartHour ( ) {
120
+ const startDate = formatDate ( this . activeEntry . start_date , 'yyyy-MM-dd' , 'en' ) ;
121
+ const newHourEntered = new Date ( `${ startDate } T${ this . entryForm . value . start_hour . trim ( ) } ` ) . toISOString ( ) ;
122
+ const isEntryDateInTheFuture = moment ( newHourEntered ) . isAfter ( moment ( ) ) ;
123
+ if ( isEntryDateInTheFuture ) {
124
+ this . toastrService . error ( 'You cannot start a time-entry in the future' ) ;
125
+ this . entryForm . patchValue ( { start_hour : this . newData . start_hour } ) ;
126
+ return ;
127
+ }
128
+ this . entryForm . patchValue ( { start_date : newHourEntered } ) ;
129
+ this . store . dispatch ( new entryActions . UpdateEntryRunning ( { ...this . newData , ...this . entryForm . value } ) ) ;
130
+ }
131
+
96
132
onTechnologyAdded ( $event : string [ ] ) {
97
133
this . store . dispatch ( new entryActions . UpdateEntryRunning ( { ...this . newData , technologies : $event } ) ) ;
98
134
}
0 commit comments