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-07-05 19:52:33 +01:00
for k in pairs ( Config.Jobs ) do
2022-06-21 15:11:31 +01:00
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-07-05 19:52:33 +01:00
QBCore.Commands . Add ( " polcharge " , " Charge another person " , { } , false , function ( source ) TriggerClientEvent ( " jim-payments:client:PolCharge " , source ) end )
2022-06-10 14:35:46 +01:00
2022-06-21 15:11:31 +01:00
RegisterServerEvent ( ' jim-payments:Tickets:Give ' , function ( data , biller , gang )
2022-06-22 14:34:24 +01:00
local billed = QBCore.Functions . GetPlayer ( source ) -- This should always be from the person who accepted the payment
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
2022-07-05 19:52:33 +01:00
if Config.Manage then exports [ " qb-management " ] : AddGangMoney ( tostring ( biller.PlayerData . gang.name ) , data.amount )
2022-07-13 18:09:08 +01:00
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3Management^7(^3Gang^7): ^2Adding ^7$^6 " .. data.amount .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . gang.name ) .. " ^7' ($^6 " .. exports [ " qb-management " ] : GetGangAccount ( biller.PlayerData . gang.name ) .. " ^7) " ) end
2022-07-05 19:52:33 +01:00
else TriggerEvent ( " qb-gangmenu:server:addAccountMoney " , tostring ( biller.PlayerData . gang.name ) , data.amount )
2022-07-13 18:09:08 +01:00
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3GangMenu^7: ^2Adding ^7$^6 " .. data.amount .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . gang.name ) .. " ^7' " ) end
2022-07-05 19:52:33 +01:00
end
2022-06-21 15:11:31 +01:00
elseif not gang then
2022-07-05 19:52:33 +01:00
if Config.Manage then exports [ " qb-management " ] : AddMoney ( tostring ( biller.PlayerData . job.name ) , data.amount )
2022-07-13 17:36:45 +01:00
if Config.Debug then print ( " ^5Debug^7: ^3QB-Management^7(^3Job^7): ^2Adding ^7$^6 " .. data.amount .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' ($^6 " .. exports [ " qb-management " ] : GetAccount ( biller.PlayerData . job.name ) .. " ^7) " ) end
2022-07-05 19:52:33 +01:00
else TriggerEvent ( " qb-bossmenu:server:addAccountMoney " , tostring ( biller.PlayerData . job.name ) , data.amount )
2022-07-13 17:36:45 +01:00
if Config.Debug then print ( " ^5Debug^7: ^3QB-BossMenu^7: ^2Adding ^7$^6 " .. data.amount .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' " ) end
2022-06-21 15:11:31 +01:00
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-07-05 19:52:33 +01:00
for _ , v in pairs ( QBCore.Functions . GetPlayers ( ) ) do
2022-06-22 14:20:36 +01:00
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
2022-07-11 19:59:57 +01:00
if Config.TicketSystemAll then
for _ , v in pairs ( QBCore.Functions . GetPlayers ( ) ) do
local Player = QBCore.Functions . GetPlayer ( v )
if Player ~= nil or Player ~= billed 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
end
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 )
2022-06-10 14:35:46 +01:00
end
2022-04-11 18:59:47 +01:00
end
2022-07-11 19:59:57 +01:00
else
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 )
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
2022-07-05 19:52:33 +01:00
if Config.CommissionDouble then
2022-06-10 14:35:46 +01:00
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
2022-07-05 19:52:33 +01:00
for _ , v in pairs ( QBCore.Functions . GetPlayers ( ) ) do
2022-06-10 14:35:46 +01:00
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-07-05 19:52:33 +01:00
QBCore.Functions . CreateCallback ( ' jim-payments:Ticket:Count ' , function ( source , cb )
2022-06-10 14:35:46 +01:00
if QBCore.Functions . GetPlayer ( source ) . Functions.GetItemByName ( ' payticket ' ) == nil then amount = 0
2022-07-05 19:52:33 +01:00
else amount = QBCore.Functions . GetPlayer ( source ) . Functions.GetItemByName ( ' payticket ' ) . amount end
cb ( amount )
2022-06-10 14:35:46 +01:00
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
2022-07-05 19:52:33 +01:00
TriggerClientEvent ( " jim-payments:client:PayPopup " , billed.PlayerData . source , amount , src , billtype , img , label , gang , outside )
2022-06-21 15:11:31 +01:00
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-07-05 19:52:33 +01:00
RegisterServerEvent ( " jim-payments:server:PolCharge " , function ( citizen , price )
local src = source
local biller = QBCore.Functions . GetPlayer ( src )
local billed = QBCore.Functions . GetPlayer ( tonumber ( citizen ) )
2022-07-13 18:09:08 +01:00
local price = math.floor ( tonumber ( price ) )
2022-07-13 18:28:36 +01:00
local commission = math.floor ( price * Config.FineJobs [ biller.PlayerData . job.name ] . Commission )
2022-07-13 18:09:08 +01:00
if price > 0 then
2022-07-05 19:52:33 +01:00
if not Config.FineJobConfirmation then
2022-07-13 18:09:08 +01:00
if billed.Functions . AddMoney ( " bank " , price ) then if Config.Debug then print ( " ^5Debug^7: ^3PolCharge^7 - ^2Player^7(^6 " .. billed.PlayerData . source .. " ^7) ^2charged ^7$^6 " .. price .. " ^7 " ) end end
if biller.Functions . AddMoney ( " bank " , commission ) then if Config.Debug then print ( " ^5Debug^7: ^3PolCharge^7 - ^2Commission of ^7$^6 " .. commission .. " ^2sent to Player^7(^6 " .. biller.PlayerData . source .. " ^7) " ) end end
2022-07-05 19:52:33 +01:00
if Config.Manage then
2022-07-13 18:09:08 +01:00
exports [ " qb-management " ] : AddMoney ( tostring ( biller.PlayerData . job.name ) , ( price - commission ) )
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3Management^7(^3Job^7): ^2Adding ^7$^6 " .. ( price - commission ) .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' ($^6 " .. exports [ " qb-management " ] : GetAccount ( biller.PlayerData . job.name ) .. " ^7) " ) end
2022-07-11 19:59:57 +01:00
else
2022-07-13 18:09:08 +01:00
TriggerEvent ( " qb-bossmenu:server:addAccountMoney " , tostring ( biller.PlayerData . job.name ) , ( price - commission ) )
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3BossMenu^7: ^2Adding ^7$^6 " .. ( price - commission ) .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' " ) end
2022-07-05 19:52:33 +01:00
end
2022-07-13 18:09:08 +01:00
TriggerClientEvent ( ' QBCore:Notify ' , src , billed.PlayerData . charinfo.firstname .. " was charged for $ " .. ( price - commission ) , " success " )
TriggerClientEvent ( ' QBCore:Notify ' , billed.PlayerData . source , ' You were charged for $ ' .. ( price - commission ) )
2022-07-05 19:52:33 +01:00
else
2022-07-13 18:28:36 +01:00
TriggerClientEvent ( " jim-payments:client:PolPopup " , billed.PlayerData . source , price , src , biller.PlayerData . job.label )
2022-07-05 19:52:33 +01:00
end
else TriggerClientEvent ( ' QBCore:Notify ' , source , " You can't charge $0 " , ' error ' ) return end
end )
2022-07-13 18:09:08 +01:00
2022-07-05 19:52:33 +01:00
RegisterServerEvent ( " jim-payments:server:PolPopup " , function ( data )
local src = source
local billed = QBCore.Functions . GetPlayer ( src )
local biller = QBCore.Functions . GetPlayer ( tonumber ( data.biller ) )
2022-07-13 18:09:08 +01:00
data.amount = math.floor ( data.amount )
2022-07-13 18:28:36 +01:00
local commission = math.floor ( tonumber ( data.amount ) * Config.FineJobs [ biller.PlayerData . job.name ] . Commission )
2022-07-05 19:52:33 +01:00
if data.accept == true then
2022-07-13 18:28:36 +01:00
if billed.Functions . AddMoney ( " bank " , data.amount ) then if Config.Debug then print ( " ^5Debug^7: ^3PolCharge^7 - ^2Player^7(^6 " .. billed.PlayerData . source .. " ^7) ^2charged ^7$^6 " .. data.amount .. " ^7 " ) end end
2022-07-05 19:52:33 +01:00
TriggerClientEvent ( " QBCore:Notify " , data.biller , billed.PlayerData . charinfo.firstname .. " accepted the $ " .. data.amount .. " charge " , " success " )
2022-07-13 18:28:36 +01:00
if biller.Functions . AddMoney ( " bank " , commission ) then if Config.Debug then print ( " ^5Debug^7: ^3PolCharge^7 - ^2Commission^2 of ^7$^6 " .. commission .. " ^2sent to Player^7(^6 " .. biller.PlayerData . source .. " ^7) " ) end end
2022-07-11 19:59:57 +01:00
if Config.Manage then
2022-07-13 18:09:08 +01:00
exports [ " qb-management " ] : AddMoney ( tostring ( biller.PlayerData . job.name ) , data.amount - commission )
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3Management^7(^3Job^7): ^2Adding ^7$^6 " .. data.amount - commission .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' ($^6 " .. exports [ " qb-management " ] : GetAccount ( biller.PlayerData . job.name ) .. " ^7) " ) end
2022-07-11 19:59:57 +01:00
else
2022-07-13 18:09:08 +01:00
TriggerEvent ( " qb-bossmenu:server:addAccountMoney " , tostring ( biller.PlayerData . job.name ) , data.amount - commission )
if Config.Debug then print ( " ^5Debug^7: ^3QB^7-^3BossMenu^7: ^2Adding ^6$^7 " .. data.amount - commission .. " ^2to account ^7'^6 " .. tostring ( biller.PlayerData . job.name ) .. " ^7' " ) end
2022-07-11 19:59:57 +01:00
end
2022-07-05 19:52:33 +01:00
else
TriggerClientEvent ( " QBCore:Notify " , src , " You declined the payment " )
TriggerClientEvent ( " QBCore:Notify " , data.biller , billed.PlayerData . charinfo.firstname .. " declined the $ " .. data.amount .. " charge " , " error " )
end
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
2022-07-05 19:52:33 +01:00
cb ( onlineList )
2022-06-21 15:18:01 +01:00
end )