ledgerEntry.py (7568B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\ledger\ledgerEntry.py 2 import evetypes 3 import telemetry 4 from caching.memoize import Memoize 5 from carbon.common.script.util.format import FmtDate, FmtAmt 6 from eve.client.script.ui.control.entries.util import GetFromClass 7 from menu import MenuLabel 8 from carbonui.primitives.fill import Fill 9 from eve.client.script.ui.control.entries.generic import Generic 10 from eve.client.script.ui.shared.ledger.ledgerUtil import IsInRange, GetColorForBaseTypeID 11 from eve.common.lib import appConst as const 12 from eve.common.script.util.eveFormat import FmtISK 13 from eveservices.menu import GetMenuService 14 from inventorycommon.typeHelpers import GetAveragePrice 15 import carbonui.const as uiconst 16 from localization import GetByLabel 17 from threadutils import throttled 18 PERSONAL = 1 19 CORP = 2 20 21 def GetLedgerEntriesPersonal(allData, start = None, end = None): 22 contentList = [] 23 for eachData in allData: 24 isInRange = IsInRange(eachData.eventDate, start, end) 25 if not isInRange: 26 continue 27 locationName = cfg.evelocations.Get(eachData.solarsystemID).name 28 estPrice = _GetAveragePrice(eachData.typeID) 29 qty = eachData.quantity 30 qtyWasted = eachData.quantityWasted 31 totalEstPrice = (estPrice or 0) * qty 32 estPriceText = FmtISK(totalEstPrice, 0) if totalEstPrice else '-' 33 wastedEstPrice = (estPrice or 0) * qtyWasted 34 wastedEstPriceText = FmtISK(wastedEstPrice, 0) if wastedEstPrice else '-' 35 volume = _GetVolume(eachData.typeID) * qty 36 volumeWasted = _GetVolume(eachData.typeID) * qtyWasted 37 formattedDate = FmtDate(eachData.eventDate, 'ln') 38 typeName = evetypes.GetName(eachData.typeID) 39 contentList.append(GetFromClass(LedgerEntry, {'label': '<t>'.join([formattedDate, 40 ' ' + typeName, 41 '<right>%s' % FmtAmt(qty), 42 '<right>%s' % FmtAmt(qtyWasted), 43 '<right>%s' % GetByLabel('UI/Moonmining/NumM3', amount=FmtAmt(volume)), 44 '<right>%s' % GetByLabel('UI/Moonmining/NumM3', amount=FmtAmt(volumeWasted)), 45 '<right>%s' % estPriceText, 46 '<right>%s' % wastedEstPriceText, 47 locationName]), 48 'charID': session.charid, 49 'corpID': session.corpid, 50 'ledgerData': eachData, 51 'formattedText': {'locationName': locationName, 52 'date': formattedDate, 53 'typeName': typeName, 54 'qty': qty, 55 'qtyWasted': qtyWasted, 56 'volume': volume, 57 'volumeWasted': volumeWasted, 58 'estPrice': int(totalEstPrice) if totalEstPrice else '', 59 'estPriceWasted': int(wastedEstPrice) if wastedEstPrice else ''}, 60 'entryType': PERSONAL, 61 'sort_%s' % GetByLabel('UI/Ledger/OreQtyHeader'): qty, 62 'sort_%s' % GetByLabel('UI/Ledger/OreWasteHeader'): qtyWasted, 63 'sort_%s' % GetByLabel('UI/Common/Volume'): volume, 64 'sort_%s' % GetByLabel('UI/Ledger/VolumeWastedHeader'): volumeWasted, 65 'sort_%s' % GetByLabel('UI/Inventory/EstPrice'): totalEstPrice or None, 66 'sort_%s' % GetByLabel('UI/Ledger/WastedPriceHeader'): wastedEstPrice or None})) 67 68 return contentList 69 70 71 def GetLedgerEntriesCorp(allData, filterText): 72 contentList = [] 73 for eachData in allData: 74 data = _GetDataForEntry(eachData) 75 if filterText and data['filterText'].find(filterText) < 0: 76 continue 77 contentList.append(GetFromClass(LedgerEntry, data)) 78 79 return contentList 80 81 82 @telemetry.ZONE_METHOD 83 def _GetDataForEntry(eachData): 84 typeName = _GetTypeName(eachData.typeID) 85 estPrice = _GetAveragePrice(eachData.typeID) 86 qty = eachData.quantity 87 totalEstPrice = (estPrice or 0) * qty 88 estPriceText = FmtISK(totalEstPrice, 0) if totalEstPrice else '' 89 volume = _GetVolume(eachData.typeID) * qty 90 formattedDate = FmtDate(eachData.eventDate, 'ln') 91 corpName = _GetOwnerName(eachData.corporationID) 92 charName = _GetOwnerName(eachData.characterID) 93 labelParts = [formattedDate, 94 corpName, 95 charName, 96 typeName, 97 '<right>%s' % FmtAmt(qty), 98 '<right>%s' % GetByLabel('UI/Moonmining/NumM3', amount=FmtAmt(volume)), 99 '<right>%s' % estPriceText] 100 formattedText = {'date': formattedDate, 101 'typeName': typeName, 102 'qty': qty, 103 'volume': volume, 104 'estPrice': int(totalEstPrice) if totalEstPrice else '', 105 'charName': charName, 106 'corpName': corpName} 107 label = '<t>'.join(labelParts) 108 filterText = '%s %s %s' % (corpName, typeName, charName) 109 data = {'label': label, 110 'charID': eachData.characterID, 111 'corpID': eachData.corporationID, 112 'ledgerData': eachData, 113 'formattedText': formattedText, 114 'entryType': CORP, 115 'filterText': filterText.lower(), 116 'sort_%s' % GetByLabel('UI/Ledger/OreQtyHeader'): qty, 117 'sort_%s' % GetByLabel('UI/Common/Volume'): volume, 118 'sort_%s' % GetByLabel('UI/Inventory/EstPrice'): totalEstPrice or None} 119 return data 120 121 122 @Memoize(1) 123 def _GetTypeName(typeID): 124 return evetypes.GetName(typeID) 125 126 127 @Memoize(1) 128 def _GetAveragePrice(typeID): 129 return GetAveragePrice(typeID) or evetypes.GetBasePrice(typeID) or 0 130 131 132 @Memoize(1) 133 def _GetOwnerName(corpID): 134 return cfg.eveowners.Get(corpID).name 135 136 137 @Memoize(1) 138 def _GetLocationName(solarSystemID): 139 return cfg.evelocations.Get(solarSystemID).name 140 141 142 @Memoize(1) 143 def _GetVolume(typeID): 144 return evetypes.GetVolume(typeID) 145 146 147 def GetObserverLocation(observerItemID): 148 return cfg.evelocations.Get(observerItemID).name 149 150 151 class LedgerEntry(Generic): 152 __guid__ = 'listentry.LedgerEntry' 153 isDragObject = True 154 155 def Startup(self, *args): 156 Generic.Startup(self, *args) 157 self.legendFill = Fill(parent=self, align=uiconst.CENTERLEFT, pos=(0, 0, 8, 8)) 158 self.legendFill.display = False 159 160 def Load(self, node): 161 Generic.Load(self, node) 162 if node.entryType == PERSONAL: 163 self.legendFill.display = True 164 color = GetColorForBaseTypeID(node.ledgerData.typeID) 165 newColor = tuple(color[:3]) + (0.5,) 166 self.legendFill.SetRGBA(*newColor) 167 168 def GetMenu(self): 169 data = self.sr.node 170 m = [] 171 if data.entryType == PERSONAL: 172 m += [(MenuLabel('UI/Common/SolarSystem'), GetMenuService().CelestialMenu(data.ledgerData.solarsystemID))] 173 elif data.entryType == CORP: 174 m += [(MenuLabel('UI/Common/Pilot', {'character': data.charID}), GetMenuService().CharacterMenu(data.charID))] 175 m += [(MenuLabel('UI/Common/Corporation'), GetMenuService().GetMenuFromItemIDTypeID(data.corpID, const.typeCorporation))] 176 m += [None] 177 oreTypeID = data.ledgerData.typeID 178 m += [(evetypes.GetName(oreTypeID), GetMenuService().GetMenuFromItemIDTypeID(None, oreTypeID, includeMarketDetails=True))] 179 return m 180 181 def OnMouseEnter(self, *args): 182 Generic.OnMouseEnter(self, *args) 183 ScatterMouseOverChange(self.sr.node.ledgerData.typeID) 184 185 def OnMouseExit(self, *args): 186 Generic.OnMouseExit(self, *args) 187 ScatterMouseOverChange(None) 188 189 def UpdateLegendFillPos(self, left): 190 self.legendFill.left = left + 2 191 192 193 @throttled(0.1) 194 def ScatterMouseOverChange(typeID): 195 sm.ScatterEvent('OnLedgerMouseOverChanged', typeID)