local QBCore = exports["qb-core"]:GetCoreObject() local Webhook = '' local playerWithMenuOpen = {} RegisterServerEvent("okokBanking:setMenuOpened") AddEventHandler("okokBanking:setMenuOpened", function(opened) local source = source if opened then playerWithMenuOpen[source] = opened else playerWithMenuOpen[source] = nil end end) function interp(s, tab) return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end)) end function AddMoney(society, amount) -- Check if society exists, create it if it doesn't local exists = MySQL.scalar.await("SELECT 1 FROM okokbanking_societies WHERE society = ?", { society }) if not exists then -- Create Iban local iban = Config.IBANPrefix .. society local societyName = QBCore.Shared.Jobs[society] and QBCore.Shared.Jobs[society].label or society return MySQL.insert.await("INSERT INTO okokbanking_societies (society, society_name, iban, value) VALUES (?,?,?,?)",{ society, societyName, iban, amount }) end MySQL.update.await('UPDATE okokbanking_societies SET value = value + @value WHERE society = @society OR society = @society2', { ['@value'] = amount, ['@society'] = 'society_' .. string.gsub(society, "society_", ""), ['@society2'] = string.gsub(society, "society_", ""), }) return true end function RemoveMoney(society, amount) MySQL.update.await('UPDATE okokbanking_societies SET value = value - @value WHERE society = @society OR society = @society2', { ['@value'] = amount, ['@society'] = 'society_' .. string.gsub(society, "society_", ""), ['@society2'] = string.gsub(society, "society_", ""), }) return true end function GetAccount(society) local done = false local money = 0 MySQL.query('SELECT value FROM okokbanking_societies WHERE society = @society OR society = @society2', { ['@society'] = 'society_'..string.gsub(society, "society_", ""), ['@society2'] = string.gsub(society, "society_", "") }, function(result) local db = result[1] done = true if db ~= nil then if db.value ~= nil then money = tonumber(db.value) end end end) while not done do Citizen.Wait(1) end return money end if Config.UseCashAsItem then QBCore.Functions.CreateCallback("okokBanking:GetPlayerInfo", function(source, cb) local xPlayer = QBCore.Functions.GetPlayer(source) local itemCash = xPlayer.Functions.GetItemByName("cash") local itemCashAmount = 0 if itemCash then itemCashAmount = itemCash.amount end MySQL.query('SELECT * FROM players WHERE citizenid = @identifier', { ['@identifier'] = xPlayer.PlayerData.citizenid }, function(result) local db = result[1] local data = { playerName = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, playerBankMoney = xPlayer.PlayerData.money.bank, playerIBAN = xPlayer.PlayerData.charinfo.account, walletMoney = itemCashAmount, sex = xPlayer.PlayerData.charinfo.gender, isBoss = xPlayer.PlayerData.job.isboss, isBossGang = xPlayer.PlayerData.gang.isboss } cb(data) end) end) else QBCore.Functions.CreateCallback("okokBanking:GetPlayerInfo", function(source, cb) local xPlayer = QBCore.Functions.GetPlayer(source) MySQL.query('SELECT * FROM players WHERE citizenid = @identifier', { ['@identifier'] = xPlayer.PlayerData.citizenid }, function(result) local db = result[1] local data = { playerName = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, playerBankMoney = xPlayer.PlayerData.money.bank, playerIBAN = xPlayer.PlayerData.charinfo.account, walletMoney = xPlayer.PlayerData.money.cash, sex = xPlayer.PlayerData.charinfo.gender, isBoss = xPlayer.PlayerData.job.isboss, isBossGang = xPlayer.PlayerData.gang.isboss } cb(data) end) end) end QBCore.Functions.CreateCallback("okokBanking:IsIBanUsed", function(source, cb, iban) local xPlayer = QBCore.Functions.GetPlayer(source) MySQL.query('SELECT * FROM players WHERE JSON_EXTRACT(charinfo, "$.account") = @iban', { ['@iban'] = iban }, function(result) local db = result[1] if db ~= nil then cb(db, true, xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname) else if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then MySQL.query('SELECT * FROM bank_accounts WHERE iban = @iban', { ['@iban'] = iban }, function(result2) local db2 = result2[1] local dbdata if db2 ~= nil then dbdata = { iban = db2.iban, value = db2.account_balance, society_name = db2.account_name, society = db2.account_name } end cb(dbdata, false) end) else MySQL.query('SELECT * FROM management_funds WHERE iban = @iban', { ['@iban'] = iban }, function(result2) local db2 = result2[1] local dbdata if db2 ~= nil then dbdata = { iban = db2.iban, value = db2.amount, society_name = db2.job_name, society = db2.job_name } end cb(dbdata, false) end) end else MySQL.query('SELECT * FROM okokbanking_societies WHERE iban = @iban', { ['@iban'] = iban }, function(result2) local db2 = result2[1] cb(db2, false) end) end end end) end) QBCore.Functions.CreateCallback("okokBanking:GetPIN", function(source, cb) local xPlayer = QBCore.Functions.GetPlayer(source) MySQL.query('SELECT pincode FROM players WHERE citizenid = @identifier', { ['@identifier'] = xPlayer.PlayerData.citizenid, }, function(result) local pin = result[1] cb(pin.pincode) end) end) QBCore.Functions.CreateCallback("okokBanking:SocietyInfo", function(source, cb, society, iban) if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then MySQL.query('SELECT * FROM bank_accounts WHERE account_name = @account_name', { ['@account_name'] = society, }, function(result) local db = result[1] local aa if db ~= nil then if db.iban ~= nil then aa = { value = db.account_balance, society_name = db.account_name, society = db.account_name, iban = db.iban } else MySQL.query('UPDATE bank_accounts SET iban = @iban WHERE account_name = @account_name', { ['@iban'] = string.gsub(iban:upper(), " ", ""), ['@account_name'] = society, }, function(result2) local db2 = result2[1] if db2 ~= nil then aa = { value = db2.account_balance, society_name = db2.account_name, society = db2.account_name, iban = db2.iban } end end) end end cb(aa) end) else MySQL.query('SELECT * FROM management_funds WHERE job_name = @job_name', { ['@job_name'] = society, }, function(result) local db = result[1] local aa if db ~= nil then if db.iban ~= nil then aa = { value = db.amount, society_name = db.job_name, society = db.job_name, iban = db.iban } else MySQL.query('UPDATE management_funds SET iban = @iban WHERE job_name = @job_name', { ['@iban'] = string.gsub(iban:upper(), " ", ""), ['@job_name'] = society, }, function(result2) local db2 = result2[1] if db2 ~= nil then aa = { value = db2.amount, society_name = db2.job_name, society = db2.job_name, iban = db2.iban } end end) end end cb(aa) end) end else MySQL.query('SELECT * FROM okokbanking_societies WHERE society = @society', { ['@society'] = society }, function(result) local db = result[1] cb(db) end) end end) RegisterServerEvent("okokBanking:CreateSocietyAccount") AddEventHandler("okokBanking:CreateSocietyAccount", function(society, society_name, value, iban) if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then MySQL.query('SELECT * FROM bank_accounts WHERE account_name = @account_name', { ['@account_name'] = society, }, function(result) local db = result[1] if db == nil then MySQL.query('INSERT INTO bank_accounts (account_name, account_balance, iban) VALUES (@account_name, @account_balance, @iban)', { ['@account_name'] = society, ['@account_balance'] = value, ['@iban'] = string.gsub(iban:upper(), "%s+", ""), }, function (result) end) end end) else MySQL.query('SELECT * FROM management_funds WHERE job_name = @job_name', { ['@job_name'] = society, }, function(result) local db = result[1] if db == nil then MySQL.query('INSERT INTO management_funds (job_name, amount, iban) VALUES (@job_name, @amount, @iban)', { ['@job_name'] = society, ['@amount'] = value, ['@iban'] = string.gsub(iban:upper(), "%s+", ""), }, function (result) end) end end) end else MySQL.query('INSERT INTO okokbanking_societies (society, society_name, value, iban) VALUES (@society, @society_name, @value, @iban)', { ['@society'] = society, ['@society_name'] = society_name, ['@value'] = value, ['@iban'] = string.gsub(iban:upper(), "%s+", ""), }, function (result) end) end end) RegisterServerEvent("okokBanking:SetIBAN") AddEventHandler("okokBanking:SetIBAN", function(iban) local xPlayer = QBCore.Functions.GetPlayer(source) xPlayer.Functions.ChangeIban(iban) end) QBCore.Functions.CreateCallback("okokBanking:HasCreditCard", function(source, cb) local xPlayer = QBCore.Functions.GetPlayer(source) if xPlayer ~= nil then local item = xPlayer.Functions.GetItemByName(Config.CreditCardItem) if item ~= nil then cb(item.amount >= 1) else cb(false) end else cb(false) end end) RegisterServerEvent("okokBanking:DepositMoney") AddEventHandler("okokBanking:DepositMoney", function(amount) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoney = xPlayer.PlayerData.money.cash local itemCash = xPlayer.Functions.GetItemByName("cash") local playerMoneyCash = 0 if itemCash ~= nil then playerMoneyCash = itemCash.amount end if not playerWithMenuOpen[source] then return end if amount <= playerMoney and not Config.UseCashAsItem or amount <= playerMoneyCash and Config.UseCashAsItem then if Config.UseCashAsItem then xPlayer.Functions.RemoveItem('cash', amount) else xPlayer.Functions.RemoveMoney('cash', amount) end xPlayer.Functions.AddMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) local itemCashUpdated = xPlayer.Functions.GetItemByName("cash") local playerMoneyCashUpdated = 0 if itemCashUpdated ~= nil then playerMoneyCashUpdated = itemCashUpdated.amount end TriggerEvent('okokBanking:AddDepositTransaction', amount, _source) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, playerMoneyCashUpdated) else TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('deposited').title, interp(_L('deposited').text, {s1 = amount}), _L('deposited').time, _L('deposited').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('deposited').text, {s1 = amount}), _L('deposited').type) end DepositMoneyWebhook({sender_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, value = GroupDigits(amount)}) else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_pocket').title, _L('no_money_pocket').text, _L('no_money_pocket').time, _L('no_money_pocket').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_pocket').text, _L('no_money_pocket').type) end end end) RegisterServerEvent("okokBanking:WithdrawMoney") AddEventHandler("okokBanking:WithdrawMoney", function(amount) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoney = xPlayer.PlayerData.money.bank local playerMoneyCash = xPlayer.Functions.GetItemByName("cash") local playerMoneyCashAmount = 0 if playerMoneyCash then playerMoneyCashAmount = playerMoneyCash.amount end if not playerWithMenuOpen[source] then return end if amount <= playerMoney then if Config.UseCashAsItem then xPlayer.Functions.AddItem('cash', amount) else xPlayer.Functions.AddMoney('cash', amount) end xPlayer.Functions.RemoveMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoneyCash = xPlayer.Functions.GetItemByName("cash") local playerMoneyCashAmount = 0 if playerMoneyCash then playerMoneyCashAmount = playerMoneyCash.amount end TriggerEvent('okokBanking:AddWithdrawTransaction', amount, _source) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, playerMoneyCashAmount) else TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('withdrawn').title, interp(_L('withdrawn').text, {s1 = amount}), _L('withdrawn').time, _L('withdrawn').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('withdrawn').text, {s1 = amount}), _L('withdrawn').type) end WithdrawMoneyWebhook({receiver_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, value = GroupDigits(amount)}) else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_bank').title, _L('no_money_bank').text, _L('no_money_bank').time, _L('no_money_bank').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_bank').text, _L('no_money_bank').type) end end end) RegisterServerEvent("okokBanking:TransferMoney") AddEventHandler("okokBanking:TransferMoney", function(amount, ibanNumber, targetIdentifier, acc, targetName) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local xTarget = QBCore.Functions.GetPlayerByCitizenId(targetIdentifier) local xPlayers = QBCore.Functions.GetPlayers() local playerMoney = xPlayer.PlayerData.money.bank local itemCash = xPlayer.Functions.GetItemByName("cash") local PlayerCashMoney = 0 if itemCash ~= nil then PlayerCashMoney = itemCash.amount end ibanNumber = ibanNumber:upper() if xPlayer.PlayerData.citizenid ~= targetIdentifier then if amount <= playerMoney or amount <= PlayerCashMoney then if xTarget ~= nil then xPlayer.Functions.RemoveMoney('bank', amount) xTarget.Functions.AddMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) for i=1, #xPlayers, 1 do local xForPlayer = QBCore.Functions.GetPlayer(xPlayers[i]) if xForPlayer.PlayerData.citizenid == targetIdentifier then if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', xPlayers[i], xTarget.PlayerData.money.bank, PlayerCashMoney) else TriggerClientEvent('okokBanking:updateTransactions', xPlayers[i], xTarget.PlayerData.money.bank, xTarget.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', xPlayers[i], _L('received_from').title, interp(_L('received_from').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('received_from').time, _L('received_from').type) else TriggerClientEvent('QBCore:Notify', xPlayers[i], interp(_L('received_from').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('received_from').type) end end end local tName = xTarget.PlayerData.charinfo.firstname..' '..xTarget.PlayerData.charinfo.lastname TriggerEvent('okokBanking:AddTransferTransaction', amount, xTarget, _source, tName, targetIdentifier) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, PlayerCashMoney) else TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, receiver_name = tName, value = amount}) elseif xTarget == nil then local playerAccount = json.decode(acc) playerAccount.bank = playerAccount.bank + amount playerAccount = json.encode(playerAccount) xPlayer.Functions.RemoveMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) TriggerEvent('okokBanking:AddTransferTransaction', amount, 1, _source, targetName, targetIdentifier) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, PlayerCashMoney) else TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = targetName}), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = targetName}), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, receiver_name = targetName..' (Offline User)', value = amount}) MySQL.query('UPDATE players SET money = @playerAccount WHERE citizenid = @target', { ['@playerAccount'] = playerAccount, ['@target'] = targetIdentifier }, function(changed) end) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_bank').title, _L('no_money_bank').text, _L('no_money_bank').time, _L('no_money_bank').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_bank').text, _L('no_money_bank').type) end end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('not_send_yourself').title, _L('not_send_yourself').text, _L('not_send_yourself').time, _L('not_send_yourself').type) else TriggerClientEvent('QBCore:Notify', _source, _L('not_send_yourself').text, _L('not_send_yourself').type) end end end) RegisterServerEvent("okokBanking:DepositMoneyToSociety") AddEventHandler("okokBanking:DepositMoneyToSociety", function(amount, society, societyName) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoney = xPlayer.PlayerData.money.cash local itemCash = xPlayer.Functions.GetItemByName("cash") local playerMoneyCash = 0 if itemCash ~= nil then playerMoneyCash = itemCash.amount end if amount <= playerMoney and not Config.UseCashAsItem or amount <= playerMoneyCash and Config.UseCashAsItem then if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then exports['qb-banking']:AddMoney(society, amount) else exports['qb-management']:AddMoney(society, amount) end else MySQL.query('UPDATE okokbanking_societies SET value = value + @value WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) end) end if Config.UseCashAsItem then xPlayer.Functions.RemoveItem('cash', amount) else xPlayer.Functions.RemoveMoney('cash', amount) end xPlayer = QBCore.Functions.GetPlayer(_source) local itemCashUpdated = xPlayer.Functions.GetItemByName("cash") local playerMoneyCashUpdated = 0 if itemCashUpdated ~= nil then playerMoneyCashUpdated = itemCashUpdated.amount end TriggerEvent('okokBanking:AddDepositTransactionToSociety', amount, _source, society, societyName) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, playerMoneyCashUpdated) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('deposited_to').title, interp(_L('deposited_to').text, {s1 = amount, s2 = societyName}), _L('deposited_to').time, _L('deposited_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('deposited_to').text, {s1 = amount, s2 = societyName}), _L('deposited_to').type) end TransferMoneyWebhook({sender_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, receiver_name = societyName..' ('..society..')', value = amount}) else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_pocket').title, _L('no_money_pocket').text, _L('no_money_pocket').time, _L('no_money_pocket').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_pocket').text, _L('no_money_pocket').type) end end end) RegisterServerEvent("okokBanking:WithdrawMoneyToSociety") AddEventHandler("okokBanking:WithdrawMoneyToSociety", function(amount, society, societyName, societyMoney) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local db local hasChecked = false if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then MySQL.Async.fetchAll('SELECT * FROM bank_accounts WHERE account_name = @account_name', { ['@account_name'] = society, }, function(result) db = result[1] hasChecked = true db.value = db.account_balance end) else MySQL.Async.fetchAll('SELECT * FROM management_funds WHERE job_name = @job_name', { ['@job_name'] = society, }, function(result) db = result[1] hasChecked = true db.value = db.amount end) end else MySQL.query('SELECT * FROM okokbanking_societies WHERE society = @society', { ['@society'] = society }, function(result) db = result[1] hasChecked = true end) end if not Config.UseQBManagement then MySQL.query('UPDATE okokbanking_societies SET is_withdrawing = 1 WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) end) end while not hasChecked do Citizen.Wait(100) end if amount <= db.value then if db.is_withdrawing == 1 then if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('someone_withdrawing').title, _L('someone_withdrawing').text, _L('someone_withdrawing').time, _L('someone_withdrawing').type) else TriggerClientEvent('QBCore:Notify', _source, _L('someone_withdrawing').text, _L('someone_withdrawing').type) end else if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then exports['qb-banking']:RemoveMoney(society, amount) else exports['qb-management']:RemoveMoney(society, amount) end else MySQL.query('UPDATE okokbanking_societies SET value = value - @value WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) end) end if Config.UseCashAsItem then xPlayer.Functions.AddItem('cash', amount) else xPlayer.Functions.AddMoney('cash', amount) end xPlayer = QBCore.Functions.GetPlayer(_source) local itemCash = xPlayer.Functions.GetItemByName("cash") local PlayerCashMoney = 0 if itemCash ~= nil then PlayerCashMoney = itemCash.amount end TriggerEvent('okokBanking:AddWithdrawTransactionToSociety', amount, _source, society, societyName) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, PlayerCashMoney) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('you_have_withdrawn').title, interp(_L('you_have_withdrawn').text, {s1 = amount, s2 = societyName}), _L('you_have_withdrawn').time, _L('you_have_withdrawn').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('you_have_withdrawn').text, {s1 = amount, s2 = societyName}), _L('you_have_withdrawn').type) end TransferMoneyWebhook({sender_name = societyName..' ('..society..')', receiver_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, value = amount}) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('society_no_money').title, _L('society_no_money').text, _L('society_no_money').time, _L('society_no_money').type) else TriggerClientEvent('QBCore:Notify', _source, _L('society_no_money').text, _L('society_no_money').type) end end if not Config.UseQBManagement then MySQL.query('UPDATE okokbanking_societies SET is_withdrawing = 0 WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) end) end end) RegisterServerEvent("okokBanking:TransferMoneyToSociety") AddEventHandler("okokBanking:TransferMoneyToSociety", function(amount, ibanNumber, societyName, society) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoney = xPlayer.PlayerData.money.bank if amount <= playerMoney then if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then exports['qb-banking']:AddMoney(society, amount) else exports['qb-management']:TransferMoney(society, amount, ibanNumber) end else MySQL.query('UPDATE okokbanking_societies SET value = value + @value WHERE iban = @iban', { ['@value'] = amount, ['@iban'] = ibanNumber }, function(changed) end) end xPlayer.Functions.RemoveMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end TriggerEvent('okokBanking:AddTransferTransactionToSociety', amount, _source, society, societyName) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, playerCashMoney) TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, playerCashMoney) TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, playerCashMoney) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) TriggerClientEvent('okokBanking:updateTransactions', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = societyName}), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = societyName}), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname, receiver_name = societyName..' ('..society..')', value = amount}) else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_bank').title, _L('no_money_bank').text, _L('no_money_bank').time, _L('no_money_bank').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_bank').text, _L('no_money_bank').type) end end end) function getSocietyInfo(society, iban) local done = false local societyInfo = nil if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then MySQL.query('SELECT * FROM bank_accounts WHERE account_name = @account_name', { ['@account_name'] = society, }, function(result) local db = result[1] local aa if db ~= nil then if db.iban ~= nil then aa = { value = db.account_balance, society_name = db.account_name, society = db.account_name, iban = db.iban } else MySQL.query('UPDATE bank_accounts SET iban = @iban WHERE account_name = @account_name', { ['@iban'] = string.gsub(iban:upper(), " ", ""), ['@account_name'] = society, }, function(result2) local db2 = result2[1] if db2 ~= nil then aa = { value = db2.account_balance, society_name = db2.account_name, society = db2.account_name, iban = db2.iban } end end) end end societyInfo = aa done = true end) else MySQL.query('SELECT * FROM management_funds WHERE job_name = @job_name', { ['@job_name'] = society, }, function(result) local db = result[1] local aa if db ~= nil then if db.iban ~= nil then aa = { value = db.amount, society_name = db.job_name, society = db.job_name, iban = db.iban } else MySQL.query('UPDATE management_funds SET iban = @iban WHERE job_name = @job_name', { ['@iban'] = string.gsub(iban:upper(), " ", ""), ['@job_name'] = society, }, function(result2) local db2 = result2[1] if db2 ~= nil then aa = { value = db2.amount, society_name = db2.job_name, society = db2.job_name, iban = db2.iban } end end) end end societyInfo = aa done = true end) end else MySQL.query('SELECT * FROM okokbanking_societies WHERE society = @society', { ['@society'] = society }, function(result) local db = result[1] societyInfo = db done = true end) end while not done do Citizen.Wait(100) end return societyInfo end RegisterServerEvent("okokBanking:TransferMoneyToSocietyFromSociety") AddEventHandler("okokBanking:TransferMoneyToSocietyFromSociety", function(amount, ibanNumber, societyNameTarget, societyTarget, society, societyName, societyMoney) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerJob = xPlayer.PlayerData.job.name if society ~= playerJob then return end local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end local xTarget = QBCore.Functions.GetPlayerByCitizenId(targetIdentifier) local xPlayers = QBCore.Functions.GetPlayers() local societyInfo = getSocietyInfo(society, ibanNumber) if amount <= societyInfo.value then if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then exports['qb-banking']:RemoveMoney(society, amount) exports['qb-banking']:AddMoney(societyTarget, amount) else exports['qb-management']:AddMoney(societyTarget, amount) exports['qb-management']:RemoveMoney(society, amount) end else MySQL.query('UPDATE okokbanking_societies SET value = value - @value WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) MySQL.query('UPDATE okokbanking_societies SET value = value + @value WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = societyTarget, ['@society_name'] = societyNameTarget, }, function(changed) end) end) end TriggerEvent('okokBanking:AddTransferTransactionFromSociety', amount, society, societyName, societyTarget, societyNameTarget) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, playerCashMoney) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = societyNameTarget}), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = societyNameTarget}), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = societyName..' ('..society..')', receiver_name = societyNameTarget..' ('..societyTarget..')', value = amount}) else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('society_no_money').title, _L('society_no_money').text, _L('society_no_money').time, _L('society_no_money').type) else TriggerClientEvent('QBCore:Notify', _source, _L('society_no_money').text, _L('society_no_money').type) end end end) RegisterServerEvent("okokBanking:TransferMoneyToPlayerFromSociety") AddEventHandler("okokBanking:TransferMoneyToPlayerFromSociety", function(amount, ibanNumber, targetIdentifier, acc, targetName, society, societyName, societyMoney, toMyself) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end local xTarget = QBCore.Functions.GetPlayerByCitizenId(targetIdentifier) local itemCashTarget = xTarget.Functions.GetItemByName("cash") local playerCashMoneyTarget = 0 if itemCashTarget ~= nil then playerCashMoneyTarget = itemCashTarget.amount end local xPlayers = QBCore.Functions.GetPlayers() if amount <= societyMoney then if Config.UseQBManagement or Config.UseQBBanking then if Config.UseQBBanking then exports['qb-banking']:RemoveMoney(society, amount) else exports['qb-management']:RemoveMoney(society, amount) end else MySQL.query('UPDATE okokbanking_societies SET value = value - @value WHERE society = @society AND society_name = @society_name', { ['@value'] = amount, ['@society'] = society, ['@society_name'] = societyName, }, function(changed) end) end if xTarget ~= nil then xTarget.Functions.AddMoney('bank', amount) if not toMyself then for i=1, #xPlayers, 1 do local xForPlayer = QBCore.Functions.GetPlayer(xPlayers[i]) if xForPlayer.PlayerData.citizenid == targetIdentifier then if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', xPlayers[i], xTarget.PlayerData.money.bank, playerCashMoneyTarget) else TriggerClientEvent('okokBanking:updateTransactions', xPlayers[i], xTarget.PlayerData.money.bank, xTarget.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', xPlayers[i], _L('received_from').title, interp(_L('received_from').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('received_from').time, _L('received_from').type) else TriggerClientEvent('QBCore:Notify', xPlayers[i], interp(_L('received_from').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('received_from').type) end end end end TriggerEvent('okokBanking:AddTransferTransactionFromSocietyToP', amount, society, societyName, targetIdentifier, targetName) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, playerCashMoney) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname}), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = societyName..' ('..society..')', receiver_name = xTarget.PlayerData.charinfo.firstname..' '..xTarget.PlayerData.charinfo.lastname, value = amount}) elseif xTarget == nil then local playerAccount = json.decode(acc) playerAccount.bank = playerAccount.bank + amount playerAccount = json.encode(playerAccount) TriggerEvent('okokBanking:AddTransferTransactionFromSocietyToP', amount, society, societyName, targetIdentifier, targetName) if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, playerCashMoney) else TriggerClientEvent('okokBanking:updateTransactionsSociety', _source, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('transferred_to').title, interp(_L('transferred_to').text, {s1 = amount, s2 = targetName }), _L('transferred_to').time, _L('transferred_to').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('transferred_to').text, {s1 = amount, s2 = targetName }), _L('transferred_to').type) end TransferMoneyWebhook({sender_name = societyName..' ('..society..')', receiver_name = targetName..' (Offline User)', value = amount}) MySQL.query('UPDATE players SET money = @playerAccount WHERE citizenid = @target', { ['@playerAccount'] = playerAccount, ['@target'] = targetIdentifier }, function(changed) end) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('society_no_money').title, _L('society_no_money').text, _L('society_no_money').time, _L('society_no_money').type) else TriggerClientEvent('QBCore:Notify', _source, _L('society_no_money').text, _L('society_no_money').type) end end end) QBCore.Functions.CreateCallback("okokBanking:GetOverviewTransactions", function(source, cb) local xPlayer = QBCore.Functions.GetPlayer(source) local playerIdentifier = xPlayer.PlayerData.citizenid local allDays = {} local income = 0 local outcome = 0 local totalIncome = 0 local day1_total, day2_total, day3_total, day4_total, day5_total, day6_total, day7_total = 0, 0, 0, 0, 0, 0, 0 MySQL.query('SELECT * FROM okokbanking_transactions WHERE receiver_identifier = @identifier OR sender_identifier = @identifier ORDER BY id DESC', { ['@identifier'] = playerIdentifier }, function(result) MySQL.query('SELECT *, DATE(date) = CURDATE() AS "day1", DATE(date) = CURDATE() - INTERVAL 1 DAY AS "day2", DATE(date) = CURDATE() - INTERVAL 2 DAY AS "day3", DATE(date) = CURDATE() - INTERVAL 3 DAY AS "day4", DATE(date) = CURDATE() - INTERVAL 4 DAY AS "day5", DATE(date) = CURDATE() - INTERVAL 5 DAY AS "day6", DATE(date) = CURDATE() - INTERVAL 6 DAY AS "day7" FROM `okokbanking_transactions` WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY AND receiver_identifier = @identifier OR sender_identifier = @identifier', { ['@identifier'] = playerIdentifier }, function(result2) for k, v in pairs(result2) do local type = v.type local receiver_identifier = v.receiver_identifier local sender_identifier = v.sender_identifier local value = tonumber(v.value) if v.day1 == 1 then if value ~= nil then if type == "deposit" then day1_total = day1_total + value income = income + value elseif type == "withdraw" then day1_total = day1_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day1_total = day1_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day1_total = day1_total - value outcome = outcome - value end end elseif v.day2 == 1 then if value ~= nil then if type == "deposit" then day2_total = day2_total + value income = income + value elseif type == "withdraw" then day2_total = day2_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day2_total = day2_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day2_total = day2_total - value outcome = outcome - value end end elseif v.day3 == 1 then if value ~= nil then if type == "deposit" then day3_total = day3_total + value income = income + value elseif type == "withdraw" then day3_total = day3_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day3_total = day3_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day3_total = day3_total - value outcome = outcome - value end end elseif v.day4 == 1 then if value ~= nil then if type == "deposit" then day4_total = day4_total + value income = income + value elseif type == "withdraw" then day4_total = day4_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day4_total = day4_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day4_total = day4_total - value outcome = outcome - value end end elseif v.day5 == 1 then if value ~= nil then if type == "deposit" then day5_total = day5_total + value income = income + value elseif type == "withdraw" then day5_total = day5_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day5_total = day5_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day5_total = day5_total - value outcome = outcome - value end end elseif v.day6 == 1 then if value ~= nil then if type == "deposit" then day6_total = day6_total + value income = income + value elseif type == "withdraw" then day6_total = day6_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day6_total = day6_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day6_total = day6_total - value outcome = outcome - value end end elseif v.day7 == 1 then if value ~= nil then if type == "deposit" then day7_total = day7_total + value income = income + value elseif type == "withdraw" then day7_total = day7_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day7_total = day7_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day7_total = day7_total - value outcome = outcome - value end end end end totalIncome = day1_total + day2_total + day3_total + day4_total + day5_total + day6_total + day7_total table.remove(allDays) table.insert(allDays, day1_total) table.insert(allDays, day2_total) table.insert(allDays, day3_total) table.insert(allDays, day4_total) table.insert(allDays, day5_total) table.insert(allDays, day6_total) table.insert(allDays, day7_total) table.insert(allDays, income) table.insert(allDays, outcome) table.insert(allDays, totalIncome) cb(result, playerIdentifier, allDays) end) end) end) QBCore.Functions.CreateCallback("okokBanking:GetSocietyTransactions", function(source, cb, society) local playerIdentifier = society local allDays = {} local income = 0 local outcome = 0 local totalIncome = 0 local day1_total, day2_total, day3_total, day4_total, day5_total, day6_total, day7_total = 0, 0, 0, 0, 0, 0, 0 MySQL.query('SELECT * FROM okokbanking_transactions WHERE receiver_identifier = @identifier OR sender_identifier = @identifier ORDER BY id DESC', { ['@identifier'] = society }, function(result) MySQL.query('SELECT *, DATE(date) = CURDATE() AS "day1", DATE(date) = CURDATE() - INTERVAL 1 DAY AS "day2", DATE(date) = CURDATE() - INTERVAL 2 DAY AS "day3", DATE(date) = CURDATE() - INTERVAL 3 DAY AS "day4", DATE(date) = CURDATE() - INTERVAL 4 DAY AS "day5", DATE(date) = CURDATE() - INTERVAL 5 DAY AS "day6", DATE(date) = CURDATE() - INTERVAL 6 DAY AS "day7" FROM `okokbanking_transactions` WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY AND receiver_identifier = @identifier OR sender_identifier = @identifier ORDER BY id DESC', { ['@identifier'] = society }, function(result2) for k, v in pairs(result2) do local type = v.type local receiver_identifier = v.receiver_identifier local sender_identifier = v.sender_identifier local value = tonumber(v.value) if v.day1 == 1 then if value ~= nil then if type == "deposit" then day1_total = day1_total + value income = income + value elseif type == "withdraw" then day1_total = day1_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day1_total = day1_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day1_total = day1_total - value outcome = outcome - value end end elseif v.day2 == 1 then if value ~= nil then if type == "deposit" then day2_total = day2_total + value income = income + value elseif type == "withdraw" then day2_total = day2_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day2_total = day2_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day2_total = day2_total - value outcome = outcome - value end end elseif v.day3 == 1 then if value ~= nil then if type == "deposit" then day3_total = day3_total + value income = income + value elseif type == "withdraw" then day3_total = day3_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day3_total = day3_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day3_total = day3_total - value outcome = outcome - value end end elseif v.day4 == 1 then if value ~= nil then if type == "deposit" then day4_total = day4_total + value income = income + value elseif type == "withdraw" then day4_total = day4_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day4_total = day4_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day4_total = day4_total - value outcome = outcome - value end end elseif v.day5 == 1 then if value ~= nil then if type == "deposit" then day5_total = day5_total + value income = income + value elseif type == "withdraw" then day5_total = day5_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day5_total = day5_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day5_total = day5_total - value outcome = outcome - value end end elseif v.day6 == 1 then if value ~= nil then if type == "deposit" then day6_total = day6_total + value income = income + value elseif type == "withdraw" then day6_total = day6_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day6_total = day6_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day6_total = day6_total - value outcome = outcome - value end end elseif v.day7 == 1 then if value ~= nil then if type == "deposit" then day7_total = day7_total + value income = income + value elseif type == "withdraw" then day7_total = day7_total - value outcome = outcome - value elseif type == "transfer" and receiver_identifier == playerIdentifier then day7_total = day7_total + value income = income + value elseif type == "transfer" and sender_identifier == playerIdentifier then day7_total = day7_total - value outcome = outcome - value end end end end totalIncome = day1_total + day2_total + day3_total + day4_total + day5_total + day6_total + day7_total table.remove(allDays) table.insert(allDays, day1_total) table.insert(allDays, day2_total) table.insert(allDays, day3_total) table.insert(allDays, day4_total) table.insert(allDays, day5_total) table.insert(allDays, day6_total) table.insert(allDays, day7_total) table.insert(allDays, income) table.insert(allDays, outcome) table.insert(allDays, totalIncome) cb(result, playerIdentifier, allDays) end) end) end) RegisterServerEvent("okokBanking:AddDepositTransaction") AddEventHandler("okokBanking:AddDepositTransaction", function(amount, source_) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = 'bank', ['@receiver_name'] = 'Bank Account', ['@sender_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@sender_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@value'] = tonumber(amount), ['@type'] = 'deposit' }, function (result) end) end) RegisterServerEvent("okokBanking:AddWithdrawTransaction") AddEventHandler("okokBanking:AddWithdrawTransaction", function(amount, source_) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@receiver_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@sender_identifier'] = 'bank', ['@sender_name'] = 'Bank Account', ['@value'] = tonumber(amount), ['@type'] = 'withdraw' }, function (result) end) end) RegisterServerEvent("okokBanking:AddTransferTransaction") AddEventHandler("okokBanking:AddTransferTransaction", function(amount, xTarget, source_, targetName, targetIdentifier) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) if targetName == nil then MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = tostring(xTarget.PlayerData.citizenid), ['@receiver_name'] = tostring(xTarget.PlayerData.charinfo.firstname..' '..xTarget.PlayerData.charinfo.lastname), ['@sender_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@sender_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) elseif targetName ~= nil and targetIdentifier ~= nil then MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = tostring(targetIdentifier), ['@receiver_name'] = tostring(targetName), ['@sender_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@sender_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) end end) RegisterServerEvent("okokBanking:AddTransferTransactionToSociety") AddEventHandler("okokBanking:AddTransferTransactionToSociety", function(amount, source_, society, societyName) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = society, ['@receiver_name'] = societyName, ['@sender_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@sender_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) end) RegisterServerEvent("okokBanking:AddTransferTransactionFromSocietyToP") AddEventHandler("okokBanking:AddTransferTransactionFromSocietyToP", function(amount, society, societyName, identifier, name) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = identifier, ['@receiver_name'] = name, ['@sender_identifier'] = society, ['@sender_name'] = societyName, ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) end) RegisterServerEvent("okokBanking:AddTransferTransactionFromSociety") AddEventHandler("okokBanking:AddTransferTransactionFromSociety", function(amount, society, societyName, societyTarget, societyNameTarget) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = societyTarget, ['@receiver_name'] = societyNameTarget, ['@sender_identifier'] = society, ['@sender_name'] = societyName, ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) end) RegisterServerEvent("okokBanking:AddDepositTransactionToSociety") AddEventHandler("okokBanking:AddDepositTransactionToSociety", function(amount, source_, society, societyName) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = society, ['@receiver_name'] = societyName, ['@sender_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@sender_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@value'] = tonumber(amount), ['@type'] = 'deposit' }, function (result) end) end) RegisterServerEvent("okokBanking:AddWithdrawTransactionToSociety") AddEventHandler("okokBanking:AddWithdrawTransactionToSociety", function(amount, source_, society, societyName) local _source = nil if source_ ~= nil then _source = source_ else _source = source end local xPlayer = QBCore.Functions.GetPlayer(_source) MySQL.query('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = tostring(xPlayer.PlayerData.citizenid), ['@receiver_name'] = tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), ['@sender_identifier'] = society, ['@sender_name'] = societyName, ['@value'] = tonumber(amount), ['@type'] = 'withdraw' }, function (result) end) end) RegisterServerEvent("okokBanking:UpdateIbanDB") AddEventHandler("okokBanking:UpdateIbanDB", function(iban, amount) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) if amount <= xPlayer.PlayerData.money.bank then MySQL.query('SELECT charinfo FROM players WHERE citizenid = ?', { xPlayer.PlayerData.citizenid }, function(result) local charinfo = json.decode(result[1].charinfo) if not Config.CharInfoUpdate then charinfo = json.decode(result) end charinfo.account = iban local updated = json.encode(charinfo) MySQL.query('UPDATE players SET charinfo = ? WHERE citizenid = ?', {updated, xPlayer.PlayerData.citizenid}) end) if xPlayer.Functions.ChangeIban then xPlayer.Functions.ChangeIban(iban) else TriggerClientEvent('okokNotify:Alert', _source, 'OKOKBANKING', 'Unable to locate or identify the function ChangeIban. Please refer to the documentation for correct usage and placement!', 5000, 'warning') return end xPlayer.Functions.RemoveMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, playerCashMoney) else TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end TriggerEvent('okokBanking:AddTransferTransactionToSociety', amount, _source, "bank", "Bank (IBAN)") TriggerClientEvent('okokBanking:updateIban', _source, iban) TriggerClientEvent('okokBanking:updateIbanPinChange', _source) if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('iban_changed').title, interp(_L('iban_changed').text, {s1 = iban}), _L('iban_changed').time, _L('iban_changed').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('iban_changed').text, {s1 = iban}), _L('iban_changed').type) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('iban_no_money').title, interp(_L('iban_no_money').text, {s1 = amount}), _L('iban_no_money').time, _L('iban_no_money').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('iban_no_money').text, {s1 = amount}), _L('iban_no_money').type) end end end) RegisterServerEvent("okokBanking:UpdatePINDB") AddEventHandler("okokBanking:UpdatePINDB", function(pin, amount) local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) if amount <= xPlayer.PlayerData.money.bank then MySQL.query('UPDATE players SET pincode = @pin WHERE citizenid = @identifier', { ['@pin'] = pin, ['@identifier'] = xPlayer.PlayerData.citizenid, }, function(changed) end) xPlayer.Functions.RemoveMoney('bank', amount) xPlayer = QBCore.Functions.GetPlayer(_source) local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, playerCashMoney) else TriggerClientEvent('okokBanking:updateMoney', _source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end TriggerEvent('okokBanking:AddTransferTransactionToSociety', amount, _source, "bank", "Bank (PIN)") TriggerClientEvent('okokBanking:updateIbanPinChange', _source) if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('pin_changed').title, interp(_L('pin_changed').text, {s1 = pin}), _L('pin_changed').time, _L('pin_changed').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L("pin_changed").text, {s1 = pin}), _L('pin_changed').type) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('pin_no_money').title, interp(_L('pin_no_money').text, {s1 = amount}), _L('pin_no_money').time, _L('pin_no_money').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('pin_no_money').text, {s1 = amount}), _L('pin_no_money').type) end end end) RegisterServerEvent("okokBanking:AddNewTransaction") AddEventHandler("okokBanking:AddNewTransaction", function(receiver_name, receiver_identifier, sender_name, sender_identifier, amount, reason) MySQL.Async.insert('INSERT INTO okokbanking_transactions (receiver_identifier, receiver_name, sender_identifier, sender_name, date, value, type) VALUES (@receiver_identifier, @receiver_name, @sender_identifier, @sender_name, CURRENT_TIMESTAMP(), @value, @type)', { ['@receiver_identifier'] = receiver_identifier, ['@receiver_name'] = receiver_name.." ("..reason..")", ['@sender_identifier'] = sender_identifier, ['@sender_name'] = sender_name.." ("..reason..")", ['@value'] = tonumber(amount), ['@type'] = 'transfer' }, function (result) end) end) RegisterServerEvent("okokBanking:GiveCC") AddEventHandler("okokBanking:GiveCC", function() local _source = source local xPlayer = QBCore.Functions.GetPlayer(_source) local playerMoney = xPlayer.PlayerData.money.bank local itemCash = xPlayer.Functions.GetItemByName("cash") local playerCashMoney = 0 if itemCash ~= nil then playerCashMoney = itemCash.amount end if Config.CreditCardPrice <= playerMoney then xPlayer.Functions.RemoveMoney('bank', Config.CreditCardPrice) xPlayer.Functions.AddItem(Config.CreditCardItem, 1) TriggerEvent('okokBanking:AddNewTransaction', 'Bank', 'bank', tostring(xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname), xPlayer.PlayerData.citizenid, Config.CreditCardPrice, 'Buy CC') if Config.UseCashAsItem then TriggerClientEvent('okokBanking:updateTransactions', source, xPlayer.PlayerData.money.bank, playerCashMoney) else TriggerClientEvent('okokBanking:updateTransactions', source, xPlayer.PlayerData.money.bank, xPlayer.PlayerData.money.cash) end if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('bought_cc').title, interp(_L('bought_cc').text, {s1 = Config.CreditCardPrice}), _L('bought_cc').time, _L('bought_cc').type) else TriggerClientEvent('QBCore:Notify', _source, interp(_L('bought_cc').text, {s1 = Config.CreditCardPrice}), _L('bought_cc').type) end else if Config.okokNotify then TriggerClientEvent('okokNotify:Alert', _source, _L('no_money_bank').title, _L('no_money_bank').text, _L('no_money_bank').time, _L('no_money_bank').type) else TriggerClientEvent('QBCore:Notify', _source, _L('no_money_bank').text, _L('no_money_bank').type) end end end) function GroupDigits(value) local left,num,right = string.match(value,'^([^%d]*%d)(%d*)(.-)$') return left..(num:reverse():gsub('(%d%d%d)','%1,'):reverse())..right end -------------------------- WEBHOOK function TransferMoneyWebhook(data) local information = { { ["color"] = Config.TransferWebhookColor, ["author"] = { ["icon_url"] = Config.IconURL, ["name"] = Config.ServerName..' - Banking Logs', }, ["title"] = 'New Transaction', ["description"] = '**Sender:** '..data.sender_name..'\n**Receiver:** '..data.receiver_name..'\n**Amount:** '..data.value..'€', ["footer"] = { ["text"] = os.date(Config.DateFormat), } } } PerformHttpRequest(Webhook, function(err, text, headers) end, 'POST', json.encode({username = Config.BotName, embeds = information}), {['Content-Type'] = 'application/json'}) end function WithdrawMoneyWebhook(data) local information = { { ["color"] = Config.WithdrawWebhookColor, ["author"] = { ["icon_url"] = Config.IconURL, ["name"] = Config.ServerName..' - Banking Logs', }, ["title"] = 'New Withdrawal', ["description"] = '**Receiver:** '..data.receiver_name..'\n**Amount:** '..data.value..'€', ["footer"] = { ["text"] = os.date(Config.DateFormat), } } } PerformHttpRequest(Webhook, function(err, text, headers) end, 'POST', json.encode({username = Config.BotName, embeds = information}), {['Content-Type'] = 'application/json'}) end function DepositMoneyWebhook(data) local information = { { ["color"] = Config.DepositWebhookColor, ["author"] = { ["icon_url"] = Config.IconURL, ["name"] = Config.ServerName..' - Banking Logs', }, ["title"] = 'New Deposit', ["description"] = '**Sender:** '..data.sender_name..'\n**Amount:** '..data.value..'€', ["footer"] = { ["text"] = os.date(Config.DateFormat), } } } PerformHttpRequest(Webhook, function(err, text, headers) end, 'POST', json.encode({username = Config.BotName, embeds = information}), {['Content-Type'] = 'application/json'}) end