/**
  *
  */
 public function payAction()
 {
     $params = $this->getRequest()->getParams();
     $returnAction = $this->getRequest()->getParam("returnAction", "list");
     $payment = Zend_Json::decode(stripslashes($params["sapPayment"]));
     $this->getActualPaymentCatalog()->beginTransaction();
     try {
         $fileUploader = new FileUploader('file');
         if (!$fileUploader->isUpload()) {
             throw new Exception("El archivo es invalido");
         }
         $uploadDir = 'public/files/payments/docnum' . $docnum;
         $fileUploader->saveFile($uploadDir, false);
         $file = new File();
         $file->setContent($uploadDir . $fileUploader->getFileName());
         $file->setType(File::$typeFile['typeImage']);
         $this->getFileCatalog()->create($file);
         foreach ($params["payment"] as $programmedPaymentParam) {
             if ($programmedPaymentParam["payment"] > 0) {
                 $programmedPayment = ProgrammedPaymentQuery::create()->findByPK($programmedPaymentParam["id"]);
                 $balance = $this->getPaymentBalance($programmedPayment);
                 if ($balance + $programmedPaymentParam["payment"] > $programmedPayment->getAmmount()) {
                     throw new Exception("Balance overloaded");
                 }
                 $actualPayment = ActualPaymentFactory::createFromArray(array(ActualPayment::ID_FILE => $file->getIdFile(), ActualPayment::DOCNUM => $payment["idPayment"], ActualPayment::ID_PROGRAMMED_PAYMENT => $programmedPayment->getIdProgrammedPayment(), ActualPayment::AMMOUNT => $programmedPaymentParam["payment"], ActualPayment::PAYMENT_DATE => $payment["paymentDate"], ActualPayment::TYPE => $payment["type"]));
                 $this->getActualPaymentCatalog()->create($actualPayment);
                 if ($balance + $programmedPaymentParam["payment"] == $programmedPayment->getAmmount()) {
                     $programmedPayment->setStatus(ProgrammedPayment::$TypeStatus['Paid']);
                     $event = ProgrammedPaymentEvent::TOTAL_PAYMENT;
                 } else {
                     $programmedPayment->setStatus(ProgrammedPayment::$TypeStatus['Partial']);
                     $event = ProgrammedPaymentEvent::PARTIAL_PAYMENT;
                 }
                 $this->getProgrammedPaymentCatalog()->update($programmedPayment);
                 $this->getEventDispatcherService()->createProgrammedPaymentNotification($event, $programmedPayment, $actualPayment);
                 //TODO Despachar el evento de Pago Realizado
             }
         }
         $this->getActualPaymentCatalog()->commit();
         $this->setFlash("ok", $this->i18n->_('The payments were successfully saved'));
     } catch (Exception $e) {
         $this->getActualPaymentCatalog()->rollBack();
         $this->setFlash("error", $this->i18n->_('The payments could not be saved: ' . $e->getMessage()));
     }
     $this->getHelper('redirector')->goto($returnAction);
 }
Esempio n. 2
0
 /**
  *
  * makeBean
  * @param array $resultset
  * @return \Application\Model\Bean\ActualPayment
  */
 protected function makeBean($resultset)
 {
     return ActualPaymentFactory::createFromArray($resultset);
 }