/** * @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 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; }