# -*- encoding : utf-8 -*-

class Admin::ExportComptasController < ApplicationController
  layout "admin"
  before_action :auth_admin

  before_action :admin_space
  
  require 'csv'
  def admin_space
    @admin_space = "statistiques"
  end

  def index
    
    
 
    
    
    date_regex = /^(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d$/i 
    
    if params[:start] and params[:start] =~ date_regex
  		@start = Date.parse(params[:start]).beginning_of_day 
  		
		else
  		@start = Date.today.beginning_of_month
		end
    params[:start]= @start.strftime('%d/%m/%Y')
    
    
		if params[:stop] and params[:stop] =~ date_regex
			@stop = Date.parse(params[:stop]).end_of_day 
			
	  else
		 	#@stop = Date.today.end_of_month
		end
    params[:stop]= @stop.strftime('%d/%m/%Y') if params[:stop]
    
    
    
   
  end
  
  def show
    date_regex = /^(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d$/i 
    
    if params[:start] and params[:start] =~ date_regex
  		@start = Date.parse(params[:start]).beginning_of_day 
  		
		else
  		@start = Date.today.beginning_of_month
		end
    params[:start]= @start.strftime('%d/%m/%Y')
    
    
		if params[:stop] and params[:stop] =~ date_regex
			@stop = Date.parse(params[:stop]).end_of_day 
			
	  else
		 @stop = Date.today.end_of_month
		end
    
    
    @p_documents = PDocument.where(:p_document_type_id => [4,7]).where("created_at >= ? and created_at <= ?", @start, @stop)
    
    @file = ""
    
  
    
 
    
    @headers = [
      "JOURNAL",
      "DATE",
      "Compte",
      "?",
      "Libélé",
      "?",
      "?",
      "Montant",
      "?",
      "Devise",
     
      
    ]
  
    
    
    
    
    @csv = CSV.generate(:headers => true, :col_sep => ";") do |csv|
      csv << @headers
      date = @start
      if true
        i = 0
        while date <= @stop
          i += 1
          break if i == 50
          date_formate = date.strftime('%Y%m%d')
          
          
          line = []
          line << date.strftime('%d/%m/%Y')
          #csv << line
          
          [4,7].each do |p_document_type_id|
            p_documents = PDocument.where(:p_document_type_id => p_document_type_id).where("created_at >= ? and created_at <= ?", date.beginning_of_day, date.end_of_day)
            if p_documents.count > 0
              journal = "VE" if p_document_type_id == 4
              journal = "AV" if p_document_type_id == 7
              
              
              
              
              
              if false
                line = []
                line << journal  
                line << date_formate
                line << "41110000"
                line << ""
                line << "Ventes TTC du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << "C"
                line << ('%.2f' % p_documents.sum(:cache_total_ttc)).to_s.sub(".",",")
              
                line << "N"
                line << "EUR"
            
            
            
                csv << line
            
            
                line = []
                line << journal 
                line << date_formate
                line << "44571000"
                line << ""
                line << "TVA du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << "D"
                line << ('%.2f' % p_documents.sum(:cache_total_tva)).to_s.sub(".",",")
                line << "N"
                line << "EUR"
            
            
            
                csv << line
            
                line = []
                line << journal 
                line << date_formate
                line << "41110000"
                line << ""
                line << "Ventes HT du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << "D"
                line << ('%.2f' % p_documents.sum(:cache_total_ht)).to_s.sub(".",",")
                line << "N"
                line << "EUR"
            
            
            
                csv << line
                
              end
            
              
              #Address.distinct.pluck(:city)
              
              comptes = {}
              
              PSheetLine.where(:p_document_id => p_documents.ids).includes(:p_product).each do |psl|
                
                
                compte_vente = psl.p_product.compte_vente? ? psl.p_product.compte_vente : psl.p_product.name
                
                comptes[compte_vente.to_s] = comptes[compte_vente.to_s] || {}
                
                comptes[compte_vente.to_s][:total_ht] = comptes[compte_vente.to_s][:total_ht].to_f + psl.ok_price_tot
                comptes[compte_vente.to_s][:total_tva] = comptes[compte_vente.to_s][:total_tva].to_f + (psl.ok_price_tot*(psl.tva))
                comptes[compte_vente.to_s][:total_ttc] = comptes[compte_vente.to_s][:total_ttc].to_f + psl.ok_price_tot_ttc
                
                
                
                
                
              end
              
              comptes.each do |index,value|
                
              
            
                
                
                
                line = []
                line << journal  
                line << date_formate
                line << "41110000"
                line << ""
                line << "Ventes TTC du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << (journal ==  "VE" ? "D" : "C")
                line << ('%.2f' % value[:total_ttc].abs).to_s.sub(".",",")
              
                line << "N"
                line << "EUR"
            
            
            
                csv << line
            
            
                line = []
                line << journal 
                line << date_formate
                line << "44571000"
                line << ""
                line << "TVA du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << (journal ==  "VE" ? "C" : "D")
                line << ('%.2f' % value[:total_tva].abs).to_s.sub(".",",")
                line << "N"
                line << "EUR"
            
            
            
                csv << line
            
                line = []
                line << journal 
                line << date_formate
                line << index
                line << ""
                line << "Ventes HT du #{date.strftime('%d/%m/%Y')}"
                line << "S"
                line << (journal ==  "VE" ? "C" : "D")
                line << ('%.2f' % value[:total_ht].abs).to_s.sub(".",",")
                line << "N"
                line << "EUR"
            
            
            
                csv << line
                
                
                
                
              end
            
            
            end
            
          end
          
          
          
          
          
          
        
        
          date = date + 1.day
        end
      end
        
      
    end
    
    
    @data_to_send = @csv.encode('iso-8859-1', :undef => :replace, :replace => '')
    
    file_path = Rails.root.join("pdf", "csv", "ssdfds.csv")
      
    
    
    File.open(file_path, "w+") do |f|
      f.write(@data_to_send)
    end
    
    
    
    
    
    respond_to do |format|
          format.html{
            
       
    
            require 'csv'    

            csv_text = File.read(file_path).encode('utf-8')
            @csv = CSV.parse(csv_text, :headers => true, :col_sep => ";")
            
          }
          
          
          
          format.csv { 
            
            
            
            send_file file_path, :filename => "export-csv.csv", :type => 'text/csv; charset=iso-8859-1; header=present' 
        
          }
    end
    
    
    
    
    
    
  end

  
  
  
end
