321 lines
7.8 KiB
Ruby
321 lines
7.8 KiB
Ruby
# -*- 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
|