2022-02-05 15:44:29 +00:00
local QBCore = exports [ 'qb-core' ]: GetCoreObject ()
2022-06-10 14:35:46 +01:00
local function cv ( amount )
local formatted = amount
while true do formatted , k = string.gsub ( formatted , "^(-?%d+)(%d%d%d)" , '%1,%2' ) if ( k == 0 ) then break end Wait ( 0 ) end
return formatted
end
AddEventHandler ( 'onResourceStart' , function ( resource ) if GetCurrentResourceName () ~= resource then return end
2022-06-21 15:11:31 +01:00
for k , v in pairs ( Config.Jobs ) do
if not QBCore.Shared . Jobs [ k ] and not QBCore.Shared . Gangs [ k ] then
print ( "Jim-Payments: Config.Jobs searched for job/gang '" .. k .. "' and couldn't find it in the Shared" )
end
end
2022-04-25 10:01:51 +01:00
end )
2022-06-10 14:35:46 +01:00
QBCore.Commands . Add ( "cashregister" , "Use mobile cash register" , {}, false , function ( source ) TriggerClientEvent ( "jim-payments:client:Charge" , source , {}, true ) end )
2022-06-21 15:11:31 +01:00
RegisterServerEvent ( 'jim-payments:Tickets:Give' , function ( data , biller , gang )
2022-06-10 14:35:46 +01:00
if biller then -- If this is found, it ISN'T a phone payment, so add money to society here
2022-06-21 15:11:31 +01:00
if gang then
if Config.Manage then exports [ "qb-management" ]: AddGangMoney ( tostring ( biller.PlayerData . gang.name ), data.amount )
if Config.Debug then print ( "QB-Management(Gang): Adding $" .. data.amount .. " to account '" .. tostring ( biller.PlayerData . gang.name ) .. "'" ) end
else TriggerEvent ( "qb-gangmenu:server:addAccountMoney" , tostring ( biller.PlayerData . gang.name ), data.amount )
if Config.Debug then print ( "QB-GangMenu: Adding $" .. data.amount .. " to account '" .. tostring ( biller.PlayerData . gang.name ) .. "'" ) end
end
elseif not gang then
if Config.Manage then exports [ "qb-management" ]: AddMoney ( tostring ( biller.PlayerData . job.name ), data.amount )
if Config.Debug then print ( "QB-Management(Job): Adding $" .. data.amount .. " to account '" .. tostring ( biller.PlayerData . job.name ) .. "'" ) end
else TriggerEvent ( "qb-bossmenu:server:addAccountMoney" , tostring ( biller.PlayerData . job.name ), data.amount )
if Config.Debug then print ( "QB-BossMenu: Adding $" .. data.amount .. " to account '" .. tostring ( biller.PlayerData . job.name ) .. "'" ) end
end
2022-06-06 20:42:02 +01:00
end
2022-06-10 14:35:46 +01:00
elseif not biller then --Find the biller from their citizenid
2022-06-22 14:20:36 +01:00
for k , v in pairs ( QBCore.Functions . GetPlayers ()) do
local Player = QBCore.Functions . GetPlayer ( v )
if Player.PlayerData . citizenid == data.senderCitizenId then biller = Player end
end
2022-06-10 14:35:46 +01:00
TriggerClientEvent ( 'QBCore:Notify' , biller.PlayerData . source , data.sender .. " Paid their $" .. data.amount .. " invoice" , "success" )
2022-04-11 18:59:47 +01:00
end
2022-06-06 20:42:02 +01:00
2022-06-10 14:35:46 +01:00
local duty = true
2022-06-21 15:18:01 +01:00
if not biller.PlayerData . job.onduty or gang == nil then duty = false end
2022-06-06 20:42:02 +01:00
2022-06-10 14:35:46 +01:00
-- If ticket system enabled, do this
if duty and Config.TicketSystem then
if data.amount >= Config.Jobs [ data.society ]. MinAmountforTicket then
for k , v in pairs ( QBCore.Functions . GetPlayers ()) do
local Player = QBCore.Functions . GetPlayer ( v )
if Player ~= nil then
if Player.PlayerData . job.name == data.society and Player.PlayerData . job.onduty then
Player.Functions . AddItem ( 'payticket' , 1 , false , {[ "quality" ] = nil })
TriggerClientEvent ( 'QBCore:Notify' , Player.PlayerData . source , 'Receipt received' , 'success' )
TriggerClientEvent ( 'inventory:client:ItemBox' , Player.PlayerData . source , QBCore.Shared . Items [ 'payticket' ], "add" , 1 )
end
2022-04-11 18:59:47 +01:00
end
2022-06-21 15:11:31 +01:00
if gang then
biller.Functions . AddItem ( 'payticket' , 1 , false , {[ "quality" ] = nil })
TriggerClientEvent ( 'QBCore:Notify' , biller.PlayerData . source , 'Receipt received' , 'success' )
TriggerClientEvent ( 'inventory:client:ItemBox' , biller.PlayerData . source , QBCore.Shared . Items [ 'payticket' ], "add" , 1 )
end
2022-04-11 18:59:47 +01:00
end
end
2022-06-10 14:35:46 +01:00
end
-- Commission section, does each config option separately
local comm = tonumber ( Config.Jobs [ data.society ]. Commission )
if Config.Commission and comm ~= 0 then
if Config.CommissionLimit and data.amount < Config.Jobs [ data.society ]. MinAmountforTicket then return end
if Config.CommissionDouble then
biller.Functions . AddMoney ( "bank" , math.floor ( tonumber ( data.amount ) * ( comm * 2 )))
TriggerClientEvent ( "QBCore:Notify" , biller.PlayerData . source , "Recieved $" .. math.floor ( tonumber ( data.amount ) * ( comm * 2 )) .. " in Commission" , "success" )
else biller.Functions . AddMoney ( "bank" , math.floor ( tonumber ( data.amount ) * comm ))
TriggerClientEvent ( "QBCore:Notify" , biller.PlayerData . source , "Recieved $" .. math.floor ( tonumber ( data.amount ) * comm ) .. " in Commission" , "success" )
2022-02-20 15:30:15 +00:00
end
2022-06-10 14:35:46 +01:00
if Config.CommissionAll then
for k , v in pairs ( QBCore.Functions . GetPlayers ()) do
local Player = QBCore.Functions . GetPlayer ( v )
if Player ~= nil and Player ~= biller then
if Player.PlayerData . job.name == data.society and Player.PlayerData . job.onduty then
Player.Functions . AddMoney ( "bank" , math.floor ( tonumber ( data.amount ) * comm ))
TriggerClientEvent ( "QBCore:Notify" , Player.PlayerData . source , "Recieved $" .. math.floor ( tonumber ( data.amount ) * comm ) .. " in Commission" , "success" )
end
end
2022-06-10 14:32:05 +01:00
end
end
2022-02-20 15:30:15 +00:00
end
2022-06-10 14:35:46 +01:00
end )
RegisterServerEvent ( 'jim-payments:Tickets:Sell' , function ()
local Player = QBCore.Functions . GetPlayer ( source )
if Player.Functions . GetItemByName ( "payticket" ) == nil then TriggerClientEvent ( 'QBCore:Notify' , source , "No tickets to trade" , 'error' ) return
else
tickets = Player.Functions . GetItemByName ( "payticket" ). amount
Player.Functions . RemoveItem ( 'payticket' , tickets )
pay = ( tickets * Config.Jobs [ Player.PlayerData . job.name ]. PayPerTicket )
Player.Functions . AddMoney ( 'bank' , pay , 'ticket-payment' )
TriggerClientEvent ( 'inventory:client:ItemBox' , source , QBCore.Shared . Items [ 'payticket' ], "remove" , tickets )
TriggerClientEvent ( 'QBCore:Notify' , source , "Tickets traded: " .. tickets .. " Total: $" .. cv ( pay ), 'success' )
2022-02-05 15:44:29 +00:00
end
end )
2022-06-10 14:35:46 +01:00
QBCore.Functions . CreateCallback ( 'jim-payments:Ticket:Count' , function ( source , cb )
if QBCore.Functions . GetPlayer ( source ). Functions.GetItemByName ( 'payticket' ) == nil then amount = 0
else amount = QBCore.Functions . GetPlayer ( source ). Functions.GetItemByName ( 'payticket' ). amount end
cb ( amount )
end )
2022-06-21 15:11:31 +01:00
RegisterServerEvent ( "jim-payments:server:Charge" , function ( citizen , price , billtype , img , outside , gang )
2022-06-10 14:35:46 +01:00
local src = source
local biller = QBCore.Functions . GetPlayer ( src )
local billed = QBCore.Functions . GetPlayer ( tonumber ( citizen ))
local amount = tonumber ( price )
local balance = billed.Functions . GetMoney ( billtype )
if amount and amount > 0 then
if balance < amount then
TriggerClientEvent ( "QBCore:Notify" , src , "Customer doesn't have enough cash to pay" , "error" )
TriggerClientEvent ( "QBCore:Notify" , tonumber ( citizen ), "You don't have enough cash to pay" , "error" )
return
end
2022-06-21 15:11:31 +01:00
local label = biller.PlayerData . job.label
if gang == true then label = biller.PlayerData . gang.label end
if Config.PhoneBank == false or gang == true or billtype == "cash" then
TriggerClientEvent ( "jim-payments:client:PayPopup" , billed.PlayerData . source , amount , src , billtype , img , label , gang )
else
if Config.PhoneType == "qb" then
MySQL.Async . insert (
'INSERT INTO phone_invoices (citizenid, amount, society, sender, sendercitizenid) VALUES (?, ?, ?, ?, ?)' ,
{ billed.PlayerData . citizenid , amount , biller.PlayerData . job.name , biller.PlayerData . charinfo.firstname , biller.PlayerData . citizenid })
TriggerClientEvent ( 'qb-phone:RefreshPhone' , billed.PlayerData . source )
elseif Config.PhoneType == "gks" then
MySQL.Async . execute ( 'INSERT INTO gksphone_invoices (citizenid, amount, society, sender, sendercitizenid, label) VALUES (@citizenid, @amount, @society, @sender, @sendercitizenid, @label)' , {
[ '@citizenid' ] = billed.PlayerData . citizenid ,
[ '@amount' ] = amount ,
[ '@society' ] = biller.PlayerData . job.name ,
[ '@sender' ] = biller.PlayerData . charinfo.firstname ,
[ '@sendercitizenid' ] = biller.PlayerData . citizenid ,
[ '@label' ] = biller.PlayerData . job.label ,
})
TriggerClientEvent ( 'gksphone:notifi' , src , { title = 'Billing' , message = 'Invoice Successfully Sent' , img = '/html/static/img/icons/logo.png' })
TriggerClientEvent ( 'gksphone:notifi' , billed.PlayerData . source , { title = 'Billing' , message = 'New Invoice Recieved' , img = '/html/static/img/icons/logo.png' })
2022-03-11 00:30:49 +00:00
end
2022-06-21 15:11:31 +01:00
TriggerClientEvent ( 'QBCore:Notify' , src , 'Invoice Successfully Sent' , 'success' )
TriggerClientEvent ( 'QBCore:Notify' , billed.PlayerData . source , 'New Invoice Received' )
2022-02-05 15:44:29 +00:00
end
2022-06-10 14:35:46 +01:00
else TriggerClientEvent ( 'QBCore:Notify' , source , "You can't charge $0" , 'error' ) return end
2022-02-05 15:44:29 +00:00
end )
2022-02-09 12:55:49 +00:00
2022-06-10 14:35:46 +01:00
RegisterServerEvent ( "jim-payments:server:PayPopup" , function ( data )
local src = source
local billed = QBCore.Functions . GetPlayer ( src )
local biller = QBCore.Functions . GetPlayer ( tonumber ( data.biller ))
local newdata = { senderCitizenId = biller.PlayerData . citizenid , society = biller.PlayerData . job.name , amount = data.amount }
2022-06-21 15:11:31 +01:00
if data.gang == true then newdata.society = biller.PlayerData . gang.name end
2022-06-10 14:35:46 +01:00
if data.accept == true then
billed.Functions . RemoveMoney ( tostring ( data.billtype ), data.amount )
2022-06-21 15:11:31 +01:00
TriggerEvent ( 'jim-payments:Tickets:Give' , newdata , biller , data.gang )
2022-06-10 14:35:46 +01:00
TriggerClientEvent ( "QBCore:Notify" , data.biller , billed.PlayerData . charinfo.firstname .. " accepted the $" .. data.amount .. " payment" , "success" )
elseif data.accept == false then
TriggerClientEvent ( "QBCore:Notify" , src , "You declined the payment" )
TriggerClientEvent ( "QBCore:Notify" , data.biller , billed.PlayerData . charinfo.firstname .. " declined the $" .. data.amount .. " payment" , "error" )
2022-06-10 14:32:05 +01:00
end
2022-03-11 00:30:49 +00:00
end )
2022-06-10 14:35:46 +01:00
QBCore.Functions . CreateCallback ( 'jim-payments:MakePlayerList' , function ( source , cb )
local onlineList = {}
for k , v in pairs ( QBCore.Functions . GetPlayers ()) do
local P = QBCore.Functions . GetPlayer ( v )
onlineList [ # onlineList + 1 ] = { value = tonumber ( v ), text = "[" .. v .. "] - " .. P.PlayerData . charinfo.firstname .. ' ' .. P.PlayerData . charinfo.lastname }
end
cb ( onlineList )
2022-06-21 15:18:01 +01:00
end )