mmsc_app/app/controllers/admin/navision_controller.rb
Nicolas Bally a6aa1f6074 Initial
2020-05-25 11:40:11 +02:00

570 lines
17 KiB
Ruby

# -*- encoding : utf-8 -*-
class Admin::NavisionController < ApplicationController
layout "admin"
before_action :auth_admin, :only => :index
before_action :admin_space
def admin_space
@admin_space = "export_compta"
end
def index
end
def export_sale
end
def get_purchase_account
render :inline => "done"
end
def export_a_sale
if params[:start_at].to_s != "" and params[:stop_at].to_s != ""
require 'csv'
i = 0
@filename = "AvoirsVentes"
start_at = Date.parse(params[:start_at]).strftime("%Y-%m-%d")
end_at = Date.parse(params[:stop_at]).strftime("%Y-%m-%d")
client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
r = client.execute("SELECT TOP 500 * FROM dbo.[JIPE$Sales Cr_Memo Header] WHERE [Document Date] >= '#{start_at}' AND [Document Date] <= '#{end_at}';")
r.count
@credit = false
@table_header = ["compte comptable", "compte client", "client","date", "numero piece","N° projet","libellé", "débit", "crédit"]
@table = []
r.cancel
r.each do |e|
d = Date.parse(e["Document Date"].to_s)
if d >= Date.parse("2019/06/01")
if ExportHist.new(:piece => e["No_"]).save
i+= 1
e["Désignation"] = e["Posting Description"] if !e["Désignation"]
l = client.execute("SELECT TOP 1000 * FROM dbo.[JIPE$Sales Cr_Memo Line] WHERE [Document No_] = '#{e["No_"]}';")
l.count
l.cancel
cpts = {}
tot_ttc = 0.0
l.each do |li|
if li["Amount Including VAT"].to_f != 0.0
cpt_co = SComptaAccount.where(:code => li["Shortcut Dimension 2 Code"], :zone => li["VAT Bus_ Posting Group"]).first
if cpt_co
if cpt_co.sale_account?
cpt = cpt_co.sale_account
else
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
end
else
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
SComptaAccount.create(:code => li["Shortcut Dimension 2 Code"], :zone => li["VAT Bus_ Posting Group"])
end
if cpt == "60101000"
if e["Job No_"].to_s != ""
cpt = "60101000"
else
cpt = "60100000"
end
end
cpts[cpt] = cpts[cpt] || 0.0
cpts[cpt] += li["Amount"]
vat = "" # li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
if sca = SComptaAccount.where(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"]).first
if sca.sale_account.to_s != ""
vat += sca.sale_account.to_s
else
vat +=li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
end
else
SComptaAccount.create(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"])
vat +=li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
end
cpts[vat] = cpts[vat] || 0.0
tot_ttc += li["Amount Including VAT"].to_s.to_f
cpts[vat] += (li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
end
end
#TTC
line = []
line << "41100000"
line << e["Bill-to Customer No_"]
line << e["Bill-to Name"]
line << d.to_date
line << e["No_"]
line << e["Job No_"]
line << e["Posting Description"]
e["Amount incl_ VAT"] = 10.0
if true
if @credit
line << ('%.2f' % tot_ttc).to_s.sub(".",",")
line << ""
else
line << ""
line << ('%.2f' % tot_ttc).to_s.sub(".",",")
end
end
@table << line
cpts.each do |key,value|
if value.to_f != 0.0
line = []
line << key
line << "" #e["N° client à facturer"]
line << e["Pay-to Name"]
line << d.to_date
line << e["No_"]
line << e["Job No_"]
line << e["Posting Description"]
if @credit
line << ""
line << ('%.2f' % value).to_s.sub(".",",")
else
line << ('%.2f' % value).to_s.sub(".",",")
line << ""
end
@table << line
end
end
end
else
end
end
xlsx_package = Axlsx::Package.new
wb = xlsx_package.workbook
wb.add_worksheet(name: "import") do |sheet|
sheet.add_row @table_header
@table.each do |tr|
sheet.add_row tr
end
end
directory_name = "exports"
Dir.mkdir("private_medias/#{directory_name}") unless File.exists?("private_medias/#{directory_name}")
xlsx_package.serialize("private_medias/#{directory_name}/#{@filename}-#{start_at}-#{end_at}--#{Time.now.to_s.to_slug}-----#{i}-lignes.xlsx")
else
end
end
def export_sale
if params[:start_at].to_s != "" and params[:stop_at].to_s != ""
require 'csv'
i = 0
@filename = "Ventes"
start_at = Date.parse(params[:start_at]).strftime("%Y-%m-%d")
end_at = Date.parse(params[:stop_at]).strftime("%Y-%m-%d")
client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
r = client.execute("SELECT TOP 500 * FROM dbo.[JIPE$Sales Invoice Header] WHERE [Document Date] >= '#{start_at}' AND [Document Date] <= '#{end_at}';")
r.count
@credit = true
@table_header = ["compte comptable", "compte client", "client","date", "numero piece","N° projet","libellé", "débit", "crédit"]
@table = []
r.cancel
r.each do |e|
d = Date.parse(e["Document Date"].to_s)
if d >= Date.parse("2019/06/01")
if ExportHist.new(:piece => e["No_"]).save
i+= 1
e["Désignation"] = e["Posting Description"] if !e["Désignation"]
l = client.execute("SELECT TOP 1000 * FROM dbo.[JIPE$Sales Invoice Line] WHERE [Document No_] = '#{e["No_"]}';")
l.count
l.cancel
cpts = {}
tot_ttc = 0.0
l.each do |li|
if li["Amount Including VAT"].to_f != 0.0
cpt_co = SComptaAccount.where(:code => li["Shortcut Dimension 2 Code"], :zone => li["VAT Bus_ Posting Group"]).first
if cpt_co
if cpt_co.sale_account?
cpt = cpt_co.sale_account
else
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
end
else
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
SComptaAccount.create(:code => li["Shortcut Dimension 2 Code"], :zone => li["VAT Bus_ Posting Group"])
end
if cpt == "60101000"
if e["Job No_"].to_s != ""
cpt = "60101000"
else
cpt = "60100000"
end
end
cpts[cpt] = cpts[cpt] || 0.0
cpts[cpt] += li["Amount"]
vat = "" # li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
if sca = SComptaAccount.where(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"]).first
if sca.sale_account.to_s != ""
vat += sca.sale_account.to_s
else
vat +=li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
end
else
SComptaAccount.create(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"])
vat +=li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
end
cpts[vat] = cpts[vat] || 0.0
tot_ttc += li["Amount Including VAT"].to_s.to_f
cpts[vat] += (li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
end
end
#TTC
line = []
line << "41100000"
line << e["Bill-to Customer No_"]
line << e["Bill-to Name"]
line << d.to_date
line << e["No_"]
line << e["Job No_"]
line << e["Posting Description"]
e["Amount incl_ VAT"] = 10.0
if true
if @credit
line << ('%.2f' % tot_ttc).to_s.sub(".",",")
line << ""
else
line << ""
line << ('%.2f' % tot_ttc).to_s.sub(".",",")
end
end
@table << line
cpts.each do |key,value|
if value.to_f != 0.0
line = []
line << key
line << "" #e["N° client à facturer"]
line << e["Pay-to Name"]
line << d.to_date
line << e["No_"]
line << e["Job No_"]
line << e["Posting Description"]
if @credit
line << ""
line << ('%.2f' % value).to_s.sub(".",",")
else
line << ('%.2f' % value).to_s.sub(".",",")
line << ""
end
@table << line
end
end
end
else
end
end
xlsx_package = Axlsx::Package.new
wb = xlsx_package.workbook
wb.add_worksheet(name: "import") do |sheet|
sheet.add_row @table_header
@table.each do |tr|
sheet.add_row tr
end
end
directory_name = "exports"
Dir.mkdir("private_medias/#{directory_name}") unless File.exists?("private_medias/#{directory_name}")
xlsx_package.serialize("private_medias/#{directory_name}/#{@filename}-#{start_at}-#{end_at}--#{Time.now.to_s.to_slug}-----#{i}-lignes.xlsx")
else
end
end
def export_purchase
if params[:start_at].to_s != "" and params[:stop_at].to_s != ""
require 'csv'
i = 0
@filename = "Achats"
start_at = Date.parse(params[:start_at]).strftime("%Y-%m-%d")
end_at = Date.parse(params[:stop_at]).strftime("%Y-%m-%d")
client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
r = client.execute("SELECT TOP 500 * FROM dbo.[JIPE$Purch_ Inv_ Header] WHERE [Document Date] >= '#{start_at}' AND [Document Date] < '#{end_at}';")
r.count
@credit = true
@table_header = ["compte comptable", "compte tiers", "tiers","date", "numero piece","N° projet","libellé", "débit", "crédit"]
@table = []
r.cancel
r.each do |e|
d = Date.parse(e["Document Date"].to_s)
if d >= Date.parse("2019/06/01")
if true #ExportHist.new(:piece => e["No_"]).save
i+= 1
e["Désignation"] = e["Libellé écriture"] if !e["Désignation"]
#TTC
line = []
line << "41100000"
line << e["Buy-from Contact No_"]
line << e["Pay-to Name"]
line << d.to_date
line << e["Vendor Invoice No_"]
line << e["Job No_"]
line << "FA "+e["Pay-to Name"].to_s
if true
if @credit
line << ('%.2f' % e["Amount incl_ VAT"]).to_s.sub(".",",")
line << ""
else
line << ""
line << ('%.2f' % e["Amount incl_ VAT"]).to_s.sub(".",",")
end
end
@table << line
l = client.execute("SELECT TOP 1000 * FROM dbo.[JIPE$Purch_ Inv_ Line] WHERE [Document No_] = '#{e["No_"]}';")
l.count
l.cancel
puts "SELECT TOP 1000 * FROM dbo.[JIPE$Purch_ Inv_ Line] WHERE [Document No_] = '#{e["No_"]}';"
puts l.count
cpts = {}
l.each do |li|
if li["Amount Including VAT"].to_f != 0.0
cpt_co = SComptaAccount.where(:code => li["Shortcut Dimension 2 Code"], :zone => "FRANCE").first
if cpt_co
cpt = cpt_co.purchase_account
else
cpt = li["Shortcut Dimension 2 Code"]
end
if cpt == "60101000"
if e["Job No_"].to_s != ""
cpt = "60101000"
else
cpt = "60100000"
end
end
cpts[cpt] = cpts[cpt] || 0.0
cpts[cpt] += li["Amount"]
vat = "" # li["VAT Prod_ Posting Group"]+" "+li["VAT Bus_ Posting Group"]
if sca = SComptaAccount.where(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"]).first
vat += sca.purchase_account.to_s
else
SComptaAccount.create(:code => li["VAT Prod_ Posting Group"], :zone => li["VAT Bus_ Posting Group"])
end
cpts[vat] = cpts[vat] || 0.0
cpts[vat] += (li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
end
end
cpts.each do |key,value|
if value.to_f != 0.0
line = []
line << key
line << "" #e["N° client à facturer"]
line << e["Pay-to Name"]
line << d.to_date
line << e["Vendor Invoice No_"]
line << e["Job No_"]
line << "FA "+e["Pay-to Name"].to_s
if @credit
line << ""
line << ('%.2f' % value).to_s.sub(".",",")
else
line << ('%.2f' % value).to_s.sub(".",",")
line << ""
end
@table << line
end
end
end
else
end
end
if true
xlsx_package = Axlsx::Package.new
wb = xlsx_package.workbook
wb.add_worksheet(name: "import") do |sheet|
sheet.add_row @table_header
@table.each do |tr|
sheet.add_row tr
end
end
directory_name = "exports"
Dir.mkdir("private_medias/#{directory_name}") unless File.exists?("private_medias/#{directory_name}")
xlsx_package.serialize("private_medias/#{directory_name}/#{@filename}-#{start_at}-#{end_at}--#{Time.now.to_s.to_slug}-----#{i}-lignes.xlsx")
end
else
end
end
def file
send_file "private_medias/exports/#{params[:id]}.xlsx"
end
end