1322 lines
44 KiB
Ruby
1322 lines
44 KiB
Ruby
# -*- encoding : utf-8 -*-
|
|
class Admin::NavisionController < ApplicationController
|
|
layout "admin"
|
|
before_action :auth_admin, :only => :index
|
|
|
|
before_action :admin_space
|
|
|
|
|
|
def import_projets
|
|
@client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
|
|
@result = @client.execute("SELECT TOP 50000 * FROM dbo.[JIPE$Job]")
|
|
#Project Principal
|
|
#render :inline => @result.count.to_s
|
|
end
|
|
|
|
|
|
def import_clients
|
|
@client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
|
|
@result = @client.execute("SELECT TOP 50000 * FROM dbo.[JIPE$Customer]")
|
|
#render :inline => @result.count.to_s
|
|
end
|
|
|
|
|
|
def import_fournisseurs
|
|
@client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
|
|
@result = @client.execute("SELECT TOP 50000 * FROM dbo.[JIPE$Vendor]")
|
|
#render :inline => @result.count.to_s
|
|
end
|
|
|
|
def import_produits
|
|
@client = TinyTds::Client.new(username: 'test', password: '@Chatenois!2017', host: '40.89.153.193', appname: "SQL4PS" , port: 1534, database: "JIPE")
|
|
@result = @client.execute("SELECT TOP 50000 * FROM dbo.[JIPE$Item]")
|
|
#render :inline => @result.count.to_s
|
|
end
|
|
|
|
|
|
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","echeance", "numero piece","N° projet","libellé", "débit", "crédit"]
|
|
|
|
@table = []
|
|
r.cancel
|
|
r.each do |e|
|
|
|
|
|
|
d = Date.parse(e["Document Date"].to_s)
|
|
due_date = Date.parse(e["Due 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 << due_date.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 << due_date.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 = false
|
|
@table_header = ["compte comptable","code", "zone", "compte tiers", "tiers","date", "echeance", "numero piece","N° projet","libellé", "débit", "crédit"]
|
|
@table = []
|
|
r.cancel
|
|
r.each do |e|
|
|
|
|
|
|
d = Date.parse(e["Document Date"].to_s)
|
|
due_date = Date.parse(e["Due Date"].to_s)
|
|
if d >= Date.parse("2019/06/01")
|
|
if ExportHist.new(:piece => e["No_"]).save
|
|
i+= 1
|
|
#e["Désignation"] = e["Libellé écriture"] if !e["Désignation"]
|
|
|
|
#TTC
|
|
line = []
|
|
line << "40100000"
|
|
line << ""
|
|
line << ""
|
|
line << e["Buy-from Vendor No_"]
|
|
line << e["Pay-to Name"]
|
|
line << d.to_date
|
|
line << due_date.to_date
|
|
line << e["Vendor Invoice No_"]
|
|
line << e["Job No_"]
|
|
line << e["Posting Description"].to_s
|
|
|
|
if true
|
|
if @credit or e["Amount incl_ VAT"].to_f < 0
|
|
line << ('%.2f' % e["Amount incl_ VAT"]).to_f.abs.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 and cpt_co.purchase_account?
|
|
cpt = cpt_co.purchase_account
|
|
else
|
|
if li["Shortcut Dimension 2 Code"].to_s == ""
|
|
cpt = "60100000"
|
|
else
|
|
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
|
|
end
|
|
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][0] += li["Amount"]
|
|
|
|
cpts[cpt][1] << li["Shortcut Dimension 2 Code"].to_s+" - "+ActionController::Base.helpers.number_to_currency(li["Amount"].to_f)
|
|
|
|
cpts[cpt][2] << li["VAT Bus_ Posting Group"].to_s
|
|
|
|
|
|
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][0] += (li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
|
|
|
|
cpts[vat][1] << li["VAT Prod_ Posting Group"].to_s+" - "+ActionController::Base.helpers.number_to_currency(li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
|
|
|
|
cpts[vat][2] << li["VAT Bus_ Posting Group"].to_s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
cpts.sort.each do |key,value|
|
|
if value[0].to_f != 0.0
|
|
line = []
|
|
line << key
|
|
line << value[1].uniq.join(" ||| ").to_s
|
|
line << value[2].uniq.join(" ||| ").to_s
|
|
line << "" #e["N° client à facturer"]
|
|
line << e["Pay-to Name"]
|
|
line << d.to_date
|
|
line << due_date.to_date
|
|
line << e["Vendor Invoice No_"]
|
|
line << e["Job No_"]
|
|
line << e["Posting Description"].to_s
|
|
if @credit or value[0].to_f < 0
|
|
line << ""
|
|
line << ('%.2f' % value[0].abs).to_s.sub(".",",")
|
|
else
|
|
line << ('%.2f' % value[0]).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 export_a_purchase
|
|
|
|
if params[:start_at].to_s != "" and params[:stop_at].to_s != ""
|
|
|
|
require 'csv'
|
|
|
|
i = 0
|
|
|
|
@filename = "AvoirsAchats"
|
|
|
|
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_ Cr_ Memo Hdr_] WHERE [Document Date] >= '#{start_at}' AND [Document Date] < '#{end_at}';")
|
|
r.count
|
|
|
|
@credit = true
|
|
@table_header = ["compte comptable","code", "zone", "compte tiers", "tiers","date", "echeance", "numero piece","N° projet","libellé", "débit", "crédit"]
|
|
@table = []
|
|
r.cancel
|
|
r.each do |e|
|
|
|
|
|
|
d = Date.parse(e["Document Date"].to_s)
|
|
due_date = Date.parse(e["Due Date"].to_s)
|
|
if d >= Date.parse("2019/06/01")
|
|
if ExportHist.new(:piece => e["No_"]).save
|
|
i+= 1
|
|
#e["Désignation"] = e["Libellé écriture"] if !e["Désignation"]
|
|
|
|
#TTC
|
|
line = []
|
|
line << "40100000"
|
|
line << e["Buy-from Vendor No_"]
|
|
line << e["Pay-to Name"]
|
|
line << d.to_date
|
|
line << due_date.to_date
|
|
line << e["No_"]
|
|
line << e["Job No_"]
|
|
line << e["Posting Description"].to_s
|
|
|
|
if true
|
|
if @credit or e["Amount incl_ VAT"].to_f < 0
|
|
line << ('%.2f' % e["Amount incl_ VAT"]).to_f.abs.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_ Cr_ Memo Line] WHERE [Document No_] = '#{e["No_"]}';")
|
|
l.count
|
|
l.cancel
|
|
|
|
puts "SELECT TOP 1000 * FROM dbo.[JIPE$Purch_ Cr_ Memo 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 and cpt_co.purchase_account?
|
|
cpt = cpt_co.purchase_account
|
|
else
|
|
if li["Shortcut Dimension 2 Code"].to_s == ""
|
|
if e["Job No_"].to_s != ""
|
|
cpt = "60101000"
|
|
else
|
|
cpt = "60100000"
|
|
end
|
|
else
|
|
cpt = li["Shortcut Dimension 2 Code"] + " " + li["VAT Bus_ Posting Group"]
|
|
end
|
|
end
|
|
|
|
if cpt == "60101000"
|
|
if e["Job No_"].to_s != ""
|
|
cpt = "60101000"
|
|
else
|
|
cpt = "60100000"
|
|
end
|
|
|
|
end
|
|
|
|
cpts[cpt] = cpts[cpt] || [0.0, li["Shortcut Dimension 2 Code"], li["VAT Bus_ Posting Group"]]
|
|
|
|
cpts[cpt][0] += li["Amount"]
|
|
|
|
cpts[cpt][1] += " | "+li["Shortcut Dimension 2 Code"].to_s
|
|
|
|
cpts[cpt][2] += " | "+li["VAT Bus_ Posting Group"].to_s
|
|
|
|
|
|
|
|
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, li["VAT Prod_ Posting Group"], li["VAT Bus_ Posting Group"]]
|
|
|
|
cpts[vat][0] += (li["Amount Including VAT"].to_s.to_f - li["Amount"].to_s.to_f)
|
|
|
|
cpts[vat][1] += " | "+li["Shortcut Dimension 2 Code"].to_s
|
|
|
|
cpts[vat][2] += " | "+li["VAT Bus_ Posting Group"].to_s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
cpts.each do |key,value|
|
|
if value[0].to_f != 0.0
|
|
line = []
|
|
line << key
|
|
line << value[1].to_s
|
|
line << value[2].to_s
|
|
line << "" #e["N° client à facturer"]
|
|
line << e["Pay-to Name"]
|
|
line << d.to_date
|
|
line << due_date.to_date
|
|
line << e["Vendor Invoice No_"]
|
|
line << e["Job No_"]
|
|
line << e["Posting Description"].to_s
|
|
if @credit or value[0].to_f < 0
|
|
line << ""
|
|
line << ('%.2f' % value[0].abs).to_s.sub(".",",")
|
|
else
|
|
line << ('%.2f' % value[0]).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 export_sale_s
|
|
|
|
PriceDocument.all.each do |pd|
|
|
pd.destroy
|
|
end
|
|
|
|
if true # params[:start_at].to_s != "" and params[:stop_at].to_s != ""
|
|
require 'csv'
|
|
|
|
i = 0
|
|
|
|
@filename = "Ventes"
|
|
|
|
|
|
start_at = Date.parse("2019-06-01").strftime("%Y-%m-%d")
|
|
end_at = Date.parse("2020-04-15").strftime("%Y-%m-%d")
|
|
|
|
|
|
puts start_at
|
|
puts end_at
|
|
puts "AH"
|
|
|
|
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","echeance", "numero piece","N° projet","libellé", "débit", "crédit"]
|
|
|
|
@table = []
|
|
r.cancel
|
|
r.each do |e|
|
|
|
|
puts "B"
|
|
|
|
d = Date.parse(e["Document Date"].to_s)
|
|
due_date = Date.parse(e["Due Date"].to_s)
|
|
|
|
if true #d >= Date.parse("2019/06/01")
|
|
if true #ExportHist.new(:piece => e["No_"]).save
|
|
|
|
@price_document = PriceDocument.new(:price_document_type_id => 1, :d_number => e["No_"])
|
|
|
|
@price_document.s_project = SProject.where(:p_number => e["Job No_"]).first
|
|
|
|
|
|
i+= 1
|
|
|
|
e["Désignation"] = e["Posting Description"] if !e["Désignation"]
|
|
|
|
@price_document.price_line_block = PriceLineBlock.new(:movement_type => "cred")
|
|
|
|
@price_document.date = d.to_date
|
|
@price_document.price_line_block.p_customer = PCustomer.where(:code => e["Bill-to Customer No_"]).first
|
|
@price_document.p_customer = @price_document.price_line_block.p_customer
|
|
|
|
|
|
@price_document.price_line_block.customer_ref = e["Order No_ Customer"]
|
|
|
|
@price_document.price_line_block.customer_ref += " "+e["Your Reference"].to_s if e["Your Reference"].to_s != ""
|
|
|
|
|
|
@price_document.price_line_block.ct_payment_end_at = e["Due Date"]
|
|
@price_document.nav_due_date = e["Due Date"]
|
|
|
|
@price_document.nav_oder_no_customer = e["Order No_ Customer"]
|
|
|
|
|
|
@price_document.nav_location_code = e["Location Code"]
|
|
@price_document.nav_shortcut_dimension_1_code = e["Shortcut Dimension 1 Code"]
|
|
@price_document.nav_customer_posting_group = e["Customer Posting Group"]
|
|
@price_document.nav_payment_method_code = e["Payment Method Code"]
|
|
|
|
@p_payment_type = PPaymentType.where(:code => e["Payment Method Code"]).first
|
|
|
|
@price_document.price_line_block.p_payment_type = @p_payment_type
|
|
|
|
|
|
@price_document.nav_your_references = e["Your Reference"]
|
|
@price_document.nav_bill_name = e["Bill-to Name"]
|
|
@price_document.nav_bill_name_2 = e["Bill-to Name 2"]
|
|
@price_document.nav_bill_address = e["Bill-to Address"]
|
|
@price_document.nav_bill_address_2 = e["Bill-to Address 2"]
|
|
@price_document.nav_bill_post_code = e["Bill-to Post Code"]
|
|
@price_document.nav_bill_city = e["Bill-to City"]
|
|
|
|
@price_document.nav_ship_name = e["Ship-to Name"]
|
|
@price_document.nav_ship_name_2 = e["Ship-to Name 2"]
|
|
@price_document.nav_ship_address = e["Ship-to Address"]
|
|
@price_document.nav_ship_address_2 = e["Ship-to Address 2"]
|
|
@price_document.nav_ship_post_code = e["Ship-to Post Code"]
|
|
@price_document.nav_ship_city = e["Ship-to City"]
|
|
|
|
|
|
if @price_document.p_customer
|
|
|
|
bill_particular = Particular.where(:owner_type => "PCustomer", :owner_id => @price_document.p_customer.id,:organisation => @price_document.nav_bill_name, :name => @price_document.nav_bill_name_2, :address_2 => @price_document.nav_bill_address, :address_3 => @price_document.nav_bill_address_2, :cp => @price_document.nav_bill_post_code, :city => @price_document.nav_bill_city).first
|
|
|
|
|
|
if !bill_particular
|
|
|
|
bill_particular = Particular.create(:imported => true, :owner_type => "PCustomer", :owner_id => @price_document.p_customer.id,:organisation => @price_document.nav_bill_name, :name => @price_document.nav_bill_name_2, :address_2 => @price_document.nav_bill_address, :address_3 => @price_document.nav_bill_address_2, :cp => @price_document.nav_bill_post_code, :city => @price_document.nav_bill_city)
|
|
end
|
|
|
|
@price_document.price_line_block.particular_bill_id = bill_particular.id
|
|
|
|
@price_document.particular_bill_id = @price_document.price_line_block.particular_bill_id
|
|
|
|
send_particular = Particular.where(:owner_type => "PCustomer", :owner_id => @price_document.p_customer.id,:organisation => @price_document.nav_ship_name, :name => @price_document.nav_ship_name_2, :address_2 => @price_document.nav_ship_address, :address_3 => @price_document.nav_ship_address_2, :cp => @price_document.nav_ship_post_code, :city => @price_document.nav_ship_city).first
|
|
|
|
|
|
if !send_particular
|
|
|
|
send_particular = Particular.create(:imported => true, :owner_type => "PCustomer", :owner_id => @price_document.p_customer.id,:organisation => @price_document.nav_ship_name, :name => @price_document.nav_ship_name_2, :address_2 => @price_document.nav_ship_address, :address_3 => @price_document.nav_ship_address_2, :cp => @price_document.nav_ship_post_code, :city => @price_document.nav_ship_city)
|
|
end
|
|
|
|
@price_document.price_line_block.particular_send_id = send_particular.id
|
|
|
|
@price_document.particular_send_id = @price_document.price_line_block.particular_send_id
|
|
|
|
end
|
|
|
|
|
|
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 true #li["Amount Including VAT"].to_f != 0.0
|
|
p_product_cat = nil
|
|
if li["Shortcut Dimension 2 Code"].to_s != ""
|
|
|
|
p_product_cat = PProductCat.where(:code => li["Shortcut Dimension 2 Code"]).first
|
|
|
|
p_product_cat = PProductCat.create(:code => li["Shortcut Dimension 2 Code"]) if !p_product_cat
|
|
|
|
|
|
|
|
|
|
end
|
|
p_product_cat_id = nil
|
|
p_product_cat_id = p_product_cat.id if p_product_cat
|
|
|
|
line = @price_document.price_line_block.price_lines.new(:ct_p_product_cat_id => p_product_cat_id, :nav_line_no => li["Line No_"], :nav_unit_of_measure => li["Unit of Measure"], :nav_unit_of_measure_code => li[""], :nav_shortcut_dimension_2_code => li["Shortcut Dimension 2 Code"], :nav_gen_bus_posting_group => li["Gen_ Bus_ Posting Group"], :nav_gen_posting_group => li["Gen_ Prod_ Posting Group"], :nav_vat_prod_posting_group => li["VAT Prod_ Posting Group"], :ct_p_product_cat_id => (PProductCat.where(:code => li["Shortcut Dimension 2 Code"]).first ? PProductCat.where(:code => li["Shortcut Dimension 2 Code"]).first.id : nil),:p_product_ref => PProductRef.where(:ref => li["Item No_"]).first ,:ct_u_price_ht => li["Amount"], :qte => li["Quantity"], :ct_title => li["Description"], :ac_tva_account_value => li["VAT %"])
|
|
|
|
|
|
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
|
|
|
|
puts "TEST"
|
|
puts @price_document.save
|
|
puts @price_document.errors.messages
|
|
|
|
#break if i > 30
|
|
|
|
|
|
#TTC
|
|
line = []
|
|
line << "41100000"
|
|
line << e["Bill-to Customer No_"]
|
|
line << e["Bill-to Name"]
|
|
line << d.to_date
|
|
line << due_date.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 << due_date.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
|
|
|
|
else
|
|
|
|
end
|
|
|
|
render :inline => "ok"
|
|
|
|
end
|
|
|
|
|
|
|
|
def export_a_sale_s
|
|
|
|
#PriceDocument.all.each do |pd|
|
|
# pd.destroy
|
|
#end
|
|
|
|
if true # params[:start_at].to_s != "" and params[:stop_at].to_s != ""
|
|
require 'csv'
|
|
|
|
i = 0
|
|
|
|
@filename = "Ventes"
|
|
|
|
|
|
start_at = Date.parse("2019-06-01").strftime("%Y-%m-%d")
|
|
end_at = Date.parse("2020-03-30").strftime("%Y-%m-%d")
|
|
|
|
|
|
puts start_at
|
|
puts end_at
|
|
puts "AH"
|
|
|
|
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 = true
|
|
@table_header = ["compte comptable", "compte client", "client","date","echeance", "numero piece","N° projet","libellé", "débit", "crédit"]
|
|
|
|
@table = []
|
|
r.cancel
|
|
r.each do |e|
|
|
|
|
puts "B"
|
|
|
|
d = Date.parse(e["Document Date"].to_s)
|
|
due_date = Date.parse(e["Due Date"].to_s)
|
|
|
|
if true #d >= Date.parse("2019/06/01")
|
|
if true #ExportHist.new(:piece => e["No_"]).save
|
|
|
|
@price_document = PriceDocument.new(:price_document_type_id => 2, :d_number => e["No_"])
|
|
|
|
@price_document.s_project = SProject.where(:p_number => e["Job No_"]).first
|
|
|
|
|
|
i+= 1
|
|
|
|
e["Désignation"] = e["Posting Description"] if !e["Désignation"]
|
|
|
|
@price_document.price_line_block = PriceLineBlock.new(:movement_type => "deb")
|
|
|
|
@price_document.date = d.to_date
|
|
@price_document.price_line_block.p_customer = PCustomer.where(:code => e["Bill-to Customer No_"]).first
|
|
@price_document.p_customer = @price_document.price_line_block.p_customer
|
|
@price_document.price_line_block.particular_send_id = @price_document.price_line_block.p_customer.particular.id
|
|
@price_document.price_line_block.particular_bill_id = @price_document.price_line_block.p_customer.particular.id
|
|
|
|
|
|
|
|
|
|
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
|
|
line = @price_document.price_line_block.price_lines.new(:ct_u_price_ht => li["Amount"], :qte => li["Quantity"], :ct_title => li["Description"], :ac_tva_account_value => li["VAT %"])
|
|
|
|
|
|
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
|
|
|
|
puts "TEST"
|
|
puts @price_document.save
|
|
puts @price_document.errors.messages
|
|
|
|
#break if i > 30
|
|
|
|
|
|
#TTC
|
|
line = []
|
|
line << "41100000"
|
|
line << e["Bill-to Customer No_"]
|
|
line << e["Bill-to Name"]
|
|
line << d.to_date
|
|
line << due_date.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 << due_date.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
|
|
|
|
else
|
|
|
|
end
|
|
|
|
render :inline => "ok"
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def file
|
|
send_file "private_medias/exports/#{params[:id]}.xlsx"
|
|
end
|
|
end
|