154 lines
5.4 KiB
Lua
154 lines
5.4 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- https://tradeskillmaster.com --
|
|
-- All Rights Reserved - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
local _, TSM = ...
|
|
local Accounting = TSM.Tooltip:NewPackage("Accounting")
|
|
local L = TSM.Include("Locale").GetTable()
|
|
local Math = TSM.Include("Util.Math")
|
|
local ItemString = TSM.Include("Util.ItemString")
|
|
local CustomPrice = TSM.Include("Service.CustomPrice")
|
|
local private = {}
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Module Functions
|
|
-- ============================================================================
|
|
|
|
function Accounting.OnInitialize()
|
|
TSM.Tooltip.Register(TSM.Tooltip.CreateInfo()
|
|
:SetHeadings(L["TSM Accounting"])
|
|
:SetSettingsModule("Accounting")
|
|
:AddSettingEntry("purchase", true, private.PopulatePurchaseLines)
|
|
:AddSettingEntry("sale", true, private.PopulateSaleLines)
|
|
:AddSettingEntry("saleRate", false, private.PopulateSaleRateLine)
|
|
:AddSettingEntry("expiredAuctions", false, private.PopulateExpireLine)
|
|
:AddSettingEntry("cancelledAuctions", false, private.PopulateCancelLine)
|
|
)
|
|
end
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Private Helper Functions
|
|
-- ============================================================================
|
|
|
|
function private.PopulateSaleLines(tooltip, itemString)
|
|
local showTotals = itemString ~= ItemString.GetPlaceholder() and IsShiftKeyDown()
|
|
local avgSalePrice, totalSaleNum, lastSaleTime, minSellPrice, maxSellPrice = nil, nil, nil, nil, nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
avgSalePrice = 20
|
|
totalSaleNum = 5
|
|
lastSaleTime = time() - 60
|
|
minSellPrice = 10
|
|
maxSellPrice = 50
|
|
else
|
|
local totalPrice = nil
|
|
totalPrice, totalSaleNum = TSM.Accounting.Transactions.GetSaleStats(itemString)
|
|
if not totalSaleNum then
|
|
return
|
|
end
|
|
avgSalePrice = totalPrice and Math.Round(totalPrice / totalSaleNum) or nil
|
|
lastSaleTime = TSM.Accounting.Transactions.GetLastSaleTime(itemString)
|
|
if not showTotals then
|
|
minSellPrice = CustomPrice.GetItemPrice(itemString, "MinSell") or 0
|
|
maxSellPrice = CustomPrice.GetItemPrice(itemString, "MaxSell") or 0
|
|
end
|
|
end
|
|
|
|
if showTotals then
|
|
tooltip:AddQuantityValueLine(L["Sold (Total Price)"], totalSaleNum, avgSalePrice * totalSaleNum)
|
|
else
|
|
assert(minSellPrice and maxSellPrice)
|
|
tooltip:AddQuantityValueLine(L["Sold (Min/Avg/Max Price)"], totalSaleNum, minSellPrice, avgSalePrice, maxSellPrice)
|
|
end
|
|
tooltip:AddTextLine(L["Last Sold"], format(L["%s ago"], SecondsToTime(time() - lastSaleTime)))
|
|
end
|
|
|
|
function private.PopulateExpireLine(tooltip, itemString)
|
|
local expiredNum = nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
expiredNum = 2
|
|
else
|
|
local lastSaleTime = TSM.Accounting.Transactions.GetLastSaleTime(itemString)
|
|
expiredNum = select(2, TSM.Accounting.Auctions.GetStats(itemString, lastSaleTime))
|
|
if expiredNum == 0 then
|
|
expiredNum = nil
|
|
end
|
|
end
|
|
if expiredNum then
|
|
tooltip:AddTextLine(L["Expired Since Last Sale"], expiredNum)
|
|
end
|
|
end
|
|
|
|
function private.PopulateCancelLine(tooltip, itemString)
|
|
local cancelledNum = nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
cancelledNum = 2
|
|
else
|
|
local lastSaleTime = TSM.Accounting.Transactions.GetLastSaleTime(itemString)
|
|
cancelledNum = TSM.Accounting.Auctions.GetStats(itemString, lastSaleTime)
|
|
if cancelledNum == 0 then
|
|
cancelledNum = nil
|
|
end
|
|
end
|
|
if cancelledNum then
|
|
tooltip:AddTextLine(L["Cancelled Since Last Sale"], cancelledNum)
|
|
end
|
|
end
|
|
|
|
function private.PopulateSaleRateLine(tooltip, itemString)
|
|
local saleRate = nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
saleRate = 0.7
|
|
else
|
|
saleRate = CustomPrice.GetItemPrice(itemString, "SaleRate")
|
|
if not saleRate then
|
|
return
|
|
end
|
|
end
|
|
tooltip:AddTextLine(L["Sale Rate"], saleRate)
|
|
end
|
|
|
|
function private.PopulatePurchaseLines(tooltip, itemString)
|
|
local showTotals = itemString ~= ItemString.GetPlaceholder() and IsShiftKeyDown()
|
|
local smartAvgPrice, totalPrice, totalNum, minPrice, maxPrice, lastBuyTime = nil, nil, nil, nil, nil, nil
|
|
if itemString == ItemString.GetPlaceholder() then
|
|
-- example tooltip
|
|
smartAvgPrice = 25
|
|
totalPrice = 78
|
|
totalNum = 3
|
|
minPrice = 15
|
|
maxPrice = 55
|
|
lastBuyTime = time() - 3600
|
|
else
|
|
smartAvgPrice = CustomPrice.GetItemPrice(itemString, "SmartAvgBuy")
|
|
totalPrice, totalNum = TSM.Accounting.Transactions.GetBuyStats(itemString, false)
|
|
if not totalPrice then
|
|
return
|
|
end
|
|
if not showTotals then
|
|
minPrice = CustomPrice.GetItemPrice(itemString, "MinBuy") or 0
|
|
maxPrice = CustomPrice.GetItemPrice(itemString, "MaxBuy") or 0
|
|
end
|
|
lastBuyTime = TSM.Accounting.Transactions.GetLastBuyTime(itemString)
|
|
end
|
|
|
|
|
|
if showTotals then
|
|
tooltip:AddQuantityValueLine(L["Purchased (Total Price)"], totalNum, totalPrice)
|
|
else
|
|
assert(minPrice and maxPrice)
|
|
tooltip:AddQuantityValueLine(L["Purchased (Min/Avg/Max Price)"], totalNum, minPrice, Math.Round(totalPrice / totalNum), maxPrice)
|
|
end
|
|
tooltip:AddValueLine(L["Smart Avg Buy Price"], smartAvgPrice)
|
|
tooltip:AddTextLine(L["Last Purchased"], format(L["%s ago"], SecondsToTime(time() - lastBuyTime)))
|
|
end
|