/**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return void
  */
 public function execute(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $resultCheck = new ZeroPaymentResultCheckTransfer();
     $resultCheck->setFkSalesOrder($checkoutResponse->getSaveOrder()->getIdSalesOrder());
     $resultCheckResponse = $this->getFacade()->checkPaymentResult($resultCheck);
     if ($resultCheckResponse->getIsSuccess() === false) {
         $checkoutResponse->addError($this->createCheckoutErrorTransfer($resultCheckResponse));
     }
 }
 /**
  * @param \Generated\Shared\Transfer\PayolutionTransactionResponseTransfer $payolutionTransactionResponseTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 protected function checkForErrors(PayolutionTransactionResponseTransfer $payolutionTransactionResponseTransfer, CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     if (PayolutionConstants::REASON_CODE_SUCCESS !== $payolutionTransactionResponseTransfer->getProcessingReasonCode() || PayolutionConstants::STATUS_CODE_SUCCESS !== $payolutionTransactionResponseTransfer->getProcessingStatusCode() || PayolutionConstants::PAYMENT_CODE_PRE_CHECK !== $payolutionTransactionResponseTransfer->getPaymentCode()) {
         $errorCode = (int) preg_replace('/[^\\d]+/', '', $payolutionTransactionResponseTransfer->getProcessingCode());
         $error = new CheckoutErrorTransfer();
         $error->setErrorCode($errorCode)->setMessage($payolutionTransactionResponseTransfer->getProcessingReturn());
         $checkoutResponseTransfer->addError($error);
     }
 }
 /**
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
  *
  * @return \Orm\Zed\Payolution\Persistence\SpyPaymentPayolutionTransactionStatusLog
  */
 protected function getTransactionStatusLog(CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $transactionStatusLogQuery = $this->getQueryContainer()->queryTransactionStatusLogBySalesOrderId($checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder());
     $transactionStatusLogEntity = $transactionStatusLogQuery->findOne();
     if ($transactionStatusLogEntity === null) {
         throw new NotFoundHttpException('TransactionStatusLog entity could not be found');
     }
     return $transactionStatusLogEntity;
 }
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 public function validateCheckoutGrandTotal(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $totalsBefore = $quoteTransfer->getTotals()->getGrandTotal();
     $this->stackExecutor->recalculate($quoteTransfer);
     $totalsAfter = $quoteTransfer->getTotals()->getGrandTotal();
     if ($totalsBefore !== $totalsAfter) {
         $error = $this->createCheckoutErrorTransfer();
         $error->setErrorCode(CheckoutConstants::ERROR_CODE_CART_AMOUNT_DIFFERENT)->setMessage('Checkout grand total changed.');
         $checkoutResponseTransfer->addError($error);
     }
 }
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return void
  */
 public function checkCondition(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $groupedItemQuantities = $this->groupItemsBySku($quoteTransfer->getItems());
     foreach ($groupedItemQuantities as $sku => $quantity) {
         if (!$this->isProductSellable($sku, $quantity)) {
             $checkoutErrorTransfer = $this->createCheckoutErrorTransfer();
             $checkoutErrorTransfer->setErrorCode(CheckoutConstants::ERROR_CODE_PRODUCT_UNAVAILABLE)->setMessage('product.unavailable');
             $checkoutResponse->addError($checkoutErrorTransfer)->setIsSuccess(false);
         }
     }
 }
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return void
  */
 public function save(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $saveOrderTransfer = $checkoutResponse->getSaveOrder();
     foreach ($saveOrderTransfer->getOrderItems() as $itemTransfer) {
         foreach ($itemTransfer->getProductOptions() as $productOptionTransfer) {
             $salesOrderItemOptionEntity = $this->createSalesOrderItemOptionEntity();
             $salesOrderItemOptionEntity->fromArray($productOptionTransfer->toArray());
             $salesOrderItemOptionEntity->setFkSalesOrderItem($itemTransfer->getIdSalesOrderItem());
             $salesOrderItemOptionEntity->save();
             $productOptionTransfer->setIdSalesOrderItemOption($salesOrderItemOptionEntity->getIdSalesOrderItemOption());
         }
     }
 }
Ejemplo n.º 7
0
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 public function checkPreConditions(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     if ($quoteTransfer->getCustomer() !== null && $quoteTransfer->getCustomer()->getIdCustomer() !== null) {
         return;
     }
     if ($quoteTransfer->getCustomer()->getIsGuest() === true) {
         return;
     }
     if ($this->customer->hasEmail($quoteTransfer->getCustomer()->getEmail())) {
         $checkoutErrorTransfer = $this->createCheckoutErrorTransfer();
         $checkoutErrorTransfer->setErrorCode(CheckoutConstants::ERROR_CODE_CUSTOMER_ALREADY_REGISTERED)->setMessage('Email already taken');
         $checkoutResponseTransfer->setIsSuccess(false)->addError($checkoutErrorTransfer);
     }
 }
 /**
  * Test the saveOrderPayment() method of PayolutionFacade
  *
  * @return void
  */
 public function testSaveOrderPayment()
 {
     $this->markTestSkipped('Payolution request is too slow');
     $this->setBaseTestData();
     $addressTransfer = (new AddressTransfer())->setCity('Berlin')->setZipCode('10623')->setAddress1('Straße des 17. Juni 135')->setFirstName('Jane')->setLastName('Doe')->setEmail('*****@*****.**')->setIso2Code('DE')->setSalutation(SpyCustomerTableMap::COL_SALUTATION_MR);
     $payolutionPaymentTransfer = new PayolutionPaymentTransfer();
     $payolutionPaymentTransfer->setAccountBrand(ApiConstants::BRAND_INVOICE)->setClientIp('127.0.0.1')->setDateOfBirth('1970-01-02')->setGender(SpyCustomerTableMap::COL_GENDER_MALE)->setAddress($addressTransfer)->setAccountBrand(ApiConstants::BRAND_INVOICE)->setLanguageIso2Code('DE')->setCurrencyIso3Code('EUR')->setEmail($addressTransfer->getEmail());
     // PayolutionCheckoutConnector-HydrateOrderPlugin emulation
     $quoteTransfer = new QuoteTransfer();
     $paymentTransfer = new PaymentTransfer();
     $paymentTransfer->setPayolution($payolutionPaymentTransfer);
     $quoteTransfer->setPayment($paymentTransfer);
     $checkoutResponseTransfer = new CheckoutResponseTransfer();
     $saveOrderTransfer = new SaveOrderTransfer();
     $saveOrderTransfer->setIdSalesOrder($this->orderEntity->getIdSalesOrder());
     $checkoutResponseTransfer->setSaveOrder($saveOrderTransfer);
     $facade = $this->payolutionFacade;
     $facade->saveOrderPayment($quoteTransfer, $checkoutResponseTransfer);
     $paymentEntity = $this->orderEntity->getSpyPaymentPayolutions()->getFirst();
     $this->assertInstanceOf(SpyPaymentPayolution::class, $paymentEntity);
     $this->assertEquals(ApiConstants::BRAND_INVOICE, $paymentEntity->getAccountBrand());
     $this->assertEquals('127.0.0.1', $paymentEntity->getClientIp());
 }
Ejemplo n.º 9
0
 /**
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
  * @param \Orm\Zed\Sales\Persistence\SpySalesExpense $salesOrderExpenseEntity
  *
  * @return void
  */
 protected function setCheckoutResponseExpenses(CheckoutResponseTransfer $checkoutResponseTransfer, ExpenseTransfer $expenseTransfer, SpySalesExpense $salesOrderExpenseEntity)
 {
     $orderExpense = clone $expenseTransfer;
     $orderExpense->setIdSalesExpense($salesOrderExpenseEntity->getIdSalesExpense());
     $checkoutResponseTransfer->getSaveOrder()->addOrderExpense($orderExpense);
 }
Ejemplo n.º 10
0
 /**
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 protected function setPostConditionErrorRoute(CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     foreach ($checkoutResponseTransfer->getErrors() as $error) {
         if (isset($this->errorCodeToRouteMatching[$error->getErrorCode()])) {
             $this->postConditionErrorRoute = $this->errorCodeToRouteMatching[$error->getErrorCode()];
         }
     }
 }
Ejemplo n.º 11
0
 /**
  * @return \Generated\Shared\Transfer\CheckoutResponseTransfer
  */
 protected function createBaseCheckoutResponse()
 {
     $checkoutResponseTransfer = new CheckoutResponseTransfer();
     $checkoutResponseTransfer->setSaveOrder(new SaveOrderTransfer());
     return $checkoutResponseTransfer;
 }
Ejemplo n.º 12
0
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return \Generated\Shared\Transfer\CheckoutResponseTransfer
  */
 public function postSaveHook(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $apiLogsQuery = $this->queryContainer->getLastApiLogsByOrderId($quoteTransfer->getIdSalesOrder());
     $apiLog = $apiLogsQuery->findOne();
     if ($apiLog) {
         $redirectUrl = $apiLog->getRedirectUrl();
         if ($redirectUrl !== null) {
             $checkoutResponse->setIsExternalRedirect(true);
             $checkoutResponse->setRedirectUrl($redirectUrl);
         }
     }
     return $checkoutResponse;
 }
Ejemplo n.º 13
0
 /**
  * @return void
  */
 public function testPostConditionChangeErrorRouteIfResponseFalseAndErrorCodeMatches()
 {
     $checkoutResponseTransfer = new CheckoutResponseTransfer();
     $checkoutResponseTransfer->setIsSuccess(false);
     $checkoutErrorTransfer = new CheckoutErrorTransfer();
     $checkoutErrorTransfer->setErrorCode(static::ERROR_CODE_123);
     $checkoutResponseTransfer->addError($checkoutErrorTransfer);
     $checkoutClientMock = $this->getCheckoutClientMock();
     $checkoutClientMock->method('placeOrder')->willReturn($checkoutResponseTransfer);
     $abstractPlaceOrderStepMock = $this->getAbstractPlaceOrderStep($checkoutClientMock);
     $quoteTransfer = new QuoteTransfer();
     $quoteTransfer->setOrderReference(self::ORDER_REFERENCE);
     $abstractPlaceOrderStepMock->execute($this->getRequest(), $quoteTransfer);
     $this->assertFalse($abstractPlaceOrderStepMock->postCondition($quoteTransfer));
     $this->assertSame(self::ESCAPE_ROUTE_123, $abstractPlaceOrderStepMock->getPostConditionErrorRoute());
 }
Ejemplo n.º 14
0
 /**
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 protected function saveOrderExpenseDiscounts(CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $idSalesOrder = $checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder();
     $orderExpenses = $checkoutResponseTransfer->getSaveOrder()->getOrderExpenses();
     foreach ($orderExpenses as $expenseTransfer) {
         foreach ($expenseTransfer->getCalculatedDiscounts() as $calculatedDiscountTransfer) {
             $salesDiscountEntity = $this->createSalesDiscountEntity($calculatedDiscountTransfer);
             $salesDiscountEntity->setFkSalesOrder($idSalesOrder);
             $salesDiscountEntity->setFkSalesExpense($expenseTransfer->getIdSalesExpense());
             $this->saveDiscount($salesDiscountEntity, $calculatedDiscountTransfer);
         }
     }
 }
 /**
  * @return \Generated\Shared\Transfer\CheckoutResponseTransfer
  */
 private function getCheckoutResponseTransfer()
 {
     $checkoutResponseTransfer = new CheckoutResponseTransfer();
     $checkoutResponseTransfer->setIsSuccess(true);
     $saveOrderTransfer = new SaveOrderTransfer();
     $saveOrderTransfer->setIdSalesOrder(23);
     $checkoutResponseTransfer->setSaveOrder($saveOrderTransfer);
     return $checkoutResponseTransfer;
 }
Ejemplo n.º 16
0
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 public function saveOrderPayment(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $paymentEntity = $this->savePaymentForOrder($quoteTransfer->getPayment()->getPayolution(), $checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder());
     $this->savePaymentForOrderItems($checkoutResponseTransfer->getSaveOrder()->getOrderItems(), $paymentEntity->getIdPaymentPayolution());
 }
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return void
  */
 public function checkCondition(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $checkoutResponseTransfer->fromArray($this->checkoutResponse->toArray(true), true);
 }
Ejemplo n.º 18
0
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return void
  */
 public function saveOrder(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $checkoutResponse->fromArray($this->checkoutResponse->toArray(true), true);
 }
Ejemplo n.º 19
0
 /**
  * @return void
  */
 public function testSaveDiscountMustNotSaveSalesDiscountCodesIfUsedCodeCanNotBeFound()
 {
     $discountSaver = $this->getDiscountOrderSaverMock(['persistSalesDiscount', 'persistSalesDiscountCode', 'getDiscountVoucherEntityByCode']);
     $discountSaver->expects($this->once())->method('persistSalesDiscount');
     $discountSaver->expects($this->never())->method('persistSalesDiscountCode');
     $discountSaver->expects($this->once())->method('getDiscountVoucherEntityByCode')->will($this->returnValue(false));
     $calculatedDiscountTransfer = new CalculatedDiscountTransfer();
     $calculatedDiscountTransfer->setVoucherCode(self::USED_CODE_1);
     $quoteTransfer = new QuoteTransfer();
     $orderItemTransfer = new ItemTransfer();
     $orderItemTransfer->addCalculatedDiscount($calculatedDiscountTransfer);
     $quoteTransfer->addItem($orderItemTransfer);
     $checkoutResponseTransfer = new CheckoutResponseTransfer();
     $saverOrderTransfer = new SaveOrderTransfer();
     $saverOrderTransfer->setIdSalesOrder(self::ID_SALES_ORDER);
     $saverOrderTransfer->setOrderItems($quoteTransfer->getItems());
     $checkoutResponseTransfer->setSaveOrder($saverOrderTransfer);
     $discountSaver->saveDiscounts($quoteTransfer, $checkoutResponseTransfer);
 }
Ejemplo n.º 20
0
 /**
  * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse
  *
  * @return void
  */
 public function executeHook(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse)
 {
     $checkoutResponse->fromArray($this->checkoutResponse->toArray(true), true);
 }
Ejemplo n.º 21
0
 /**
  * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
  *
  * @return \Generated\Shared\Transfer\SaveOrderTransfer
  */
 protected function getSaveOrderTransfer(CheckoutResponseTransfer $checkoutResponseTransfer)
 {
     $saveOrderTransfer = $checkoutResponseTransfer->getSaveOrder();
     if ($saveOrderTransfer === null) {
         $saveOrderTransfer = $this->createSaveOrderTransfer();
     }
     return $saveOrderTransfer;
 }