<?phpnamespace App\Entity;use App\Repository\Doctrine\InvitacionEnviadaRepository;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;/** * @ORM\Entity(repositoryClass=InvitacionEnviadaRepository::class) * @ORM\Table(name="invitacion_enviada") * @ORM\HasLifecycleCallbacks() */class InvitacionEnviada extends BaseEntity{ /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private ?int $id = null; /** * @ORM\ManyToOne(targetEntity=ConsorciPropietarioContenido::class) * @ORM\JoinColumn(nullable=false) */ private ?ConsorciPropietarioContenido $remitente = null; /** * @ORM\Column(type="json") */ private array $destinatariosInfo = []; /** * @ORM\Column(type="string", length=255) */ private ?string $asunto = null; /** * @ORM\Column(type="text") */ private ?string $cuerpo = null; /** * @ORM\Column(type="datetime") */ private ?\DateTimeInterface $fechaEnvio = null; /** * @ORM\Column(type="integer") */ private int $totalDestinatarios = 0; /** * @ORM\Column(type="integer") */ private int $enviosExitosos = 0; /** * @ORM\Column(type="integer") */ private int $enviosFallidos = 0; public function getId(): ?int { return $this->id; } public function getRemitente(): ?ConsorciPropietarioContenido { return $this->remitente; } public function setRemitente(?ConsorciPropietarioContenido $remitente): self { $this->remitente = $remitente; return $this; } public function getDestinatariosInfo(): array { return $this->destinatariosInfo; } public function setDestinatariosInfo(array $destinatariosInfo): self { $this->destinatariosInfo = $destinatariosInfo; return $this; } public function addDestinatarioInfo(array $destinatarioInfo): self { $this->destinatariosInfo[] = $destinatarioInfo; return $this; } public function getAsunto(): ?string { return $this->asunto; } public function setAsunto(string $asunto): self { $this->asunto = $asunto; return $this; } public function getCuerpo(): ?string { return $this->cuerpo; } public function setCuerpo(string $cuerpo): self { $this->cuerpo = $cuerpo; return $this; } public function getFechaEnvio(): ?\DateTimeInterface { return $this->fechaEnvio; } public function setFechaEnvio(\DateTimeInterface $fechaEnvio): self { $this->fechaEnvio = $fechaEnvio; return $this; } public function getTotalDestinatarios(): int { return $this->totalDestinatarios; } public function setTotalDestinatarios(int $totalDestinatarios): self { $this->totalDestinatarios = $totalDestinatarios; return $this; } public function getEnviosExitosos(): int { return $this->enviosExitosos; } public function setEnviosExitosos(int $enviosExitosos): self { $this->enviosExitosos = $enviosExitosos; return $this; } public function getEnviosFallidos(): int { return $this->enviosFallidos; } public function setEnviosFallidos(int $enviosFallidos): self { $this->enviosFallidos = $enviosFallidos; return $this; } /** * @ORM\PrePersist */ public function onPrePersist(): void { if ($this->fechaEnvio === null) { $this->fechaEnvio = new \DateTime(); } // Calcular totales a partir del array de destinatarios $this->totalDestinatarios = count($this->destinatariosInfo); } /** * Calcula las estadĂsticas de envĂo */ public function calcularEstadisticas(): array { $exitosos = 0; $fallidos = 0; foreach ($this->destinatariosInfo as $destinatario) { if (isset($destinatario['envioExitoso']) && $destinatario['envioExitoso']) { $exitosos++; } else { $fallidos++; } } $this->enviosExitosos = $exitosos; $this->enviosFallidos = $fallidos; return [ 'total' => $this->totalDestinatarios, 'exitosos' => $this->enviosExitosos, 'fallidos' => $this->enviosFallidos, 'porcentajeExito' => $this->totalDestinatarios > 0 ? round(($exitosos / $this->totalDestinatarios) * 100, 2) : 0 ]; } /** * Obtiene los destinatarios exitosos */ public function getDestinatariosExitosos(): array { return array_filter($this->destinatariosInfo, function($destinatario) { return isset($destinatario['envioExitoso']) && $destinatario['envioExitoso']; }); } /** * Obtiene los destinatarios fallidos */ public function getDestinatariosFallidos(): array { return array_filter($this->destinatariosInfo, function($destinatario) { return !isset($destinatario['envioExitoso']) || !$destinatario['envioExitoso']; }); }}