src/Entity/Curso.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\CursoRepository;
  4. use App\Validator\IsUrl;
  5. use DateTime;
  6. use DateTimeImmutable;
  7. use DateTimeInterface;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use Doctrine\Common\Collections\Collection;
  10. use Doctrine\DBAL\Types\Types;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. #[UniqueEntity('codigoCurso')]
  15. #[ORM\Entity(repositoryClass: CursoRepository::class)]
  16. class Curso
  17. {
  18. #[ORM\Id]
  19. #[ORM\GeneratedValue]
  20. #[ORM\Column(type: 'integer')]
  21. private $id;
  22. #[ORM\ManyToOne(targetEntity: NivelFormativo::class, inversedBy: 'accionesFormativas')]
  23. private ?NivelFormativo $nivelFormativo = null;
  24. #[Assert\NotBlank]
  25. #[Assert\Length(max: 255)]
  26. #[ORM\Column(type: 'string', length: 255)]
  27. private ?string $nombre = null;
  28. #[Assert\NotBlank]
  29. #[Assert\Length(max: 190)]
  30. #[ORM\Column(type: 'string', length: 190, unique: true)]
  31. private ?string $codigoCurso = null;
  32. #[Assert\Range(min: 2025, max: 2035)]
  33. #[ORM\Column(type: 'integer', nullable: true)]
  34. private ?int $anualidad = null;
  35. #[ORM\Column(type: 'boolean')]
  36. private bool $certificado = false;
  37. #[ORM\Column(type: 'boolean')]
  38. private bool $destacado = false;
  39. #[Assert\Positive]
  40. #[ORM\Column(type: 'integer', nullable: true)]
  41. private ?int $aforoTitulares = null;
  42. #[Assert\PositiveOrZero]
  43. #[ORM\Column(type: 'integer', nullable: true)]
  44. private ?int $aforoSuplentes = null;
  45. // Se guardará el valor en segundos por si se usa para cálculos.
  46. #[Assert\Positive]
  47. #[ORM\Column(type: 'integer', nullable: true)]
  48. private ?int $diasDuracion = null;
  49. // Se guardará el valor en segundos por si se usa para cálculos.
  50. #[Assert\Positive]
  51. #[ORM\Column(type: 'integer', nullable: true)]
  52. private ?int $horasDuracion = null;
  53. // Se guardará el valor en segundos por si se usa para cálculos.
  54. #[Assert\Positive]
  55. #[ORM\Column(type: 'integer', nullable: true)]
  56. private ?int $horasFormacionEspecifica = null;
  57. // Se guardará el valor en segundos por si se usa para cálculos.
  58. #[Assert\Positive]
  59. #[ORM\Column(type: 'integer', nullable: true)]
  60. private ?int $horasPracticaProfesional = null;
  61. // Se guardará el valor en segundos por si se usa para cálculos.
  62. #[Assert\Positive]
  63. #[ORM\Column(type: 'integer', nullable: true)]
  64. private ?int $horasFormacionTransversal = null;
  65. // Se guardará el valor en segundos por si se usa para cálculos.
  66. #[Assert\Positive]
  67. #[ORM\Column(type: 'integer', nullable: true)]
  68. private ?int $horasFormacionComplementaria = null;
  69. // Se guardará el valor en segundos por si se usa para cálculos.
  70. #[Assert\Positive]
  71. #[ORM\Column(type: 'integer', nullable: true)]
  72. private ?int $horasTutoriaEspecifica = null;
  73. // Se guardará el valor en segundos por si se usa para cálculos.
  74. #[Assert\Positive]
  75. #[ORM\Column(type: 'integer', nullable: true)]
  76. private ?int $horasTutoriaPractica = null;
  77. #[Assert\Positive]
  78. #[ORM\Column(type: 'float', nullable: true)]
  79. private ?float $ayudaMaxima = null;
  80. #[ORM\Column(type: 'text', nullable: true)]
  81. private ?string $descripcionCurso = null;
  82. #[ORM\Column(type: 'text', nullable: true)]
  83. private ?string $descripcionNivel = null;
  84. #[ORM\Column(type: 'boolean')]
  85. private bool $borrado = false;
  86. #[Assert\NotBlank]
  87. #[ORM\ManyToOne(targetEntity: AccionFormativa::class, inversedBy: 'cursos')]
  88. #[ORM\JoinColumn(nullable: false)]
  89. private ?AccionFormativa $accionFormativa = null;
  90. #[Assert\NotBlank]
  91. #[ORM\ManyToOne(targetEntity: Localidad::class, inversedBy: 'cursos')]
  92. #[ORM\JoinColumn(nullable: false)]
  93. private ?Localidad $localidad = null;
  94. #[ORM\Column(type: 'boolean')]
  95. private ?bool $visible = null;
  96. #[ORM\Column(type: 'datetime')]
  97. private DateTime|DateTimeInterface|null $fechaCreacion;
  98. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  99. private ?string $imagen = null;
  100. #[Assert\NotBlank]
  101. #[Assert\Regex(pattern: '/^[a-z0-9]+(?:-[a-z0-9]+)*$/')]
  102. #[ORM\Column(type: 'string', length: 255)]
  103. private ?string $slug = null;
  104. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  105. private ?string $seoTitle = null;
  106. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  107. private ?string $seoDescription = null;
  108. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  109. private ?string $seoKeywords = null;
  110. #[ORM\OneToMany(targetEntity: Solicitud::class, mappedBy: 'curso')]
  111. private Collection $solicitudes;
  112. #[Assert\Range(min: 1, max: 10)]
  113. #[ORM\Column(type: 'integer', nullable: true)]
  114. private ?int $edicion = null;
  115. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  116. private ?string $codigoCertificadoProfesionalJunta = null;
  117. #[Assert\Positive]
  118. #[ORM\Column(type: 'integer', nullable: true)]
  119. private ?int $numeroConvocatoria = null;
  120. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  121. private ?string $responsableFormacion = null;
  122. #[Assert\PositiveOrZero]
  123. #[ORM\Column(type: 'float', nullable: true)]
  124. private ?float $costeHoraFormacion = null;
  125. #[Assert\LessThan(propertyPath: 'fechaFinSolicitud')]
  126. #[ORM\Column(type: 'datetime', nullable: true)]
  127. private ?DateTimeInterface $fechaInicioSolicitud = null;
  128. #[Assert\GreaterThan(propertyPath: 'fechaInicioSolicitud')]
  129. #[ORM\Column(type: 'datetime', nullable: true)]
  130. private ?DateTimeInterface $fechaFinSolicitud = null;
  131. #[ORM\Column(type: 'date', nullable: true)]
  132. private ?DateTimeInterface $fechaInformeTecnicoSolicitudes = null;
  133. #[ORM\Column(type: 'date', nullable: true)]
  134. private ?DateTimeInterface $fechaFirmaResolucionSolicitudes = null;
  135. #[ORM\Column(type: 'date', nullable: true)]
  136. private ?DateTimeInterface $fechaPublicacionBopSolicitudes = null;
  137. #[Assert\Positive]
  138. #[ORM\Column(type: 'integer', nullable: true)]
  139. private ?int $numeroBopSolicitudes = null;
  140. /**
  141. * @IsUrl
  142. */
  143. #[ORM\Column(type: 'text', nullable: true)]
  144. private ?string $enlaceResolucionBopSolicitudes = null;
  145. #[Assert\LessThan(propertyPath: 'fechaFinCurso')]
  146. #[ORM\Column(type: 'datetime', nullable: true)]
  147. private ?DateTimeInterface $fechaInicioCurso = null;
  148. #[Assert\GreaterThan(propertyPath: 'fechaInicioCurso')]
  149. #[ORM\Column(type: 'datetime', nullable: true)]
  150. private ?DateTimeInterface $fechaFinCurso = null;
  151. #[ORM\Column(type: 'date', nullable: true)]
  152. private ?DateTimeInterface $fechaInicioFormacionEspecifica = null;
  153. #[ORM\Column(type: 'date', nullable: true)]
  154. private ?DateTimeInterface $fechaFinFormacionEspecifica = null;
  155. #[ORM\Column(type: 'date', nullable: true)]
  156. private ?DateTimeInterface $fechaInicioFormacionTransversal = null;
  157. #[ORM\Column(type: 'date', nullable: true)]
  158. private ?DateTimeInterface $fechaFinFormacionTransversal = null;
  159. #[ORM\Column(type: 'date', nullable: true)]
  160. private ?DateTimeInterface $fechaInicioFormacionComplementaria = null;
  161. #[ORM\Column(type: 'date', nullable: true)]
  162. private ?DateTimeInterface $fechaFinFormacionComplementaria = null;
  163. #[ORM\Column(type: 'date', nullable: true)]
  164. private ?DateTimeInterface $fechaInicioPracticas = null;
  165. #[ORM\Column(type: 'date', nullable: true)]
  166. private ?DateTimeInterface $fechaFinPracticas = null;
  167. #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
  168. private ?DateTimeInterface $fechaInicioTutoriaEspecifica = null;
  169. #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
  170. private ?DateTimeInterface $fechaFinTutoriaEspecifica = null;
  171. #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
  172. private ?DateTimeInterface $fechaInicioTutoriaPractica = null;
  173. #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
  174. private ?DateTimeInterface $fechaFinTutoriaPractica = null;
  175. #[ORM\Column(type: 'date', nullable: true)]
  176. private ?DateTimeInterface $fechaFirmaActaSeleccion = null;
  177. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  178. private ?string $nombreTecnicoQueFirma = null;
  179. #[ORM\Column(type: 'date', nullable: true)]
  180. private ?DateTimeInterface $fechaFirmaInformeEvaluacion = null;
  181. #[ORM\Column(type: 'date', nullable: true)]
  182. private ?DateTimeInterface $fechaFirmaActaEvaluacion = null;
  183. #[Assert\PositiveOrZero]
  184. #[ORM\Column(type: 'float', nullable: true)]
  185. private ?float $ayudasEconomicas = null;
  186. #[ORM\Column(type: 'date', nullable: true)]
  187. private ?DateTimeInterface $fechaFirmaInformeTecnicoAyudas = null;
  188. #[ORM\Column(type: 'date', nullable: true)]
  189. private ?DateTimeInterface $fechaFirmaResolucionProvisional = null;
  190. #[ORM\Column(type: 'date', nullable: true)]
  191. private ?DateTimeInterface $fechaPublicacionBopProvisional = null;
  192. #[Assert\Positive]
  193. #[ORM\Column(type: 'integer', nullable: true)]
  194. private ?int $numeroBopProvisional = null;
  195. /**
  196. * @IsUrl
  197. */
  198. #[ORM\Column(type: 'text', nullable: true)]
  199. private ?string $enlaceResolucionProvisional = null;
  200. #[ORM\Column(type: 'date', nullable: true)]
  201. private ?DateTimeInterface $fechaPlazoAlegaciones = null;
  202. #[ORM\Column(type: 'date', nullable: true)]
  203. private ?DateTimeInterface $fechaInformeDelOrganoInstructor = null;
  204. #[ORM\Column(type: 'date', nullable: true)]
  205. private ?DateTimeInterface $fechaPropuestaResolucionDefinitiva = null;
  206. #[ORM\Column(type: 'date', nullable: true)]
  207. private ?DateTimeInterface $fechaFirmaResolucionDefinitiva = null;
  208. #[ORM\Column(type: 'date', nullable: true)]
  209. private ?DateTimeInterface $fechaPublicacionBopDefinitiva = null;
  210. #[Assert\Positive]
  211. #[ORM\Column(type: 'integer', nullable: true)]
  212. private ?int $numeroBopDefinitiva = null;
  213. /**
  214. * @IsUrl
  215. */
  216. #[ORM\Column(type: 'text', nullable: true)]
  217. private ?string $enlaceResolucionDefinitiva = null;
  218. #[ORM\ManyToOne(targetEntity: EmpresaFormacion::class, inversedBy: 'cursos')]
  219. private ?EmpresaFormacion $empresaFormacion = null;
  220. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  221. private ?string $cargoTecnicoQueFirma = null;
  222. #[ORM\Column(type: 'boolean')]
  223. private ?bool $requiereCarnetConducir = null;
  224. #[ORM\OneToMany(mappedBy: 'curso', targetEntity: CalendarioCurso::class)]
  225. private Collection $calendario;
  226. // #[ORM\OrderBy(['fechaLimite' => 'ASC'])]
  227. #[ORM\OneToMany(mappedBy: 'curso', targetEntity: TareaCurso::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
  228. private Collection $tareas;
  229. // Este campo es para activar el test de evaluación y la beca en el front.
  230. #[ORM\Column]
  231. private ?bool $testEvaluacionBeca = false;
  232. #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
  233. private ?\DateTimeInterface $fechaMaximaSolicitudBeca = null;
  234. #[ORM\Column(nullable: true)]
  235. private ?float $costeDiaAsistencia = null;
  236. public function __construct()
  237. {
  238. $this->fechaCreacion = new DateTime();
  239. $this->solicitudes = new ArrayCollection();
  240. $this->calendario = new ArrayCollection();
  241. $this->tareas = new ArrayCollection();
  242. }
  243. public function getId(): ?int
  244. {
  245. return $this->id;
  246. }
  247. public function getNivelFormativo(): ?NivelFormativo
  248. {
  249. return $this->nivelFormativo;
  250. }
  251. public function setNivelFormativo(?NivelFormativo $nivelFormativo): self
  252. {
  253. $this->nivelFormativo = $nivelFormativo;
  254. return $this;
  255. }
  256. public function getNombre(): ?string
  257. {
  258. return $this->nombre;
  259. }
  260. /**
  261. * @param mixed $nombre
  262. */
  263. public function setNombre(?string $nombre): self
  264. {
  265. $this->nombre = $nombre;
  266. return $this;
  267. }
  268. public function getCodigoCurso(): ?string
  269. {
  270. return $this->codigoCurso;
  271. }
  272. public function setCodigoCurso(?string $codigoCurso): self
  273. {
  274. $this->codigoCurso = $codigoCurso;
  275. return $this;
  276. }
  277. public function getAnualidad(): ?int
  278. {
  279. return $this->anualidad;
  280. }
  281. public function setAnualidad(?int $anualidad): self
  282. {
  283. $this->anualidad = $anualidad;
  284. return $this;
  285. }
  286. public function isCertificado(): ?bool
  287. {
  288. return $this->certificado;
  289. }
  290. public function setCertificado(bool $certificado): self
  291. {
  292. $this->certificado = $certificado;
  293. return $this;
  294. }
  295. public function isDestacado(): ?bool
  296. {
  297. return $this->destacado;
  298. }
  299. public function setDestacado(bool $destacado): self
  300. {
  301. $this->destacado = $destacado;
  302. return $this;
  303. }
  304. public function getAforoTitulares(): ?int
  305. {
  306. return $this->aforoTitulares;
  307. }
  308. public function setAforoTitulares(?int $aforoTitulares): self
  309. {
  310. $this->aforoTitulares = $aforoTitulares;
  311. return $this;
  312. }
  313. public function getAforoSuplentes(): ?int
  314. {
  315. return $this->aforoSuplentes;
  316. }
  317. public function setAforoSuplentes(?int $aforoSuplentes): self
  318. {
  319. $this->aforoSuplentes = $aforoSuplentes;
  320. return $this;
  321. }
  322. public function getDiasDuracion(): ?int
  323. {
  324. return $this->diasDuracion;
  325. }
  326. public function setDiasDuracion(?int $diasDuracion): self
  327. {
  328. $this->diasDuracion = $diasDuracion;
  329. return $this;
  330. }
  331. public function getHorasDuracion(): ?int
  332. {
  333. return $this->horasDuracion;
  334. }
  335. public function setHorasDuracion(?int $horasDuracion): self
  336. {
  337. $this->horasDuracion = $horasDuracion;
  338. return $this;
  339. }
  340. public function getHorasFormacionEspecifica(): ?int
  341. {
  342. return $this->horasFormacionEspecifica;
  343. }
  344. public function setHorasFormacionEspecifica(?int $horasFormacionEspecifica): self
  345. {
  346. $this->horasFormacionEspecifica = $horasFormacionEspecifica;
  347. return $this;
  348. }
  349. public function getHorasPracticaProfesional(): ?int
  350. {
  351. return $this->horasPracticaProfesional;
  352. }
  353. public function setHorasPracticaProfesional(?int $horasPracticaProfesional): self
  354. {
  355. $this->horasPracticaProfesional = $horasPracticaProfesional;
  356. return $this;
  357. }
  358. public function getHorasFormacionTransversal(): ?int
  359. {
  360. return $this->horasFormacionTransversal;
  361. }
  362. public function setHorasFormacionTransversal(?int $horasFormacionTransversal): self
  363. {
  364. $this->horasFormacionTransversal = $horasFormacionTransversal;
  365. return $this;
  366. }
  367. public function getHorasFormacionComplementaria(): ?int
  368. {
  369. return $this->horasFormacionComplementaria;
  370. }
  371. public function setHorasFormacionComplementaria(?int $horasFormacionComplementaria): self
  372. {
  373. $this->horasFormacionComplementaria = $horasFormacionComplementaria;
  374. return $this;
  375. }
  376. public function getHorasTutoriaEspecifica(): ?int
  377. {
  378. return $this->horasTutoriaEspecifica;
  379. }
  380. public function setHorasTutoriaEspecifica(?int $horasTutoriaEspecifica): self
  381. {
  382. $this->horasTutoriaEspecifica = $horasTutoriaEspecifica;
  383. return $this;
  384. }
  385. public function getHorasTutoriaPractica(): ?int
  386. {
  387. return $this->horasTutoriaPractica;
  388. }
  389. public function setHorasTutoriaPractica(?int $horasTutoriaPractica): self
  390. {
  391. $this->horasTutoriaPractica = $horasTutoriaPractica;
  392. return $this;
  393. }
  394. public function getAyudaMaxima(): ?float
  395. {
  396. return $this->ayudaMaxima;
  397. }
  398. public function setAyudaMaxima(?float $ayudaMaxima): self
  399. {
  400. $this->ayudaMaxima = $ayudaMaxima;
  401. return $this;
  402. }
  403. public function getDescripcionCurso(): ?string
  404. {
  405. return $this->descripcionCurso;
  406. }
  407. public function setDescripcionCurso(?string $descripcionCurso): self
  408. {
  409. $this->descripcionCurso = $descripcionCurso;
  410. return $this;
  411. }
  412. public function getDescripcionNivel(): ?string
  413. {
  414. return $this->descripcionNivel;
  415. }
  416. public function setDescripcionNivel(?string $descripcionNivel): self
  417. {
  418. $this->descripcionNivel = $descripcionNivel;
  419. return $this;
  420. }
  421. public function isBorrado(): ?bool
  422. {
  423. return $this->borrado;
  424. }
  425. public function setBorrado(bool $borrado): self
  426. {
  427. $this->borrado = $borrado;
  428. return $this;
  429. }
  430. public function getAccionFormativa(): ?AccionFormativa
  431. {
  432. return $this->accionFormativa;
  433. }
  434. public function setAccionFormativa(?AccionFormativa $accionFormativa): self
  435. {
  436. $this->accionFormativa = $accionFormativa;
  437. return $this;
  438. }
  439. public function getLocalidad(): ?Localidad
  440. {
  441. return $this->localidad;
  442. }
  443. public function setLocalidad(?Localidad $localidad): self
  444. {
  445. $this->localidad = $localidad;
  446. return $this;
  447. }
  448. public function isVisible(): ?bool
  449. {
  450. return $this->visible;
  451. }
  452. public function setVisible(bool $visible): self
  453. {
  454. $this->visible = $visible;
  455. return $this;
  456. }
  457. public function getFechaCreacion(): ?DateTimeInterface
  458. {
  459. return $this->fechaCreacion;
  460. }
  461. public function setFechaCreacion(?DateTimeInterface $fechaCreacion): self
  462. {
  463. $this->fechaCreacion = $fechaCreacion;
  464. return $this;
  465. }
  466. public function getImagen(): ?string
  467. {
  468. return $this->imagen;
  469. }
  470. public function setImagen(?string $imagen): self
  471. {
  472. $this->imagen = $imagen;
  473. return $this;
  474. }
  475. public function getSlug(): ?string
  476. {
  477. return $this->slug;
  478. }
  479. public function setSlug(?string $slug): self
  480. {
  481. $this->slug = $slug;
  482. return $this;
  483. }
  484. public function getSeoTitle(): ?string
  485. {
  486. return $this->seoTitle;
  487. }
  488. public function setSeoTitle(?string $seoTitle): self
  489. {
  490. $this->seoTitle = $seoTitle;
  491. return $this;
  492. }
  493. public function getSeoDescription(): ?string
  494. {
  495. return $this->seoDescription;
  496. }
  497. public function setSeoDescription(?string $seoDescription): self
  498. {
  499. $this->seoDescription = $seoDescription;
  500. return $this;
  501. }
  502. public function getSeoKeywords(): ?string
  503. {
  504. return $this->seoKeywords;
  505. }
  506. public function setSeoKeywords(?string $seoKeywords): self
  507. {
  508. $this->seoKeywords = $seoKeywords;
  509. return $this;
  510. }
  511. /**
  512. * @return Collection<int, Solicitud>
  513. */
  514. public function getSolicitudes(): Collection
  515. {
  516. return $this->solicitudes;
  517. }
  518. public function addSolicitude(Solicitud $solicitude): self
  519. {
  520. if (!$this->solicitudes->contains($solicitude)) {
  521. $this->solicitudes[] = $solicitude;
  522. $solicitude->setCurso($this);
  523. }
  524. return $this;
  525. }
  526. public function removeSolicitude(Solicitud $solicitude): self
  527. {
  528. // set the owning side to null (unless already changed)
  529. if ($this->solicitudes->removeElement($solicitude) && $solicitude->getCurso() === $this) {
  530. $solicitude->setCurso(null);
  531. }
  532. return $this;
  533. }
  534. public function getEdicion(): ?int
  535. {
  536. return $this->edicion;
  537. }
  538. public function setEdicion(?int $edicion): self
  539. {
  540. $this->edicion = $edicion;
  541. return $this;
  542. }
  543. public function getCodigoCertificadoProfesionalJunta(): ?string
  544. {
  545. return $this->codigoCertificadoProfesionalJunta;
  546. }
  547. public function setCodigoCertificadoProfesionalJunta(?string $codigoCertificadoProfesionalJunta): self
  548. {
  549. $this->codigoCertificadoProfesionalJunta = $codigoCertificadoProfesionalJunta;
  550. return $this;
  551. }
  552. public function getNumeroConvocatoria(): ?int
  553. {
  554. return $this->numeroConvocatoria;
  555. }
  556. public function setNumeroConvocatoria(?int $numeroConvocatoria): self
  557. {
  558. $this->numeroConvocatoria = $numeroConvocatoria;
  559. return $this;
  560. }
  561. public function getResponsableFormacion(): ?string
  562. {
  563. return $this->responsableFormacion;
  564. }
  565. public function setResponsableFormacion(?string $responsableFormacion): self
  566. {
  567. $this->responsableFormacion = $responsableFormacion;
  568. return $this;
  569. }
  570. public function getCosteHoraFormacion(): ?float
  571. {
  572. return $this->costeHoraFormacion;
  573. }
  574. public function setCosteHoraFormacion(?float $costeHoraFormacion): self
  575. {
  576. $this->costeHoraFormacion = $costeHoraFormacion;
  577. return $this;
  578. }
  579. public function getFechaInicioSolicitud(): ?DateTimeInterface
  580. {
  581. return $this->fechaInicioSolicitud;
  582. }
  583. public function setFechaInicioSolicitud(?DateTimeInterface $fechaInicioSolicitud): self
  584. {
  585. $this->fechaInicioSolicitud = $fechaInicioSolicitud;
  586. return $this;
  587. }
  588. public function getFechaFinSolicitud(): ?DateTimeInterface
  589. {
  590. return $this->fechaFinSolicitud;
  591. }
  592. public function setFechaFinSolicitud(?DateTimeInterface $fechaFinSolicitud): self
  593. {
  594. $this->fechaFinSolicitud = $fechaFinSolicitud;
  595. return $this;
  596. }
  597. public function getFechaInformeTecnicoSolicitudes(): ?DateTimeInterface
  598. {
  599. return $this->fechaInformeTecnicoSolicitudes;
  600. }
  601. public function setFechaInformeTecnicoSolicitudes(?DateTimeInterface $fechaInformeTecnicoSolicitudes): self
  602. {
  603. $this->fechaInformeTecnicoSolicitudes = $fechaInformeTecnicoSolicitudes;
  604. return $this;
  605. }
  606. public function getFechaFirmaResolucionSolicitudes(): ?DateTimeInterface
  607. {
  608. return $this->fechaFirmaResolucionSolicitudes;
  609. }
  610. public function setFechaFirmaResolucionSolicitudes(?DateTimeInterface $fechaFirmaResolucionSolicitudes): self
  611. {
  612. $this->fechaFirmaResolucionSolicitudes = $fechaFirmaResolucionSolicitudes;
  613. return $this;
  614. }
  615. public function getFechaPublicacionBopSolicitudes(): ?DateTimeInterface
  616. {
  617. return $this->fechaPublicacionBopSolicitudes;
  618. }
  619. public function setFechaPublicacionBopSolicitudes(?DateTimeInterface $fechaPublicacionBopSolicitudes): self
  620. {
  621. $this->fechaPublicacionBopSolicitudes = $fechaPublicacionBopSolicitudes;
  622. return $this;
  623. }
  624. public function getNumeroBopSolicitudes(): ?int
  625. {
  626. return $this->numeroBopSolicitudes;
  627. }
  628. public function setNumeroBopSolicitudes(?int $numeroBopSolicitudes): self
  629. {
  630. $this->numeroBopSolicitudes = $numeroBopSolicitudes;
  631. return $this;
  632. }
  633. public function getEnlaceResolucionBopSolicitudes(): ?string
  634. {
  635. return $this->enlaceResolucionBopSolicitudes;
  636. }
  637. public function setEnlaceResolucionBopSolicitudes(?string $enlaceResolucionBopSolicitudes): self
  638. {
  639. $this->enlaceResolucionBopSolicitudes = $enlaceResolucionBopSolicitudes;
  640. return $this;
  641. }
  642. public function getFechaInicioCurso(): ?DateTimeInterface
  643. {
  644. return $this->fechaInicioCurso;
  645. }
  646. public function setFechaInicioCurso(?DateTimeInterface $fechaInicioCurso): self
  647. {
  648. $this->fechaInicioCurso = $fechaInicioCurso;
  649. return $this;
  650. }
  651. public function getFechaFinCurso(): ?DateTimeInterface
  652. {
  653. return $this->fechaFinCurso;
  654. }
  655. public function setFechaFinCurso(?DateTimeInterface $fechaFinCurso): self
  656. {
  657. $this->fechaFinCurso = $fechaFinCurso;
  658. return $this;
  659. }
  660. public function getFechaInicioFormacionEspecifica(): ?DateTimeInterface
  661. {
  662. return $this->fechaInicioFormacionEspecifica;
  663. }
  664. public function setFechaInicioFormacionEspecifica(?DateTimeInterface $fechaInicioFormacionEspecifica): self
  665. {
  666. $this->fechaInicioFormacionEspecifica = $fechaInicioFormacionEspecifica;
  667. return $this;
  668. }
  669. public function getFechaFinFormacionEspecifica(): ?DateTimeInterface
  670. {
  671. return $this->fechaFinFormacionEspecifica;
  672. }
  673. public function setFechaFinFormacionEspecifica(?DateTimeInterface $fechaFinFormacionEspecifica): self
  674. {
  675. $this->fechaFinFormacionEspecifica = $fechaFinFormacionEspecifica;
  676. return $this;
  677. }
  678. public function getFechaInicioFormacionTransversal(): ?DateTimeInterface
  679. {
  680. return $this->fechaInicioFormacionTransversal;
  681. }
  682. public function setFechaInicioFormacionTransversal(?DateTimeInterface $fechaInicioFormacionTransversal): self
  683. {
  684. $this->fechaInicioFormacionTransversal = $fechaInicioFormacionTransversal;
  685. return $this;
  686. }
  687. public function getFechaFinFormacionTransversal(): ?DateTimeInterface
  688. {
  689. return $this->fechaFinFormacionTransversal;
  690. }
  691. public function setFechaFinFormacionTransversal(?DateTimeInterface $fechaFinFormacionTransversal): self
  692. {
  693. $this->fechaFinFormacionTransversal = $fechaFinFormacionTransversal;
  694. return $this;
  695. }
  696. public function getFechaInicioFormacionComplementaria(): ?DateTimeInterface
  697. {
  698. return $this->fechaInicioFormacionComplementaria;
  699. }
  700. public function setFechaInicioFormacionComplementaria(?DateTimeInterface $fechaInicioFormacionComplementaria): self
  701. {
  702. $this->fechaInicioFormacionComplementaria = $fechaInicioFormacionComplementaria;
  703. return $this;
  704. }
  705. public function getFechaFinFormacionComplementaria(): ?DateTimeInterface
  706. {
  707. return $this->fechaFinFormacionComplementaria;
  708. }
  709. public function setFechaFinFormacionComplementaria(?DateTimeInterface $fechaFinFormacionComplementaria): self
  710. {
  711. $this->fechaFinFormacionComplementaria = $fechaFinFormacionComplementaria;
  712. return $this;
  713. }
  714. public function getFechaInicioPracticas(): ?DateTimeInterface
  715. {
  716. return $this->fechaInicioPracticas;
  717. }
  718. public function setFechaInicioPracticas(?DateTimeInterface $fechaInicioPracticas): self
  719. {
  720. $this->fechaInicioPracticas = $fechaInicioPracticas;
  721. return $this;
  722. }
  723. public function getFechaFinPracticas(): ?DateTimeInterface
  724. {
  725. return $this->fechaFinPracticas;
  726. }
  727. public function setFechaFinPracticas(?DateTimeInterface $fechaFinPracticas): self
  728. {
  729. $this->fechaFinPracticas = $fechaFinPracticas;
  730. return $this;
  731. }
  732. public function getFechaInicioTutoriaEspecifica(): ?DateTimeInterface
  733. {
  734. return $this->fechaInicioTutoriaEspecifica;
  735. }
  736. public function setFechaInicioTutoriaEspecifica(?DateTimeInterface $fechaInicioTutoriaEspecifica): static
  737. {
  738. $this->fechaInicioTutoriaEspecifica = $fechaInicioTutoriaEspecifica;
  739. return $this;
  740. }
  741. public function getFechaFinTutoriaEspecifica(): ?DateTimeInterface
  742. {
  743. return $this->fechaFinTutoriaEspecifica;
  744. }
  745. public function setFechaFinTutoriaEspecifica(?DateTimeInterface $fechaFinTutoriaEspecifica): static
  746. {
  747. $this->fechaFinTutoriaEspecifica = $fechaFinTutoriaEspecifica;
  748. return $this;
  749. }
  750. public function getFechaInicioTutoriaPractica(): ?DateTimeInterface
  751. {
  752. return $this->fechaInicioTutoriaPractica;
  753. }
  754. public function setFechaInicioTutoriaPractica(?DateTimeInterface $fechaInicioTutoriaPractica): static
  755. {
  756. $this->fechaInicioTutoriaPractica = $fechaInicioTutoriaPractica;
  757. return $this;
  758. }
  759. public function getFechaFinTutoriaPractica(): ?DateTimeInterface
  760. {
  761. return $this->fechaFinTutoriaPractica;
  762. }
  763. public function setFechaFinTutoriaPractica(?DateTimeInterface $fechaFinTutoriaPractica): static
  764. {
  765. $this->fechaFinTutoriaPractica = $fechaFinTutoriaPractica;
  766. return $this;
  767. }
  768. public function getFechaFirmaActaSeleccion(): ?DateTimeInterface
  769. {
  770. return $this->fechaFirmaActaSeleccion;
  771. }
  772. public function setFechaFirmaActaSeleccion(?DateTimeInterface $fechaFirmaActaSeleccion): self
  773. {
  774. $this->fechaFirmaActaSeleccion = $fechaFirmaActaSeleccion;
  775. return $this;
  776. }
  777. public function getNombreTecnicoQueFirma(): ?string
  778. {
  779. return $this->nombreTecnicoQueFirma;
  780. }
  781. public function setNombreTecnicoQueFirma(?string $nombreTecnicoQueFirma): self
  782. {
  783. $this->nombreTecnicoQueFirma = $nombreTecnicoQueFirma;
  784. return $this;
  785. }
  786. public function getFechaFirmaInformeEvaluacion(): ?DateTimeInterface
  787. {
  788. return $this->fechaFirmaInformeEvaluacion;
  789. }
  790. public function setFechaFirmaInformeEvaluacion(?DateTimeInterface $fechaFirmaInformeEvaluacion): self
  791. {
  792. $this->fechaFirmaInformeEvaluacion = $fechaFirmaInformeEvaluacion;
  793. return $this;
  794. }
  795. public function getFechaFirmaActaEvaluacion(): ?DateTimeInterface
  796. {
  797. return $this->fechaFirmaActaEvaluacion;
  798. }
  799. public function setFechaFirmaActaEvaluacion(?DateTimeInterface $fechaFirmaActaEvaluacion): self
  800. {
  801. $this->fechaFirmaActaEvaluacion = $fechaFirmaActaEvaluacion;
  802. return $this;
  803. }
  804. public function getAyudasEconomicas(): ?float
  805. {
  806. return $this->ayudasEconomicas;
  807. }
  808. public function setAyudasEconomicas(?float $ayudasEconomicas): self
  809. {
  810. $this->ayudasEconomicas = $ayudasEconomicas;
  811. return $this;
  812. }
  813. public function getFechaFirmaInformeTecnicoAyudas(): ?DateTimeInterface
  814. {
  815. return $this->fechaFirmaInformeTecnicoAyudas;
  816. }
  817. public function setFechaFirmaInformeTecnicoAyudas(?DateTimeInterface $fechaFirmaInformeTecnicoAyudas): self
  818. {
  819. $this->fechaFirmaInformeTecnicoAyudas = $fechaFirmaInformeTecnicoAyudas;
  820. return $this;
  821. }
  822. public function getFechaFirmaResolucionProvisional(): ?DateTimeInterface
  823. {
  824. return $this->fechaFirmaResolucionProvisional;
  825. }
  826. public function setFechaFirmaResolucionProvisional(?DateTimeInterface $fechaFirmaResolucionProvisional): self
  827. {
  828. $this->fechaFirmaResolucionProvisional = $fechaFirmaResolucionProvisional;
  829. return $this;
  830. }
  831. public function getFechaPublicacionBopProvisional(): ?DateTimeInterface
  832. {
  833. return $this->fechaPublicacionBopProvisional;
  834. }
  835. public function setFechaPublicacionBopProvisional(?DateTimeInterface $fechaPublicacionBopProvisional): self
  836. {
  837. $this->fechaPublicacionBopProvisional = $fechaPublicacionBopProvisional;
  838. return $this;
  839. }
  840. public function getNumeroBopProvisional(): ?int
  841. {
  842. return $this->numeroBopProvisional;
  843. }
  844. public function setNumeroBopProvisional(?int $numeroBopProvisional): self
  845. {
  846. $this->numeroBopProvisional = $numeroBopProvisional;
  847. return $this;
  848. }
  849. public function getEnlaceResolucionProvisional(): ?string
  850. {
  851. return $this->enlaceResolucionProvisional;
  852. }
  853. public function setEnlaceResolucionProvisional(?string $enlaceResolucionProvisional): self
  854. {
  855. $this->enlaceResolucionProvisional = $enlaceResolucionProvisional;
  856. return $this;
  857. }
  858. public function getFechaPlazoAlegaciones(): ?DateTimeInterface
  859. {
  860. return $this->fechaPlazoAlegaciones;
  861. }
  862. public function setFechaPlazoAlegaciones(?DateTimeInterface $fechaPlazoAlegaciones): self
  863. {
  864. $this->fechaPlazoAlegaciones = $fechaPlazoAlegaciones;
  865. return $this;
  866. }
  867. public function getFechaInformeDelOrganoInstructor(): ?DateTimeInterface
  868. {
  869. return $this->fechaInformeDelOrganoInstructor;
  870. }
  871. public function setFechaInformeDelOrganoInstructor(?DateTimeInterface $fechaInformeDelOrganoInstructor): self
  872. {
  873. $this->fechaInformeDelOrganoInstructor = $fechaInformeDelOrganoInstructor;
  874. return $this;
  875. }
  876. public function getFechaPropuestaResolucionDefinitiva(): ?DateTimeInterface
  877. {
  878. return $this->fechaPropuestaResolucionDefinitiva;
  879. }
  880. public function setFechaPropuestaResolucionDefinitiva(?DateTimeInterface $fechaPropuestaResolucionDefinitiva): self
  881. {
  882. $this->fechaPropuestaResolucionDefinitiva = $fechaPropuestaResolucionDefinitiva;
  883. return $this;
  884. }
  885. public function getFechaFirmaResolucionDefinitiva(): ?DateTimeInterface
  886. {
  887. return $this->fechaFirmaResolucionDefinitiva;
  888. }
  889. public function setFechaFirmaResolucionDefinitiva(?DateTimeInterface $fechaFirmaResolucionDefinitiva): self
  890. {
  891. $this->fechaFirmaResolucionDefinitiva = $fechaFirmaResolucionDefinitiva;
  892. return $this;
  893. }
  894. public function getFechaPublicacionBopDefinitiva(): ?DateTimeInterface
  895. {
  896. return $this->fechaPublicacionBopDefinitiva;
  897. }
  898. public function setFechaPublicacionBopDefinitiva(?DateTimeInterface $fechaPublicacionBopDefinitiva): self
  899. {
  900. $this->fechaPublicacionBopDefinitiva = $fechaPublicacionBopDefinitiva;
  901. return $this;
  902. }
  903. public function getNumeroBopDefinitiva(): ?int
  904. {
  905. return $this->numeroBopDefinitiva;
  906. }
  907. public function setNumeroBopDefinitiva(?int $numeroBopDefinitiva): self
  908. {
  909. $this->numeroBopDefinitiva = $numeroBopDefinitiva;
  910. return $this;
  911. }
  912. public function getEnlaceResolucionDefinitiva(): ?string
  913. {
  914. return $this->enlaceResolucionDefinitiva;
  915. }
  916. public function setEnlaceResolucionDefinitiva(?string $enlaceResolucionDefinitiva): self
  917. {
  918. $this->enlaceResolucionDefinitiva = $enlaceResolucionDefinitiva;
  919. return $this;
  920. }
  921. public function getEmpresaFormacion(): ?EmpresaFormacion
  922. {
  923. return $this->empresaFormacion;
  924. }
  925. public function setEmpresaFormacion(?EmpresaFormacion $empresaFormacion): self
  926. {
  927. $this->empresaFormacion = $empresaFormacion;
  928. return $this;
  929. }
  930. public function getCargoTecnicoQueFirma(): ?string
  931. {
  932. return $this->cargoTecnicoQueFirma;
  933. }
  934. public function setCargoTecnicoQueFirma(?string $cargoTecnicoQueFirma): self
  935. {
  936. $this->cargoTecnicoQueFirma = $cargoTecnicoQueFirma;
  937. return $this;
  938. }
  939. public function isRequiereCarnetConducir(): ?bool
  940. {
  941. return $this->requiereCarnetConducir;
  942. }
  943. public function setRequiereCarnetConducir(bool $requiereCarnetConducir): self
  944. {
  945. $this->requiereCarnetConducir = $requiereCarnetConducir;
  946. return $this;
  947. }
  948. // Comprueba si $now esta dentro de las fechas de inicio y fin de solicitud de inscripción del curso.
  949. public function estaInscripcionAbierta(DateTimeInterface $now = null): bool
  950. {
  951. $now ??= new DateTimeImmutable();
  952. if ($this->getFechaInicioSolicitud() && $now < $this->getFechaInicioSolicitud()) {
  953. return false;
  954. }
  955. if ($this->getFechaFinSolicitud() && $now > $this->getFechaFinSolicitud()) {
  956. return false;
  957. }
  958. return true;
  959. }
  960. /**
  961. * @return Collection<int, CalendarioCurso>
  962. */
  963. public function getCalendario(): Collection
  964. {
  965. return $this->calendario;
  966. }
  967. public function addCalendario(CalendarioCurso $calendario): static
  968. {
  969. if (!$this->calendario->contains($calendario)) {
  970. $this->calendario->add($calendario);
  971. $calendario->setCurso($this);
  972. }
  973. return $this;
  974. }
  975. public function removeCalendario(CalendarioCurso $calendario): static
  976. {
  977. if ($this->calendario->removeElement($calendario)) {
  978. // set the owning side to null (unless already changed)
  979. if ($calendario->getCurso() === $this) {
  980. $calendario->setCurso(null);
  981. }
  982. }
  983. return $this;
  984. }
  985. /**
  986. * @return Collection<int, TareaCurso>
  987. */
  988. public function getTareas(): Collection
  989. {
  990. return $this->getTareasOrdenadas();
  991. }
  992. public function addTarea(TareaCurso $tarea): static
  993. {
  994. if (!$this->tareas->contains($tarea)) {
  995. $this->tareas->add($tarea);
  996. $tarea->setCurso($this);
  997. }
  998. return $this;
  999. }
  1000. public function removeTarea(TareaCurso $tarea): static
  1001. {
  1002. if ($this->tareas->removeElement($tarea)) {
  1003. // set the owning side to null (unless already changed)
  1004. if ($tarea->getCurso() === $this) {
  1005. $tarea->setCurso(null);
  1006. }
  1007. }
  1008. return $this;
  1009. }
  1010. public function isTestEvaluacionBeca(): ?bool
  1011. {
  1012. return $this->testEvaluacionBeca;
  1013. }
  1014. public function setTestEvaluacionBeca(bool $testEvaluacionBeca): static
  1015. {
  1016. $this->testEvaluacionBeca = $testEvaluacionBeca;
  1017. return $this;
  1018. }
  1019. public function getFechaMaximaSolicitudBeca(): ?\DateTimeInterface
  1020. {
  1021. return $this->fechaMaximaSolicitudBeca;
  1022. }
  1023. public function setFechaMaximaSolicitudBeca(?\DateTimeInterface $fechaMaximaSolicitudBeca): static
  1024. {
  1025. $this->fechaMaximaSolicitudBeca = $fechaMaximaSolicitudBeca;
  1026. return $this;
  1027. }
  1028. public function getCosteDiaAsistencia(): ?float
  1029. {
  1030. return $this->costeDiaAsistencia;
  1031. }
  1032. public function setCosteDiaAsistencia(?float $costeDiaAsistencia): static
  1033. {
  1034. $this->costeDiaAsistencia = $costeDiaAsistencia;
  1035. return $this;
  1036. }
  1037. // Ordena primero las completadas al final y si no están completadas por fecha.
  1038. private function getTareasOrdenadas(): Collection
  1039. {
  1040. $tareas = $this->tareas->toArray();
  1041. usort($tareas, function ($a, $b) {
  1042. if ($a->isCompletada() !== $b->isCompletada()) {
  1043. return $a->isCompletada() ? 1 : -1;
  1044. }
  1045. $fechaA = $a->getFechaLimite()?->getTimestamp() ?? PHP_INT_MAX;
  1046. $fechaB = $b->getFechaLimite()?->getTimestamp() ?? PHP_INT_MAX;
  1047. return $fechaA <=> $fechaB;
  1048. });
  1049. return new ArrayCollection($tareas);
  1050. }
  1051. }