transactionOverviewController.py (7693B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\wallet\transactionOverviewController.py 2 import collections 3 import evetypes 4 from eve.common.lib import appConst 5 from eve.common.script.util.eveFormat import FmtISK 6 from localization import GetByLabel 7 REFTYPEID_BLACKLIST = [appConst.refMarketTransaction, appConst.refMarketEscrow] 8 NAME_BY_REFGROUPID = {appConst.refGroupCorpAlliance: 'UI/Wallet/WalletWindow/TransactionGroups/CorpAlliance', 9 appConst.refGroupAgentsAndMissions: 'UI/Wallet/WalletWindow/TransactionGroups/AgentsAndMissions', 10 appConst.refGroupTrade: 'UI/Wallet/WalletWindow/TransactionGroups/Trade', 11 appConst.refGroupBounty: 'UI/Wallet/WalletWindow/TransactionGroups/Bounty', 12 appConst.refGroupIndustry: 'UI/Wallet/WalletWindow/TransactionGroups/Industry', 13 appConst.refGroupTransfer: 'UI/Wallet/WalletWindow/TransactionGroups/Transfers', 14 appConst.refGroupMisc: 'UI/Wallet/WalletWindow/TransactionGroups/Miscellaneous', 15 appConst.refGroupHypernetRelay: 'UI/HyperNet/WindowTitle'} 16 Transaction = collections.namedtuple('Transaction', 'amount, refTypeID, refGroupID, name, groupName, categoryID') 17 18 class TransactionOverviewController(object): 19 20 def __init__(self, refGroupID = None): 21 self.refGroupID = refGroupID 22 self.incomeTransactions = [] 23 self.incomeTransactionGroups = [] 24 self.expenditureTransactions = [] 25 self.expenditureTransactionGroups = [] 26 self._Update() 27 28 def GetIncomeTransactionGroups(self): 29 return self.incomeTransactionGroups 30 31 def GetExpenditureTransactionGroups(self): 32 return self.expenditureTransactionGroups 33 34 def GetIncomeGroupValues(self): 35 return [ group.amount for group in self.incomeTransactionGroups ] 36 37 def GetExpenditureGroupValues(self): 38 return [ group.amount for group in self.expenditureTransactionGroups ] 39 40 def GetTotalIncome(self): 41 return sum(self.GetIncomeGroupValues()) 42 43 def GetTotalExpenses(self): 44 return sum(self.GetExpenditureGroupValues()) 45 46 def _Update(self): 47 self._UpdateWalletTransactions() 48 self._UpdateMarketTransactions() 49 self.incomeTransactionGroups = self._GetTransactionGroupsSorted(self.incomeTransactions, reverseSort=True) 50 self.expenditureTransactionGroups = self._GetTransactionGroupsSorted(self.expenditureTransactions, reverseSort=False) 51 52 def _GetTransactionGroupsSorted(self, transactions, reverseSort = True): 53 if self.refGroupID: 54 transactionGroups = self._GetTransactionGroupsByRefTypeID(transactions) 55 else: 56 transactionGroups = self._GetTransactionGroupsByRefGroupID(transactions) 57 totalAmount = sum([ group.amount for group in transactionGroups ]) 58 for group in transactionGroups: 59 group.UpdateRatio(totalAmount) 60 61 return sorted(transactionGroups, key=lambda group: group.amount, reverse=reverseSort) 62 63 def _GetTransactionGroupsByRefTypeID(self, transactions): 64 groupsByID = {} 65 for transaction in transactions: 66 self._AddToTransactionGroupByRefTypeID(groupsByID, transaction) 67 68 return groupsByID.values() 69 70 def _AddToTransactionGroupByRefTypeID(self, groupsByID, tr): 71 if (tr.refTypeID, tr.categoryID) not in groupsByID: 72 group = TransactionGroup(tr.name, tr.refTypeID, self.refGroupID, tr.categoryID) 73 groupsByID[tr.refTypeID, tr.categoryID] = group 74 groupsByID[tr.refTypeID, tr.categoryID].AddAmount(tr.amount) 75 76 def _GetTransactionGroupsByRefGroupID(self, transactions): 77 groupsByID = {} 78 for transaction in transactions: 79 self._AddToTransactionGroupByRefGroupID(groupsByID, transaction) 80 81 return groupsByID.values() 82 83 def _AddToTransactionGroupByRefGroupID(self, groupsByID, tr): 84 if tr.refGroupID not in groupsByID: 85 group = TransactionGroup(tr.groupName, None, tr.refGroupID, tr.categoryID) 86 groupsByID[tr.refGroupID] = group 87 groupsByID[tr.refGroupID].AddAmount(tr.amount) 88 89 def _UpdateMarketTransactions(self): 90 transactions = sm.GetService('market').GetPersonalMarketTransactions() 91 refTypeID = appConst.refMarketTransaction 92 for transaction in transactions: 93 if self.IsFilteredOut(refTypeID) or transaction.isForCorp: 94 continue 95 categoryID = evetypes.GetCategoryID(transaction.typeID) 96 name = evetypes.GetCategoryName(transaction.typeID) 97 if transaction.isBuyTransaction: 98 name = GetByLabel('UI/Wallet/WalletWindow/ItemsBought', groupName=name) 99 self._AddExpenditureEntry(transaction.totalPrice, refTypeID, name, categoryID) 100 else: 101 name = GetByLabel('UI/Wallet/WalletWindow/ItemsSold', groupName=name) 102 self._AddIncomeEntry(transaction.totalPrice, refTypeID, name, categoryID) 103 104 def _UpdateWalletTransactions(self): 105 tranactions = sm.GetService('account').GetPersonalTransactions() 106 for transaction in tranactions: 107 refTypeID = transaction.entryTypeID 108 if self.IsFilteredOut(refTypeID) or refTypeID in REFTYPEID_BLACKLIST: 109 continue 110 name = self.GetTypeName(transaction) 111 if name is None: 112 continue 113 if transaction.amount < 0: 114 self._AddExpenditureEntry(transaction.amount, refTypeID, name) 115 else: 116 self._AddIncomeEntry(transaction.amount, refTypeID, name) 117 118 def IsFilteredOut(self, refTypeID): 119 groupID = self.GetGroupID(refTypeID) 120 return self.refGroupID and groupID != self.refGroupID 121 122 def GetTypeName(self, transaction): 123 refType = sm.GetService('account').GetRefTypeKeyByID(transaction.entryTypeID) 124 if not hasattr(refType, 'entryTypeName'): 125 return None 126 return refType.entryTypeName 127 128 def GetGroupID(self, refTypeID): 129 return appConst.refGroupByRefType.get(refTypeID, appConst.refGroupMisc) 130 131 def GetGroupName(self): 132 if self.refGroupID: 133 return GetByLabel(NAME_BY_REFGROUPID[self.refGroupID]) 134 135 def _AddIncomeEntry(self, amount, refTypeID, name, categoryID = None): 136 transaction = self._GetTransaction(amount, refTypeID, name, categoryID) 137 self.incomeTransactions.append(transaction) 138 139 def _AddExpenditureEntry(self, amount, refTypeID, name, categoryID = None): 140 transaction = self._GetTransaction(amount, refTypeID, name, categoryID) 141 self.expenditureTransactions.append(transaction) 142 143 def _GetTransaction(self, amount, refTypeID, name, categoryID = None): 144 refGroupID = self.GetGroupID(refTypeID) 145 groupName = GetByLabel(NAME_BY_REFGROUPID[refGroupID]) 146 return Transaction(amount=amount, refTypeID=refTypeID, name=name, refGroupID=refGroupID, groupName=groupName, categoryID=categoryID) 147 148 149 class TransactionGroup(object): 150 151 def __init__(self, name, refTypeID, refGroupID, categoryID = None): 152 self.refTypeID = refTypeID 153 self.refGroupID = refGroupID 154 self.name = name 155 self.amount = 0.0 156 self.ratio = 0.0 157 self.categoryID = categoryID 158 159 def AddAmount(self, value): 160 self.amount += value 161 162 def UpdateRatio(self, totalAmount): 163 if not totalAmount: 164 self.ratio = 0.0 165 else: 166 self.ratio = self.amount / totalAmount 167 168 def GetID(self): 169 return (self.refGroupID, self.refTypeID, self.categoryID) 170 171 def GetHint(self): 172 return "%.1f%% %s\n<color='#ffffffff'>%s</color>" % (self.ratio * 100, self.name, FmtISK(self.amount))