protected function processProgram($row)
 {
     if ($row) {
         $manager = $this->getContainer()->get('doctrine.orm.entity_manager');
         $programRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\Program');
         // check for dupe
         $oldProgram = $programRepo->findOneBy(array('legacyProgramId' => $row[9]));
         if (!$oldProgram) {
             $programTypeRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\ProgramType');
             $membershipTypeRepo = $manager->getRepository('TSK\\ProgramBundle\\Entity\\MembershipType');
             $discountTypeRepo = $manager->getRepository('TSK\\PaymentBundle\\Entity\\DiscountType');
             $program = new Program();
             $program->addSchool($this->school);
             $program->setOrganization($this->org);
             $program->setLegacyProgramId($row[9]);
             $programType = $programTypeRepo->findOneBy(array('name' => $row[0]));
             $program->setProgramType($programType);
             $membershipType = $membershipTypeRepo->findOneBy(array('name' => $row[1]));
             $program->setMembershipType($membershipType);
             $discountType = $discountTypeRepo->findOneBy(array('name' => $this->lookupDiscountTypes($row[2])));
             $program->setDiscountType($discountType);
             $program->setProgramName($row[3]);
             $program->setDescription($row[3]);
             $program->setLegalDescription($row[4]);
             $program->setNumTokens($row[5]);
             $program->setDurationDays($row[6]);
             // In the program table expiration date is stored as either integer or null
             $expirationDate = (int) $row[7];
             if ($expirationDate > 0) {
                 $expirationDate = strtotime($expirationDate);
             } else {
                 $expirationDate = null;
             }
             $program->setExpirationDate($expirationDate);
             $program->setIsActive(true);
             $manager->persist($program);
             $manager->flush();
             return $program;
         } else {
             return $oldProgram;
         }
     }
 }
 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();
 }