Exemplo n.º 1
0
 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();
         }
     }
 }
Exemplo n.º 2
0
 /**
  * @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');
 }