/**
  * 
  * @author Erick Guevara Martíne<
  * @param PurchaseOrderEntryCollection $entries
  * @return array
  */
 public function getCondensedPayments(PurchaseOrder $purchaseOrder)
 {
     $purchaseOrderPaymentTerms = PurchaseOrderPaymentTermQuery::create()->whereAdd(PurchaseOrderPaymentTerm::ID_PURCHASE_ORDER, $purchaseOrder->getIdPurchaseOrder())->find();
     $purchaseOrderProgrammedPayments = PurchaseOrderProgrammedPaymentQuery::create()->whereAdd(PurchaseOrderProgrammedPayment::ID_PURCHASE_ORDER_PAYMENT_TERM, $purchaseOrderPaymentTerms->getPrimaryKeys())->find();
     $events = EventQuery::create()->whereAdd(Event::ID_EVENT, $purchaseOrderPaymentTerms->getEventIds())->find();
     $payments = array();
     while ($purchaseOrderPaymentTerms->valid()) {
         $purchaseOrderPaymentTerm = $purchaseOrderPaymentTerms->read();
         $event = $events->getByPK($purchaseOrderPaymentTerm->getIdEvent());
         $purchaseOrderProgrammedPayments->filterByPurchaseOrderPaymentTerm($purchaseOrderPaymentTerm);
         $payments[$event->getIdEvent()]["event"] = $event->getName();
         $payments[$event->getIdEvent()]["idEvent"] = $event->getIdEvent();
         $payments[$event->getIdEvent()]["payment"] += $purchaseOrderPaymentTerm->getAmount();
         $payments[$event->getIdEvent()]["currency"] = $purchaseOrderPaymentTerm->getCurrency();
         if (!$purchaseOrderProgrammedPayments->isEmpty()) {
             $payments[$event->getIdEvent()]["noEdit"] = true;
         }
     }
     return $payments;
 }
 /**
  *
  *
  */
 private function setPurchaseOrderCollection()
 {
     if (empty($this->filters['type']) && empty($this->filters['proforma_invoice_doc_num']) || $this->filters['type'] == ProgrammedPayment::$TypePayment['PurchaseOrder']) {
         $purchaseOrderQuery = PurchaseOrderQuery::create();
         if (!empty($this->filters['id_company'])) {
             $purchaseOrderQuery->whereAdd(PurchaseOrder::ID_SUPPLIER, $this->filters['id_company']);
         }
         if (!empty($this->filters['id_requisition'])) {
             $purchaseOrderQuery->whereAdd(PurchaseOrder::ID_PURCHASE_ORDER, $this->getPurchaseOrderByRequisition()->getPrimaryKeys());
         }
         if (!empty($this->filters['purchase_order_doc_num'])) {
             $purchaseOrderQuery->whereAdd(PurchaseOrder::SAP_DOCUMENT_NUMBER, $this->filters['purchase_order_doc_num']);
         } else {
             $purchaseOrderIds = PurchaseOrderPaymentTermQuery::create()->addColumn(PurchaseOrderPaymentTerm::ID_PURCHASE_ORDER)->distinct()->fetchAll();
             $purchaseOrderQuery->whereAdd(PurchaseOrder::ID_PURCHASE_ORDER, $purchaseOrderIds);
         }
         $purchaseOrderCollection = $purchaseOrderQuery->find();
     } else {
         $purchaseOrderCollection = new PurchaseOrderCollection();
     }
     $this->purchaseOrderCollection = $purchaseOrderCollection;
 }
 /**
  * 
  * Cancela los pagos relacionados con la proforma invoice
  * @param int $idProformaInvoice
  */
 private function cancelPaymentsByIdProformaInvoice($idProformaInvoice)
 {
     $proformaInvoicePaymentTerms = ProformaInvoicePaymentTermQuery::create()->whereAdd(ProformaInvoicePaymentTerm::ID_PROFORMA_INVOICE, $idProformaInvoice)->find();
     $proformaInvoiceProgrammedPayments = ProformaInvoiceProgrammedPaymentQuery::create()->whereAdd(ProformaInvoiceProgrammedPayment::ID_PROFORMA_INVOICE, $idProformaInvoice)->find();
     $purchaseOrderPaymentTerms = PurchaseOrderPaymentTermQuery::create()->whereAdd(PurchaseOrderPaymentTerm::ID_PROFORMA_INVOICE_PAYMENT_TERM, $proformaInvoicePaymentTerms->getPrimaryKeys())->find();
     $purchaseOrderProgrammedPayments = PurchaseOrderProgrammedPaymentQuery::create()->whereAdd(PurchaseOrderProgrammedPayment::ID_PURCHASE_ORDER_PAYMENT_TERM, $purchaseOrderPaymentTerms->getPrimaryKeys())->find();
     $actualPayments = ActualPaymentQuery::create()->whereAdd(ActualPayment::ID_PROGRAMMED_PAYMENT, $proformaInvoiceProgrammedPayments->getProgrammedPaymentIds() + $purchaseOrderProgrammedPayments->getProgrammedPaymentIds())->find();
     while ($proformaInvoicePaymentTerm = $proformaInvoicePaymentTerms->read()) {
         $proformaInvoicePaymentTerm->setStatus(ProformaInvoicePaymentTerm::$Status['Canceled']);
         $this->getProformaInvoicePaymentTermCatalog()->update($proformaInvoicePaymentTerm);
     }
     while ($proformaInvoiceProgrammedPayment = $proformaInvoiceProgrammedPayments->read()) {
         $proformaInvoiceProgrammedPayment->setStatus(ProformaInvoiceProgrammedPayment::$TypeStatus['Canceled']);
         $this->getProformaInvoiceProgrammedPaymentCatalog()->update($proformaInvoiceProgrammedPayment);
     }
     while ($purchaseOrderPaymentTerm = $purchaseOrderPaymentTerms->read()) {
         $purchaseOrderPaymentTerm->setStatus(PurchaseOrderPaymentTerm::$Status['Canceled']);
         $this->getPurchaseOrderPaymentTermsCatalog()->update($purchaseOrderPaymentTerm);
     }
     while ($purchaseOrderProgrammedPayment = $purchaseOrderProgrammedPayments->read()) {
         $purchaseOrderProgrammedPayment->setStatus(PurchaseOrderProgrammedPayment::$TypeStatus['Canceled']);
         $this->getPurchaseOrderProgrammedPaymentCatalog()->update($purchaseOrderProgrammedPayment);
     }
     while ($actualPayment = $actualPayments->read()) {
         $actualPayment->setStatus(ActualPayment::$Status['Canceled']);
         $this->getActualPaymentCatalog()->update($actualPayment);
     }
 }
 /**
  *
  * @param int $idPurchaseOrder
  * @param int $idEvent
  */
 private function getMissingPurchaseInformation($idPurchaseOrder, $idEvent)
 {
     $purchaseOrder = PurchaseOrderQuery::create()->findByPKOrThrow($idPurchaseOrder, $this->i18n->_("PurchaseOrder with id {$idPurchaseOrder} not found."));
     $supplier = SapSupplierQuery::create()->findByPKOrThrow($purchaseOrder->getIdSupplier(), $this->i18n->_("SapSupplier with id {$purchaseOrder->getIdSupplier()} not found."));
     $event = EventQuery::create()->findByPKOrThrow($idEvent, $this->i18n->_("Event with id {$idEvent} not found."));
     $purchaseOrderEntries = PurchaseOrderEntryQuery::create()->whereAdd(PurchaseOrderEntry::ID_PURCHASE_ORDER, $purchaseOrder->getIdPurchaseOrder())->find();
     $proformaInvoiceEntries = ProformaInvoiceEntryQuery::create()->whereAdd(ProformaInvoiceEntry::ID_PROFORMA_INVOICE, $purchaseOrderEntries->getDisctinctProformaInvoiceIds())->find();
     $paymentTerms = PurchaseOrderPaymentTermQuery::create()->whereAdd(PurchaseOrderPaymentTerm::ID_PURCHASE_ORDER, $purchaseOrder->getIdPurchaseOrder())->whereAdd(ProformaInvoicePaymentTerm::ID_EVENT, $event->getIdEvent())->find();
     $purchasePayments = new PurchaseOrderProgrammedPaymentCollection();
     while ($purchaseOrderPaymentTerm = $paymentTerms->read()) {
         $purchaseOrderMissingProgrammedPayment = PurchaseOrderProgrammedPaymentFactory::createFromArray(array('id_purchase_order_programmed_payment' => 'VPOPP' . $purchaseOrderPaymentTerm->getIdPurchaseOrderPaymentTerm(), 'id_proforma_invoice_payment_term' => $purchaseOrderPaymentTerm->getIdProformaInvoicePaymentTerm(), 'id_purchase_order_payment_term' => $purchaseOrderPaymentTerm->getIdPurchaseOrderPaymentTerm(), 'pieces' => $purchaseOrderPaymentTerm->getPieces(), 'id_purchase_order' => $purchaseOrderPaymentTerm->getIdPurchaseOrder(), 'line' => $purchaseOrderPaymentTerm->getLine(), 'id_purchase_order_entry' => $purchaseOrderPaymentTerm->getIdPurchaseOrderEntry(), 'id_programmed_payment' => 'VPP' . $purchaseOrderPaymentTerm->getIdPurchaseOrderPaymentTerm(), 'id_currency' => $purchaseOrderPaymentTerm->getCurrency(), 'id_company' => $purchaseOrder->getIdSupplier(), 'type' => ProgrammedPayment::$TypePayment['PurchaseOrder'], 'ammount' => $purchaseOrderPaymentTerm->getAmount(), 'folio' => 'Not Available', 'due_date' => 'Not Available', 'status' => ProgrammedPayment::$TypeStatus['Virtual']));
         $purchasePayments->append($purchaseOrderMissingProgrammedPayment);
     }
     $response = array("docNum" => $purchaseOrder->getSapDocumentNumber(), "docEntry" => $purchaseOrder->getIdPurchaseOrder(), "createDate" => $purchaseOrder->getDeliveryEstimateDate(), "supplier" => $supplier->getCardCode(), "supplierName" => $supplier->getCardname(), "event" => $event->getName());
     while ($purchaseOrderEntries->valid()) {
         $purchaseOrderEntry = $purchaseOrderEntries->read();
         $proformaInvoiceEntry = $proformaInvoiceEntries->getByIdProformaInvoiceAndLine($purchaseOrderEntry->getBaseEntry(), $purchaseOrderEntry->getBaseLine());
         $programmedPayment = $purchasePayments->filterByPurchaseOrderEntry($purchaseOrderEntry)->getOne();
         $response["entries"][] = array("line" => $purchaseOrderEntry->getLine(), "product" => $purchaseOrderEntry->getIdProduct(), "quantity" => $purchaseOrderEntry->getQuantity(), "price" => $purchaseOrderEntry->getPrice(), "currency" => $purchaseOrderEntry->getCurrency(), "requisitions" => implode($proformaInvoiceEntry->getRequisitionIdsToArray()), "PI_Line" => $purchaseOrderEntry->getBaseEntry() . "/" . $purchaseOrderEntry->getBaseLine(), "ammount" => $programmedPayment->getAmmount(), "credits" => 0, "pendingBalance" => $programmedPayment->getAmmount());
     }
     return $response;
 }
Beispiel #5
0
 public function createGenericPayment(PurchaseOrderEvent $event, $type)
 {
     $purchaseOrder = $event->getPurchaseOrder();
     //TODO: agregar arreglo de eventos a PurchaseOrderPaymentTerm
     $paymentTerms = PurchaseOrderPaymentTermQuery::create()->whereAdd(PurchaseOrderPaymentTerm::ID_EVENT, $type)->whereAdd(PurchaseOrderPaymentTerm::ID_PURCHASE_ORDER, $purchaseOrder->getIdPurchaseOrder())->find();
     try {
         $this->getPurchaseOrderProgrammedPaymentCatalog()->beginTransaction();
         while ($paymentTerms->valid()) {
             $paymentTerm = $paymentTerms->read();
             if (PurchaseOrderProgrammedPaymentQuery::create()->whereAdd(PurchaseOrderProgrammedPayment::ID_PURCHASE_ORDER_PAYMENT_TERM, $paymentTerm->getIdPurchaseOrderPaymentTerm())->find()->count() > 0) {
                 continue;
             }
             $payment = new PurchaseOrderProgrammedPayment();
             $payment->setIdPurchaseOrderPaymentTerm($paymentTerm->getIdPurchaseOrderPaymentTerm());
             $payment->setAmmount($paymentTerm->getAmount());
             $payment->setDueDate(\Zend_Date::now()->addDay(15)->get("YYYY-MM-dd"));
             //TODO: dias del cat�logo
             $payment->setIdCompany(SupplierQuery::create()->findByPK($purchaseOrder->getIdSupplier())->getIdCompany());
             $payment->setIdCurrency($purchaseOrder->getIdCurrency());
             $payment->setIdPurchaseOrder($purchaseOrder->getIdPurchaseOrder());
             $payment->setStatus(PurchaseOrderProgrammedPayment::$TypeStatus['Pending']);
             $payment->setType(PurchaseOrderProgrammedPayment::$TypePayment['PurchaseOrder']);
             $this->getPurchaseOrderProgrammedPaymentCatalog()->create($payment);
         }
         $this->getPurchaseOrderProgrammedPaymentCatalog()->commit();
     } catch (Exception $e) {
         $this->getPurchaseOrderProgrammedPaymentCatalog()->rollBack();
         throw $e;
     }
 }
 public function fixPaymentTermsAction()
 {
     $POPaymentTerms = PurchaseOrderPaymentTermQuery::create()->find();
     $this->getPurchaseOrderPaymentTermsCatalog()->beginTransaction();
     try {
         while ($POPaymentTerms->valid()) {
             $POPaymentTerm = $POPaymentTerms->read();
             $this->getPurchaseOrderPaymentTermsCatalog()->deleteById($POPaymentTerm->getIdPurchaseOrderPaymentTerm());
         }
         $purchaseOrderEntries = PurchaseOrderEntryQuery::create()->whereAdd(PurchaseOrderEntry::BASE_ENTRY, "", PurchaseOrderEntryQuery::IS_NOT_NULL)->whereAdd(PurchaseOrderEntry::BASE_LINE, "", PurchaseOrderEntryQuery::IS_NOT_NULL)->find();
         $purchaseOrderPaymentTerm = new PurchaseOrderPaymentsManager();
         $POPaymentTerms = $purchaseOrderPaymentTerm->createPaymentTerms($purchaseOrderEntries);
         $programmedPayments = PurchaseOrderProgrammedPaymentQuery::create()->find();
         $proformaInvoicePaymentTerms = ProformaInvoicePaymentTermQuery::create()->whereAdd(ProformaInvoicePaymentTerm::ID_PROFORMA_INVOICE_PAYMENT, $programmedPayments->getProformaInvoicePaymentTermIds())->find();
         while ($programmedPayments->valid()) {
             $programmedPayment = $programmedPayments->read();
             $proformaInvoicePaymentTerm = $proformaInvoicePaymentTerms->getByPK($programmedPayment->getIdProformaInvoicePaymentTerm());
             $POPaymentTerm = null;
             $POPaymentTerms->each(function (PurchaseOrderPaymentTerm $purchaseOrderPaymentTerm) use($programmedPayment, $proformaInvoicePaymentTerm, &$POPaymentTerm) {
                 if ($purchaseOrderPaymentTerm->getIdEvent() == $proformaInvoicePaymentTerm->getIdEvent() && $purchaseOrderPaymentTerm->getLine() == $programmedPayment->getLine() && $purchaseOrderPaymentTerm->getIdPurchaseOrder() == $programmedPayment->getIdPurchaseOrder()) {
                     $POPaymentTerm = $purchaseOrderPaymentTerm;
                 }
             });
             if ($POPaymentTerm instanceof PurchaseOrderPaymentTerm) {
                 $programmedPayment->setIdPurchaseOrderPaymentTerm($POPaymentTerm->getIdPurchaseOrderPaymentTerm());
                 $this->getPurchaseOrderProgrammedPaymentCatalog()->update($programmedPayment);
             }
         }
         $this->getPurchaseOrderPaymentTermsCatalog()->commit();
         die("fin");
     } catch (Exception $e) {
         $this->getPurchaseOrderPaymentTermsCatalog()->rollBack();
         die($e->getMessage());
     }
 }