1
+ /*
2
+ * EJERCICIO:
3
+ * Empleando tu lenguaje, explora la definición del tipo de dato
4
+ * que sirva para definir enumeraciones (Enum).
5
+ * Crea un Enum que represente los días de la semana del lunes
6
+ * al domingo, en ese orden. Con ese enumerado, crea una operación
7
+ * que muestre el nombre del día de la semana dependiendo del número entero
8
+ * utilizado (del 1 al 7).
9
+ *
10
+ * DIFICULTAD EXTRA (opcional):
11
+ * Crea un pequeño sistema de gestión del estado de pedidos.
12
+ * Implementa una clase que defina un pedido con las siguientes características:
13
+ * - El pedido tiene un identificador y un estado.
14
+ * - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
15
+ * - Implementa las funciones que sirvan para modificar el estado:
16
+ * - Pedido enviado
17
+ * - Pedido cancelado
18
+ * - Pedido entregado
19
+ * (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
20
+ * - Implementa una función para mostrar un texto descriptivo según el estado actual.
21
+ * - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
22
+ */
23
+
24
+ const diasDeLaSemana = Object . freeze ( {
25
+ LUNES : 1 ,
26
+ MARTES : 2 ,
27
+ MIERCOLES : 3 ,
28
+ JUEVES : 4 ,
29
+ VIERNES : 5 ,
30
+ SABADO : 6 ,
31
+ DOMINGO : 7 ,
32
+ } ) ;
33
+
34
+ const getDayFromNumber = ( number ) => {
35
+ let day = Object . keys ( diasDeLaSemana ) . find (
36
+ ( key ) => diasDeLaSemana [ key ] === number
37
+ ) ;
38
+ console . log ( day ) ;
39
+ } ;
40
+
41
+ getDayFromNumber ( 2 ) ;
42
+
43
+ console . log ( "---------------DIFICULTAD EXTRA----------------" ) ;
44
+
45
+ const statusEnum = Object . freeze ( {
46
+ PENDIENTE : 0 ,
47
+ ENVIADO : 1 ,
48
+ ENTREGADO : 2 ,
49
+ CANCELADO : 4 ,
50
+ } ) ;
51
+
52
+ class Order {
53
+ constructor ( id , state ) {
54
+ this . id = id ;
55
+ this . status = state ;
56
+ }
57
+
58
+ order ( ) {
59
+ this . status = statusEnum . PENDIENTE ;
60
+ console . log ( "El pedido se ha creado con id: " , this . id ) ;
61
+ }
62
+
63
+ send ( ) {
64
+ if ( ! this . checkIsCanceled ( 'enviar' ) ) {
65
+ return false ;
66
+ } else if ( this . status === 0 ) {
67
+ console . log ( "El pedido se está enviando" ) ;
68
+ this . status = statusEnum . ENVIADO ;
69
+ } else if ( this . status === statusEnum . ENVIADO ) {
70
+ console . log ( "El pedido ya se ha enviado o ha sido cancelado" ) ;
71
+ } else {
72
+ console . log ( "No se puede enviar un envío inexistente" ) ;
73
+ }
74
+ }
75
+
76
+ deliver ( ) {
77
+ if ( ! this . checkIsCanceled ( 'entregar' ) ) {
78
+ return false ;
79
+ } else if ( this . status > 2 ) {
80
+ this . status = statusEnum . ENTREGADO ;
81
+ console . log ( "El pedido se está entregando" ) ;
82
+ } else {
83
+ console . log (
84
+ "No se puede entregar un envío que no se ha creado y/o mandado"
85
+ ) ;
86
+ }
87
+ }
88
+
89
+ cancel ( ) {
90
+ if ( this . status < 2 ) {
91
+ this . status = statusEnum . CANCELADO ;
92
+ console . log ( "El pedido se ha cancelado" ) ;
93
+ } else {
94
+ console . log (
95
+ "No se puede entregar un envío que no se ha creado y/o mandado"
96
+ ) ;
97
+ }
98
+ }
99
+
100
+ checkStatus ( ) {
101
+ console . log (
102
+ "El estado del pedido es: " ,
103
+ Object . keys ( statusEnum ) . find ( ( key ) => statusEnum [ key ] === this . status )
104
+ ) ;
105
+ }
106
+
107
+ checkIsCanceled ( operacion ) {
108
+ if ( this . status === statusEnum . CANCELADO ) {
109
+ console . log ( "El pedido ha sido cancelado, no se puede realizar la operación: " , operacion ) ;
110
+ return false ;
111
+ }
112
+ return true ;
113
+ }
114
+ }
115
+
116
+ const order1 = new Order ( '001' ) ;
117
+ order1 . order ( ) ;
118
+ order1 . checkStatus ( ) ;
119
+ order1 . send ( ) ;
120
+ order1 . checkStatus ( ) ;
121
+
122
+ const order2 = new Order ( '002' ) ;
123
+ order2 . order ( ) ;
124
+ order2 . checkStatus ( ) ;
125
+ order2 . cancel ( ) ;
126
+ order2 . send ( ) ;
0 commit comments