protected function processProgramPaymentPlan($row)
 {
     if ($row) {
         $manager = $this->getContainer()->get('doctrine.orm.entity_manager');
         $programPaymentPlanRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\ProgramPaymentPlan');
         $programRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\Program');
         $program = $programRepo->findOneBy(array('legacyProgramId' => $row[0]));
         if ($program) {
             $programPaymentPlan = $programPaymentPlanRepo->findOneBy(array('program' => $program, 'name' => $row[1]));
             if (!$programPaymentPlan) {
                 $programPaymentPlan = new ProgramPaymentPlan();
                 $programPaymentPlan->setProgram($program);
                 $programPaymentPlan->setName($row[1]);
                 $programPaymentPlan->setPrice($row[2]);
                 $programPaymentPlan->setPaymentsData(array('paymentsData' => json_encode($this->processPaymentsData($row[3]))));
                 $programPaymentPlan->setDeferralDurationMonths($row[4]);
                 $programPaymentPlan->setDeferralDistributionStrategy($row[5]);
                 $programPaymentPlan->setDeferralRate($row[6]);
                 $programPaymentPlan->setIsActive(true);
                 $manager->persist($programPaymentPlan);
                 $manager->flush();
             }
         } else {
             throw new \Exception('Unable to find program ' . $row[0]);
         }
     }
 }
 public function load(ObjectManager $manager)
 {
     $ts = new \DateTime('2017-01-01');
     $program = new Program();
     $program->setId(1);
     $program->setOrganization($this->getReference('tsk-org'));
     $program->setExpirationDate($ts->getTimestamp());
     $program->setIsActive(true);
     $program->setDescription('12 Month Unlimited');
     $program->setProgramName('12 Month Unlimited');
     $program->setProgramType($this->getReference('tsk-program_type-TIME'));
     $program->setLegalDescription('12 Month Unlimited');
     $program->setDiscountType($this->getReference('tsk_payment_plan_type-Regular'));
     $program->setMembershipType($this->getReference('tsk-membership_type-martial arts'));
     $program->setDurationDays(365);
     $program->addSchool($this->getReference('mjh_southorange_school'));
     $program->addSchool($this->getReference('tsk_elmwoodpark_school'));
     $manager->persist($program);
     $metadata = $manager->getClassMetaData(get_class($program));
     $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $manager->flush();
     $this->addReference('tsk_program_12_month', $program);
     $programPaymentPlan = new ProgramPaymentPlan();
     $programPaymentPlan->setName('Monthly');
     $programPaymentPlan->setIsActive(true);
     $programPaymentPlan->setProgram($this->getReference('tsk_program_12_month'));
     $foo = array('principal' => '1200', 'paymentFrequency' => 'monthly', 'payments' => array(120, 120, 120, 120, 120, 120, 120, 120, 120, 120), 'summary' => '10 payments totalling $1200 (10 @ $120)');
     $programPaymentPlan->setPaymentsData(array('paymentsData' => json_encode($foo)));
     $programPaymentPlan->setDeferralRate(0.75);
     $programPaymentPlan->setDeferralDurationMonths(10);
     $programPaymentPlan->setDeferralDistributionStrategy('straight');
     $manager->persist($programPaymentPlan);
     $manager->flush();
     $programPaymentPlan = new ProgramPaymentPlan();
     $programPaymentPlan->setName('6 Month Payoff');
     $programPaymentPlan->setIsActive(true);
     $programPaymentPlan->setProgram($this->getReference('tsk_program_12_month'));
     $foo = array('principal' => '1100', 'paymentFrequency' => 'monthly', 'payments' => array(200, 180, 180, 180, 180, 180), 'summary' => '1 payment of 200 followed by 5 payments of 180 totalling $1100 (1 @ $200, 5 @ $180)');
     $programPaymentPlan->setPaymentsData(array('paymentsData' => json_encode($foo)));
     $programPaymentPlan->setDeferralRate(0.75);
     $programPaymentPlan->setDeferralDurationMonths(10);
     $programPaymentPlan->setDeferralDistributionStrategy('straight');
     $manager->persist($programPaymentPlan);
     $manager->flush();
     $program = new Program();
     $program->setId(2);
     $program->setOrganization($this->getReference('tsk-org'));
     $program->setExpirationDate($ts->getTimestamp());
     $program->setIsActive(true);
     $program->setDescription('36 Month Unlimited');
     $program->setProgramName('36 Month Unlimited');
     $program->setProgramType($this->getReference('tsk-program_type-TIME'));
     $program->setLegalDescription('12 Month Unlimited');
     $program->setDiscountType($this->getReference('tsk_payment_plan_type-Regular'));
     $program->setMembershipType($this->getReference('tsk-membership_type-martial arts'));
     $program->setDurationDays(1095);
     $program->addSchool($this->getReference('mjh_southorange_school'));
     $program->addSchool($this->getReference('tsk_elmwoodpark_school'));
     $manager->persist($program);
     $metadata = $manager->getClassMetaData(get_class($program));
     $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $manager->flush();
     $this->addReference('tsk_program_36_month', $program);
     $programPaymentPlan = new ProgramPaymentPlan();
     $programPaymentPlan->setName('Regular');
     $programPaymentPlan->setIsActive(true);
     $programPaymentPlan->setProgram($program);
     $foo = array('principal' => '3000', 'paymentFrequency' => 'monthly', 'payments' => array(500, 500, 500, 500, 500, 500), 'summary' => '6 payments totalling $3000 (6 @ $500)');
     $programPaymentPlan->setPaymentsData(array('paymentsData' => json_encode($foo)));
     $programPaymentPlan->setDeferralRate(0.75);
     $programPaymentPlan->setDeferralDurationMonths(24);
     $programPaymentPlan->setDeferralDistributionStrategy('straight');
     $manager->persist($programPaymentPlan);
     $manager->flush();
 }