/** * * * @author Erick Guevara Martínez * @param PurchaseOrderProgrammedPaymentCollection $purchaseProgrammedPayments * @param ProformaInvoicePaymentTermCollection $proformaPaymentTerms * @return CondensedProgrammedPaymentCollection */ private function condensePurchasePayments(PurchaseOrderProgrammedPaymentCollection $purchaseProgrammedPayments, ProformaInvoicePaymentTermCollection $proformaPaymentTerms) { $condensedPayments = new CondensedProgrammedPaymentCollection(); $actualPayments = ActualPaymentQuery::create()->whereAdd(ActualPayment::ID_PROGRAMMED_PAYMENT, $purchaseProgrammedPayments->getProgrammedPayments())->find(); $purchaseOrders = PurchaseOrderQuery::create()->whereAdd(PurchaseOrder::ID_PURCHASE_ORDER, $purchaseProgrammedPayments->getPurchaseOrderIds())->find(); while ($purchaseProgrammedPayments->valid()) { $programmedPayment = $purchaseProgrammedPayments->read(); $paymentTerm = $proformaPaymentTerms->getByPK($programmedPayment->getIdProformaInvoicePaymentTerm()); if (!$paymentTerm instanceof ProformaInvoicePaymentTerm) { $paymentTerm = new ProformaInvoicePaymentTerm(); } $credits = $actualPayments->filterByProgrammedPayment($programmedPayment); $purchaseOrder = $purchaseOrders->getByPK($programmedPayment->getIdPurchaseOrder()) ?: new PurchaseOrder(); $pk = $programmedPayment->getIdPurchaseOrder() . $programmedPayment->getType() . $paymentTerm->getIdEvent(); $condensedPayment = $condensedPayments->getByPkOrElse($pk, new CondensedProgrammedPayment()); $programmedPaymentIds = array_merge($condensedPayment->getProgrammedPaymentIds(), array($programmedPayment->getIdProgrammedPayment())); CondensedProgrammedPaymentFactory::populate($condensedPayment, array(CondensedProgrammedPayment::ID_DOCUMENT => $programmedPayment->getIdPurchaseOrder(), CondensedProgrammedPayment::SAP_DOCNUM => $purchaseOrder->getSapDocumentNumber(), CondensedProgrammedPayment::ID_EVENT => $paymentTerm->getIdEvent(), CondensedProgrammedPayment::ID_SUPPLIER => $programmedPayment->getIdCompany(), CondensedProgrammedPayment::TYPE => $programmedPayment->getType(), CondensedProgrammedPayment::AMMOUNT => $condensedPayment->getAmmount() + $programmedPayment->getAmmount(), CondensedProgrammedPayment::CREDITS => $condensedPayment->getCredits() + $credits->getTotalAmmount(), CondensedProgrammedPayment::CURRENCY => $programmedPayment->getIdCurrency(), CondensedProgrammedPayment::DUE_DATE => $programmedPayment->getDueDate(), CondensedProgrammedPayment::PROGRAMMED_PAYMENT_IDS => $programmedPaymentIds, CondensedProgrammedPayment::STATUS => $programmedPayment->getStatus())); $condensedPayments->append($condensedPayment); } return $condensedPayments; }
/** * * * @author Erick Guevara Martínez * @param ProformaInvoicePaymentTerm $proformaInvoicePaymentTerm * @return \Application\Model\Collection\ProformaInvoiceProgrammedPaymentCollection */ public function filterByPaymentTerm(ProformaInvoicePaymentTerm $proformaInvoicePaymentTerm) { return $this->filter(function (ProformaInvoiceProgrammedPayment $proformaInvoiceProgrammedPayment) use($proformaInvoicePaymentTerm) { return $proformaInvoiceProgrammedPayment->getIdProformaInvoicePaymentTerm() == $proformaInvoicePaymentTerm->getIdProformaInvoicePayment(); }); }