Attendance: Fix entity associations

pull/4042/head
Julio 4 years ago
parent dd8cf8498a
commit 9e98392062
  1. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625123000.php
  2. 23
      src/CourseBundle/Entity/CAttendance.php
  3. 26
      src/CourseBundle/Entity/CAttendanceCalendar.php
  4. 6
      src/CourseBundle/Entity/CAttendanceResult.php
  5. 13
      src/CourseBundle/Entity/CAttendanceSheet.php
  6. 89
      tests/CourseBundle/Repository/CAttendanceRepositoryTest.php

@ -76,7 +76,7 @@ class Version20170625123000 extends AbstractMigrationChamilo
}
if (false === $table->hasForeignKey('FK_AD1394FA19EA43C3')) {
$this->addSql('ALTER TABLE c_attendance_sheet ADD CONSTRAINT FK_AD1394FA19EA43C3 FOREIGN KEY (attendance_calendar_id) REFERENCES c_attendance_calendar (iid);');
$this->addSql('ALTER TABLE c_attendance_sheet ADD CONSTRAINT FK_AD1394FA19EA43C3 FOREIGN KEY (attendance_calendar_id) REFERENCES c_attendance_calendar (iid) ON DELETE CASCADE');
}
if (false === $table->hasIndex('IDX_AD1394FA19EA43C3')) {
@ -148,7 +148,7 @@ class Version20170625123000 extends AbstractMigrationChamilo
$this->addSql('ALTER TABLE c_attendance_result ADD CONSTRAINT FK_2C7640A76ED395 FOREIGN KEY (user_id) REFERENCES user (id);');
}
if (false === $table->hasForeignKey('FK_2C7640163DDA15')) {
$this->addSql('ALTER TABLE c_attendance_result ADD CONSTRAINT FK_2C7640163DDA15 FOREIGN KEY (attendance_id) REFERENCES c_attendance (iid);');
$this->addSql('ALTER TABLE c_attendance_result ADD CONSTRAINT FK_2C7640163DDA15 FOREIGN KEY (attendance_id) REFERENCES c_attendance (iid) ON DELETE CASCADE');
}
if (false === $table->hasIndex('IDX_2C7640A76ED395')) {
$this->addSql('CREATE INDEX IDX_2C7640A76ED395 ON c_attendance_result (user_id);');

@ -76,6 +76,13 @@ class CAttendance extends AbstractResource implements ResourceInterface
*/
protected Collection $calendars;
/**
* @var Collection|CAttendanceResult[]
*
* @ORM\OneToMany(targetEntity="Chamilo\CourseBundle\Entity\CAttendanceResult", mappedBy="attendance", cascade={"persist", "remove"})
*/
protected Collection $results;
/**
* @var Collection|CAttendanceSheetLog[]
*
@ -90,6 +97,7 @@ class CAttendance extends AbstractResource implements ResourceInterface
$this->attendanceQualifyMax = 0;
$this->locked = 0;
$this->calendars = new ArrayCollection();
$this->results = new ArrayCollection();
$this->logs = new ArrayCollection();
}
@ -232,6 +240,21 @@ class CAttendance extends AbstractResource implements ResourceInterface
return $this;
}
/**
* @return CAttendanceResult[]|Collection
*/
public function getResults()
{
return $this->results;
}
public function setResults(Collection $results): self
{
$this->results = $results;
return $this;
}
public function getResourceIdentifier(): int
{
return $this->getIid();

@ -7,6 +7,7 @@ declare(strict_types=1);
namespace Chamilo\CourseBundle\Entity;
use DateTime;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
@ -43,6 +44,13 @@ class CAttendanceCalendar
*/
protected bool $doneAttendance;
/**
* @var Collection|CAttendanceSheet[]
*
* @ORM\OneToMany(targetEntity="CAttendanceSheet", mappedBy="attendanceCalendar", cascade={"persist", "remove"})
*/
protected Collection $sheets;
public function getIid(): int
{
return $this->iid;
@ -88,4 +96,22 @@ class CAttendanceCalendar
{
return $this->doneAttendance;
}
/**
* @return CAttendanceSheet[]|Collection
*/
public function getSheets()
{
return $this->sheets;
}
/**
* @param CAttendanceSheet[]|Collection $sheets
*/
public function setSheets(Collection $sheets): self
{
$this->sheets = $sheets;
return $this;
}
}

@ -10,8 +10,6 @@ use Chamilo\CoreBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM;
/**
* CAttendanceResult.
*
* @ORM\Table(
* name="c_attendance_result",
* indexes={
@ -35,8 +33,8 @@ class CAttendanceResult
protected User $user;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CAttendance")
* @ORM\JoinColumn(name="attendance_id", referencedColumnName="iid")
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CAttendance", inversedBy="results")
* @ORM\JoinColumn(name="attendance_id", referencedColumnName="iid", onDelete="CASCADE")
*/
protected CAttendance $attendance;

@ -10,8 +10,6 @@ use Chamilo\CoreBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM;
/**
* CAttendanceSheet.
*
* @ORM\Table(
* name="c_attendance_sheet",
* indexes={
@ -41,8 +39,8 @@ class CAttendanceSheet
protected User $user;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CAttendanceCalendar")
* @ORM\JoinColumn(name="attendance_calendar_id", referencedColumnName="iid")
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CAttendanceCalendar", inversedBy="sheets")
* @ORM\JoinColumn(name="attendance_calendar_id", referencedColumnName="iid", onDelete="CASCADE")
*/
protected CAttendanceCalendar $attendanceCalendar;
@ -53,12 +51,7 @@ class CAttendanceSheet
return $this;
}
/**
* Get presence.
*
* @return bool
*/
public function getPresence()
public function getPresence(): bool
{
return $this->presence;
}

@ -8,9 +8,13 @@ namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CourseBundle\Entity\CAttendance;
use Chamilo\CourseBundle\Entity\CAttendanceCalendar;
use Chamilo\CourseBundle\Entity\CAttendanceResult;
use Chamilo\CourseBundle\Entity\CAttendanceSheet;
use Chamilo\CourseBundle\Repository\CAttendanceRepository;
use Chamilo\Tests\AbstractApiTest;
use Chamilo\Tests\ChamiloTestTrait;
use DateTime;
class CAttendanceRepositoryTest extends AbstractApiTest
{
@ -18,8 +22,6 @@ class CAttendanceRepositoryTest extends AbstractApiTest
public function testCreate(): void
{
self::bootKernel();
$em = $this->getEntityManager();
$courseRepo = self::getContainer()->get(CourseRepository::class);
@ -30,6 +32,12 @@ class CAttendanceRepositoryTest extends AbstractApiTest
$item = (new CAttendance())
->setName('item')
->setResourceName('item')
->setDescription('desc')
->setLocked(1)
->setActive(1)
->setAttendanceQualifyMax(100)
->setAttendanceQualifyTitle('title')
->setAttendanceWeight(100)
->setParent($course)
->setCreator($teacher)
@ -39,9 +47,84 @@ class CAttendanceRepositoryTest extends AbstractApiTest
$em->flush();
$this->assertSame('item', (string) $item);
$this->assertSame($item->getResourceIdentifier(), $item->getIid());
$this->assertSame(1, $repo->count([]));
$courseRepo->delete($course);
$this->assertSame(0, $repo->count([]));
}
public function testCreateWithCalendar(): void
{
$em = $this->getEntityManager();
$courseRepo = self::getContainer()->get(CourseRepository::class);
$attendanceRepo = self::getContainer()->get(CAttendanceRepository::class);
$calendarRepo = $em->getRepository(CAttendanceCalendar::class);
$resultRepo = $em->getRepository(CAttendanceResult::class);
$sheetRepo = $em->getRepository(CAttendanceSheet::class);
$course = $this->createCourse('new');
$teacher = $this->createUser('teacher');
$student = $this->createUser('student');
$attendance = (new CAttendance())
->setName('item')
->setAttendanceWeight(100)
->setParent($course)
->setCreator($teacher)
;
$em->persist($attendance);
$calendar = (new CAttendanceCalendar())
->setAttendance($attendance)
->setDateTime(new DateTime())
->setDoneAttendance(true)
;
$em->persist($calendar);
$result = (new CAttendanceResult())
->setAttendance($attendance)
->setUser($student)
->setScore(100)
;
$em->persist($result);
$sheet = (new CAttendanceSheet())
->setUser($student)
->setAttendanceCalendar($calendar)
->setPresence(true)
;
$em->persist($sheet);
$em->flush();
$em->clear();
/** @var CAttendanceCalendar $calendar */
$calendar = $calendarRepo->find($calendar->getIid());
$this->assertNotNull($calendar->getDateTime());
$this->assertNotNull($calendar->getDoneAttendance());
$this->assertNotNull($calendar->getAttendance());
$this->assertSame(1, $calendar->getSheets()->count());
/** @var CAttendance $attendance */
$attendance = $attendanceRepo->find($attendance->getIid());
$course = $this->getCourse($course->getId());
$this->assertSame(1, $attendance->getCalendars()->count());
$this->assertSame(1, $attendance->getResults()->count());
$this->assertSame($attendance->getResourceIdentifier(), $attendance->getIid());
$this->assertSame(1, $attendanceRepo->count([]));
$this->assertSame(1, $calendarRepo->count([]));
$this->assertSame(1, $resultRepo->count([]));
$this->assertSame(1, $sheetRepo->count([]));
$courseRepo->delete($course);
$this->assertSame(0, $attendanceRepo->count([]));
$this->assertSame(0, $calendarRepo->count([]));
$this->assertSame(0, $sheetRepo->count([]));
}
}

Loading…
Cancel
Save