Example #1
0
 /**
  * @author SL
  * @param Request $request
  * @param $installation
  * @param $product
  * @return array|\Illuminate\Http\Response
  */
 public function getCreditInformationForProduct(Request $request, $installation, $product)
 {
     try {
         if (!$request->has('deposit', 'order_amount')) {
             throw new Exception('Input field "deposit" and "order_amount" are both required.');
         }
         $inst = Installation::findOrFail(['ext_id' => $installation])->first();
         return $this->productGateway->getCreditInfo($inst->ext_id, $product, $inst->merchant->token, ['deposit_amount' => $request->input('deposit'), 'order_amount' => $request->input('order_amount')]);
     } catch (\Exception $e) {
         return $this->apiResponseFromException($e);
     }
 }
 /**
  * @author EB
  * @param Installation $installation
  * @return GroupEntity
  */
 private function fetchDefaultEditableProductSet(Installation $installation)
 {
     /** @var GroupEntity[] $groups */
     $groups = $this->productGateway->getProductGroupsWithProducts($installation->ext_id, $installation->merchant->token);
     foreach ($groups as $group) {
         $products = $group->getProducts();
         foreach ($products as $key => &$product) {
             if ($product->getDeposit()->getMinimumPercentage() == null && $product->getDeposit()->getMaximumPercentage() == null) {
                 unset($products[$key]);
             }
         }
         $group->setProducts($products);
     }
     return $groups;
 }
 /**
  * @author EB
  * @param array $creditInfo
  * @param array $limits
  * @param Installation $installation
  * @param $amount
  * @return array
  */
 public function getRestrictedDepositLimitsForProducts(array $creditInfo, array $limits, Installation $installation, $amount)
 {
     foreach ($creditInfo as &$group) {
         foreach ($group['products'] as &$product) {
             if (array_key_exists($product['id'], $limits)) {
                 $min = (int) max($product['deposit']['minimum_percentage'], $limits[$product['id']]['min_deposit_percentage']);
                 $max = (int) min($product['deposit']['maximum_percentage'], $limits[$product['id']]['max_deposit_percentage']);
                 if ($min > $max) {
                     unset($product);
                     continue;
                 }
                 $product['deposit']['minimum_percentage'] = $min;
                 $product['deposit']['maximum_percentage'] = $max;
                 $local = $this->productGateway->getCreditInfo($installation->ext_id, $product['id'], $installation->merchant->token, ['deposit_amount' => floor($amount * ($min / 100)), 'order_amount' => floor($amount)]);
                 $product['credit_info'] = $local;
                 $product['credit_info']['deposit_range']['minimum_amount'] = max(floor($amount * ($min / 100)), $product['credit_info']['deposit_range']['minimum_amount']);
                 $product['credit_info']['deposit_range']['maximum_amount'] = min(floor($amount * ($max / 100)), $product['credit_info']['deposit_range']['maximum_amount']);
             }
         }
     }
     return $creditInfo;
 }