Files
FEDEO/test/bankImport/index.mjs
flfeders 9e092823e4 Added Vehicles
Added Bankimport, BankAccounts, BankStatements
Some Visual Changes
Added Contacts
Changes in VendorInvoices
Added layouts with default an one for Login PAge
Added Input Group Component
2023-12-22 17:50:22 +01:00

169 lines
5.1 KiB
JavaScript

import axios from "axios"
import {createClient} from "@supabase/supabase-js";
let key = process.env.SUPABASE_KEY
let url = process.env.SUPABASE_URL
let interval = process.env.INTERVAL
let goCardLessBaseUrl = process.env.GOCARDLESS_URL
let goCardLessSecretId = process.env.GOCARDLESS_SECRET_ID
let goCardLessSecretKey = process.env.GOCARDLESS_SECRET_KEY
const supabase = createClient(url,key)
let accessToken = ""
let refreshToken = ""
console.log(goCardLessBaseUrl)
let currentTenant = 1
let tenantData = (await supabase.from("tenants").select().eq("id", currentTenant)).data[0]
//console.log(tenantData)
let bankConfig = tenantData.bankConfig
//console.log(bankConfig)
//console.log(goCardLessBaseUrl + "token/new/")
let tokenData = (await axios({
url: goCardLessBaseUrl + "token/new/",
method: "POST",
data: {
"secret_id": goCardLessSecretId,
"secret_key": goCardLessSecretKey
}
})).data
accessToken = tokenData.access
refreshToken = tokenData.access
let accounts = []
const getAccounts = async () => {
let existingAccounts = (await supabase.from("bankAccounts").select()).data
let requisitionData = (await axios({
url: goCardLessBaseUrl + "requisitions/" + bankConfig.requisitions[0],
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET",
})).data
requisitionData.accounts.forEach(account => {
if (!accounts.includes(account)) {
accounts.push(account)
}
})
let supabaseAccountInserts = []
async function getAccountData () {
await Promise.all(accounts.map(async (account) => {
let accountData = (await axios({
url: goCardLessBaseUrl + "accounts/" + account,
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET"
})).data
//console.log(accountData)
if(existingAccounts.filter(account => account.iban === accountData.iban).length === 0){
supabaseAccountInserts.push({
name: "",
iban: accountData.iban,
bankId: accountData.institution_id,
ownerName: accountData.owner_name,
tenant: currentTenant,
accountId: accountData.id
})
}
}));
}
await getAccountData()
//console.log("Start Insert")
const {data:accountInsertData,error:accountInsertError} = await supabase.from("bankAccounts").insert(supabaseAccountInserts).select()
if(accountInsertError) {
console.log(accountInsertError)
} else if(accountInsertData) {
//console.log(accountInsertData)
}
}
const getTransactions = async () => {
let accountsToRequest = (await supabase.from("bankAccounts").select().eq("used", true)).data
let existingTransactions = (await supabase.from("bankStatements").select().eq("tenant", currentTenant)).data
console.log(accountsToRequest)
let supabaseTransactionInserts = []
async function getAccountTransactions () {
await Promise.all(accountsToRequest.map(async (account) => {
let transactions = (await axios({
url: goCardLessBaseUrl + "accounts/" + account.accountId + "/transactions",
headers: {
Authorization: `Bearer ${accessToken}`
},
method: "GET"
})).data.transactions.booked
//console.log(transactions)
transactions.forEach(transaction => {
if(!transaction.creditorAccount) console.log(transaction)
let transactionData = {
date: transaction.bookingDate,
amount: transaction.transactionAmount.amount,
credName: transaction.creditorName ? transaction.creditorName : null,
credIban: transaction.creditorAccount ? transaction.creditorAccount.iban : null,
debName: transaction.debtorName,
debIban: transaction.debtorAccount.iban,
text: transaction.remittanceInformationUnstructured,
gocardlessId: transaction.internalTransactionId,
currency: transaction.transactionAmount.currency,
account: account.id,
tenant: currentTenant
}
if(existingTransactions.filter(item => item.gocardlessId === transaction.internalTransactionId).length === 0){
supabaseTransactionInserts.push(transactionData)
}
})
}));
}
await getAccountTransactions()
console.log(supabaseTransactionInserts)
const {data:transactionInsertData, error:transactionInsertError} = await supabase.from("bankStatements").insert(supabaseTransactionInserts).select()
if(transactionInsertError) {
console.log(transactionInsertError)
} else if(transactionInsertData) {
console.log(transactionInsertData)
}
}
getAccounts()
getTransactions()