protected function processPayment($row) { if ($row) { $manager = $this->getContainer()->get('doctrine.orm.entity_manager'); // $accountRepo = $manager->getRepository('TSK\PaymentBundle\Entity\Account'); // $account = $accountRepo->findOneBy(array('name' => 'Inc Fm Students', 'organization' => $this->org)); $paymentTypeRepo = $manager->getRepository('TSK\\PaymentBundle\\Entity\\PaymentType'); $paymentMethodRepo = $manager->getRepository('TSK\\PaymentBundle\\Entity\\PaymentMethod'); // $incomeTypeRepo = $manager->getRepository('TSK\PaymentBundle\Entity\IncomeType'); // $incomeType = $incomeTypeRepo->findOneBy(array('name' => 'TUITION', 'organization' => $this->org)); $paymentRepo = $manager->getRepository('TSK\\PaymentBundle\\Entity\\Payment'); $oldPayment = $paymentRepo->findOneBy(array('legacyPaymentId' => $row[1])); $isCash = true; if (!$oldPayment) { switch ($row[4]) { case 'VISA': $row[4] = 'VISA'; break; case 'MC': $row[4] = 'MASTERCARD'; break; case 'SCHOOL CREDIT': case 'CREDIT': $row[4] = 'CREDIT'; $isCash = false; break; case 'AMEX': $row[4] = 'AMERICAN EXPRESS'; break; case 'CHECK': $row[4] = 'CHECK'; break; case 'DISCOVER': $row[4] = 'DISCOVER'; break; case 'CASH': $row[4] = 'CASH'; break; } $payment = new Payment(); $payment->setLegacyPaymentId($row[1]); $payment->setSchool($this->school); $payment->setPaymentType($paymentTypeRepo->findOneBy(array('name' => $row[3], 'organization' => $this->org))); $paymentMethod = $paymentMethodRepo->findOneBy(array('name' => $row[4], 'organization' => $this->org)); if (!$paymentMethod) { print "cannot find paymentMethod for " . $row[4]; exit; } $payment->setPaymentMethod($paymentMethod); $payment->setPaymentAmount($row[5]); $payment->setCreatedDate(new \DateTime($row[6])); $payment->setCreatedUser('mhill'); $payment->setDescription($row[7]); $payment->setRefNumber($row[8]); $payment->setIsVoided($row[9]); $payment->setIsCash($isCash); $chargeRepo = $manager->getRepository('TSK\\PaymentBundle\\Entity\\Charge'); $charge = $chargeRepo->findOneBy(array('legacyChargeId' => $row[2])); if ($charge) { $cp = new ChargePayment(); $cp->setCharge($charge); $cp->setPayment($payment); $cp->setAmount(min($charge->getAmount(), $payment->getPaymentAmount())); $manager->persist($cp); } $manager->persist($payment); $manager->flush(); } } }
/** * @Route("/defer/{id}/{amount}/{contractStartDate}") * @Template() * @Method({"GET"}) */ public function testAction(Payment $payment, $amount, \DateTime $contractStartDate = null) { $em = $this->getDoctrine()->getManager(); $cpRepo = $em->getRepository('TSK\\PaymentBundle\\Entity\\ChargePayment'); $chargePayments = $cpRepo->findBy(array('payment' => $payment)); foreach ($chargePayments as $cp) { if ($cp->getCharge()->getAccount()->getName() == 'Inc Fm Students') { $contracts = $cp->getCharge()->getContracts(); foreach ($contracts as $contract) { $inits = $this->getMonthlyPrepayments($contract, $contractStartDate); print '<pre>inits'; print_r($inits) . '</pre>'; $today = new \DateTime(); $terms = $contract->getPaymentTerms(); $obj = json_decode($terms['paymentsData']); $d = new Deferral($obj->principal, $contract->getDeferralRate(), $contract->getDeferralDurationMonths(), $inits, $contractStartDate); $numFirsts = $this->countFirstOfMonthsSince($contractStartDate); // $numFirsts = $this->countFirstOfMonthsSince($contract->getContractStartDate); // $deferrals = $d->distributePaymentMax($cp->getAmount(), 9); $deferrals = $d->distributePaymentMax($amount, $contract->getDeferralDurationMonths() - $numFirsts); $Deferrals = $d->datestampPayments($deferrals); $debitAccountName = $payment->getPaymentMethod()->getAccount()->getName(); $chargeDeferralAccountName = $cp->getCharge()->getDeferralAccount()->getName(); $chargeAccountName = $cp->getCharge()->getAccount()->getName(); foreach ($Deferrals as $DeferralDate => $DeferralAmount) { print "{$DeferralDate} - {$DeferralAmount}<br>"; $DD = new \DateTime($DeferralDate); if ($DeferralAmount) { if ($DD <= $today) { $results[] = array('date' => $DeferralDate, 'creditAccount' => $chargeAccountName, 'debitAccount' => $debitAccountName, 'debitAmount' => $DeferralAmount, 'creditAmount' => $DeferralAmount); if ($amount > $DeferralAmount) { $results[] = array('date' => $DeferralDate, 'creditAccount' => $chargeDeferralAccountName, 'debitAccount' => $debitAccountName, 'debitAmount' => $amount - $DeferralAmount, 'creditAmount' => $amount - $DeferralAmount); } } else { $results[] = array('date' => $DeferralDate, 'creditAccount' => $chargeAccountName, 'debitAccount' => $chargeDeferralAccountName, 'debitAmount' => $DeferralAmount, 'creditAmount' => $DeferralAmount); } } } function sorter($key) { return function ($a, $b) use($key) { $ad = new \DateTime($a[$key]); $bd = new \DateTime($b[$key]); return $ad > $bd; }; } usort($results, sorter('date')); } } } return array('today' => $today, 'results' => $results, 'foo' => '$1200 contract, 10 payments @ $120, starting on ' . $contractStartDate->format('Y-m-d') . ', deferral rate of 0.75, deferred over 10 months'); // return array('foo' => '$1200 contract, 10 payments @ $120, starting on '.$contract->getContractStartDate()->format('Y-m-d').', deferral rate of 0.75, deferred over 10 months'); }