@seniorsistemas/hcm-clocking-event-rule-nodejs 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +11 -0
- package/.github/workflows/release.yaml +10 -0
- package/.gitlab-ci.yml +68 -0
- package/CHANGELOG.md +274 -0
- package/README.doc.md +658 -0
- package/README.md +117 -0
- package/assets/favicon.ico +0 -0
- package/catalog-info.yaml +19 -0
- package/jest.config.js +17 -0
- package/package.json +48 -0
- package/prompt.md +15 -0
- package/run_build_win.bat +1 -0
- package/run_link.bat +3 -0
- package/run_test.bat +1 -0
- package/sonar-project.properties +21 -0
- package/src/data/changes/changes.ts +92 -0
- package/src/data/context/context.ts +251 -0
- package/src/data/context/contextReference.ts +376 -0
- package/src/data/contract/contract.ts +272 -0
- package/src/data/dataset/database.ts +130 -0
- package/src/data/dataset/dataset.ts +275 -0
- package/src/data/definition/timeEvaluationSituationDefinitionHistory.ts +1425 -0
- package/src/data/employee/employee.ts +434 -0
- package/src/data/foundation/companyBranch.ts +66 -0
- package/src/data/foundation/costCenter.ts +47 -0
- package/src/data/foundation/employer.ts +35 -0
- package/src/data/foundation/employmentRelationship.ts +63 -0
- package/src/data/foundation/holiday.ts +84 -0
- package/src/data/foundation/holidayGroup.ts +47 -0
- package/src/data/foundation/jobPosition.ts +73 -0
- package/src/data/foundation/person.ts +35 -0
- package/src/data/foundation/situation.ts +301 -0
- package/src/data/foundation/syndicate.ts +244 -0
- package/src/data/foundation/workschedule.ts +688 -0
- package/src/data/foundation/workshift.ts +647 -0
- package/src/data/foundation/workshiftBase.ts +113 -0
- package/src/data/histories/companyBranchHistory.ts +128 -0
- package/src/data/histories/costCenterHistory.ts +114 -0
- package/src/data/histories/employmentRelationshipHistory.ts +116 -0
- package/src/data/histories/histories.ts +419 -0
- package/src/data/histories/jobPositionHistory.ts +117 -0
- package/src/data/histories/leaveHistory.ts +227 -0
- package/src/data/histories/timeEvaluationHistory.ts +191 -0
- package/src/data/histories/workshiftHistory.ts +66 -0
- package/src/data/hourBank/hourBank.ts +43 -0
- package/src/data/hourBank/hourBankAccount.ts +77 -0
- package/src/data/log/log.ts +38 -0
- package/src/data/schedules/bridge.ts +84 -0
- package/src/data/schedules/compensation.ts +332 -0
- package/src/data/schedules/overtimeAuthorization.ts +174 -0
- package/src/data/schedules/readiness.ts +150 -0
- package/src/data/schedules/schedules.ts +398 -0
- package/src/data/schedules/workscheduleChange.ts +91 -0
- package/src/data/schedules/workshiftChange.ts +76 -0
- package/src/data/timeEvaluation/adjustmentReason.ts +46 -0
- package/src/data/timeEvaluation/clockingEvent.ts +198 -0
- package/src/data/timeEvaluation/estimatedHours.ts +245 -0
- package/src/data/timeEvaluation/interval.ts +568 -0
- package/src/data/timeEvaluation/separatedHours.ts +134 -0
- package/src/data/timeEvaluation/timeEvaluation.ts +1540 -0
- package/src/data/timeEvaluation/timeEvaluationSituation.ts +154 -0
- package/src/data/user/user.ts +44 -0
- package/src/index.ts +60 -0
- package/src/test/builder/bridgeBuilder.builder.ts +28 -0
- package/src/test/builder/clockingEvent.builder.ts +49 -0
- package/src/test/builder/companyBranchHistoryBuilder.ts +29 -0
- package/src/test/builder/compensation.builder.ts +84 -0
- package/src/test/builder/contextReference.builder.ts +69 -0
- package/src/test/builder/costCenterHistoryBuilder.ts +29 -0
- package/src/test/builder/database.builder.ts +21 -0
- package/src/test/builder/datasetBuilder.ts +111 -0
- package/src/test/builder/dateIntervalBuilder.ts +25 -0
- package/src/test/builder/employee.builder.ts +91 -0
- package/src/test/builder/employmentRelationshipBuilder.ts +35 -0
- package/src/test/builder/employmentRelationshipHistoryBuilder.ts +29 -0
- package/src/test/builder/historiesBuilder.ts +56 -0
- package/src/test/builder/holiday.builder.ts +44 -0
- package/src/test/builder/hourBankAccountBuilder.ts +77 -0
- package/src/test/builder/hourBankBuilder.ts +32 -0
- package/src/test/builder/interval.builder.ts +113 -0
- package/src/test/builder/jobPositionHistoryBuilder.ts +29 -0
- package/src/test/builder/overtimeAuthorization.builder.ts +42 -0
- package/src/test/builder/readinessBuilder.builder.ts +57 -0
- package/src/test/builder/schedules.builder.ts +126 -0
- package/src/test/builder/situation.builder.ts +59 -0
- package/src/test/builder/syndicate.builder.ts +96 -0
- package/src/test/builder/syndicateHistoryBuilder.ts +33 -0
- package/src/test/builder/timeEvaluation.builder.ts +138 -0
- package/src/test/builder/timeEvaluationHistory.builder.ts +49 -0
- package/src/test/builder/timeEvaluationSituation.builder.ts +34 -0
- package/src/test/builder/workschedule.builder.ts +96 -0
- package/src/test/builder/workshift.builder.ts +179 -0
- package/src/test/builder/workshiftBuilder.ts +55 -0
- package/src/test/data/clockingEvent.spec.ts +56 -0
- package/src/test/data/context.spec.ts +176 -0
- package/src/test/data/currentUser.spec.ts +11 -0
- package/src/test/data/dataset.spec.ts +144 -0
- package/src/test/data/employee/employee.spec.ts +20 -0
- package/src/test/data/employmentRelationship/employmentRelationship.spec.ts +48 -0
- package/src/test/data/estimatedHours/estimatedHours.spec.ts +96 -0
- package/src/test/data/histories/costCenterHistory.spec.ts +32 -0
- package/src/test/data/histories/histories.spec.ts +306 -0
- package/src/test/data/holyday.spec.ts +89 -0
- package/src/test/data/hourBank/hourBank.spec.ts +48 -0
- package/src/test/data/hourBank/hourBankAccount.spec.ts +32 -0
- package/src/test/data/schedules/bridge.spec.ts +13 -0
- package/src/test/data/schedules/compesation.spect.ts +89 -0
- package/src/test/data/schedules/overtimeAuthorization.spec.ts +52 -0
- package/src/test/data/schedules/readiness.spec.ts +64 -0
- package/src/test/data/schedules/schedules.spec.ts +134 -0
- package/src/test/data/schedules/workscheduleChange.spec.ts +21 -0
- package/src/test/data/syndicate/syndicate.spec.ts +51 -0
- package/src/test/data/timeEvaluation.spec.ts +1057 -0
- package/src/test/data/timeEvaluationDefinition.spec.ts +144 -0
- package/src/test/data/workschedule/workschedule.spec.ts +194 -0
- package/src/test/data/workshift/workshift.spec.ts +79 -0
- package/src/test/utils/date.utils.spec.ts +198 -0
- package/src/test/utils/dateIntervalUtils.spec.ts +210 -0
- package/src/test/utils/object.utils.spec.ts +83 -0
- package/src/utils/dateIntervalUtils.ts +284 -0
- package/src/utils/dateUtils.ts +456 -0
- package/src/utils/decompressGzipLambda.ts +15 -0
- package/src/utils/object.utils.ts +156 -0
- package/trivy/vulnerabilities_scan.json +1160 -0
- package/tsconfig.json +32 -0
- package/tsconfig.spec.json +21 -0
- package/tslint.json +92 -0
- package/typedoc.json +22 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ObjectUtils } from "src/utils/object.utils";
|
|
2
|
+
import { WorkshiftBase, WorkshiftBaseParams } from "../foundation/workshiftBase";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Histórico de escala do colaborador.
|
|
7
|
+
* O histórico de escala é utilizado para verificar o escala do colaborador em uma data específica.
|
|
8
|
+
*/
|
|
9
|
+
export interface WorkshiftChangeParams extends WorkshiftBaseParams {
|
|
10
|
+
/**
|
|
11
|
+
* Data final da troca de escala.
|
|
12
|
+
*/
|
|
13
|
+
endDate: Date;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Representa uma programação de troca de escala.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* workshiftChange.startDate; // Retorna a data inicial da troca de escala.
|
|
22
|
+
* workshiftChange.endDate; // Retorna a data final da troca de escala.
|
|
23
|
+
* workshiftChange.workshift; // Retorna a escala associada à troca.
|
|
24
|
+
* workshiftChange.workshift.code; // Retorna o código da escala.
|
|
25
|
+
* ```
|
|
26
|
+
* @see {@link Workshift}
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
export class WorkshiftChange extends WorkshiftBase {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Data final da troca de escala.
|
|
33
|
+
*/
|
|
34
|
+
protected readonly _endDate: Date;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @hidden
|
|
38
|
+
* Construtor da classe WorkshiftChange.
|
|
39
|
+
* @param params Parâmetros necessários para a criação de WorkshiftChange.
|
|
40
|
+
*/
|
|
41
|
+
constructor(params: WorkshiftChangeParams) {
|
|
42
|
+
super(params);
|
|
43
|
+
this._endDate = ObjectUtils.toDateOrThrow(params.endDate, "WorkshiftChange.endDate");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Data final da troca de escala.
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* let endDate = workshiftChange.endDate; // Retorna a data final da troca de escala.
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @returns Data final da troca de escala.
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
get endDate(): Date {
|
|
57
|
+
return this._endDate;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Clona a instância de WorkshiftChange.
|
|
62
|
+
*
|
|
63
|
+
* @returns Uma nova instância de WorkshiftChange com os mesmos parâmetros.
|
|
64
|
+
*/
|
|
65
|
+
public static clone(object: WorkshiftChange): WorkshiftChange {
|
|
66
|
+
const workshiftChangeParams: WorkshiftChangeParams = {
|
|
67
|
+
startDate: object.startDate,
|
|
68
|
+
endDate: object.endDate,
|
|
69
|
+
workshiftId: object.workshiftId,
|
|
70
|
+
workshiftGroupId: object.workshiftGroupId
|
|
71
|
+
};
|
|
72
|
+
return new WorkshiftChange(workshiftChangeParams);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hidden
|
|
3
|
+
* Parâmetros para criar um motivo de AdjustmentReason.
|
|
4
|
+
* @param code código do motivo de acerto.
|
|
5
|
+
* @typedef {Object} AdjustmentReasonParams
|
|
6
|
+
*/
|
|
7
|
+
export interface AdjustmentReasonParams {
|
|
8
|
+
code: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Representa um motivo de acerto.
|
|
13
|
+
* Um motivo de acerto é utilizado para justificar ajustes em horários ou datas de trabalho.
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* adjustmentReason.code; // Retorna o código do motivo de acerto.
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class AdjustmentReason {
|
|
20
|
+
/**
|
|
21
|
+
* Código do motivo de acerto.
|
|
22
|
+
* @param code código do motivo de acerto.
|
|
23
|
+
*/
|
|
24
|
+
private readonly _code: number;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @hidden
|
|
28
|
+
*/
|
|
29
|
+
constructor(params: AdjustmentReasonParams) {
|
|
30
|
+
this._code = params.code;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Código do motivo de acerto.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* let code = adjustmentReason.code; // Retorna o código do motivo de acerto.
|
|
39
|
+
* ```
|
|
40
|
+
* @returns Código do motivo de acerto.
|
|
41
|
+
*/
|
|
42
|
+
get code(): number {
|
|
43
|
+
return this._code;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { ObjectUtils } from "../../utils/object.utils";
|
|
2
|
+
import { DateUtils } from '../../utils/dateUtils';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Interface para os parâmetros de ClockingEvent.
|
|
7
|
+
*/
|
|
8
|
+
export interface ClockingEventParams {
|
|
9
|
+
clockingEventDate: Date;
|
|
10
|
+
clockingEventTime: number;
|
|
11
|
+
functionCode: number;
|
|
12
|
+
originType: ClockingEventOriginType;
|
|
13
|
+
useType: ClockingUseType;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Enumeração para os tipos de origem de marcação.
|
|
18
|
+
* @enum {string}
|
|
19
|
+
*/
|
|
20
|
+
export enum ClockingEventOriginType {
|
|
21
|
+
/**
|
|
22
|
+
* Marcação digitada.
|
|
23
|
+
*/
|
|
24
|
+
TYPED = "TYPED",
|
|
25
|
+
/**
|
|
26
|
+
* Marcação eletrônica.
|
|
27
|
+
*/
|
|
28
|
+
ELECTRONIC = "ELECTRONIC",
|
|
29
|
+
/**
|
|
30
|
+
* Marcação gerada.
|
|
31
|
+
*/
|
|
32
|
+
GENERATED = "GENERATED"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Enumeração para tipo de uso de marcação.
|
|
37
|
+
* @enum {string}
|
|
38
|
+
* Possíveis valores:
|
|
39
|
+
* - `CLOCKING`: Evento padrão de marcação de ponto.
|
|
40
|
+
* - `WAITING`: Evento de espera para motoristas.
|
|
41
|
+
* - `REQUIRED_STOP`: Evento de parada obrigatória para motoristas.
|
|
42
|
+
* - `DRIVING`: Evento de direção para motoristas.
|
|
43
|
+
*/
|
|
44
|
+
export enum ClockingUseType {
|
|
45
|
+
/**
|
|
46
|
+
* Evento padrão de marcação de ponto.
|
|
47
|
+
*/
|
|
48
|
+
CLOCKING = "CLOCKING",
|
|
49
|
+
/**
|
|
50
|
+
* Evento de pausa abonada.
|
|
51
|
+
*/
|
|
52
|
+
PAID_BREAK = "PAID_BREAK",
|
|
53
|
+
/**
|
|
54
|
+
* Evento de espera para motoristas.
|
|
55
|
+
*/
|
|
56
|
+
WAITING = "WAITING",
|
|
57
|
+
/**
|
|
58
|
+
* Evento de parada obrigatória para motoristas.
|
|
59
|
+
*/
|
|
60
|
+
REQUIRED_STOP = "REQUIRED_STOP",
|
|
61
|
+
/**
|
|
62
|
+
* Evento de direção para motoristas.
|
|
63
|
+
*/
|
|
64
|
+
DRIVING = "DRIVING",
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Representa uma marcação de ponto.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* clockingEvent.clockingEventDateTime; // Retorna a data e hora da marcação.
|
|
74
|
+
* clockingEvent.clockingEventDate; // Retorna a data da marcação.
|
|
75
|
+
* clockingEvent.clockingEventTime; // Retorna a hora da marcação.
|
|
76
|
+
* clockingEvent.functionCode; // Retorna o código da função do relógio coletor.
|
|
77
|
+
* clockingEvent.originType; // Retorna a origem da marcação.
|
|
78
|
+
* clockingEvent.useType; // Retorna o tipo de uso da marcação.
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @see {@link ClockingEventOriginType}
|
|
82
|
+
* @see {@link ClockingUseType}
|
|
83
|
+
*/
|
|
84
|
+
export class ClockingEvent {
|
|
85
|
+
/**
|
|
86
|
+
* Data da marcação.
|
|
87
|
+
*/
|
|
88
|
+
private readonly _clockingEventDate: Date;
|
|
89
|
+
/**
|
|
90
|
+
* Hora da marcação.
|
|
91
|
+
*/
|
|
92
|
+
private readonly _clockingEventTime: number;
|
|
93
|
+
/**
|
|
94
|
+
* Código da função do relógio coletor.
|
|
95
|
+
*/
|
|
96
|
+
private readonly _functionCode: number;
|
|
97
|
+
/**
|
|
98
|
+
* Origem da marcação.
|
|
99
|
+
*/
|
|
100
|
+
private readonly _originType: ClockingEventOriginType;
|
|
101
|
+
/**
|
|
102
|
+
* Tipo de uso da marcação.
|
|
103
|
+
*/
|
|
104
|
+
private readonly _useType: ClockingUseType;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @hidden
|
|
108
|
+
*/
|
|
109
|
+
constructor(params: ClockingEventParams) {
|
|
110
|
+
this._clockingEventDate = ObjectUtils.toDateOrThrow(params.clockingEventDate, "clockingEvent.clockingEventDate");
|
|
111
|
+
this._clockingEventTime = params.clockingEventTime;
|
|
112
|
+
this._functionCode = params.functionCode;
|
|
113
|
+
this._originType = params.originType;
|
|
114
|
+
this._useType = params.useType;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Retorna a data e hora da marcação.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* let clockingDateTime = clockingEvent.clockingEventDateTime; // Retorna a data e hora da marcação.
|
|
123
|
+
* ```
|
|
124
|
+
* @return Data e hora da marcação.
|
|
125
|
+
*/
|
|
126
|
+
get clockingEventDateTime(): Date {
|
|
127
|
+
return DateUtils.addMinutes(this._clockingEventDate, this._clockingEventTime);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Data da marcação.
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* let clockingDate = clockingEvent.clockingEventDate; // Retorna a data da marcação.
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
get clockingEventDate(): Date {
|
|
138
|
+
return this._clockingEventDate;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Hora da marcação em quantidade de minutos desde a meia-noite (08:00 = 480 min).
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* let clockingTime = clockingEvent.clockingEventTime; // Retorna a hora da marcação (08:00 = 480 min).
|
|
146
|
+
* ```
|
|
147
|
+
* @return Hora da marcação em minutos desde a meia-noite.
|
|
148
|
+
*/
|
|
149
|
+
get clockingEventTime(): number {
|
|
150
|
+
return this._clockingEventTime;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Código da função do relógio coletor.
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* let functionCode = clockingEvent.functionCode; // Retorna o código da função do relógio coletor.
|
|
158
|
+
* ```
|
|
159
|
+
* @return Código da função do relógio coletor.
|
|
160
|
+
*
|
|
161
|
+
*/
|
|
162
|
+
get functionCode(): number {
|
|
163
|
+
return this._functionCode;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Origem da marcação.
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* let originType = clockingEvent.originType; // Retorna a origem da marcação.
|
|
171
|
+
* ```
|
|
172
|
+
* @return Origem da marcação.
|
|
173
|
+
* @see {@link ClockingEventOriginType}
|
|
174
|
+
*/
|
|
175
|
+
get originType(): ClockingEventOriginType {
|
|
176
|
+
return this._originType;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Tipo de uso do evento de marcação.
|
|
181
|
+
*
|
|
182
|
+
* Possíveis valores:
|
|
183
|
+
* - ClockingUseType.CLOCKING: Evento padrão de marcação de ponto.
|
|
184
|
+
* - (outros valores, se existirem)
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* let useType = clockingEvent.useType; // Retorna o tipo de uso da marcação.
|
|
189
|
+
* ```
|
|
190
|
+
* @return Tipo de uso da marcação.
|
|
191
|
+
* @see {@link ClockingUseType}
|
|
192
|
+
*/
|
|
193
|
+
get useType(): ClockingUseType {
|
|
194
|
+
return this._useType;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { SeparatedHours, SeparatedHoursParams } from "../timeEvaluation/separatedHours";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Interface para os parâmetros do construtor da EstimatedHours.
|
|
7
|
+
*/
|
|
8
|
+
export interface EstimatedHoursParams {
|
|
9
|
+
meal: SeparatedHoursParams[];
|
|
10
|
+
snack: SeparatedHoursParams[];
|
|
11
|
+
work: SeparatedHoursParams[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Representa a previsão de horas.
|
|
16
|
+
* Contém as horas previstas para refeições, lanches e trabalho.
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* estimatedHours.getWorkHours(1); // Retorna as horas de trabalho do primeiro intervalo do tipo work.
|
|
20
|
+
* estimatedHours.getWorkHours(); // Retorna o total das horas de trabalho do dia (quando não passa parâmetro).
|
|
21
|
+
* estimatedHours.getMealHours(1); // Retorna as horas de refeição do primeiro intervalo do tipo meal.
|
|
22
|
+
* estimatedHours.getSnackHours(); // Retorna o total das horas de lanche do dia (quando não passa parâmetro).
|
|
23
|
+
* ```
|
|
24
|
+
* @see {@link SeparatedHours}
|
|
25
|
+
*/
|
|
26
|
+
export class EstimatedHours {
|
|
27
|
+
/**
|
|
28
|
+
* Horas de refeições previstas.
|
|
29
|
+
*/
|
|
30
|
+
private readonly _meal: SeparatedHours[];
|
|
31
|
+
/**
|
|
32
|
+
* Horas de lanches previstas.
|
|
33
|
+
*/
|
|
34
|
+
private readonly _snack: SeparatedHours[];
|
|
35
|
+
/**
|
|
36
|
+
* Horas de trabalho previstas.
|
|
37
|
+
*/
|
|
38
|
+
private readonly _work: SeparatedHours[];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @hidden
|
|
42
|
+
* Construtor da classe EstimatedHours.
|
|
43
|
+
* @param params Parâmetros para inicializar EstimatedHours.
|
|
44
|
+
*/
|
|
45
|
+
constructor(params: EstimatedHoursParams) {
|
|
46
|
+
this._meal = [];
|
|
47
|
+
if (Array.isArray(params.meal)) {
|
|
48
|
+
for (const mealItem of params.meal) {
|
|
49
|
+
this._meal.push(
|
|
50
|
+
new SeparatedHours(mealItem)
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this._snack = [];
|
|
56
|
+
if (Array.isArray(params.snack)) {
|
|
57
|
+
for (const snackItem of params.snack) {
|
|
58
|
+
this._snack.push(
|
|
59
|
+
new SeparatedHours(snackItem)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
this._work = [];
|
|
65
|
+
if (Array.isArray(params.work)) {
|
|
66
|
+
for (const workItem of params.work) {
|
|
67
|
+
this._work.push(
|
|
68
|
+
new SeparatedHours(workItem)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Retorna as horas previstas para refeições.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* estimatedHours.meal; // Retorna as horas de refeição.
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @returns Uma lista de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
83
|
+
* @see {@link SeparatedHours}
|
|
84
|
+
*/
|
|
85
|
+
get meal(): SeparatedHours[] {
|
|
86
|
+
return this._meal;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Retorna as horas previstas para lanches.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* estimatedHours.snack; // Retorna as horas de lanche.
|
|
95
|
+
* ```
|
|
96
|
+
* @returns Uma lista de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
97
|
+
* @see {@link SeparatedHours}
|
|
98
|
+
*/
|
|
99
|
+
get snack(): SeparatedHours[] {
|
|
100
|
+
return this._snack;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Retorna as horas previstas para horas de trabalho.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* estimatedHours.work; // Retorna as horas de trabalho.
|
|
109
|
+
* ```
|
|
110
|
+
* @returns Um array de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
111
|
+
* @see {@link SeparatedHours}
|
|
112
|
+
*/
|
|
113
|
+
get work(): SeparatedHours[] {
|
|
114
|
+
return this._work;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Retorna a previsão de horas trabalhadas.
|
|
119
|
+
*
|
|
120
|
+
* ```
|
|
121
|
+
* Representação de previsão de horas
|
|
122
|
+
*
|
|
123
|
+
* 08:00 - Início do expediente
|
|
124
|
+
* 10:00 - Início do primeiro lanche
|
|
125
|
+
* 10:15 - Fim do primeiro lanche
|
|
126
|
+
* 12:00 - Início do almoço
|
|
127
|
+
* 13:30 - Fim do almoço
|
|
128
|
+
* 16:30 - Início do segundo lanche
|
|
129
|
+
* 16:45 - Fim do segundo lanche
|
|
130
|
+
* 18:00 - Fim do expediente
|
|
131
|
+
*
|
|
132
|
+
* 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
|
|
133
|
+
* |------------|------------|------------|------------|------------|------------|------------|
|
|
134
|
+
* | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
|
|
135
|
+
* ```
|
|
136
|
+
*
|
|
137
|
+
* workHours = estimatedHours.getWorkHours(3) retorna as horas de trabalho das 13:30 às 16:30 (180 minutos).
|
|
138
|
+
*
|
|
139
|
+
* workHours = estimatedHours.getWorkHours( ) retorna o total das horas de trabalho do dia (480 minutos).
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const workHours = estimatedHours.getWorkHours(1);
|
|
144
|
+
* console.log(`Horas de trabalho: ${workHours.dailyHours} horas diurnas, ${workHours.nightlyHours} horas noturnas`);
|
|
145
|
+
* ```
|
|
146
|
+
* @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
|
|
147
|
+
* @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
148
|
+
*/
|
|
149
|
+
public getWorkHours(index?: number): SeparatedHours {
|
|
150
|
+
return this.getHours(this._work, index);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Retorna a previsão de horas de refeição.
|
|
155
|
+
*
|
|
156
|
+
* ```
|
|
157
|
+
* Representação de previsão de horas
|
|
158
|
+
*
|
|
159
|
+
* 08:00 - Início do expediente
|
|
160
|
+
* 10:00 - Início do primeiro lanche
|
|
161
|
+
* 10:15 - Fim do primeiro lanche
|
|
162
|
+
* 12:00 - Início do almoço
|
|
163
|
+
* 13:30 - Fim do almoço
|
|
164
|
+
* 16:30 - Início do segundo lanche
|
|
165
|
+
* 16:45 - Fim do segundo lanche
|
|
166
|
+
* 18:00 - Fim do expediente
|
|
167
|
+
*
|
|
168
|
+
* 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
|
|
169
|
+
* |------------|------------|------------|------------|------------|------------|------------|
|
|
170
|
+
* | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
|
|
171
|
+
* ```
|
|
172
|
+
*
|
|
173
|
+
* mealHours = estimatedHours.getMealHours(1) retorna as horas da refeição das 12:00 às 13:30 (90 minutos).
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const mealHours = estimatedHours.getMealHours(1);
|
|
178
|
+
* console.log(`Horas de refeição: ${mealHours.dailyHours} horas diurnas, ${mealHours.nightlyHours} horas noturnas`);
|
|
179
|
+
* ```
|
|
180
|
+
*
|
|
181
|
+
* @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
|
|
182
|
+
* @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
183
|
+
*/
|
|
184
|
+
public getMealHours(index?: number): SeparatedHours {
|
|
185
|
+
return this.getHours(this._meal, index);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Retorna a previsão de horas de lanche.
|
|
190
|
+
*
|
|
191
|
+
* ```
|
|
192
|
+
* Representação de previsão de horas
|
|
193
|
+
*
|
|
194
|
+
* 08:00 - Início do expediente
|
|
195
|
+
* 10:00 - Início do primeiro lanche
|
|
196
|
+
* 10:15 - Fim do primeiro lanche
|
|
197
|
+
* 12:00 - Início do almoço
|
|
198
|
+
* 13:30 - Fim do almoço
|
|
199
|
+
* 16:30 - Início do segundo lanche
|
|
200
|
+
* 16:45 - Fim do segundo lanche
|
|
201
|
+
* 18:00 - Fim do expediente
|
|
202
|
+
*
|
|
203
|
+
* 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
|
|
204
|
+
* |------------|------------|------------|------------|------------|------------|------------|
|
|
205
|
+
* | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
|
|
206
|
+
* ```
|
|
207
|
+
*
|
|
208
|
+
* snackHours = estimatedHours.getSnackHours(2) retorna as horas do lanche das 16:30 às 16:45 (15 minutos).
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* ```typescript
|
|
212
|
+
* const snackHours = estimatedHours.getSnackHours(1);
|
|
213
|
+
* console.log(`Horas de lanche: ${snackHours.dailyHours} horas diurnas, ${snackHours.nightlyHours} horas noturnas`);
|
|
214
|
+
* ```
|
|
215
|
+
*
|
|
216
|
+
* @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
|
|
217
|
+
* @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
|
|
218
|
+
*/
|
|
219
|
+
public getSnackHours(index?: number): SeparatedHours {
|
|
220
|
+
return this.getHours(this._snack, index);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private getHours(estimatedHours: SeparatedHours[], index?: number): SeparatedHours {
|
|
224
|
+
if (index == null) {
|
|
225
|
+
return estimatedHours.reduce((total, current) => {
|
|
226
|
+
total.sumSeparatedHours(current);
|
|
227
|
+
return total;
|
|
228
|
+
}, this.createEmptySeparatedHours());
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (this.isInvalidIndex(index, estimatedHours)) {
|
|
232
|
+
return this.createEmptySeparatedHours();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return estimatedHours[index-1] || this.createEmptySeparatedHours();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
private isInvalidIndex(index: number, array: SeparatedHours[]): boolean {
|
|
239
|
+
return (index <= 0 || index > array.length);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private createEmptySeparatedHours(): SeparatedHours {
|
|
243
|
+
return new SeparatedHours({ dailyHours: 0, nightlyHours: 0 });
|
|
244
|
+
}
|
|
245
|
+
}
|