Пример #1
0
 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();
         }
     }
 }