public function doDepositCalculation()
 {
     App::setLocale(Cookie::get('locale', 'ru'));
     $isMain = intval(Input::get('is_main'));
     $depositAmount = intval(trim(Input::get('deposit_amount')));
     $term = intval(trim(Input::get('term')));
     $monthlyInstallment = intval(trim(Input::get('monthly_installment')));
     $currency = trim(Input::get('currency'));
     $interestPaymentType = trim(Input::get('interest_payment_type'));
     $interestPaymentPercent = trim(Input::get('interest_payment_percent'));
     if (!$depositAmount || !$term || !$currency) {
         return Response::json(array('status' => false));
     }
     $calculator = new DepositCalculator();
     $calculator->setDepositAmount($depositAmount);
     $calculator->setTerm($term);
     $calculator->setMonthlyInstallment($monthlyInstallment);
     $calculator->setCurrency($currency);
     $viewTemplate = 'partials.calculators.partials.deposit_table_main';
     $sliderHtml = '';
     if (!$isMain) {
         $calculator->setInterestPaymentType($interestPaymentType);
         $calculator->setInterestPaymentPercent($interestPaymentPercent);
         $calculator->setIsMain(false);
         $viewTemplate = 'partials.calculators.partials.deposit_table';
     }
     $calculations = $calculator->calculate();
     if (!$isMain) {
         $depositsIds = Tree::getDepositsCompared();
         $depositsCatalog = Cache::tags('j_tree')->rememberForever('deposits_catalog_' . App::getLocale(), function () {
             return Tree::find(Collector::get('idDepositsCatalog'));
         });
         $deposits = Cache::tags('j_tree')->rememberForever('deposits_products_' . App::getLocale(), function () use($depositsCatalog) {
             return $depositsCatalog->children()->get();
         });
         $deposits = Tree::filterDepositsByIds($deposits, $depositsIds);
         $allDeposits = Cache::tags('deposits')->rememberForever('deposits_' . App::getLocale(), function () {
             return Deposit::all();
         });
         $depositOptionsGroups = Deposit::prepareData($allDeposits);
         $sliderHtml = View::make('private-persons.deposits.partials.deposits_slider', compact('deposits', 'depositOptionsGroups', 'calculations'))->render();
     }
     $html = View::make($viewTemplate, compact('result', 'currency', 'calculations'))->render();
     $firstDepositData = array();
     if ($calculations) {
         $firstDepositData = array_values($calculations)[0];
     }
     return Response::json(array('status' => true, 'html' => $html, 'slider_html' => $sliderHtml, 'currency' => isset($calculations['currency']) ? $calculations['currency'] : '', 'result' => isset($calculations['sum']) ? $calculations['sum'] : '', 'sum' => $firstDepositData['sum']));
 }
    $cities = Cache::tags('cities')->rememberForever('cities_' . App::getLocale(), function () {
        return City::active()->get();
    });
    $shops = Cache::tags('shops')->rememberForever('shops_' . App::getLocale(), function () {
        return Shop::active()->get();
    });
    $products = Cache::tags('products')->rememberForever('products_' . App::getLocale(), function () {
        return Product::active()->get();
    });
    $view->with('cities', $cities)->with('shops', $shops)->with('products', $products);
});
View::composer('partials.calculators.cards', function ($view) {
    $programs = Cache::tags('j_tree', 'cards_programs')->rememberForever('privates_cards_programs_' . App::getLocale(), function () {
        return CardProgram::active()->get();
    });
    $cards = Cache::tags('j_tree', 'cards')->rememberForever('privates_cards_' . App::getLocale(), function () {
        $cardsCatalog = Tree::find(Collector::get('idCardsCatalog'));
        return $cardsCatalog->immediateDescendants()->with('cardsPrograms')->active()->get();
    });
    $view->with('programs', $programs)->with('cards', $cards);
});
View::composer('partials.calculators.want_multiply', function ($view) {
    $calculatorDeposit = new DepositCalculator();
    $calculatorDeposit->setDepositAmount(Settings::get('deposit_amount_default', 100000));
    $calculatorDeposit->setTerm(Settings::get('term_default', 3));
    $calculatorDeposit->setMonthlyInstallment(0);
    $calculatorDeposit->setCurrency('uah');
    $calculatorDeposit->setIsMain(true);
    $calculations = $calculatorDeposit->calculate();
    $view->with('calculations', $calculations);
});
 public function showDepositsCatalog()
 {
     $page = $this->node;
     $tree = Collector::get('root');
     $subTree = Tree::getSubTree($tree, $page);
     $blocks = null;
     $calculations = array();
     if ($subTree) {
         $blocks = $subTree->children;
         $depositsContainer = $blocks->filter(function ($block) {
             return $block->slug == 'products';
         });
         if ($depositsContainer->isEmpty()) {
             $deposits = array();
         } else {
             $deposits = $depositsContainer->first()->children;
         }
         $filteredDepositEntities = Cache::tags('deposits')->rememberForever('deposits_default_' . App::getLocale(), function () {
             return Deposit::amountFrom(3000)->terms(array(0, 3))->withoutMonthly()->currency('uah')->get();
         });
         $filteredDepositEntitiesIds = array();
         foreach ($filteredDepositEntities as $filteredDepositEntity) {
             $filteredDepositEntitiesIds[] = $filteredDepositEntity->id_tb_tree;
         }
         Tree::setDepositsCompared($filteredDepositEntitiesIds);
         $deposits = Tree::filterDepositsByIds($deposits, $filteredDepositEntitiesIds);
         $maxPercents = Deposit::prepareMaxPercents($filteredDepositEntities);
         $depositOptionsGroups = Deposit::prepareData($filteredDepositEntities);
         $calculator = new DepositCalculator();
         $calculator->setDepositAmount(Settings::get('deposit_amount_default', 100000));
         $calculator->setTerm(Settings::get('term_default', 3));
         $calculator->setMonthlyInstallment(0);
         $calculator->setCurrency('uah');
         $calculator->setInterestPaymentType($maxPercents['max_percent_type']);
         $calculator->setInterestPaymentPercent($maxPercents['max_percent']);
         $calculator->setIsMain(false);
         $calculations = $calculator->calculate();
     }
     return View::make('private-persons.deposits.catalog', compact('page', 'blocks', 'deposits', 'depositOptionsGroups', 'maxPercents', 'calculations'));
 }