protected function processContract($row) { if ($row) { $manager = $this->getContainer()->get('doctrine.orm.entity_manager'); $contractRepo = $manager->getRepository('TSK\\ContractBundle\\Entity\\Contract'); $programRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\Program'); $schoolRepo = $manager->getRepository('TSK\\SchoolBundle\\Entity\\School'); $oldContract = $contractRepo->findOneBy(array('legacyContractId' => $row[0])); if (!$oldContract) { $contract = new Contract(); $contract->setOrganization($this->org); $contract->setLegacyContractId($row[0]); $students = $this->parseStudents($row[1]); $today = new \DateTime(); $contractExpiry = new \DateTime($row[4]); $studentStatusRepo = $manager->getRepository('TSK\\StudentBundle\\Entity\\StudentStatus'); $expiredStatus = $studentStatusRepo->findOneBy(array('name' => 'expired')); foreach ($students as $student) { $contract->addStudent($student); // If contract has already expired, then mark student as expired if ($contractExpiry < $today) { $student->setStudentStatus($expiredStatus); $manager->persist($student); } } $program = $programRepo->findOneBy(array('programName' => $row[2])); if (!$program) { throw new \Exception('Invalid program ' . $row[2]); } $contract->setProgram($program); $contract->setContractExpiry(new \DateTime($row[4])); $contract->setContractNumTokens($row[5]); $contract->setDeferralRate($row[6]); $contract->setDeferralDistributionStrategy($row[7]); $contract->setContractStartDate(new \DateTime($row[11])); $contract->setSchool($this->school); $contract->setIsActive(true); if ($row[12] < 9999) { $payments = $this->distributeInt($row[10], $row[9]); $paymentTerms = array('paymentFrequency' => 'monthly', 'summary' => $this->generateSummary($payments), 'principal' => $row[10], 'payments' => $payments); } else { $paymentTerms = array('paymentFrequency' => 'monthly', 'summary' => 'summary', 'principal' => $row[10], 'payments' => array()); } $contract->setPaymentTerms(array('paymentsData' => json_encode($paymentTerms))); $doc = $contract->renderContractVersion(); $manager->persist($contract); $manager->persist($doc); $manager->flush(); } } }