Completed
Push — master ( 27e209...a08afa )
by Julito
186:04 queued 150:53
created

Sepe   F

Complexity

Total Complexity 146

Size/Duplication

Total Lines 1303
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 1303
rs 0.6314
c 0
b 0
f 0
wmc 146

9 Methods

Rating   Name   Duplication   Size   Complexity  
B obtenerDatosCentro() 0 86 3
C crearCentro() 0 86 11
B eliminarAccion() 0 42 4
A undoFixDate() 0 10 3
A checkAuth() 0 4 2
A fixDate() 0 10 3
B obtenerListaAcciones() 0 49 5
D obtenerAccion() 0 485 52
F crearAccion() 0 489 63

How to fix   Complexity   

Complex Class

Complex classes like Sepe often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Sepe, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/**
4
 * Class Sepe
5
 */
6
class Sepe
7
{
8
    /**
9
     * @param crearCentroInput[] $crearCentroInput
10
     *
11
     * @return array
12
     */
13
    public function crearCentro($crearCentroInput)
14
    {
15
        /* Tracking log */
16
        $tableLog = Database::get_main_table('plugin_sepe_log');
17
        $paramsLog = [
18
            'ip' => $_SERVER['REMOTE_ADDR'],
19
            'action' => "crearCentro",
20
            'fecha' => date("Y-m-d H:i:s")
21
        ];
22
        Database::insert($tableLog, $paramsLog);
23
        /* End tracking log */
24
25
        // Code
26
        $crearCentroInput = $crearCentroInput->DATOS_IDENTIFICATIVOS;
27
        $centerOrigin = $crearCentroInput->ID_CENTRO->ORIGEN_CENTRO;
28
        $centerCode = $crearCentroInput->ID_CENTRO->CODIGO_CENTRO;
29
        $centerName = $crearCentroInput->NOMBRE_CENTRO;
30
        $urlPlatform = $crearCentroInput->URL_PLATAFORMA;
31
        $urlTracking = $crearCentroInput->URL_SEGUIMIENTO;
32
        $phone = $crearCentroInput->TELEFONO;
33
        $mail = $crearCentroInput->EMAIL;
34
35
        if (empty($centerOrigin) ||
36
            empty($centerCode) ||
37
            empty($centerName) ||
38
            empty($urlPlatform) ||
39
            empty($urlTracking) ||
40
            empty($phone) ||
41
            empty($mail)
42
        ) {
43
            error_log('no data');
44
            return [
45
                "RESPUESTA_DATOS_CENTRO" => [
46
                    "CODIGO_RETORNO" => "2",
47
                    "ETIQUETA_ERROR" => "Error en parametro",
48
                    "DATOS_IDENTIFICATIVOS" => $crearCentroInput
49
                ]
50
            ];
51
        }
52
53
        $table = Database::get_main_table('plugin_sepe_center');
54
55
        // Check if exists data in table
56
        if (Database::count_rows($table) > 0) {
0 ignored issues
show
Deprecated Code introduced by
The function Database::count_rows() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

56
        if (/** @scrutinizer ignore-deprecated */ Database::count_rows($table) > 0) {
Loading history...
57
            // Check if exists actions
58
            $table_actions = Database::get_main_table('plugin_sepe_actions');
59
            if (Database::count_rows($table_actions) > 0) {
0 ignored issues
show
Deprecated Code introduced by
The function Database::count_rows() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

59
            if (/** @scrutinizer ignore-deprecated */ Database::count_rows($table_actions) > 0) {
Loading history...
60
                return [
61
                    "RESPUESTA_DATOS_CENTRO" => [
62
                        "CODIGO_RETORNO" => "1",
63
                        "ETIQUETA_ERROR" => "Centro con acciones",
64
                        "DATOS_IDENTIFICATIVOS" => $crearCentroInput
65
                    ]
66
                ];
67
            } else {
68
                $sql = "DELETE FROM $table";
69
                Database::query($sql);
70
            }
71
        }
72
73
        $params = [
74
            'center_origin' => $centerOrigin,
75
            'center_code' => $centerCode,
76
            'center_name' => $centerName,
77
            'url' => $urlPlatform,
78
            'tracking_url' => $urlTracking,
79
            'phone' => $phone,
80
            'mail' => $mail,
81
        ];
82
83
        $id = Database::insert($table, $params);
84
85
        if (empty($id)) {
86
            return [
87
                "RESPUESTA_DATOS_CENTRO" => [
88
                    "CODIGO_RETORNO" => "-1",
89
                    "ETIQUETA_ERROR" => "Problema base de datos",
90
                    "DATOS_IDENTIFICATIVOS" => $crearCentroInput
91
                ]
92
            ];
93
        } else {
94
            return [
95
                "RESPUESTA_DATOS_CENTRO" => [
96
                    "CODIGO_RETORNO" => "0",
97
                    "ETIQUETA_ERROR" => "Correcto",
98
                    "DATOS_IDENTIFICATIVOS" => $crearCentroInput
99
                ]
100
            ];
101
        }
102
    }
103
104
    /**
105
     *
106
     * @return stdClass
107
     */
108
    public function obtenerDatosCentro()
109
    {
110
        /* Tracking Log */
111
        $tableLog = Database::get_main_table('plugin_sepe_log');
112
        $paramsLog = [
113
            'ip' => $_SERVER['REMOTE_ADDR'],
114
            'action' => "obtenerDatosCentro",
115
            'fecha' => date("Y-m-d H:i:s")
116
        ];
117
        Database::insert($tableLog, $paramsLog);
118
        /* End tracking log */
119
120
        // Code
121
        $table = Database::get_main_table('plugin_sepe_center');
122
123
        // Comprobamos si existen datos almacenados previamente
124
        if (Database::count_rows($table) > 0) {
0 ignored issues
show
Deprecated Code introduced by
The function Database::count_rows() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

124
        if (/** @scrutinizer ignore-deprecated */ Database::count_rows($table) > 0) {
Loading history...
125
            //Hay datos en la tabla;
126
            $sql = "SELECT * FROM $table;";
127
            $rs = Database::query($sql);
128
            if (!$rs) {
129
                return [
0 ignored issues
show
Bug Best Practice introduced by
The expression return array('CODIGO_RET...IDENTIFICATIVOS' => '') returns the type array<string,string> which is incompatible with the documented return type stdClass.
Loading history...
130
                    "CODIGO_RETORNO" => "-1",
131
                    "ETIQUETA_ERROR" => "Problema acceso base de datos",
132
                    "DATOS_IDENTIFICATIVOS" => ''
133
                ];
134
            } else {
135
                $row = Database::fetch_assoc($rs);
136
                $centerOrigin = $row['center_origin'];
137
                $centerCode = $row['center_code'];
138
                $centerName = $row['center_name'];
139
                $urlPlatform = $row['url'];
140
                $urlTracking = $row['tracking_url'];
141
                $phone = $row['phone'];
142
                $mail = $row['mail'];
143
144
                $data = new stdClass();
145
                $data->ID_CENTRO = new stdClass();
146
                $data->ID_CENTRO->ORIGEN_CENTRO = $centerOrigin;
147
                $data->ID_CENTRO->CODIGO_CENTRO = $centerCode;
148
                $data->NOMBRE_CENTRO = $centerName;
149
                $data->URL_PLATAFORMA = $urlPlatform;
150
                $data->URL_SEGUIMIENTO = $urlTracking;
151
                $data->TELEFONO = $phone;
152
                $data->EMAIL = $mail;
153
154
                $obj = new stdClass();
155
                $obj->CODIGO_RETORNO = 0;
156
                $obj->ETIQUETA_ERROR = 'Correcto';
157
                $obj->DATOS_IDENTIFICATIVOS = new SoapVar($data, SOAP_ENC_OBJECT);
158
159
                $result = new stdClass();
160
                $result->RESPUESTA_DATOS_CENTRO = new SoapVar($obj, SOAP_ENC_OBJECT);
161
162
                return $result;
163
            }
164
        } else {
165
            $data = new stdClass();
166
            $data->ID_CENTRO = new stdClass();
167
            $data->ID_CENTRO->ORIGEN_CENTRO = '';
168
            $data->ID_CENTRO->CODIGO_CENTRO = '';
169
            $data->NOMBRE_CENTRO = '';
170
            $data->URL_PLATAFORMA = '';
171
            $data->URL_SEGUIMIENTO = '';
172
            $data->TELEFONO = '';
173
            $data->EMAIL = '';
174
175
            $obj = new stdClass();
176
            $obj->CODIGO_RETORNO = 0;
177
            $obj->ETIQUETA_ERROR = 'Correcto';
178
            $obj->DATOS_IDENTIFICATIVOS = new SoapVar($data, SOAP_ENC_OBJECT);
179
180
            $result = new stdClass();
181
            $result->RESPUESTA_DATOS_CENTRO = new SoapVar($obj, SOAP_ENC_OBJECT);
182
            //error_log('Sin datos en la BD');
183
            /*
184
            $data = new stdClass();
185
            $obj = new stdClass();
186
            $obj->CODIGO_RETORNO = '-1';
187
            $obj->ETIQUETA_ERROR = 'Sin datos';
188
            $obj->DATOS_IDENTIFICATIVOS = new SoapVar($data, SOAP_ENC_OBJECT);
189
190
            $result = new stdClass();
191
            $result->RESPUESTA_DATOS_CENTRO = new SoapVar($obj, SOAP_ENC_OBJECT);
192
            */
193
            return $result;
194
        }
195
    }
196
197
    /**
198
     * @param $crearAccionInput
199
     * @return array
200
     */
201
    public function crearAccion($crearAccionInput)
202
    {
203
        /* Tracking Log */
204
        $tableLog = Database::get_main_table('plugin_sepe_log');
205
        $paramsLog = [
206
            'ip' => $_SERVER['REMOTE_ADDR'],
207
            'action' => "crearAccion",
208
            'fecha' => date("Y-m-d H:i:s")
209
        ];
210
        Database::insert($tableLog, $paramsLog);
211
        /* End tracking log */
212
213
        $array = json_decode(json_encode($crearAccionInput), true);
214
        $crearAccionInputArray = (array) $array;
215
        // Code
216
        $actionOrigin = $crearAccionInput->ACCION_FORMATIVA->ID_ACCION->ORIGEN_ACCION;
217
        $actionCode = $crearAccionInput->ACCION_FORMATIVA->ID_ACCION->CODIGO_ACCION;
218
        $situation = $crearAccionInput->ACCION_FORMATIVA->SITUACION;
219
        $specialtyOrigin = $crearAccionInput->ACCION_FORMATIVA->ID_ESPECIALIDAD_PRINCIPAL->ORIGEN_ESPECIALIDAD;
220
        $professionalArea = $crearAccionInput->ACCION_FORMATIVA->ID_ESPECIALIDAD_PRINCIPAL->AREA_PROFESIONAL;
221
        $specialtyCode = $crearAccionInput->ACCION_FORMATIVA->ID_ESPECIALIDAD_PRINCIPAL->CODIGO_ESPECIALIDAD;
222
        $duration = $crearAccionInput->ACCION_FORMATIVA->DURACION;
223
        $startDate = $crearAccionInput->ACCION_FORMATIVA->FECHA_INICIO;
224
        $endDate = $crearAccionInput->ACCION_FORMATIVA->FECHA_FIN;
225
        $fullItineraryIndicator = $crearAccionInput->ACCION_FORMATIVA->IND_ITINERARIO_COMPLETO;
226
        $financingType = $crearAccionInput->ACCION_FORMATIVA->TIPO_FINANCIACION;
227
        $attendeesCount = $crearAccionInput->ACCION_FORMATIVA->NUMERO_ASISTENTES;
228
        $actionName = $crearAccionInput->ACCION_FORMATIVA->DESCRIPCION_ACCION->DENOMINACION_ACCION;
229
        $globalInfo = $crearAccionInput->ACCION_FORMATIVA->DESCRIPCION_ACCION->INFORMACION_GENERAL;
230
        $schedule = $crearAccionInput->ACCION_FORMATIVA->DESCRIPCION_ACCION->HORARIOS;
231
        $requerements = $crearAccionInput->ACCION_FORMATIVA->DESCRIPCION_ACCION->REQUISITOS;
232
        $contactAction = $crearAccionInput->ACCION_FORMATIVA->DESCRIPCION_ACCION->CONTACTO_ACCION;
233
234
235
        if (empty($actionOrigin) || empty($actionCode)) {
236
            error_log('2 - error en parametros - l244');
237
            return [
238
                "RESPUESTA_OBT_ACCION" => [
239
                    "CODIGO_RETORNO"=>"2",
240
                    "ETIQUETA_ERROR"=>"Error en parametro",
241
                    "ACCION_FORMATIVA"=> $crearAccionInputArray['ACCION_FORMATIVA']
242
                ]
243
            ];
244
        }
245
246
        // Comprobamos si existen datos almacenados previamente
247
        $table = Database::get_main_table('plugin_sepe_actions');
248
        $sql = "SELECT action_origin FROM $table
249
                WHERE action_origin='".$actionOrigin."' AND action_code='".$actionCode."';";
250
        $rs = Database::query($sql);
251
252
        if (Database::num_rows($rs) > 0) {
253
            return [
254
                "RESPUESTA_OBT_ACCION" => [
255
                    "CODIGO_RETORNO"=>"1",
256
                    "ETIQUETA_ERROR"=>"Acción existente",
257
                    "ACCION_FORMATIVA"=>$crearAccionInputArray['ACCION_FORMATIVA']
258
                ]
259
            ];
260
        }
261
262
        $startDate = self::fixDate($startDate);
263
        $endDate = self::fixDate($endDate);
264
265
        $sql = "INSERT INTO $table (action_origin, action_code, situation, specialty_origin, professional_area, specialty_code, duration, start_date, end_date, full_itinerary_indicator, financing_type, attendees_count, action_name, global_info, schedule, requirements, contact_action)
266
                VALUES ('".$actionOrigin."','".$actionCode."','".$situation."','".$specialtyOrigin."','".$professionalArea."','".$specialtyCode."','".$duration."','".$startDate."','".$endDate."','".$fullItineraryIndicator."','".$financingType."','".$attendeesCount."','".$actionName."','".$globalInfo."','".$schedule."','".$requerements."','".$contactAction."')";
267
268
        $rs = Database::query($sql);
269
        if (!$rs) {
270
            return [
271
                "RESPUESTA_OBT_ACCION" => [
272
                    "CODIGO_RETORNO"=>"-1",
273
                    "ETIQUETA_ERROR"=>"Problema base de datos - insertando acciones formativas",
274
                    "ACCION_FORMATIVA"=>$crearAccionInputArray['ACCION_FORMATIVA']
275
                ]
276
            ];
277
        }
278
        $actionId = Database::insert_id();
279
280
        // DATOS ESPECIALIDADES DE LA ACCION
281
        $table = Database::get_main_table('plugin_sepe_specialty');
282
283
        $specialties = $crearAccionInput->ACCION_FORMATIVA->ESPECIALIDADES_ACCION;
284
        foreach ($specialties as $specialtyList) {
285
            if (!is_array($specialtyList)) {
286
                $auxList = [];
287
                $auxList[] = $specialtyList;
288
                $specialtyList = $auxList;
289
            }
290
            foreach ($specialtyList as $specialty) {
291
                $specialtyOrigin = $specialty->ID_ESPECIALIDAD->ORIGEN_ESPECIALIDAD;
292
                $professionalArea = $specialty->ID_ESPECIALIDAD->AREA_PROFESIONAL;
293
                $specialtyCode = $specialty->ID_ESPECIALIDAD->CODIGO_ESPECIALIDAD;
294
                $centerOrigin = $specialty->CENTRO_IMPARTICION->ORIGEN_CENTRO;
295
                $centerCode = $specialty->CENTRO_IMPARTICION->CODIGO_CENTRO;
296
                $startDate = $specialty->FECHA_INICIO;
297
                $endDate = $specialty->FECHA_FIN;
298
299
                $modalityImpartition = $specialty->MODALIDAD_IMPARTICION;
300
                $classroomHours = $specialty->DATOS_DURACION->HORAS_PRESENCIAL;
301
                $distanceHours = $specialty->DATOS_DURACION->HORAS_TELEFORMACION;
302
303
                $morningParticipansNumber = null;
304
                $morningAccessNumber = null;
305
                $morningTotalDuration = null;
306
307
                if (isset($specialty->USO->HORARIO_MANANA)) {
308
                    $morningParticipansNumber = $specialty->USO->HORARIO_MANANA->NUM_PARTICIPANTES;
309
                    $morningAccessNumber = $specialty->USO->HORARIO_MANANA->NUMERO_ACCESOS;
310
                    $morningTotalDuration = $specialty->USO->HORARIO_MANANA->DURACION_TOTAL;
311
                }
312
313
                $afternoonParticipantNumber = null;
314
                $afternoonAccessNumber = null;
315
                $afternoonTotalDuration = null;
316
317
                if (isset($specialty->USO->HORARIO_TARDE)) {
318
                    $afternoonParticipantNumber = $specialty->USO->HORARIO_TARDE->NUM_PARTICIPANTES;
319
                    $afternoonAccessNumber = $specialty->USO->HORARIO_TARDE->NUMERO_ACCESOS;
320
                    $afternoonTotalDuration = $specialty->USO->HORARIO_TARDE->DURACION_TOTAL;
321
                }
322
323
                $nightParticipantsNumber = null;
324
                $nightAccessNumber = null;
325
                $nightTotalDuration = null;
326
327
                if (isset($specialty->USO->HORARIO_NOCHE)) {
328
                    $nightParticipantsNumber = $specialty->USO->HORARIO_NOCHE->NUM_PARTICIPANTES;
329
                    $nightAccessNumber = $specialty->USO->HORARIO_NOCHE->NUMERO_ACCESOS;
330
                    $nightTotalDuration = $specialty->USO->HORARIO_NOCHE->DURACION_TOTAL;
331
                }
332
333
                $attendeesCount = null;
334
                $learningActivityCount = null;
335
                $attemptCount = null;
336
                $evaluationActivityCount = null;
337
338
                if (isset($specialty->USO->SEGUIMIENTO_EVALUACION)) {
339
                    $attendeesCount = $specialty->USO->SEGUIMIENTO_EVALUACION->NUM_PARTICIPANTES;
340
                    $learningActivityCount = $specialty->USO->SEGUIMIENTO_EVALUACION->NUMERO_ACTIVIDADES_APRENDIZAJE;
341
                    $attemptCount = $specialty->USO->SEGUIMIENTO_EVALUACION->NUMERO_INTENTOS;
342
                    $evaluationActivityCount = $specialty->USO->SEGUIMIENTO_EVALUACION->NUMERO_ACTIVIDADES_EVALUACION;
343
                }
344
345
                $startDate = self::fixDate($startDate);
346
                $endDate = self::fixDate($endDate);
347
348
                $params = [
349
                    'action_id' => $actionId,
350
                    'specialty_origin' => $specialtyOrigin,
351
                    'professional_area' => $professionalArea,
352
                    'specialty_code' =>$specialtyCode,
353
                    'center_origin' => $centerOrigin,
354
                    'center_code' => $centerCode,
355
                    'start_date' => $startDate,
356
                    'end_date' => $endDate,
357
                    'modality_impartition' => $modalityImpartition,
358
                    'classroom_hours' => $classroomHours,
359
                    'distance_hours' => $distanceHours,
360
                    'mornings_participants_number' => $morningParticipansNumber,
361
                    'mornings_access_number' => $morningAccessNumber,
362
                    'morning_total_duration' => $morningTotalDuration,
363
                    'afternoon_participants_number' => $afternoonParticipantNumber,
364
                    'afternoon_access_number' => $afternoonAccessNumber,
365
                    'afternoon_total_duration' => $afternoonTotalDuration,
366
                    'night_participants_number' => $nightParticipantsNumber,
367
                    'night_access_number' => $nightAccessNumber,
368
                    'night_total_duration' => $nightTotalDuration,
369
                    'attendees_count' => $attendeesCount,
370
                    'learning_activity_count' => $learningActivityCount,
371
                    'attempt_count' => $attemptCount,
372
                    'evaluation_activity_count' => $evaluationActivityCount
373
                ];
374
375
                $specialtyId = Database::insert($table, $params);
376
377
                if (empty($specialtyId)) {
378
                    return [
379
                        "RESPUESTA_OBT_ACCION" => [
380
                            "CODIGO_RETORNO" => "-1",
381
                            "ETIQUETA_ERROR" => "Problema base de datos - insertando datos de especialidad de la accion",
382
                            "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
383
                        ]
384
                    ];
385
                }
386
387
388
                if ($specialtyId) {
389
                    $tableSpecialtyClassroom = Database::get_main_table('plugin_sepe_specialty_classroom');
390
                    $tableCenters = Database::get_main_table('plugin_sepe_centers');
391
                    foreach ($specialty->CENTROS_SESIONES_PRESENCIALES->CENTRO_PRESENCIAL as $centroList) {
392
                        if (!is_array($centroList)) {
393
                            $auxList = [];
394
                            $auxList[] = $centroList;
395
                            $centroList = $auxList;
396
                        }
397
                        foreach ($centroList as $centro) {
398
                            $centerOrigin = $centro->ORIGEN_CENTRO;
399
                            $centerCode = $centro->CODIGO_CENTRO;
400
                            $sql = "SELECT id FROM $tableCenters 
401
                                    WHERE center_origin='".$centerOrigin."' AND center_code='".$centerCode."';";
402
                            $res = Database::query($sql);
403
                            if (Database::num_rows($res) > 0) {
404
                                $aux_row = Database::fetch_assoc($res);
405
                                $centerId = $aux_row['id'];
406
                            } else {
407
                                $sql = "INSERT INTO $tableCenters (center_origin, center_code)
408
                                        VALUES ('".$centerOrigin."','".$centerCode."');";
409
                                Database::query($sql);
410
                                $centerId = Database::insert_id();
411
                            }
412
                            $sql = "INSERT INTO $tableSpecialtyClassroom (specialty_id, center_id)
413
                                    VALUES ('".$specialtyId."','".$centerId."')";
414
                            Database::query($sql);
415
                            $id = Database::insert_id();
416
417
                            if (empty($id)) {
418
                                return [
419
                                    "RESPUESTA_OBT_ACCION" => [
420
                                        "CODIGO_RETORNO" => "-1",
421
                                        "ETIQUETA_ERROR" => "Problema base de datos - insertando centro presenciales",
422
                                        "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
423
                                    ]
424
                                ];
425
                            }
426
                        }
427
                    }
428
429
                    $tableTutors = Database::get_main_table('plugin_sepe_tutors');
430
                    $tableSpecialityTutors = Database::get_main_table('plugin_sepe_specialty_tutors');
431
432
                    if (!empty($specialty->TUTORES_FORMADORES)) {
433
                        foreach ($specialty->TUTORES_FORMADORES as $tutorList) {
434
                            if (!is_array($tutorList)) {
435
                                $auxList = [];
436
                                $auxList[] = $tutorList;
437
                                $tutorList = $auxList;
438
                            }
439
                            foreach ($tutorList as $tutor) {
440
                                $documentType = $tutor->ID_TUTOR->TIPO_DOCUMENTO;
441
                                $documentNumber = $tutor->ID_TUTOR->NUM_DOCUMENTO;
442
                                $documentLetter = $tutor->ID_TUTOR->LETRA_NIF;
443
                                $tutorAccreditation = $tutor->ACREDITACION_TUTOR;
444
                                $professionalExperience = $tutor->EXPERIENCIA_PROFESIONAL;
445
                                $teachingCompetence = $tutor->COMPETENCIA_DOCENTE;
446
                                $experienceTeleforming = $tutor->EXPERIENCIA_MODALIDAD_TELEFORMACION;
447
                                $trainingTeleforming = $tutor->FORMACION_MODALIDAD_TELEFORMACION;
448
449
                                /* check tutor not exists */
450
                                $sql = "SELECT id FROM $tableTutors WHERE 
451
                                          document_type='".$documentType."' AND 
452
                                          document_number='".$documentNumber."' AND 
453
                                          document_letter='".$documentLetter."';";
454
                                $res = Database::query($sql);
455
                                if (Database::num_rows($res) > 0) {
456
                                    $aux_row = Database::fetch_assoc($res);
457
                                    $tutorId = $aux_row['id'];
458
                                } else {
459
                                    $sql = "INSERT INTO $tableTutors (document_type, document_number, document_letter)
460
                                        VALUES ('".$documentType."','".$documentNumber."','".$documentLetter."');";
461
                                    Database::query($sql);
462
                                    $tutorId = Database::insert_id();
463
                                }
464
                                if (empty($tutorId)) {
465
                                    return [
466
                                        "RESPUESTA_OBT_ACCION" => [
467
                                            "CODIGO_RETORNO" => "-1",
468
                                            "ETIQUETA_ERROR" => "Problema base de datos - insertando tutores",
469
                                            "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
470
                                        ]
471
                                    ];
472
                                }
473
                                $sql = "INSERT INTO $tableSpecialityTutors (specialty_id, tutor_id, tutor_accreditation, professional_experience, teaching_competence, experience_teleforming, training_teleforming)
474
                                        VALUES ('".$specialtyId."','".$tutorId."','".$tutorAccreditation."','".$professionalExperience."','".$teachingCompetence."','".$experienceTeleforming."','".$trainingTeleforming."');";
475
                                Database::query($sql);
476
                            }
477
                        }
478
                    }
479
                }
480
            }
481
        }
482
        // DATOS PARTICIPANTES
483
        $tableParticipants = Database::get_main_table('plugin_sepe_participants');
484
        $tableTutorsCompany = Database::get_main_table('plugin_sepe_tutors_company');
485
        $participants = $crearAccionInput->ACCION_FORMATIVA->PARTICIPANTES;
486
        foreach ($participants as $participantList) {
487
            if (!is_array($participantList)) {
488
                $auxList = [];
489
                $auxList[] = $participantList;
490
                $participantList = $auxList;
491
            }
492
            foreach ($participantList as $participant) {
493
                $documentType = $participant->ID_PARTICIPANTE->TIPO_DOCUMENTO;
494
                $documentNumber = $participant->ID_PARTICIPANTE->NUM_DOCUMENTO;
495
                $documentLetter = $participant->ID_PARTICIPANTE->LETRA_NIF;
496
                $keyCompetence = $participant->INDICADOR_COMPETENCIAS_CLAVE;
497
                $contractId = null;
498
                $companyFiscalNumber = null;
499
                $documentTypeCompany = null;
500
                $documentNumberCompany = null;
501
                $documentLetterCompany = null;
502
                $documentTypeTraining = null;
503
                $documentNumberTraining = null;
504
                $documentLetterTraining = null;
505
                $tutorIdCompany = null;
506
                $tutorIdTraining = null;
507
508
                if (isset($participant->CONTRATO_FORMACION)) {
509
                    $contractId = isset($participant->CONTRATO_FORMACION->ID_CONTRATO_CFA) ? $participant->CONTRATO_FORMACION->ID_CONTRATO_CFA : null;
510
                    $companyFiscalNumber = isset($participant->CONTRATO_FORMACION->CIF_EMPRESA) ? $participant->CONTRATO_FORMACION->CIF_EMPRESA : null;
511
                    $documentTypeCompany = isset($participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->TIPO_DOCUMENTO) ? $participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->TIPO_DOCUMENTO : null;
512
                    $documentNumberCompany = isset($participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->NUM_DOCUMENTO) ? $participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->NUM_DOCUMENTO : null;
513
                    $documentLetterCompany = isset($participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->LETRA_NIF) ? $participant->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->LETRA_NIF : null;
514
                    if (!empty($documentTypeCompany) || !empty($documentNumberCompany) || !empty($documentLetterCompany)) {
515
                        $tmp_e = Database::query('SELECT id FROM '.$tableTutorsCompany.' WHERE document_type="'.$documentTypeCompany.'" AND document_number="'.$documentNumberCompany.'" AND document_letter="'.$documentLetterCompany.'";');
516
                        if (Database::num_rows($tmp_e) > 0) {
517
                            $row_tmp = Database::fetch_assoc($tmp_e);
518
                            $tutorIdCompany = $row_tmp['id'];
519
                            Database::query("UPDATE $tableTutorsCompany SET company='1' WHERE id='".$tutorIdCompany."'");
520
                        } else {
521
                            $params_tmp = [
522
                                'document_type' => $documentTypeCompany,
523
                                'document_number' => $documentNumberCompany,
524
                                'document_letter' => $documentLetterCompany,
525
                                'company' => '1'
526
                            ];
527
                            $tutorIdCompany = Database::insert($tableTutorsCompany, $params_tmp);
528
                        }
529
                    }
530
531
                    $documentTypeTraining = isset($participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->TIPO_DOCUMENTO) ? $participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->TIPO_DOCUMENTO : null;
532
                    $documentNumberTraining = isset($participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->NUM_DOCUMENTO) ? $participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->NUM_DOCUMENTO : null;
533
                    $documentLetterTraining = isset($participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->LETRA_NIF) ? $participant->CONTRATO_FORMACION->ID_TUTOR_FORMACION->LETRA_NIF : null;
534
                    if (!empty($documentTypeTraining) || !empty($documentNumberTraining) || !empty($documentLetterTraining)) {
535
                        $tmp_f = Database::query(
536
                            '
537
                            SELECT id FROM '.$tableTutorsCompany.' 
538
                            WHERE
539
                                document_type="'.$documentTypeTraining.'" AND 
540
                                document_number="'.$documentNumberTraining.'" AND 
541
                                document_letter="'.$documentLetterTraining.'";'
542
                        );
543
                        if (Database::num_rows($tmp_f) > 0) {
544
                            $row_tmp = Database::fetch_assoc($tmp_f);
545
                            $tutorIdTraining = $row_tmp['id'];
546
                            Database::query("UPDATE $tableTutorsCompany SET training='1' WHERE id='".$tutorIdTraining."'");
547
                        } else {
548
                            $params_tmp = [
549
                                'document_type' => $documentTypeTraining,
550
                                'document_number' => $documentNumberTraining,
551
                                'document_letter' => $documentLetterTraining,
552
                                'training' => '1'
553
                            ];
554
                            $tutorIdTraining = Database::insert($tableTutorsCompany, $params_tmp);
555
                        }
556
                    }
557
                }
558
559
                $params = [
560
                    'action_id' => $actionId,
561
                    'document_type' => $documentType,
562
                    'document_number' => $documentNumber,
563
                    'document_letter' => $documentLetter,
564
                    'key_competence' => $keyCompetence,
565
                    'contract_id' => $contractId,
566
                    'company_fiscal_number' => $companyFiscalNumber,
567
                    'company_tutor_id' => $tutorIdCompany,
568
                    'training_tutor_id' => $tutorIdTraining
569
                ];
570
                $participantId = Database::insert($tableParticipants, $params);
571
                if (empty($participantId)) {
572
                    return [
573
                        "RESPUESTA_OBT_ACCION" => [
574
                            "CODIGO_RETORNO" => "-1",
575
                            "ETIQUETA_ERROR" => "Problema base de datos - insertando participantes",
576
                            "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
577
                        ]
578
                    ];
579
                }
580
581
                $participantId = Database::insert_id();
582
583
                foreach ($participant->ESPECIALIDADES_PARTICIPANTE as $valueList) {
584
                    if (!is_array($participantList)) {
585
                        $auxList = [];
586
                        $auxList[] = $valueList;
587
                        $valueList = $auxList;
588
                    }
589
                    foreach ($valueList as $value) {
590
                        $specialtyOrigin = null;
591
                        $professionalArea = null;
592
                        $specialtyCode = null;
593
594
                        if (isset($value->ID_ESPECIALIDAD)) {
595
                            $specialtyOrigin = $value->ID_ESPECIALIDAD->ORIGEN_ESPECIALIDAD;
596
                            $professionalArea = $value->ID_ESPECIALIDAD->AREA_PROFESIONAL;
597
                            $specialtyCode = $value->ID_ESPECIALIDAD->CODIGO_ESPECIALIDAD;
598
                        }
599
600
                        $registrationDate = $value->FECHA_ALTA;
601
                        $leavingDate = $value->FECHA_BAJA;
602
603
                        $centerOrigin = null;
604
                        $centerCode = null;
605
                        $startDate = null;
606
                        $endDate = null;
607
608
                        if (!empty($value->EVALUACION_FINAL)) {
609
                            $startDate = isset($value->EVALUACION_FINAL->FECHA_INICIO) ? $value->EVALUACION_FINAL->FECHA_INICIO : null;
610
                            $endDate = isset($value->EVALUACION_FINAL->FECHA_FIN) ? $value->EVALUACION_FINAL->FECHA_FIN : null;
611
                            if (!empty($value->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION)) {
612
                                $centerOrigin = $value->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION->ORIGEN_CENTRO;
613
                                $centerCode = $value->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION->CODIGO_CENTRO;
614
                            }
615
                        }
616
617
                        $finalResult = null;
618
                        $finalQualification = null;
619
                        $finalScore = null;
620
621
                        if (isset($value->RESULTADOS)) {
622
                            $finalResult = isset($value->RESULTADOS->RESULTADO_FINAL) ? $value->RESULTADOS->RESULTADO_FINAL : null;
623
                            $finalQualification = isset($value->RESULTADOS->CALIFICACION_FINAL) ? $value->RESULTADOS->CALIFICACION_FINAL : null;
624
                            $finalScore = isset($value->RESULTADOS->PUNTUACION_FINAL) ? $value->RESULTADOS->PUNTUACION_FINAL : null;
625
                        }
626
627
                        $registrationDate = self::fixDate($registrationDate);
628
                        $leavingDate = self::fixDate($leavingDate);
629
630
                        $startDate = self::fixDate($startDate);
631
                        $endDate = self::fixDate($endDate);
632
633
                        $table_aux = Database::get_main_table('plugin_sepe_participants_specialty');
634
                        $sql = "INSERT INTO $table_aux (participant_id,specialty_origin,professional_area,specialty_code,registration_date,leaving_date,center_origin,center_code,start_date,end_date,final_result,final_qualification,final_score)
635
                                VALUES ('".$participantId."','".$specialtyOrigin."','".$professionalArea."','".$specialtyCode."','".$registrationDate."','".$leavingDate."','".$centerOrigin."','".$centerCode."','".$startDate."','".$endDate."','".$finalResult."','".$finalQualification."','".$finalScore."');";
636
                        Database::query($sql);
637
                        $participantSpecialtyId = Database::insert_id();
638
                        if (empty($participantSpecialtyId)) {
639
                            return [
640
                                "RESPUESTA_OBT_ACCION" => [
641
                                    "CODIGO_RETORNO" => "-1",
642
                                    "ETIQUETA_ERROR" => "Problema base de datos - insertando especialidad participante",
643
                                    "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
644
                                ]
645
                            ];
646
                        }
647
648
                        foreach ($value->TUTORIAS_PRESENCIALES as $tutorialList) {
649
                            if (!is_array($tutorialList)) {
650
                                $auxList = [];
651
                                $auxList[] = $tutorialList;
652
                                $tutorialList = $auxList;
653
                            }
654
                            foreach ($tutorialList as $tutorial) {
655
                                $centerOrigin = $tutorial->CENTRO_PRESENCIAL_TUTORIA->ORIGEN_CENTRO;
656
                                $centerCode = $tutorial->CENTRO_PRESENCIAL_TUTORIA->CODIGO_CENTRO;
657
                                $startDate = $tutorial->FECHA_INICIO;
658
                                $endDate = $tutorial->FECHA_FIN;
659
660
                                $startDate = self::fixDate($startDate);
661
                                $endDate = self::fixDate($endDate);
662
663
                                $table_aux2 = Database::get_main_table('plugin_sepe_participants_specialty_tutorials');
664
                                $sql = "INSERT INTO $table_aux2 (participant_specialty_id,center_origin,center_code,start_date,end_date)
665
                                        VALUES ('".$participantSpecialtyId."','".$centerOrigin."','".$centerCode."','".$startDate."','".$endDate."');";
666
                                $rs = Database::query($sql);
667
                                if (!$rs) {
668
                                    return [
669
                                        "RESPUESTA_OBT_ACCION" => [
670
                                            "CODIGO_RETORNO" => "-1",
671
                                            "ETIQUETA_ERROR" => "Problema base de datos - insertando tutorias presenciales participante",
672
                                            "ACCION_FORMATIVA" => $crearAccionInputArray['ACCION_FORMATIVA']
673
                                        ]
674
                                    ];
675
                                }
676
                            }
677
                        }
678
                    }
679
                }
680
            }
681
        }
682
683
        $obtenerAccionInput = new stdClass();
684
        $obtenerAccionInput->ID_ACCION = new stdClass();
685
        $obtenerAccionInput->ID_ACCION->ORIGEN_ACCION = $actionOrigin;
686
        $obtenerAccionInput->ID_ACCION->CODIGO_ACCION = $actionCode;
687
688
        $result = self::obtenerAccion($obtenerAccionInput);
689
        return $result;
690
    }
691
692
    public function obtenerAccion($obtenerAccionInput)
693
    {
694
        /* Tracking Log */
695
        $tableLog = Database::get_main_table('plugin_sepe_log');
696
        $paramsLog = [
697
            'ip' => $_SERVER['REMOTE_ADDR'],
698
            'action' => "obtenerAccion",
699
            'fecha' => date("Y-m-d H:i:s")
700
        ];
701
        Database::insert($tableLog, $paramsLog);
702
703
        /* End tracking log */
704
705
        $actionOrigin = $obtenerAccionInput->ID_ACCION->ORIGEN_ACCION;
706
        $actionCode = $obtenerAccionInput->ID_ACCION->CODIGO_ACCION;
707
708
        if (empty($actionOrigin) || empty($actionCode)) {
709
            return [
710
                "RESPUESTA_OBT_ACCION" => [
711
                    "CODIGO_RETORNO" => "2",
712
                    "ETIQUETA_ERROR" => "Error en parametro",
713
                    "ACCION_FORMATIVA" => ""
714
                ]
715
            ];
716
        }
717
718
        $table = Database::get_main_table('plugin_sepe_actions');
719
        $tableCenters = Database::get_main_table('plugin_sepe_centers');
720
        $classRoomTable = Database::get_main_table('plugin_sepe_specialty_classroom');
721
        $tutorTable = Database::get_main_table('plugin_sepe_tutors');
722
        $specialityTutorTable = Database::get_main_table('plugin_sepe_specialty_tutors');
723
        $participantsSpecialityTable = Database::get_main_table('plugin_sepe_participants_specialty');
724
        $participantsSpecialityTutorialsTable = Database::get_main_table('plugin_sepe_participants_specialty_tutorials');
725
        $tableTutorsCompany = Database::get_main_table('plugin_sepe_tutors_company');
726
727
        // Comprobamos si existen datos almacenados previamente
728
        $sql = "SELECT *
729
                FROM $table
730
                WHERE
731
                    action_origin='".$actionOrigin."' AND
732
                    action_code='".$actionCode."';";
733
        $rs = Database::query($sql);
734
        if (Database::num_rows($rs) > 0) {
735
            $row = Database::fetch_assoc($rs);
736
            $mainSpecialty = [
737
                'ORIGEN_ESPECIALIDAD' => $row['specialty_origin'],
738
                'AREA_PROFESIONAL' => $row['professional_area'],
739
                'CODIGO_ESPECIALIDAD' => $row['specialty_code']
740
            ];
741
            $actionDescription = [
742
                'DENOMINACION_ACCION' => $row['action_name'],
743
                'INFORMACION_GENERAL' => $row['global_info'],
744
                'HORARIOS' => $row['schedule'],
745
                'REQUISITOS' => $row['requirements'],
746
                'CONTACTO_ACCION' => $row['contact_action']
747
            ];
748
749
            $tableSpeciality = Database::get_main_table('plugin_sepe_specialty');
750
            $tableParticipants = Database::get_main_table('plugin_sepe_participants');
751
            $sql = "SELECT * FROM $tableSpeciality
752
                    WHERE action_id ='".$row['id']."'";
753
            $rs = Database::query($sql);
754
            $specialty = [];
755
            if (Database::num_rows($rs) > 0) {
756
                while ($aux = Database::fetch_assoc($rs)) {
757
                    $specialtyId = $aux['id'];
758
                    $sql = "SELECT * FROM $classRoomTable
759
                            WHERE specialty_id='".$specialtyId."'";
760
                    $resultClassroom = Database::query($sql);
761
                    if (Database::num_rows($resultClassroom) === 0) {
762
                        return [
763
                            "RESPUESTA_OBT_ACCION" => [
764
                                "CODIGO_RETORNO" => "-1",
765
                                "ETIQUETA_ERROR" => "Problema base de datos - consulta de centros presenciales",
766
                                "ACCION_FORMATIVA" => ''
767
                            ]
768
                        ];
769
                    }
770
771
                    $classroomCenterList = new ArrayObject();
772
                    while ($tmp = Database::fetch_assoc($resultClassroom)) {
773
                        $sql = "SELECT * FROM $tableCenters WHERE id='".$tmp['center_id']."';";
774
                        $resultCenter = Database::query($sql);
775
                        $auxCenter = Database::fetch_assoc($resultCenter);
776
777
                        $classroomCenter = new stdClass();
778
                        $classroomCenter->ORIGEN_CENTRO = $auxCenter['center_origin'];
779
                        $classroomCenter->CODIGO_CENTRO = $auxCenter['center_code'];
780
                        $classroomCenter = new SoapVar(
781
                            $classroomCenter,
782
                            SOAP_ENC_OBJECT,
783
                            null,
784
                            null,
785
                            'CENTRO_PRESENCIAL'
786
                        );
787
                        $classroomCenterList->append($classroomCenter);
788
                    }
789
                    $sql = "SELECT * FROM $specialityTutorTable
790
                            WHERE specialty_id='".$specialtyId."'";
791
                    $resultSpecialtyTutor = Database::query($sql);
792
793
                    $trainingTutors = new ArrayObject();
794
                    if (Database::num_rows($resultSpecialtyTutor)) {
795
                        while ($tmp_aux = Database::fetch_assoc($resultSpecialtyTutor)) {
796
                            $sql = "SELECT * FROM $tutorTable
797
                                    WHERE id='".$tmp_aux['tutor_id']."'
798
                                    LIMIT 1";
799
                            $rs_tutor = Database::query($sql);
800
                            if (Database::num_rows($rs_tutor)) {
801
                                $tmp = Database::fetch_assoc($rs_tutor);
802
803
                                $obj = new stdClass();
804
                                $obj->ID_TUTOR = new stdClass();
805
                                $obj->ID_TUTOR->TIPO_DOCUMENTO = $tmp['document_type'];
806
                                $obj->ID_TUTOR->NUM_DOCUMENTO = $tmp['document_number'];
807
                                $obj->ID_TUTOR->LETRA_NIF = $tmp['document_letter'];
808
809
                                $obj->ACREDITACION_TUTOR = $tmp_aux['tutor_accreditation'];
810
                                $obj->EXPERIENCIA_PROFESIONAL = $tmp_aux['professional_experience'];
811
                                $obj->COMPETENCIA_DOCENTE = $tmp_aux['teaching_competence'];
812
                                $obj->EXPERIENCIA_MODALIDAD_TELEFORMACION = $tmp_aux['experience_teleforming'];
813
                                $obj->FORMACION_MODALIDAD_TELEFORMACION = $tmp_aux['training_teleforming'];
814
815
                                $obj = new SoapVar($obj, SOAP_ENC_OBJECT, null, null, 'TUTOR_FORMADOR');
816
                                $trainingTutors->append($obj);
817
                            }
818
                        }
819
                    }
820
821
                    $params = new ArrayObject();
822
                    $idEspecialidad = new stdClass();
823
                    $idEspecialidad->ORIGEN_ESPECIALIDAD = $aux['specialty_origin'];
824
                    $idEspecialidad->AREA_PROFESIONAL = $aux['professional_area'];
825
                    $idEspecialidad->CODIGO_ESPECIALIDAD = $aux['specialty_code'];
826
827
                    $params[0] = new SoapVar(
828
                        $idEspecialidad,
829
                        SOAP_ENC_OBJECT,
830
                        null,
831
                        null,
832
                        'ID_ESPECIALIDAD',
833
                        null
834
                    );
835
836
                    $centroImparticion = new stdClass();
837
                    $centroImparticion->ORIGEN_CENTRO = $aux['center_origin'];
838
                    $centroImparticion->CODIGO_CENTRO = $aux['center_code'];
839
840
                    $params[1] = new SoapVar(
841
                        $centroImparticion,
842
                        SOAP_ENC_OBJECT,
843
                        null,
844
                        null,
845
                        'CENTRO_IMPARTICION',
846
                        null
847
                    );
848
                    $params[2] = new SoapVar(
849
                        self::undoFixDate($aux['start_date']),
850
                        XSD_STRING,
851
                        null,
852
                        null,
853
                        'FECHA_INICIO',
854
                        null
855
                    );
856
                    $params[3] = new SoapVar(
857
                        self::undoFixDate($aux['end_date']),
858
                        XSD_STRING,
859
                        null,
860
                        null,
861
                        'FECHA_FIN',
862
                        null
863
                    );
864
                    $params[4] = new SoapVar(
865
                        $aux['modality_impartition'],
866
                        XSD_STRING,
867
                        null,
868
                        null,
869
                        'MODALIDAD_IMPARTICION',
870
                        null
871
                    );
872
873
                    $obj = new stdClass();
874
                    $obj->HORAS_PRESENCIAL = $aux['classroom_hours'];
875
                    $obj->HORAS_TELEFORMACION = $aux['distance_hours'];
876
877
                    $params[5] = new SoapVar(
878
                        $obj,
879
                        SOAP_ENC_OBJECT,
880
                        null,
881
                        null,
882
                        'DATOS_DURACION',
883
                        null
884
                    );
885
                    $params[6] = new SoapVar(
886
                        $classroomCenterList,
887
                        SOAP_ENC_OBJECT,
888
                        null,
889
                        null,
890
                        'CENTROS_SESIONES_PRESENCIALES',
891
                        null
892
                    );
893
                    $params[7] = new SoapVar(
894
                        $trainingTutors,
895
                        SOAP_ENC_OBJECT,
896
                        null,
897
                        null,
898
                        'TUTORES_FORMADORES',
899
                        null
900
                    );
901
902
                    $obj = new stdClass();
903
904
                    if (!empty($aux['mornings_participants_number']) ||
905
                        !empty($aux['mornings_access_number']) ||
906
                        !empty($aux['morning_total_duration'])
907
                    ) {
908
                        $obj->HORARIO_MANANA = new stdClass();
909
                        $obj->HORARIO_MANANA->NUM_PARTICIPANTES = $aux['mornings_participants_number'];
910
                        $obj->HORARIO_MANANA->NUMERO_ACCESOS = $aux['mornings_access_number'];
911
                        $obj->HORARIO_MANANA->DURACION_TOTAL = $aux['morning_total_duration'];
912
                    }
913
914
                    if (!empty($aux['afternoon_participants_number']) ||
915
                        !empty($aux['afternoon_access_number']) ||
916
                        !empty($aux['afternoon_total_duration'])
917
                    ) {
918
                        $obj->HORARIO_TARDE = new stdClass();
919
                        $obj->HORARIO_TARDE->NUM_PARTICIPANTES = $aux['afternoon_participants_number'];
920
                        $obj->HORARIO_TARDE->NUMERO_ACCESOS = $aux['afternoon_access_number'];
921
                        $obj->HORARIO_TARDE->DURACION_TOTAL = $aux['afternoon_total_duration'];
922
                    }
923
924
                    if (!empty($aux['night_participants_number']) ||
925
                        !empty($aux['night_access_number']) ||
926
                        !empty($aux['night_total_duration'])
927
                    ) {
928
                        $obj->HORARIO_NOCHE = new stdClass();
929
                        $obj->HORARIO_NOCHE->NUM_PARTICIPANTES = $aux['night_participants_number'];
930
                        $obj->HORARIO_NOCHE->NUMERO_ACCESOS = $aux['night_access_number'];
931
                        $obj->HORARIO_NOCHE->DURACION_TOTAL = $aux['night_total_duration'];
932
                    }
933
934
                    if (!empty($aux['attendees_count']) ||
935
                        !empty($aux['learning_activity_count']) ||
936
                        !empty($aux['attempt_count']) ||
937
                        !empty($aux['evaluation_activity_count'])
938
                    ) {
939
                        $obj->SEGUIMIENTO_EVALUACION = new stdClass();
940
                        $obj->SEGUIMIENTO_EVALUACION->NUM_PARTICIPANTES = $aux['attendees_count'];
941
                        $obj->SEGUIMIENTO_EVALUACION->NUMERO_ACTIVIDADES_APRENDIZAJE = $aux['learning_activity_count'];
942
                        $obj->SEGUIMIENTO_EVALUACION->NUMERO_INTENTOS = $aux['attempt_count'];
943
                        $obj->SEGUIMIENTO_EVALUACION->NUMERO_ACTIVIDADES_EVALUACION = $aux['evaluation_activity_count'];
944
                    }
945
946
                    $params[8] = new SoapVar(
947
                        $obj,
948
                        SOAP_ENC_OBJECT,
949
                        null,
950
                        null,
951
                        'USO',
952
                        null
953
                    );
954
                    $specialty[] = new SoapVar(
955
                        $params,
956
                        SOAP_ENC_OBJECT,
957
                        null,
958
                        null,
959
                        'ESPECIALIDAD'
960
                    );
961
                }
962
            } else {
963
                return [
964
                    "RESPUESTA_OBT_ACCION" => [
965
                        "CODIGO_RETORNO"=>"-1",
966
                        "ETIQUETA_ERROR"=>"Problema base de datos - consulta especialidad de accion",
967
                        "ACCION_FORMATIVA"=>''
968
                    ]
969
                ];
970
            }
971
972
            $sql = "SELECT * FROM $tableParticipants
973
                    WHERE action_id ='".$row['id']."'";
974
            $resultParticipants = Database::query($sql);
975
            $specialtyMainParticipant = [];
976
            if (Database::num_rows($resultParticipants)) {
977
                while ($aux = Database::fetch_assoc($resultParticipants)) {
978
                    $participantId = $aux['id'];
979
980
                    $sql = "SELECT * FROM $participantsSpecialityTable
981
                            WHERE participant_id='".$participantId."'";
982
                    $resultParticipantSpecialty = Database::query($sql);
983
984
                    $namespace = null;
985
                    $specialtyParticipant = [];
986
                    while ($tmp = Database::fetch_assoc($resultParticipantSpecialty)) {
987
                        $participantSpecialtyId = $tmp['id'];
988
                        $sql = "SELECT * FROM $participantsSpecialityTutorialsTable
989
                                WHERE participant_specialty_id='".$participantSpecialtyId."'";
990
                        $resultTutorials = Database::query($sql);
991
                        $classroomTutorials = new ArrayObject();
992
993
                        while ($tmp2 = Database::fetch_assoc($resultTutorials)) {
994
                            $obj = new stdClass();
995
                            $obj->CENTRO_PRESENCIAL_TUTORIA = new stdClass();
996
                            $obj->CENTRO_PRESENCIAL_TUTORIA->ORIGEN_CENTRO = $tmp2['center_origin'];
997
                            $obj->CENTRO_PRESENCIAL_TUTORIA->CODIGO_CENTRO = $tmp2['center_code'];
998
                            $startDate = self::undoFixDate($tmp2['start_date']);
999
                            if (!empty($startDate)) {
1000
                                $obj->FECHA_INICIO = $startDate;
1001
                            }
1002
                            $endDate = self::undoFixDate($tmp2['end_date']);
1003
                            if (!empty($endDate)) {
1004
                                $obj->FECHA_FIN = $endDate;
1005
                            }
1006
1007
                            $obj = new SoapVar(
1008
                                $obj,
1009
                                SOAP_ENC_OBJECT,
1010
                                null,
1011
                                null,
1012
                                'TUTORIA_PRESENCIAL'
1013
                            );
1014
                            $classroomTutorials->append($obj);
1015
                        }
1016
1017
                        $obj = new stdClass();
1018
                        $obj->ID_ESPECIALIDAD = new stdClass();
1019
                        $obj->ID_ESPECIALIDAD->ORIGEN_ESPECIALIDAD = $tmp['specialty_origin'];
1020
                        $obj->ID_ESPECIALIDAD->AREA_PROFESIONAL = $tmp['professional_area'];
1021
                        $obj->ID_ESPECIALIDAD->CODIGO_ESPECIALIDAD = $tmp['specialty_code'];
1022
1023
                        $registrationDate = self::undoFixDate($tmp['registration_date']);
1024
1025
                        // @todo check which is correct send 0000/00/00 or empty
1026
                        if (!empty($registrationDate)) {
1027
                            $obj->FECHA_ALTA = $registrationDate;
1028
                        }
1029
1030
                        $leavingDate = self::undoFixDate($tmp['leaving_date']);
1031
                        if (!empty($leavingDate)) {
1032
                            $obj->FECHA_BAJA = $leavingDate;
1033
                        }
1034
1035
                        $obj->TUTORIAS_PRESENCIALES = new SoapVar(
1036
                            $classroomTutorials,
1037
                            SOAP_ENC_OBJECT,
1038
                            null,
1039
                            null,
1040
                            'TUTORIAS_PRESENCIALES',
1041
                            null
1042
                        );
1043
                        $obj->EVALUACION_FINAL = new stdClass();
1044
1045
                        if (!empty($tmp['center_origin']) && !empty($tmp['center_code'])) {
1046
                            $obj->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION = new stdClass();
1047
                            $obj->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION->ORIGEN_CENTRO = $tmp['center_origin'];
1048
                            $obj->EVALUACION_FINAL->CENTRO_PRESENCIAL_EVALUACION->CODIGO_CENTRO = $tmp['center_code'];
1049
                        }
1050
1051
                        $startDate = self::undoFixDate($tmp['start_date']);
1052
                        if (!empty($startDate)) {
1053
                            $obj->EVALUACION_FINAL->FECHA_INICIO = $startDate;
1054
                        }
1055
1056
                        $endDate = self::undoFixDate($tmp['end_date']);
1057
1058
                        if (!empty($endDate)) {
1059
                            $obj->EVALUACION_FINAL->FECHA_FIN = $endDate;
1060
                        }
1061
1062
                        $obj->RESULTADOS = new stdClass();
1063
1064
                        if (isset($tmp['final_result']) && $tmp['final_result'] != '') {
1065
                            $obj->RESULTADOS->RESULTADO_FINAL = $tmp['final_result'];
1066
                        }
1067
                        if (isset($tmp['final_qualification']) && $tmp['final_qualification'] != '') {
1068
                            $obj->RESULTADOS->CALIFICACION_FINAL = $tmp['final_qualification'];
1069
                        }
1070
1071
                        if (isset($tmp['final_score']) && $tmp['final_score'] != '') {
1072
                            $obj->RESULTADOS->PUNTUACION_FINAL = $tmp['final_score'];
1073
                        }
1074
                        $specialtyParticipant[] = new SoapVar(
1075
                            $obj,
1076
                            SOAP_ENC_OBJECT,
1077
                            null,
1078
                            null,
1079
                            'ESPECIALIDAD'
1080
                        );
1081
                    }
1082
1083
                    $params = new stdClass();
1084
                    $params->ID_PARTICIPANTE = new stdClass();
1085
                    $params->ID_PARTICIPANTE->TIPO_DOCUMENTO = $aux['document_type'];
1086
                    $params->ID_PARTICIPANTE->NUM_DOCUMENTO = $aux['document_number'];
1087
                    $params->ID_PARTICIPANTE->LETRA_NIF = $aux['document_letter'];
1088
                    $params->INDICADOR_COMPETENCIAS_CLAVE = $aux['key_competence'];
1089
1090
                    $params->CONTRATO_FORMACION = new stdClass();
1091
1092
                    if (!empty($aux['contract_id'])) {
1093
                        $params->CONTRATO_FORMACION->ID_CONTRATO_CFA = $aux['contract_id'];
1094
                    }
1095
1096
                    if (!empty($aux['company_fiscal_number'])) {
1097
                        $params->CONTRATO_FORMACION->CIF_EMPRESA = $aux['company_fiscal_number'];
1098
                    }
1099
1100
                    if (!empty($aux['company_tutor_id'])) {
1101
                        $resultCompany = Database::query("SELECT * FROM $tableTutorsCompany WHERE id='".$aux['company_tutor_id']."';");
1102
                        $auxCompany = Database::fetch_assoc($resultCompany);
1103
                        if (!empty($auxCompany['document_type']) ||
1104
                         !empty($auxCompany['document_number']) ||
1105
                         !empty($auxCompany['document_letter'])
1106
                            ) {
1107
                            $params->CONTRATO_FORMACION->ID_TUTOR_EMPRESA = new stdClass();
1108
                            $params->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->TIPO_DOCUMENTO = $auxCompany['document_type'];
1109
                            $params->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->NUM_DOCUMENTO = $auxCompany['document_number'];
1110
                            $params->CONTRATO_FORMACION->ID_TUTOR_EMPRESA->LETRA_NIF = $auxCompany['document_letter'];
1111
                        }
1112
                    }
1113
                    if (!empty($aux['training_tutor_id'])) {
1114
                        $resultTraining = Database::query("SELECT * FROM $tableTutorsCompany WHERE id='".$aux['training_tutor_id']."';");
1115
                        $auxTraining = Database::fetch_assoc($resultTraining);
1116
                        if (!empty($auxTraining['document_type']) ||
1117
                            !empty($auxTraining['document_number']) ||
1118
                            !empty($auxTraining['document_letter'])
1119
                        ) {
1120
                            $params->CONTRATO_FORMACION->ID_TUTOR_FORMACION = new stdClass();
1121
                            $params->CONTRATO_FORMACION->ID_TUTOR_FORMACION->TIPO_DOCUMENTO = $auxTraining['document_type'];
1122
                            $params->CONTRATO_FORMACION->ID_TUTOR_FORMACION->NUM_DOCUMENTO = $auxTraining['document_number'];
1123
                            $params->CONTRATO_FORMACION->ID_TUTOR_FORMACION->LETRA_NIF = $auxTraining['document_letter'];
1124
                        }
1125
                    }
1126
1127
1128
                    $params->ESPECIALIDADES_PARTICIPANTE = new SoapVar(
1129
                        $specialtyParticipant,
1130
                        SOAP_ENC_OBJECT,
1131
                        null,
1132
                        null,
1133
                        'ESPECIALIDADES_PARTICIPANTE'
1134
                    );
1135
                    $specialtyMainParticipant[] = new SoapVar(
1136
                        $params,
1137
                        SOAP_ENC_OBJECT,
1138
                        null,
1139
                        null,
1140
                        'PARTICIPANTE'
1141
                    );
1142
                }
1143
            }
1144
1145
            $result = new stdClass();
1146
1147
            $result->RESPUESTA_OBT_ACCION = new stdClass();
1148
            $result->RESPUESTA_OBT_ACCION->CODIGO_RETORNO = 0;
1149
            $result->RESPUESTA_OBT_ACCION->ETIQUETA_ERROR = 'Correcto';
1150
1151
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA = new stdClass();
1152
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->ID_ACCION = new stdClass();
1153
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->ID_ACCION->ORIGEN_ACCION = $actionOrigin;
1154
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->ID_ACCION->CODIGO_ACCION = $actionCode;
1155
1156
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->SITUACION = $row['situation'];
1157
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->ID_ESPECIALIDAD_PRINCIPAL = $mainSpecialty;
1158
1159
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->DURACION = $row['duration'];
1160
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->FECHA_INICIO = self::undoFixDate($row['start_date']);
1161
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->FECHA_FIN = self::undoFixDate($row['end_date']);
1162
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->IND_ITINERARIO_COMPLETO = $row['full_itinerary_indicator'];
1163
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->TIPO_FINANCIACION = $row['financing_type'];
1164
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->NUMERO_ASISTENTES = $row['attendees_count'];
1165
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->DESCRIPCION_ACCION = $actionDescription;
1166
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->ESPECIALIDADES_ACCION = $specialty;
1167
            $result->RESPUESTA_OBT_ACCION->ACCION_FORMATIVA->PARTICIPANTES = $specialtyMainParticipant;
1168
1169
            return $result;
1170
        } else {
1171
            // Existe la accion
1172
            return [
1173
                "RESPUESTA_OBT_ACCION" => [
1174
                    "CODIGO_RETORNO" => "1",
1175
                    "ETIQUETA_ERROR" => "Acción inexistente",
1176
                    "ACCION_FORMATIVA" => ""
1177
                ]
1178
            ];
1179
        }
1180
    }
1181
1182
    public function obtenerListaAcciones()
1183
    {
1184
        /* Tracking Log */
1185
        $tableLog = Database::get_main_table('plugin_sepe_log');
1186
        $paramsLog = [
1187
            'ip' => $_SERVER['REMOTE_ADDR'],
1188
            'action' => "obtenerListaAcciones",
1189
            'fecha' => date("Y-m-d H:i:s")
1190
        ];
1191
        Database::insert($tableLog, $paramsLog);
1192
        /* End tracking log */
1193
1194
        $table = Database::get_main_table('plugin_sepe_actions');
1195
1196
        $sql = "SELECT action_origin, action_code FROM $table";
1197
        $rs = Database::query($sql);
1198
1199
        if (!$rs) {
1200
            error_log('Problema base de datos ');
1201
            return [
1202
                "RESPUESTA_OBT_LISTA_ACCIONES" => [
1203
                    "CODIGO_RETORNO" => "-1",
1204
                    "ETIQUETA_ERROR" => "Problema base de datos - consulta acciones disponible",
1205
                    "LISTA_ACCIONES" => ''
1206
                ]
1207
            ];
1208
        }
1209
1210
        $list = [];
1211
        if (Database::num_rows($rs)) {
1212
            while ($row = Database::fetch_assoc($rs)) {
1213
                $params = new stdClass();
1214
                $params->ORIGEN_ACCION = $row['action_origin'];
1215
                $params->CODIGO_ACCION = $row['action_code'];
1216
1217
                $list[] = new SoapVar($params, SOAP_ENC_OBJECT);
1218
            }
1219
        }
1220
1221
        $result = new stdClass();
1222
        $result->RESPUESTA_OBT_LISTA_ACCIONES = new stdClass();
1223
        $result->RESPUESTA_OBT_LISTA_ACCIONES->CODIGO_RETORNO = 0;
1224
        $result->RESPUESTA_OBT_LISTA_ACCIONES->ETIQUETA_ERROR = 'Correcto';
1225
1226
        if (!empty($list)) {
1227
            $result->RESPUESTA_OBT_LISTA_ACCIONES->ID_ACCION = $list;
1228
        }
1229
1230
        return $result;
1231
    }
1232
1233
    public function eliminarAccion($eliminarAccionInput)
1234
    {
1235
        /* Tracking Log */
1236
        $tableLog = Database::get_main_table('plugin_sepe_log');
1237
        $paramsLog = [
1238
            'ip' => $_SERVER['REMOTE_ADDR'],
1239
            'action' => "eliminarAccion",
1240
            'fecha' => date("Y-m-d H:i:s")
1241
        ];
1242
        Database::insert($tableLog, $paramsLog);
1243
        /* End tracking log */
1244
1245
        $actionOrigin = $eliminarAccionInput->ID_ACCION->ORIGEN_ACCION;
1246
        $actionCode = $eliminarAccionInput->ID_ACCION->CODIGO_ACCION;
1247
1248
        if (empty($actionOrigin) || empty($actionCode)) {
1249
            return [
1250
                "RESPUESTA_ELIMINAR_ACCION" => [
1251
                    "CODIGO_RETORNO" => "2",
1252
                    "ETIQUETA_ERROR" => "Error en parametro"
1253
                ]
1254
            ];
1255
        }
1256
1257
        $table = Database::get_main_table('plugin_sepe_actions');
1258
        $sql = "DELETE FROM $table
1259
                WHERE action_origin='".$actionOrigin."' AND action_code='".$actionCode."';";
1260
1261
        $rs = Database::query($sql);
1262
        if (!$rs) {
1263
            return [
1264
                "RESPUESTA_ELIMINAR_ACCION" => [
1265
                    "CODIGO_RETORNO" => "-1",
1266
                    "ETIQUETA_ERROR" => "Problema base de datos - consulta acciones disponible"
1267
                ]
1268
            ];
1269
        }
1270
1271
        return [
1272
            "RESPUESTA_ELIMINAR_ACCION" => [
1273
                "CODIGO_RETORNO" => "0",
1274
                "ETIQUETA_ERROR" => "Correcto"
1275
            ]
1276
        ];
1277
    }
1278
1279
    // yyyy-mm-dd to dd/mm/yyyy
1280
    public static function undoFixDate($date)
1281
    {
1282
        if ($date == '0000-00-00' || empty($date)) {
1283
            return null;
1284
        }
1285
1286
        $date = explode('-', $date);
1287
        //
1288
        $date = $date[2].'/'.$date[1].'/'.$date[0];
1289
        return $date;
1290
    }
1291
1292
    // dd/mm/yyyy to yyyy-mm-dd
1293
    public static function fixDate($date)
1294
    {
1295
        if ($date == '00/00/0000' || empty($date)) {
1296
            return null;
1297
        }
1298
1299
        $date = explode('/', $date);
1300
        // Year-month-day
1301
        $date = $date[2].'-'.$date[1].'-'.$date[0];
1302
        return $date;
1303
    }
1304
1305
    protected function checkAuth()
1306
    {
1307
        if (!$this->authenticated) {
0 ignored issues
show
Bug Best Practice introduced by
The property authenticated does not exist on Sepe. Did you maybe forget to declare it?
Loading history...
1308
            error_log('403');
1309
        }
1310
    }
1311
}
1312