def test_toCurrencyStr(self): self.assertEqual(currency.toCurrencyStr(23, 'USD'), u'$23.00') self.assertEqual(currency.toCurrencyStr(23.00, 'USD'), u'$23.00') self.assertEqual(currency.toCurrencyStr(23000, 'USD'), u'$23,000.00') self.assertEqual(currency.toCurrencyStr(23000000.00, 'USD'), u'$23,000,000.00') self.assertEqual(currency.toCurrencyStr(23, 'GBP'), u'£23.00') self.assertEqual(currency.toCurrencyStr(23.00, 'GBP'), u'£23.00') self.assertEqual(currency.toCurrencyStr(23000, 'GBP'), u'£23,000.00') self.assertEqual(currency.toCurrencyStr(23000000.00, 'GBP'), u'£23,000,000.00')
def data(self, item, role=QtCore.Qt.DisplayRole): """ Return data from the model, formatted for viewing """ if not item.isValid(): return None if role == QtCore.Qt.CheckStateRole: if item.column() == enum.kRecords_Checked: if super(RecordModel, self).data(item): return QtCore.Qt.Checked else: return QtCore.Qt.Unchecked elif role == QtCore.Qt.FontRole: if item.column() == enum.kRecords_Description: if self._highlightText and self._highlightText.lower() in item.data(QtCore.Qt.DisplayRole).lower(): font = QtGui.QFont() font.setBold(True) return font elif role == QtCore.Qt.ToolTipRole: if item.column() == enum.kRecords_Tags: # Show tag names for this record return ', '.join(item.data(QtCore.Qt.UserRole)) elif item.column() == enum.kRecords_Checked: if item.data(QtCore.Qt.CheckStateRole) == QtCore.Qt.Checked: text = "Checked: " + super(RecordModel, self).data( self.index(item.row(), enum.kRecords_CheckDate)).toString("dd/MM/yy hh:mm") return text elif item.column() == enum.kRecords_Date: # Show when the record was imported text = "Imported: " + super(RecordModel, self).data( self.index(item.row(), enum.kRecords_InsertDate)).toString("dd/MM/yy hh:mm") return text elif item.column() == enum.kRecords_Description: # Full, raw text return super(RecordModel, self).data(item, QtCore.Qt.DisplayRole) elif role == QtCore.Qt.UserRole: if item.column() == enum.kRecords_Tags: # Tags as comma separated string (from database) tags = super(RecordModel, self).data(item, QtCore.Qt.DisplayRole) return tags.split(',') if tags else [] elif item.column() == enum.kRecords_Amount: # signed float return super(RecordModel, self).data(item, QtCore.Qt.DisplayRole) elif item.column() == enum.kRecords_Date: # QDate object return super(RecordModel, self).data(item, QtCore.Qt.DisplayRole) elif role == QtCore.Qt.ForegroundRole: if item.column() == enum.kRecords_Amount: # Indicate credit/debit with colour if item.data(QtCore.Qt.UserRole) > 0.0: return QtGui.QColor(0, 255, 0) else: return QtGui.QColor(255, 0, 0) elif role == QtCore.Qt.DecorationRole: if item.column() == enum.kRecords_Tags: # Show tag icon if we have any if item.data(QtCore.Qt.UserRole): return QtGui.QIcon(':/icons/tag_yellow.png') elif role == QtCore.Qt.DisplayRole: if item.column() in (enum.kRecords_Checked, enum.kRecords_Tags): # Don't display anything for these fields return None elif item.column() == enum.kRecords_Amount: # Display absolute currency values. credit/debit is indicated by background colour code = self.index(item.row(), enum.kRecords_Currency).data() return currency.toCurrencyStr(abs(super(RecordModel, self).data(item)), code) elif item.column() == enum.kRecords_Description: # Replace multiple spaces with single return re.sub('[ ]+', ' ', super(RecordModel, self).data(item)) elif item.column() == enum.kRecords_Date: # Ensure date display is day/month/year, or I'll get confused. # Use UserRole to return QDate object return super(RecordModel, self).data(item, role).toString('dd/MM/yyyy') return super(RecordModel, self).data(item, role)