/* generated from /var/www/production/zenmoney/html//a/templates/savings/js//js.list */ /* file: savings.js*/ // Подбор вкладов Savings = {}; Savings.auth = undefined; Savings.dom = { list: {}, // Страница списка депозитов view: {} // Страница депозита }; Savings.hashchange = function(){ var hash = window.location.hash; var view = false; var arr_hash = String(hash).split('?'); if(typeof arr_hash[1] != 'undefined'){ Savings.view.id( arr_hash[1] ); }else{ Savings.list.show(); } } /* * * Страница депозита * */ Savings.view = {}; Savings.view.fill = function(res){ var view = Savings.dom.view; var dep_id = res.id; $('.tpl-name', view.parent).text(res.name); $('.tpl-bank_www', view.parent).attr({href: 'http://'+res.bank.www}); $('.tpl-bank_url', view.parent).attr({href: res.url}); var bank_id = $('.tpl-bank_deposits', view.parent).attr('rel'); if( bank_id != res.bank.id ){ $('.tpl-bank_deposits', view.parent).attr({'rel':res.bank.id}).html(''); $.ajax({ url: '/api/v1/company/'+res.bank.id+'/savings/', dataType: 'json', success: function(res){ var output = ''; for( var i = 0; i < res.length; i++ ){ if( dep_id == res[i].id ){ output += '
  • '+String(res[i].name).safeText()+'
  • '; }else{ output += '
  • '+String(res[i].name).safeText()+'
  • '; } } $('.tpl-bank_deposits', view.parent).html(output); } }); }else{ $('.tpl-bank_deposits', view.parent).find('li').removeClass('current'); $('.tpl-bank_deposits', view.parent).find('li[rel="'+dep_id+'"]').addClass('current'); } var pay = { AHEAD: 'в начале срока', MONTHLY: 'ежемесячно', END_OF_CALENDAR_MONTH: 'в конце месяца', QUARTERLY: 'ежеквартально', SEMIANNUALY: 'раз в полгода', ANNUALY: 'ежегодно', AT_THE_END: 'в конце срока' } var pay_o = pay[res['payment-of-interest']]; if( typeof pay_o == 'undefined' ) pay_o = ''; $('.tpl-payment-of-interest', view.parent).html(pay_o); var params = ''; if( res['capitalization'] == 'YES' ) params += '

    Капитализируемые проценты

    '; if( res['replenishment'] ) params += '

    Возможность пополнения

    '; if( res['partial-withdrawal'] ) params += '

    Возможность частичного снятия

    '; $('.tpl-main_params', view.parent).html(params); var insurance = ''; if( res.bank.is_insurance ) insurance = '
    Участник программы страхования вкладов
    '; $('.tpl-insurance', view.parent).html(insurance); $('.tpl-bank_site', view.parent).attr({href:'http://'+res.bank.www}).html(res.bank.www); $('.tpl-bank_name', view.parent).text(res.bank.title); /* rates */ var left_tbl = $('#depositTableWrapLeft .depositTable'); var right_tbl = $('#depositTableMoveWrap .depositTable'); /* Рубль 10 000—249 999 */ /* Сортировка */ var sort_period = []; var sort_sum = []; var sort_cur = []; /* Сортировка */ var left_data = []; var right_data = []; var instruments = { 2: 'Рубль', 1: 'Доллар', 3: 'Евро' }; var inst = undefined; var inst_title = undefined; var sum = ''; var period = ''; var col = -1; var row = -1; var gen_sum_title = function(rate){ if( rate['min-sum'] != null ){ var min = String(String(rate['min-sum']).split(',')[0]).parseNumber('float'); }else{ var min = false; } if( rate['max-sum'] != null ){ var max = String(String(rate['max-sum']).split(',')[0]).parseNumber('float'); }else{ var max = false; } if( min && max ){ var output = min+'—'+max; var output = { min: min, max: max, text: min.toCost()+'—'+max.toCost() } }else{ if( !min ){ var output = { min: 0, max: max, text: 'до '+max.toCost() } }else{ var output = { min: min, max: +Infinity, text: 'от '+min.toCost() } } } if( output.min.toCost() == output.max.toCost() ){ output.text = min.toCost(); } return output; } var gen_period_title = function(rate){ if( rate['min-period'] != null ){ var min = String(rate['min-period']).parseNumber('float'); }else{ var min = false; } if( rate['max-period'] != null ){ var max = String(rate['max-period']).parseNumber('float'); }else{ var max = false; } if( min && max ){ var output = { min: min, max: max, text: min+'—'+max } }else{ if( !min ){ var output = { min: 0, max: max, text: 'до '+max }; }else{ var output = { min: min, max: Infinity, text: 'от '+min } } } if( output.min == output.max ){ output.text = output.min; } return output; } var parseRateValue = function(rate){ var value = String(String(rate['rate-value']).split(',')[0]).parseNumber('float'); return value; } var sort_obj = {}; var sort = { instrument: [], period: [], period_min: [], sum: {}, sum_min: {} }; var search_min = function(arr){ var index = -1; var value = Infinity; for( var i = 0; i < arr.length; i++ ){ if(arr[i] < value){ value = arr[i]; index = index; } } return value; } var search_max = function(arr){ var index = -1; var value = -Infinity; for( var i = 0; i < arr.length; i++ ){ if(arr[i] > value){ value = arr[i]; index = index; } } return value; } var sortPush = function(text_arr, num_arr, push){ var flag = false; for( var i = 0; i < num_arr.length; i++ ){ if( num_arr[i] == push.min ) flag = true; } if( !flag ){ text_arr.push( push.text ); num_arr.push( push.min ); var i = 0; var tmp = undefined; while( i < num_arr.length-1 ){ if( num_arr[i] > num_arr[i+1] ){ tmp = num_arr[i]; num_arr[i] = num_arr[i+1]; num_arr[i+1] = tmp; tmp = text_arr[i]; text_arr[i] = text_arr[i+1]; text_arr[i+1] = tmp; i -= 1; if( i < 0 ) i = 0; }else{ i++; } } } } for( var i = 0; i < res.rates.length; i++ ){ if( inst != res.rates[i].instrument ){ var flag = false; for( var m = 0; m < sort.instrument.length; m++ ){ if( sort.instrument[m] == res.rates[i].instrument ) flag = true; } inst = res.rates[i].instrument; if( !flag ){ sort_obj[ inst ] = {}; sort.instrument.push(inst); if( typeof sort.sum[inst] == 'undefined' ){ sort.sum[inst] = []; sort.sum_min[inst] = []; } } } var n_sum = gen_sum_title(res.rates[i]); if( typeof sort_obj[ res.rates[i].instrument ][ n_sum.text ] == 'undefined' ){ sort_obj[ inst ][ n_sum.text ] = {}; } var n_period = gen_period_title(res.rates[i]); sort_obj[ inst ][ n_sum.text ][ n_period.text ] = parseRateValue( res.rates[i] ); sortPush(sort.sum[ inst ], sort.sum_min[ inst ], n_sum); sortPush(sort.period, sort.period_min, n_period); } // /* Левая часть таблицы */ var output = ''; for( var i = 0; i < sort.instrument.length; i++ ){ var inst = sort.instrument[i]; output += ''+instruments[inst]+''; for( var j = 0; j < sort.sum[inst].length; j++ ){ output += ''+sort.sum[inst][j]+''; } } $(left_tbl).html( 'Сумма вклада '+output+'' ); /* Правая часть таблицы */ var out_rates = ''; var out_periods = ''; out_periods += ''; for( var j = 0; j < sort.period.length; j++ ){ out_periods += ''+sort.period[j]+''; } out_periods += ''; for( var i = 0; i < sort.instrument.length; i++ ){ var inst = sort.instrument[i]; out_rates += ''; for( var j = 0; j < sort.period.length; j++ ){ out_rates += ' '; } out_rates += ''; for( var j = 0; j < sort.sum[inst].length; j++ ){ var sum = sort.sum[inst][j]; out_rates += ''; for( var k = 0; k < sort.period.length; k++ ){ var per = sort.period[k]; var rate = Number(sort_obj[inst][sum][per]).toCost(2, true); out_rates += ''+rate+'%'; } out_rates += ''; } } $(right_tbl).html( 'Срок размещения, дней'+out_periods+''+out_rates+'' ); /* rates */ setTimeout('$(window).resize();', 100); } Savings.view.id = function(id){ if( id ){ $.ajax({ url: '/api/s1/saving/'+id+'/', dataType: 'json', success: function(res){ Savings.view.fill(res); Savings.dom.list.parent.hide(); Savings.dom.view.parent.show(); }, error: function(){ alert('Ошибка загрузки'); } }); } } /* * * Список депозитов * */ Savings.list = {}; Savings.list.start = '0.0'; Savings.list.limit = 20; Savings.list.state = false; Savings.list.more = function(){ $('#savings-search-more').find('.more').addClass('loading'); Savings.list.load(Savings.list.start, Savings.list.limit); } Savings.instrument = { 1: { symbol: "$", title_short: 'USD' }, 2: { symbol: "руб.", title_short: 'RUB' }, 3: { symbol: "€", title_short: 'EUR' } } Savings.list.onload = function(res){ var input = Savings.dom.list.input; var sum = String( input.filter('[name="sum"]').val() ).parseNumber(); var curs = { USD: '$', EUR: '€', RUB: 'руб.' } var currency = curs[ input.filter('[name="currency"]').val() ]; var tpl = ''; tpl += '
    '; tpl += '
    '; tpl += '
    '; tpl += ' {title} {sponsored} {from-bank}'; tpl += '
    '; tpl += '
    Выплата процентов — {payments}.
    '; tpl += '
    '; tpl += '
    '; tpl += '
    {percent}%
    '; tpl += '
    '; tpl += '
    '; tpl += '
    {total} {currency}
    '; tpl += '
    '; tpl += ' Доход — {income} {currency}'; tpl += '
    '; tpl += '
    '; tpl += '
     
    '; tpl += '
    '; Savings.list.start = res.next; if( typeof res.next == 'undefined' ){ // Убираем "еще" $('#savings-search-more').addClass('hidden').find('.more').removeClass('loading'); }else{ // Показываем "еще" $('#savings-search-more').removeClass('hidden').find('.more').removeClass('loading'); } var output = ''; for( var i = 0; i < res.result.length; i++ ){ var sav = res.result[i]; var t_tpl = tpl.replace(/{id}/g, sav.saving); t_tpl = t_tpl.replace(/{title}/g, String(sav.saving_title).safeText()); t_tpl = t_tpl.replace(/{favicon}/g, 'http://'+sav.bank_www+'/favicon.ico'); t_tpl = t_tpl.replace(/{from-bank}/g, String(sav.bank_title).safeText()); var pay = { AHEAD: 'в начале срока', MONTHLY: 'ежемесячно', END_OF_CALENDAR_MONTH: 'в конце месяца', QUARTERLY: 'ежеквартально', SEMIANNUALY: 'раз в полгода', ANNUALY: 'ежегодно', AT_THE_END: 'в конце срока' } var payments = [ ''+pay[sav['payment-of-interest']]+'' ]; if( sav.is_capitalization == true ){ payments.push( 'проценты капитализируются' ); } if( sav.is_updatable == true ){ payments.push( 'возможно пополнение вклада' ); } if( sav.is_partial == true ){ payments.push( 'возможно частичное снятие' ); } t_tpl = t_tpl.replace(/{payments}/g, payments.join(', ')); t_tpl = t_tpl.replace(/{percent}/g, String(sav.percent).parseNumber('float').toCost(2)); var total = String(sav.total).parseNumber(); t_tpl = t_tpl.replace(/{total}/g, total.toCost()); t_tpl = t_tpl.replace(/{income}/g, Number( total-sum ).toCost()); t_tpl = t_tpl.replace(/{currency}/g, currency); if( sav.sponsor_flag == true ){ t_tpl = t_tpl.replace(/{sponsored}/g, ''); }else{ t_tpl = t_tpl.replace(/{sponsored}/g, ''); } output += t_tpl; } if( Savings.list.state ){ // Догрузка $('#savings-search-result').append('
    '+output); }else{ // Первоначальная загрузка Savings.list.state = true; $('#savings-search-result').html(output); } } Savings.list.onerror = function(xhr){ $('#savings-search-result').html('Нет вкладов удовлетворяющих условиям поиска.'); $('#savings-search-more').addClass('hidden').find('.more').removeClass('loading'); } Savings.list.load = function(start, limit){ var filter = {}; var input = Savings.dom.list.input; filter.sum = input.filter('[name="sum"]').val(); filter.currency = input.filter('[name="currency"]').val(); filter.period = input.filter('[name="period"]').val(); filter.region = input.filter('[name="region"]').val(); if( input.filter('[name="payment-of-interest"]').val() != '-1' ){ filter['payment-of-interest'] = input.filter('[name="payment-of-interest"]').val(); } if( input.filter('[name="capitalization"]:checked').val() == '1' ){ filter.capitalization = true; } if( input.filter('[name="replenishment"]:checked').val() == '1' ){ filter.replenishment = true; } if( input.filter('[name="capitalization"]:checked').val() == '1' ){ filter.capitalization = true; } if( input.filter('[name="partial-withdrawal"]:checked').val() == '1' ){ filter['partial-withdrawal'] = true; } if( ( typeof start != 'undefined' ) && ( typeof limit != 'undefined' ) ){ // Догружаем filter.skip = start; filter.limit = limit; $.ajax({ url: '/api/a1/saving/', type: 'get', dataType: 'json', data: filter, success: Savings.list.onload, error: Savings.list.onerror }); }else{ // Начальная загрузка Savings.list.state = false; Savings.list.skip = '0.0'; Savings.list.limit = 20; filter.start = Savings.list.start; filter.limit = Savings.list.limit; $.ajax({ url: '/api/a1/saving/', type: 'get', dataType: 'json', data: filter, success: Savings.list.onload, error: Savings.list.onerror }); } } Savings.list.show = function(){ if( !Savings.list.state ){ Savings.list.load(); } Savings.dom.list.parent.show(); Savings.dom.view.parent.hide(); } Savings.init_auth = function(){ // Инициализация если пользователь авторизован Savings.auth = true; var input = Savings.dom.list.input; /* Город по умолчанию */ var select = $('#cityChangeWrap select[name="region"]'); $(select).val(zm.profile.user.city); var city = $(select).find('option[value="'+zm.profile.user.city+'"]').html(); $('#cityChangeWrap h2>.link').html(city); /* Город по умолчанию */ /* Валюта по умолчанию */ if( typeof Savings.instrument[ zm.profile.user.currency ] != 'undefined' ){ var title_short = Savings.instrument[ zm.profile.user.currency ].title_short; input.filter('[name="currency"]').val(title_short); } /* Валюта по умолчанию */ /* Сумма вклада */ /* Сумма вклада */ zm.pbind('zenmoney_hashchange', Savings.hashchange); Savings.hashchange(); } Savings.init_not_auth = function(){ // Инициализация если пользователь НЕ авторизован Savings.auth = false; var input = Savings.dom.list.input; /* Город по умолчанию */ var select = $('#cityChangeWrap select[name="region"]'); $(select).val(1); var city = $(select).find('option[value="1"]').html(); $('#cityChangeWrap h2>.link').html(city); /* Город по умолчанию */ /* Валюта по умолчанию */ input.filter('[name="currency"]').val('RUB'); /* Валюта по умолчанию */ /* Сумма вклада */ /* Сумма вклада */ $(window).bind('hashchange', Savings.hashchange); Savings.hashchange(); } Savings.init = function(auth){ var list = Savings.dom.list; list.parent = $('#savings_list'); list.form = $('#saving-filter', list.parent); list.result = $('#savings-search-result', list.parent); list.input = $('input[type="text"],select,input[type="radio"]', list.form); $('#savings-search-more').find('.more').click(Savings.list.more); var view = Savings.dom.view; view.parent = $('#savings_view'); list.form.bind('submit', function(e){ e.preventDefault(); Savings.list.load(); }); if( typeof zm.profile != 'undefined' ){ Savings.init_auth(); }else{ Savings.init_not_auth(); } $('#cityChangeWrap').click(function(){ return false; }); $('#cityChangeWrap h2>.link').click(function(){ return false; }); $('#cityChangeWrap select[name="region"]').change(function(){ var value = $(this).val(); $('#cityChangeWrap h2>.link').text( $('option[value="'+value+'"]', this).text() ); setTimeout(function(){ $('#cityChangeWrap').parents('form:first').submit(); }, 100); }); $('#cityChangeWrap .select').css({'opacity':0}); } /* file: main.js*/ zm.loader.page.load = function(){ document.title = 'Подбор вкладов'; Savings.init(true); }; zm.loader.page.destroy = function(){ delete Savings }; zm.loader.page.load();