# -*- 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