NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)