class CardsController < ApplicationController layout "callc" #before_filter :cdr2calls, :check_localization before_filter :check_localization before_filter :check_calingcards_enabled before_filter :authorize before_filter :check_cc_addon before_filter :find_cardgruop, :only => [:card_buy_finish, :card_buy, :import_csv, :create, :new, :card_payment_finish, :list, :act, :act_confirm, :act2, :card_pay, :card_payment_status] before_filter :find_card, :only => [:card_active, :card_buy_finish, :card_buy, :payments, :destroy, :update, :edit, :card_pay, :card_payment_status, :card_payment_finish, :show] before_filter :check_distrobutor, :only => [:create, :update] before_filter :check_distrobutor_cards, :only => [:user_list, :card_active, :bullk_for_activate, :bulk_confirm, :card_active_bulk] @@card_view = [:index, :list] @@card_edit = [:new, :import_csv, :act, :edit, :destroy] before_filter(:only => @@card_view+@@card_edit) { |c| allow_read, allow_edit = c.check_read_write_permission(@@card_view, @@card_edit, {:role => "accountant", :right => :acc_callingcard_manage, :ignore => true}) c.instance_variable_set :@allow_read, allow_read c.instance_variable_set :@allow_edit, allow_edit true } @@card_view_res = [] @@card_edit_res = [:new, :import_csv, :act, :index, :list] before_filter(:only => @@card_view_res+@@card_edit_res) { |c| allow_read, allow_edit = c.check_read_write_permission(@@card_view_res, @@card_edit_res, {:role => "reseller", :right => :res_calling_cards, :ignore => true}) c.instance_variable_set :@allow_read_res, allow_read c.instance_variable_set :@allow_edit_res, allow_edit true } Card.content_columns.each do |column| in_place_edit_for :card, column.name end def index #CardgroupsController::list redirect_to :controller => "cardgroups", :action => 'list' and return false end # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [:ddestroy, :create, :update], :redirect_to => {:action => :list} def list @page_title = _('Cards') @show_pin = !(session[:usertype] == "accountant" and session[:acc_callingcard_pin].to_i == 0) @allow_manage = !(session[:usertype] == "accountant" and (session[:acc_callingcard_manage].to_i == 0 or session[:acc_callingcard_manage].to_i == 1)) @allow_read = !(session[:usertype] == "accountant" and (session[:acc_callingcard_manage].to_i == 0)) session[:cards_list_options] ? @options = session[:cards_list_options] : @options = {} # search paramaters params[:page] ? @options[:page] = params[:page].to_i : (@options[:page] = 1 if !@options[:page] or params[:page].to_i <= 0) params[:s_number] ? @options[:s_number] = params[:s_number].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_number] = "" : @options[:s_number] = session[:cards_list_options][:s_number] params[:s_name] ? @options[:s_name] = params[:s_name].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_name] = "" : @options[:s_name] = session[:cards_list_options][:s_name] params[:s_pin] ? @options[:s_pin] = params[:s_pin].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_pin] = "" : @options[:s_pin] = session[:cards_list_options][:s_pin] params[:s_sold] ? @options[:s_sold] = params[:s_sold].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_sold] = "all" : @options[:s_sold] = session[:cards_list_options][:s_sold] params[:s_balance_min] ? @options[:s_balance_min] = params[:s_balance_min].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_balance_min] = "" : @options[:s_balance_min] = session[:cards_list_options][:s_balance_min] params[:s_balance_max] ? @options[:s_balance_max] = params[:s_balance_max].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_balance_max] = "" : @options[:s_balance_max] = session[:cards_list_options][:s_balance_max] params[:search_on] ? @options[:search_on] = params[:search_on].to_i : (@options[:search_on] = 0 if !@options[:search_on]) params[:s_callerid] ? @options[:s_callerid] = params[:s_callerid].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_callerid] = "" : @options[:s_callerid] = session[:cards_list_options][:s_callerid] params[:s_language] ? @options[:s_language] = params[:s_language].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_language] = _('All') : @options[:s_language] = session[:cards_list_options][:s_language] params[:s_user] ? @options[:s_user] = params[:s_user].to_i : (params[:clean] or !session[:cards_list_options]) ? @options[:s_user] = -1 : @options[:s_user] = session[:cards_list_options][:s_user] # order params[:order_desc] ? @options[:order_desc] = params[:order_desc].to_i : (@options[:order_desc] = 0 if !@options[:order_desc]) params[:order_by] ? @options[:order_by] = params[:order_by].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:order_by] = "number" : @options[:order_by] = session[:cards_list_options][:order_by] cond = ["cards.cardgroup_id = #{@cg.id}"]; var =[] cond << "cards.hidden = 0" ["number", 'name', 'pin', 'callerid'].each { |col| add_contition_and_param_like(@options["s_#{col}".to_sym], @options["s_#{col}".intern], "#{col} LIKE ?", cond, var) } add_integer_contition_and_param(@options[:s_balance_min], @options[:s_balance_min], "cards.balance >= ?", cond, var) add_integer_contition_and_param(@options[:s_balance_max], @options[:s_balance_max], "cards.balance <= ?", cond, var) cond << "sold = 1" if @options[:s_sold].to_s == "yes" cond << "sold = 0" if @options[:s_sold].to_s == "no" add_contition_and_param_not_all(@options[:s_language], @options[:s_language], "cards.language = ?", cond, var) add_integer_contition_and_param_not_negative(@options[:s_user], @options[:s_user], "user_id = ?", cond, var) @search = 1 if cond.size.to_i > 1 @page = @options[:page].to_i @cards_all = Card.count(:all, :conditions => [cond.join(" AND ")] +var) #.size.to_i @options[:page] = @options[:page].to_i < 1 ? 1 : @options[:page].to_i @total_pages = (@cards_all.to_f / session[:items_per_page].to_f).ceil @options[:page] = @total_pages if @options[:page].to_i > @total_pages.to_i and @total_pages.to_i > 0 @fpage = ((@options[:page] -1) * session[:items_per_page]).to_i # order_by = Card.get_order_by(params, @options) if Confline.mor_11_extended? @cards = Card.find(:all, :conditions => [cond.join(" AND ")] +var, :limit => "#{@fpage}, #{session[:items_per_page].to_i}") else @cards = Card.find(:all, :conditions => [cond.join(" AND ")] +var, :limit => "#{@fpage}, #{session[:items_per_page].to_i}") end @users = User.find_all_for_select(current_user.id) session[:cards_list_options] = @options end def user_list @page_title = _('Cards') session[:cards_user_list_options] ? @options = session[:cards_user_list_options] : @options = {} # search paramaters params[:page] ? @options[:page] = params[:page].to_i : (@options[:page] = 1 if !@options[:page] or params[:page].to_i <= 0) params[:s_number] ? @options[:s_number] = params[:s_number].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_number] = "" : @options[:s_number] = session[:cards_list_options][:s_number] params[:s_name] ? @options[:s_name] = params[:s_name].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_name] = "" : @options[:s_name] = session[:cards_list_options][:s_name] params[:s_pin] ? @options[:s_pin] = params[:s_pin].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_pin] = "" : @options[:s_pin] = session[:cards_list_options][:s_pin] params[:s_balance_min] ? @options[:s_balance_min] = params[:s_balance_min].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_balance_min] = "" : @options[:s_balance_min] = session[:cards_list_options][:s_balance_min] params[:s_balance_max] ? @options[:s_balance_max] = params[:s_balance_max].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_balance_max] = "" : @options[:s_balance_max] = session[:cards_list_options][:s_balance_max] params[:s_language] ? @options[:s_language] = params[:s_language].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_language] = _('All') : @options[:s_language] = session[:cards_list_options][:s_language] params[:s_sold] ? @options[:s_sold] = params[:s_sold].to_s : (params[:clean] or !session[:cards_list_options]) ? @options[:s_sold] = "all" : @options[:s_sold] = session[:cards_list_options][:s_sold] # order params[:order_desc] ? @options[:order_desc] = params[:order_desc].to_i : (@options[:order_desc] = 0 if !@options[:order_desc]) params[:order_by] ? @options[:order_by] = params[:order_by].to_s : (params[:clean] or !session[:cards_user_list_options]) ? @options[:order_by] = "number" : @options[:order_by] = session[:cards_user_list_options][:order_by] cond = ["cards.user_id = #{current_user.id}"]; var =[] ["number", 'name', 'pin'].each { |col| add_contition_and_param_like(@options["s_#{col}".to_sym], @options["s_#{col}".intern], "#{col} LIKE ?", cond, var) } add_integer_contition_and_param(@options[:s_balance_min], @options[:s_balance_min], "cards.balance >= ?", cond, var) add_integer_contition_and_param(@options[:s_balance_max], @options[:s_balance_max], "cards.balance <= ?", cond, var) add_contition_and_param_not_all(@options[:s_language], @options[:s_language], "cards.language = ?", cond, var) cond << "sold = 1" if @options[:s_sold].to_s == "yes" cond << "sold = 0" if @options[:s_sold].to_s == "no" @page = @options[:page].to_i @cards_all = Card.count(:conditions => [cond.join(" AND ")] +var) @options[:page] = @options[:page].to_i < 1 ? 1 : @options[:page].to_i @total_pages = (@cards_all.to_f / session[:items_per_page].to_f).ceil @options[:page] = @total_pages if @options[:page].to_i > @total_pages.to_i and @total_pages.to_i > 0 @fpage = ((@options[:page] -1) * session[:items_per_page]).to_i order_by = Card.get_order_by(params, @options) @cards = Card.find(:all, :conditions => [cond.join(" AND ")] +var, :order => order_by, :limit => "#{@fpage}, #{session[:items_per_page].to_i}") session[:cards_user_list_options] = @options end #================ Batch_manegemant =============== def act @page_title = _('Batch_management') @page_icon = "groups.png" @users = User.find_all_for_select(current_user.id) end def act_confirm @page_title = _('Batch_management') @page_icon = "groups.png" @start_num = params[:start_number].to_i <= params[:end_number].to_i ? params[:start_number] : params[:end_number] @end_num = params[:end_number].to_i >= params[:start_number].to_i ? params[:end_number] : params[:start_number] @activate = params[:activate].to_i @u_id = params[:user_id].to_i if ((@start_num.length != @cg.number_length) or (@end_num.length != @cg.number_length)) or ((@start_num.to_i == 0) or (@end_num.to_i == 0)) flash[:notice] = _('Bad_number_length_should_be') + ": " + @cg.number_length.to_s redirect_to :action => 'act', :cg => @cg and return false end user_id = get_user_id() @list2 = Card.count(:all, :conditions => ["hidden = 0 AND number >= ? and number <= ? and sold =? AND owner_id = '#{user_id}' AND cardgroup_id = ? ", @start_num, @end_num, 1, @cg.id]) @list = Card.count(:all, :conditions => ["hidden = 0 AND number >= ? and number <= ? and sold =? AND owner_id = '#{user_id}' AND cardgroup_id = ? ", @start_num, @end_num, 0, @cg.id]) @a_name = _('Disable') if @activate.to_i == 0 @a_name = _('Activate') if @activate.to_i == 1 @a_name = _('Delete') if @activate.to_i == 2 @a_name = _('Change_distributor') if @activate.to_i == 4 @a_name = _('Delete_and_hide') if @activate.to_i == 5 if @activate.to_i == 3 @a_name = _('Buy') @user = User.find(:first, :include => :address, :conditions => "users.id = #{user_id}") real_price = Card.find(:all, :select => "sum(balance) as balance_sum", :conditions => "hidden = 0 AND number >= #{@start_num} and number <= #{@end_num} and sold = 0 AND owner_id = #{session[:user_id]} AND cardgroup_id = '#{@cg.id}' ")[0].balance_sum.to_f @real_price = real_price.to_f * User.current.currency.exchange_rate.to_f @tax = @cg.get_tax @taxes = @tax.applied_tax_list(@real_price) @total_tax_name = @tax.total_tax_name end end def act2 start_num = params[:start].to_i <= params[:end].to_i ? params[:start] : params[:end] end_num = params[:end].to_i >= params[:start].to_i ? params[:end] : params[:start] action = params[:activate_i].to_i user_id = get_user_id() case (action) when 0 : cards = Card.find(:all, :conditions => ["hidden = 0 AND number >= ? AND number <= ? AND sold = 1 AND owner_id = ? AND cardgroup_id = ?", start_num, end_num, user_id, @cg.id]) for card in cards card.sold = 0 card.save end when 2 : cards_deleted, cards_not_deleted = Card.delete_from_sql({:cardgroup_id => @cg.id, :start_num => start_num, :end_num => end_num}) when 3 : creation_time = Time.now list = Card.find(:all, :conditions => ["hidden = 0 AND number >= ? and number <= ? and sold = 0 AND owner_id = ? AND cardgroup_id = ? ", start_num, end_num, user_id, @cg.id]) @email = params[:email].to_s gross = 0 list.each { |card| card.sell_from_bach(@email, session[:default_currency], current_user.id) } # tax = @cg.get_tax.count_tax_amount(gross) # currency = current_user.currency.name # if list.size > 1 # Payment.create(:paymenttype => "manual", :amount => tax+gross, :currency => currency, :email => @email, :completed => 1, :date_added => creation_time, :shipped_at => creation_time, :fee => 0, :gross => gross, :payer_email => @email, :tax => tax, :owner_id => session[:user_id], :card => 1) # else # Payment.create(:paymenttype => "manual", :amount => tax+gross, :currency => currency, :email => @email, :completed => 1, :date_added => creation_time, :shipped_at => creation_time, :fee => 0, :gross => gross, :payer_email => @email, :tax => tax, :owner_id => session[:user_id], :card => 1, :user_id => list.first.id) # end when 4 : cards = Card.find(:all, :conditions => ["hidden = 0 AND number >= ? AND number <= ? AND owner_id = ? AND cardgroup_id = ?", start_num, end_num, user_id, @cg.id]) for card in cards card.user_id = params[:user].to_i card.save end when 5 : cards_deleted, cards_hidden = Card.delete_and_hide_from_sql({:cardgroup_id => @cg.id, :start_num => start_num, :end_num => end_num}) end case (action) when 0 : flash[:status] = _('Cards_were_successfully_disabled') when 1 : flash[:status] = _('Cards_were_successfully_activated') when 2 : if cards_deleted == 0 flash[:notice] = _('Cards_were_not_deleted') else flash[:status] = cards_deleted.to_s + ' ' + _('Cards_were_successfully_deleted') if cards_not_deleted > 0 flash[:status] += '
' + cards_not_deleted.to_s + ' ' + _('Cards_were_not_deleted') end end when 3 : flash[:status] = _('Cards_were_successfully_bought') when 4 : flash[:status] = _('Distributor_changed') when 5 : flash[:status] = cards_deleted.to_s + ' ' + _('Cards_were_successfully_deleted') + '
' + cards_hidden.to_i.to_s + ' ' + _('Cards_were_hidden') #if cards_hidden.to_i > 0 end redirect_to :action => 'list', :cg => @cg and return false end # ============= Card_pay ============================ def card_pay @page_title = _('Add_card_payment') @page_icon = "money.png" @currs =Currency.get_active @user = User.find(:first, :conditions => ["users.id = ?", session[:user_id]], :include => :address) end def card_payment_status @page_title = _('Add_card_payment') @page_icon = "money.png" @amount = params[:amount].to_f @curr = params[:currency] @exchange_rate = count_exchange_rate(current_user.currency.name, @curr) if @exchange_rate == 0 flash[:notice] = _('Currency_not_found') redirect_to :action => 'card_pay', :id => params[:id], :cg => params[:cg] and return false end @converted_amount = @amount / @exchange_rate @real_amount = @cg.get_tax.count_amount_without_tax(@converted_amount) if @card.sold == 0 flash[:notice] = _('Cannot_fill_unsold_Card') redirect_to(:action => 'card_pay', :id => params[:id], :cg => params[:cg]) and return false end end def card_payment_finish amount = params[:amount].to_f real_amount = params[:real_amount].to_f currency = params[:currency] @card.balance += real_amount if @card.save Payment.add_for_card(@card, amount, currency, current_user.id) flash[:status] = _('Payment_added') else flash_errors_for(_('Payment_was_not_added'), @card) end redirect_to :action => 'list', :cg => @cg and return false end def show @show_pin = !(session[:usertype] == "accountant" and session[:acc_callingcard_pin].to_i == 0) @page_title = _('Card_details') @cg = @card.cardgroup(:include => [:tax]) check_user_for_cardgroup(@cg) end def new @page_title = _('Add_cards') @page_icon = "add.png" @users = User.find_all_for_select(current_user.id) end def create start_num = params[:start_number] end_num = params[:end_number] if ((start_num.length != @cg.number_length) or (end_num.length != @cg.number_length)) or ((start_num.to_i == 0) or (end_num.to_i == 0)) flash[:notice] = _('Bad_number_length_should_be') + ": " + @cg.number_length.to_s redirect_to :action => 'new', :cg => @cg and return false elsif end_num.to_i < start_num.to_i flash[:notice] = _('Bad_interval_start_and_end') redirect_to :action => 'new', :cg => @cg and return false end user_want_to_create = (end_num.to_i - start_num.to_i)+1 #only 1/5 to create user_can_create_only = ((10**@cg.pin_length.to_i)*0.2).to_i if user_want_to_create > user_can_create_only flash[:notice] = _('Bad_number_interval_max') + ": " + user_can_create_only.to_s + " "+ _('cards') redirect_to :action => 'new', :cg => @cg and return false else # call pin list generator pins = [] pins = all_pins(@cg.pin_length, user_can_create_only, user_want_to_create) if not pins redirect_to :action => 'new', :cg => @cg and return false end end #randomly select pin from pins array to card_pins array and delete selected pin from pins array card_pins = [] user_want_to_create.times do key = rand(pins.size) card_pins << pins[key] #pins.drop(key)- nuo ruby 1.8.7 veikia pins[key] = nil pins = pins.compact end @cards_with_errors=[] #start_num = start_num.to_i #end_num = end_num.to_i if (start_num) and (end_num) owner_id = get_user_id() cards_created = 0 #for pin counter i = 0 for n in start_num..end_num card = Card.new({:user_id => params[:user_id], :balance => @cg.price, :cardgroup_id => @cg.id, :sold => false, :number => n, :pin => card_pins[i], :owner_id => owner_id, :language => params[:card_language]}) i += 1 if card.save cards_created += 1 else @cards_with_errors << card end end flash[:status] = _('Cards_created') + ": " + cards_created.to_s if @cards_with_errors.size.to_i > 0 render :partial => "new_cards", :locals => {:cards => @cards_with_errors, :cg => @cg}, :layout => true and return false else redirect_to :action => 'list', :cg => @cg and return false end else flash[:notice] = _('Bad_number_range') redirect_to :action => 'new', :cg => @cg and return false end end #create array of available pins def all_pins(length, max, user_wants) #get pins from db pins_in_db = Card.find(:all, :select => 'pin', :conditions => "Length(pin) = #{length}").map(&:pin) #count available pins available_pin_number = max - pins_in_db.size if available_pin_number < user_wants # if user wants more - message about available amount flash[:notice] = _('Bad_number_interval_no_pin_left') + ": " + available_pin_number.to_s + " "+ _('cards') return false else # generate pin list, no match pins = [] random_num = (max/0.2).to_i until pins.size == user_wants begin pin = sprintf("%0#{length}d", rand(random_num)) end while pins_in_db.include?(pin) or pins.include?(pin) pins << pin end pins end end def edit @return_controller = params[:return_to_controller] if params[:return_to_controller] @return_action = params[:return_to_action] if params[:return_to_action] @page_title = _('Edit_card') @page_icon = "edit.png" @cg = @card.cardgroup @users = User.find_all_for_select(current_user.id) check_user_for_cardgroup(@cg) end def update return_controller = params[:return_to_controller] if params[:return_to_controller] return_action = params[:return_to_action] if params[:return_to_action] @card_old = @card.clone @cg = @card.cardgroup result=check_user_for_cardgroup(@cg) return false if result == false #safety hack params[:card] = params[:card].except("sold", "balance", :sold, :balance) if params[:card] if @card.update_attributes(params[:card]) if @card.pin != @card_old.pin Action.add_action_hash(session[:user_id], {:target_id => @card.id, :target_type => "card", :action => "card_pin_changed", :data => @card_old.pin, :data2 => @card.pin}) end flash[:status] = _('Card_was_successfully_updated') if return_controller and return_action redirect_to :controller => return_controller, :action => return_action else redirect_to :action => 'show', :id => @card.id end else flash_errors_for(_('Card_was_not_updated'), @card) @users = User.find_all_for_select(current_user.id) render :action => 'edit' end end def destroy cg = @card.cardgroup a=check_user_for_cardgroup(cg) return false if !a if @card.destroy_with_check flash[:status] = _('Card_was_deleted') redirect_to :action => 'list', :cg => cg and return false else flash_errors_for(_('Card_was_not_deleted'), cg) redirect_to :action => 'list', :cg => cg and return false end end def payments @return_controller = params[:return_to_controller] if params[:return_to_controller] @return_action = params[:return_to_action] if params[:return_to_action] @page_title = _('Card_payments') @page_icon = "details.png" @cg = @card.cardgroup @payments = Payment.find(:all, :conditions => {:user_id => @card.id, :paymenttype => "Card"}) if check_user_for_cardgroup(@cg) if current_user.is_not_admin? and @card.is_not_owned_by?(current_user) flash[:notice] = _('You_are_not_authorized_to_view_this_page') redirect_to :controller => "callc", :action => "main" and return false end end end # ======== CSV IMPORT ================= def import_csv step_names = [_('Import_cards'), _('File_upload'), _('Column_assignment'), _('Column_confirmation'), _('Analysis'), _('Create_cards')] params[:step] ? @step = params[:step].to_i : @step = 0 @step = 0 if @step > step_names.size or @step < 0 @step_name = step_names[@step] @page_title = _('Import_CSV') + "   -   " + _('Step') + ": " + @step.to_s + "   -   " + @step_name.to_s @page_icon = 'excel.png'; @sep, @dec = nice_action_session_csv if @step == 0 my_debug_time "**********import CARDS ************************" my_debug_time "step 0" session[:card_import_csv] = nil session[:temp_card_import_csv] = nil session[:import_csv_card_import_csv_options] = nil session[:card_import_csv2] = nil end if @step == 1 my_debug_time "step 1" session[:temp_card_import_csv] = nil session[:card_import_csv] = nil if params[:file] @file = params[:file] if @file.size > 0 if !@file.respond_to?(:original_filename) or !@file.respond_to?(:read) or !@file.respond_to?(:rewind) flash[:notice] = _('Please_select_file') redirect_to :action => :import_csv, :step => 0, :cg => @cg.id and return false end if get_file_ext(@file.original_filename, "csv") == false @file.original_filename flash[:notice] = _('Please_select_CSV_file') redirect_to :action => :import_csv, :step => 0, :cg => @cg.id and return false end @file.rewind file = @file.read session[:card_file_size] = file.size session[:temp_card_import_csv] = CsvImportDb.save_file("_crd_", file) flash[:status] = _('File_downloaded') redirect_to :action => :import_csv, :step => 2, :cg => @cg.id and return false else session[:temp_card_import_csv] = nil flash[:notice] = _('Please_select_file') redirect_to :action => :import_csv, :step => 0, :cg => @cg.id and return false end else session[:temp_card_import_csv] = nil flash[:notice] = _('Please_upload_file') redirect_to :action => :import_csv, :step => 0, :cg => @cg.id and return false end end if @step == 2 my_debug_time "step 2" my_debug_time "use : #{session[:temp_card_import_csv]}" if session[:temp_card_import_csv] file = CsvImportDb.head_of_file("/tmp/#{session[:temp_card_import_csv]}.csv", 20).join("").to_s session[:file] = file a = check_csv_file_seperators(file, 2, 2, {:cg => @cg, :line => 0}) if a @fl = CsvImportDb.head_of_file("/tmp/#{session[:temp_card_import_csv]}.csv", 1).join("").to_s.split(@sep) begin colums ={} colums[:colums] = [{:name => "f_error", :type => "INT(4)", :default => 0}, {:name => "nice_error", :type => "INT(4)", :default => 0}, {:name => "do_not_import", :type => "INT(4)", :default => 0}, {:name => "changed", :type => "INT(4)", :default => 0}, {:name => "not_found_in_db", :type => "INT(4)", :default => 0}, {:name => "id", :type => 'INT(11)', :inscrement => ' NOT NULL auto_increment '}] session[:card_import_csv] = CsvImportDb.load_csv_into_db(session[:temp_card_import_csv], @sep, @dec, @fl, nil, colums) @lines_number = ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM #{session[:card_import_csv]}") rescue Exception => e MorLog.log_exception(e, Time.now.to_i, params[:controller], params[:action]) session[:import_csv_card_import_csv_options] = {} session[:import_csv_card_import_csv_options][:sep] = @sep session[:import_csv_card_import_csv_options][:dec] = @dec session[:file] = File.open("/tmp/#{session[:temp_card_import_csv]}.csv", "rb").read CsvImportDb.clean_after_import(session[:temp_card_import_csv]) session[:temp_card_import_csv] = nil redirect_to :action => "import_csv", :step => 2, :cg => @cg.id and return false end flash[:status] = _('File_uploaded') if !flash[:notice] end else session[:card_import_csv] = nil flash[:notice] = _('Please_upload_file') redirect_to :action => :import_csv, :step => 1, :cg => @cg.id and return false end end if @step > 2 unless ActiveRecord::Base.connection.tables.include?(session[:temp_card_import_csv]) flash[:notice] = _('Please_upload_file') redirect_to :action => :import_csv, :step => 0, :cg => @cg.id and return false end if session[:card_import_csv] if @step == 3 my_debug_time "step 3" if params[:number_id] and params[:pin_id] and params[:number_id].to_i >= 0 and params[:pin_id].to_i >= 0 @options = {} @options[:imp_number] = params[:number_id].to_i @options[:imp_pin] = params[:pin_id].to_i @options[:imp_balance] = params[:balance_id].to_i @options[:sep] = @sep @options[:dec] = @dec @options[:file]= session[:file] @options[:file_lines] = ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM #{session[:card_import_csv]}") @lines_number = @options[:file_lines] session[:card_import_csv2] = @options flash[:status] = _('Columns_assigned') else flash[:notice] = _('Please_Select_Columns') redirect_to :action => :import_csv, :step => 2, :cg => @cg.id and return false end end if session[:card_import_csv2] and session[:card_import_csv2][:imp_pin] and session[:card_import_csv2][:imp_number] if @step == 4 my_debug_time "step 4" @card_analize = @cg.analize_card_import(session[:temp_card_import_csv], session[:card_import_csv2]) session[:card_analize] = @card_analize end if @step == 5 my_debug_time "step 5" start_time = Time.now @card_analize = session[:card_analize] @run_time = 0 begin @total_cards, @errors = @cg.create_from_csv(current_user, session[:temp_card_import_csv], session[:card_import_csv2]) flash[:status] = _('Import_completed') session[:temp_card_import_csv] = nil @run_time = Time.now - start_time rescue Exception => e flash[:notice] = _('Error') MorLog.log_exception(e, Time.now, 'Cards', 'csv_import') end end else flash[:notice] = _('Please_Select_Columns') redirect_to :action => :import_csv, :step => "2", :cg => @cg.id and return false end else flash[:notice] = _('Zero_file') redirect_to :controller => "cards", :action => "list", :cg => @cg.id and return false end end end def bad_cards if ActiveRecord::Base.connection.tables.include?(session[:temp_card_import_csv]) @rows = ActiveRecord::Base.connection.select_all("SELECT * FROM #{session[:temp_card_import_csv]} WHERE f_error = 1") end end =begin rdoc Allows admin to buy calling cards. =end def card_buy @page_title = _('Buy_Card') @page_icon = "money.png" @email = params[:email] @real_price = @card.balance+@cg.get_tax.count_tax_amount(@card.balance) @send_invoice = params[:send_invoice] @total_tax_name = Confline.get_value("Total_tax_name") end =begin rdoc =end def card_buy_finish creation_time = Time.now if @card.sold.to_i == 1 flash[:notice] = _("Card_is_already_sold") redirect_to(:action => :card_pay, :id => @card.id, :cg => @cg.id) and return false end unless @card.sell(session[:default_currency], current_user.id) flash_errors_for(_('Can_not_sell_invalid_card'), @card) redirect_to :action => 'list', :cg => @cg and return false end @email = params[:email].to_s invoice = CcInvoice.new(:email => @email, :owner_id => session[:user_id]) invoice.number = CcInvoice.get_next_number(session[:user_id]) invoice.sent_email = 0 invoice.sent_manually = 0 invoice.paid = 1 invoice.created_at = creation_time invoice.paid_date = creation_time invoice.email = @email amount = @card.balance + @cg.get_tax.count_tax_amount(@card.balance) ccorder = Ccorder.new(:ordertype => "manual", :email => @email, :currency => session[:default_currency]) ccorder.amount = amount ccorder.payer_email = @email ccorder.date_added = creation_time ccorder.shipped_at = creation_time ccorder.completed = 1 ccorder.tax = @cg.get_tax.count_tax_amount(@card.balance) ccorder.gross = @card.balance ccorder.save item = Cclineitem.new(:cardgroup_id => @cg.id, :quantity => "1", :ccorder_id => ccorder.id, :card_id => @card.id, :price => @card.balance) item.save invoice.ccorder = ccorder invoice.save if params[:send_invoice].to_i == 1 options = { :title_fontsize => 13, :title_fontsize1 => 16, :title_fontsize2 => 9, :address_fontsize => 8, :fontsize => 7, :tax_fontsize => 7, # header/address text :address_pos1 => 40, :title_pos0 => 43, :address_pos2 => 70, :title_pos1 => 75, :address_pos3 => 85, :title_pos2 => 90, :address_pos4 => 100, :address_pos5 => 115, :left => 40, :title_left2 => 330, :item_line_height => 20, :item_line_add_y => 3, :item_line_add_x => 6, :line_y => 140, :length => 520, :item_line_start => 220, :lines => 20, :col1_x => 320, :col2_x => 390, :col3_x => 470, :tax_box_h => 11, :tax_box_text_add_y => 1, :tax_box_text_x => 360, :bank_details_step => 15 } PdfGen::Generate.generate_cc_invoice(invoice, options) invoice.save end flash[:status] = _("Card_is_sold") redirect_to(:action => :list, :id => @card.id, :cg => @cg.id) and return false end def card_active if @card.user_id != current_user.id dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end @card.sold = @card.sold.to_i == 1 ? 0 : 1 @card.save Action.add_action_hash(current_user, {:action => "Card activation", :data => @card.sold.to_i, :target_id => @card.id, :target_type => "Card"}) flash[:status] = @card.sold.to_i == 1 ? _("Cards_are_activated") : _("Cards_are_deactivated") redirect_to(:action => :user_list) and return false end def bullk_for_activate end def bulk_confirm @start_num = params[:start_number].to_i <= params[:end_number].to_i ? params[:start_number] : params[:end_number] @end_num = params[:end_number].to_i >= params[:start_number].to_i ? params[:end_number] : params[:start_number] @activate = params[:activate].to_i if ((@start_num.to_i == 0) or (@end_num.to_i == 0)) flash[:notice] = _('Bad_number_length_should_be') redirect_to :action => :bullk_for_activate and return false end @list2 = Card.count(:all, :conditions => ["number >= ? and number <= ? and sold =? AND user_id = '#{current_user.id}' ", @start_num, @end_num, 1]) @list = Card.count(:all, :conditions => ["number >= ? and number <= ? and sold =? AND user_id = '#{current_user.id}' ", @start_num, @end_num, 0]) @a_name = _('Disable') if @activate.to_i == 0 @a_name = _('Activate') if @activate.to_i == 1 end def card_active_bulk start_num = params[:start].to_i <= params[:end].to_i ? params[:start] : params[:end] end_num = params[:end].to_i >= params[:start].to_i ? params[:end] : params[:start] action = params[:activate_i].to_i case (action) when 0 : cards = Card.find(:all, :conditions => ["number >= ? AND number <= ? AND sold = 1 AND user_id = ? ", start_num, end_num, current_user.id]) for card in cards card.sold = 0 card.save Action.add_action_hash(current_user, {:action => "Card activation", :data => card.sold.to_i, :target_id => card.id, :target_type => "Card"}) end when 1 : cards = Card.find(:all, :conditions => ["number >= ? AND number <= ? AND sold = 0 AND user_id = ? ", start_num, end_num, current_user.id]) for card in cards card.sold = 1 card.save Action.add_action_hash(current_user, {:action => "Card activation", :data => card.sold.to_i, :target_id => card.id, :target_type => "Card"}) end end flash[:status] = action.to_i == 1 ? _('Card_is_activated') : _('Card_is_deactivated') redirect_to(:action => :user_list) and return false end private #replaced with all_pins def card_pin(length) good = 0 try = 0 while good == 0 and try < 10 number = random_digit_password(length) good = 1 if not Card.find(:first, :conditions => "pin = '#{number}'") try += 1 end number = "" if try == 10 number end def clean_value(value) cv = value #remove spaces cv = cv.gsub(/\s/, '') #remove columns from start and end cv = cv[1..cv.length] if cv[0, 1] == "\"" cv = cv[0..cv.length-2] if cv[cv.length-1, 1] == "\"" cv end def get_user_id() if session[:usertype].to_s == "accountant" user_id = 0 else user_id = session[:user_id] end return user_id end =begin Checks if reseller or accounant is allowed to edit cardgroups. =end def check_user_for_cardgroup(cardgroup) if session[:usertype].to_s == "accountant" if cardgroup.owner_id != 0 or session[:acc_callingcard_manage].to_i == 0 dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end if session[:usertype].to_s == "reseller" if cardgroup.owner_id != session[:user_id] or session[:res_calling_cards].to_i != 2 dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end if session[:usertype].to_s == "admin" if cardgroup.owner_id != session[:user_id] dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end return true end =begin =end def check_cc_addon unless cc_active? dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end def find_cardgruop @cg = Cardgroup.find(:first, :include => [:tax], :conditions => ["cardgroups.id = ? and hidden = 0", params[:cg]]) unless @cg flash[:notice] = _('Cardgroup_was_not_found') redirect_to :controller => "callc", :action => 'main' and return false end result = check_user_for_cardgroup(@cg) return false if result == false end def find_card @card = Card.find(:first, :conditions => {:id => params[:id], :hidden => 0}, :include => [:cardgroup, :user]) unless @card flash[:notice] = _('Card_was_not_found') redirect_to :controller => "cardgroups", :action => 'list' and return false end end def check_distrobutor if params[:card] and params[:card][:user_id] dis = User.find(:first, :conditions => {:id => params[:card][:user_id]}) if current_user.usertype == 'reseller' if dis and dis.id != current_user.id and dis.owner_id != correct_owner_id dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end else if dis and dis.owner_id != correct_owner_id dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end end end def check_distrobutor_cards if !current_user.cards or current_user.cards.size.to_i == 0 dont_be_so_smart redirect_to :controller => "callc", :action => "main" and return false end end end