Пример #1
0
    def _updateText(self):
        text = self.text()
        if text:
            if not self.hasFocus() or self.isReadOnly():
                text, converted = numberWithFraction(text)
                if not converted:
                    try:
                        if self._decimals:
                            text = locale.format("%%.%df" % self._decimals,
                                                 float(text),
                                                 grouping=True)
                            # Strip empty fraction
                            dp = locale.localeconv()['decimal_point']
                            text = text.rstrip('0').rstrip(dp)
                        else:
                            text = locale.format("%d",
                                                 int(text),
                                                 grouping=True)
                    except ValueError:
                        return
            else:
                ts = locale.localeconv()['thousands_sep']
                if ts == '.':
                    text = text.replace('.', ',')

            if QLineEdit.text(self) != text:
                QLineEdit.setText(self, text)
Пример #2
0
    def clickGenerateTitle(self):
        titleParts = []
        for key in ('value', 'unit', 'year', 'subjectshort',
                    'mintmark', 'variety'):
            value = self.items[key].value()
            if not isinstance(value, str):
                value = str(value)
            titlePart = value.strip()
            if titlePart:
                if key == 'unit':
                    titlePart = titlePart.lower()
                elif key == 'value':
                    titlePart, _ = numberWithFraction(titlePart, self.settings['convert_fraction'])
                elif key == 'subjectshort':
                    if len(titlePart.split()) > 1:
                        titlePart = '"%s"' % titlePart
                titleParts.append(titlePart)

        title = ' '.join(titleParts)
        self.items['title'].setValue(title)
    def clickGenerateTitle(self):
        titleParts = []
        for key in ('value', 'unit', 'year', 'subjectshort',
                    'mintmark', 'variety'):
            value = self.items[key].value()
            if not isinstance(value, str):
                value = str(value)
            titlePart = value.strip()
            if titlePart:
                if key == 'unit':
                    titlePart = titlePart.lower()
                elif key == 'value':
                    titlePart, _ = numberWithFraction(titlePart, self.settings['convert_fraction'])
                elif key == 'subjectshort':
                    if len(titlePart.split()) > 1:
                        titlePart = '"%s"' % titlePart
                titleParts.append(titlePart)

        title = ' '.join(titleParts)
        self.items['title'].setValue(title)
Пример #4
0
    def _updateText(self):
        text = self.text()
        if text:
            if not self.hasFocus() or self.isReadOnly():
                text, converted = numberWithFraction(text)
                if not converted:
                    try:
                        if self._decimals:
                            text = locale.format("%%.%df" % self._decimals,
                                                 float(text), grouping=True)
                            # Strip empty fraction
                            dp = locale.localeconv()['decimal_point']
                            text = text.rstrip('0').rstrip(dp)
                        else:
                            text = locale.format("%d", int(text), grouping=True)
                    except ValueError:
                        return
            else:
                ts = locale.localeconv()['thousands_sep']
                if ts == '.':
                    text = text.replace('.', ',')

            if QLineEdit.text(self) != text:
                QLineEdit.setText(self, text)
Пример #5
0
    def modelChanged(self):
        self.chartLayout.removeWidget(self.chart)
        chart = self.chartSelector.currentData()
        if chart == 'geochart':
            self.chart = GeoChartCanvas(self)
        elif chart == 'barh':
            self.chart = BarHCanvas(self)
        elif chart == 'pie':
            self.chart = PieCanvas(self)
        elif chart == 'stacked':
            self.chart = StackedBarCanvas(self)
        elif chart == 'progress':
            self.chart = ProgressCanvas(self)
        else:
            self.chart = BarCanvas(self)
        self.chart.setMulticolor(self.colorCheck.checkState() == Qt.Checked)
        self.chartLayout.addWidget(self.chart)

        fieldId = self.fieldSelector.currentData()
        field = self.model.fields.field(fieldId).name
        if field == 'fineness':
            field = 'material,fineness'
        elif field == 'unit':
            field = 'value,unit'
        filter_ = self.model.filter()
        if filter_:
            sql_filter = "WHERE %s" % filter_
        else:
            sql_filter = ""

        if chart == 'geochart':
            sql = "SELECT count(*), country FROM coins %s GROUP BY country" % sql_filter
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy, self.regionSelector.currentData())
        elif chart == 'stacked':
            subfieldId = self.subfieldSelector.currentData()
            subfield = self.model.fields.field(subfieldId).name
            sql = "SELECT count(%s), %s, %s FROM coins %s GROUP BY %s, %s" % (
                subfield, subfield, field, sql_filter, field, subfield)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            zz = []
            vv = {}
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(2))
                if field == 'status':
                    val = Statuses[val]
                elif field == 'value,unit':
                    val = numberWithFraction(val)[0] + ' ' + str(record.value(3))
                elif ',' in field:
                    val += ' ' + str(record.value(3))
                subval = str(record.value(1))
                if subfield == 'status':
                    subval = Statuses[subval]

                if val not in xx:
                    xx.append(val)
                if subval not in zz:
                    zz.append(subval)
                if val not in vv:
                    vv[val] = {}
                vv[val][subval] = count

            for _ in range(len(zz)):
                yy.append([0] * len(xx))

            xx = xx[::-1]
            for i, val in enumerate(xx):
                for j, subval in enumerate(zz):
                    try:
                        yy[j][i] = vv[val][subval]
                    except KeyError:
                        pass

            self.chart.setData(xx, yy, zz)
            self.chart.setLabelY(self.fieldSelector.currentText())
            self.chart.setLabelZ(self.subfieldSelector.currentText())
        elif chart == 'progress':
            items = self.itemsSelector.currentData()
            if items == 'price':
                sql_field = 'sum(payprice)'
                self.chart.setLabel(self.tr("Paid"))
            elif items == 'totalprice':
                sql_field = 'sum(totalpayprice)'
                self.chart.setLabel(self.tr("Total paid"))
            elif items == 'count':
                sql_field = 'count(*)'
                self.chart.setLabel(self.tr("Number of coins"))
            else:
                sql_field = 'count(*)'
                self.chart.setLabel(self.tr("Number of coins"))

            period = self.periodSelector.currentData()
            if items == 'created':
                if period == 'month':
                    sql_filters = ["createdat >= datetime('now', 'start of month', '-11 months')"]
                elif period == 'week':
                    sql_filters = ["createdat > datetime('now', '-11 months')"]
                elif period == 'day':
                    sql_filters = ["createdat > datetime('now', '-1 month')"]
                else:  # year
                    sql_filters = ["1=1"]
            else:
                sql_filters = ["status IN ('owned', 'ordered', 'sale', 'missing')"]

                if period == 'month':
                    sql_filters.append("paydate >= datetime('now', 'start of month', '-11 months')")
                elif period == 'week':
                    sql_filters.append("paydate > datetime('now', '-11 months')")
                elif period == 'day':
                    sql_filters.append("paydate > datetime('now', '-1 month')")

            if period == 'month':
                date_format = '%m'
            elif period == 'week':
                date_format = '%W'
            elif period == 'day':
                date_format = '%d'
            else:
                date_format = '%Y'

            if filter_:
                sql_filters.append(filter_)

            if items == 'created':
                sql = "SELECT %s, strftime('%s', createdat) FROM coins"\
                      " WHERE %s"\
                      " GROUP BY strftime('%s', createdat) ORDER BY createdat" % (
                          sql_field, date_format, ' AND '.join(sql_filters),
                          date_format)
            else:
                sql = "SELECT %s, strftime('%s', paydate) FROM coins"\
                      " WHERE %s"\
                      " GROUP BY strftime('%s', paydate) ORDER BY paydate" % (
                          sql_field, date_format, ' AND '.join(sql_filters),
                          date_format)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy)
            self.chart.setLabelY(self.periodSelector.currentText())
        else:
            sql = "SELECT count(*), %s FROM coins %s GROUP BY %s" % (
                field, sql_filter, field)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                if field == 'status':
                    val = Statuses[val]
                elif field == 'value,unit':
                    val = numberWithFraction(val)[0] + ' ' + str(record.value(2))
                elif ',' in field:
                    val += ' ' + str(record.value(2))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy)
            self.chart.setLabelY(self.fieldSelector.currentText())
Пример #6
0
    def __updateChilds(self, item, paramIndex=0, filters=''):
        fields = self.treeParam.fieldNames(paramIndex)
        if not fields:
            return

        sql = "SELECT DISTINCT %s FROM coins" % ','.join(fields)
        if filters:
            sql += " WHERE " + filters
        query = QtSql.QSqlQuery(sql, self.db)
        hasEmpty = False
        while query.next():
            record = query.record()
            data = []
            orig_data = []
            filterSql = []
            for i in range(record.count()):
                if record.isNull(i):
                    hasEmpty = True
                    continue

                orig_data.append(record.value(i))
                text = str(record.value(i))
                if text:
                    if fields[i] == 'status':
                        data.append(Statuses[text])
                    elif fields[i] == 'year':
                        label = text
                        try:
                            year = int(text)
                            if year < 0:
                                label = "%d BC" % -year
                        except ValueError:
                            pass
                        data.append(label)
                    elif fields[i] == 'value':
                        label, _ = numberWithFraction(text,
                                                      self.convert_fraction)
                        data.append(label)
                    else:
                        data.append(text)
                    escapedText = text.replace("'", "''")
                    filterSql.append("%s='%s'" % (fields[i], escapedText))
                else:
                    hasEmpty = True

            if data:
                if len(data) > 1:
                    newFilters = ' AND '.join(filterSql)
                    text = ' '.join(data)
                    child = TreeWidgetItem([
                        text,
                    ])
                    child.setData(0, self.SortDataRole, orig_data)
                else:
                    newFilters = filterSql[0]
                    child = TreeWidgetItem(data)
                    child.setData(0, self.SortDataRole, orig_data)

                if filters:
                    newFilters = filters + ' AND ' + newFilters

                child.setData(0, self.ParamRole, paramIndex)
                child.setData(0, self.FiltersRole, newFilters)
                child.setData(0, self.FieldsRole, fields)

                if self.show_tree_icons:
                    icon = self.reference.getIcon(fields[0], data[0])
                    if icon:
                        child.setIcon(0, icon)

                item.addChild(child)

                # Restore selection
                if newFilters == self.model.extFilter:
                    self.currentItemChanged.disconnect(self.itemActivatedEvent)
                    self.setCurrentItem(child)
                    self.currentItemChanged.connect(self.itemActivatedEvent)

        item.sortChildren(0, Qt.AscendingOrder)

        if hasEmpty and len(fields) == 1 and item.childCount() > 0:
            text = self.tr("Other")
            newFilters = "ifnull(%s,'')=''" % fields[0]
            if filters:
                newFilters = filters + ' AND ' + newFilters

            child = QTreeWidgetItem([
                text,
            ])
            child.setData(0, self.ParamRole, paramIndex)
            child.setData(0, self.FiltersRole, newFilters)
            child.setData(0, self.FieldsRole, fields)
            item.addChild(child)

            # Restore selection
            if newFilters == self.model.extFilter:
                self.currentItemChanged.disconnect(self.itemActivatedEvent)
                self.setCurrentItem(child)
                self.currentItemChanged.connect(self.itemActivatedEvent)

        # Recursion for next field if nothing selected
        if item.childCount() == 0:
            self.__updateChilds(item, paramIndex + 1, filters)
Пример #7
0
    def prepareMenu(self):
        self.listWidget = QListWidget(self)

        filters = self.filters.copy()
        appliedValues = []
        columnFilters = None
        revert = False
        if self.fieldid in filters.keys():
            columnFilters = filters.pop(self.fieldid)
            for filter_ in columnFilters.filters():
                if filter_.isRevert():
                    revert = True
                appliedValues.append(filter_.value)

        hasBlanks = False
        columnType = self.model.columnType(self.fieldid)
        if self.model.columnName(self.fieldid) == 'year':
            filtersSql = self.filtersToSql(filters.values())
            if filtersSql:
                filtersSql = 'WHERE ' + filtersSql
            sql = "SELECT DISTINCT %s FROM coins %s" % (self.columnName, filtersSql)
            query = QSqlQuery(sql, self.db)

            while query.next():
                icon = None
                if query.record().isNull(0):
                    data = None
                else:
                    orig_data = query.record().value(0)
                    data = str(orig_data)
                    label = data
                    try:
                        year = int(orig_data)
                        if year < 0:
                            label = "%d BC" % -year
                    except ValueError:
                        pass

                if not data:
                    hasBlanks = True
                    continue

                item = CustomSortListWidgetItem()
                item.setData(Qt.DisplayRole, label)
                item.setData(Qt.UserRole, data)
                item.setData(Qt.UserRole + 1, orig_data)
                if data in appliedValues:
                    if revert:
                        item.setCheckState(Qt.Checked)
                    else:
                        item.setCheckState(Qt.Unchecked)
                else:
                    if revert:
                        item.setCheckState(Qt.Unchecked)
                    else:
                        item.setCheckState(Qt.Checked)
                self.listWidget.addItem(item)

            self.listWidget.sortItems()
        elif columnType == Type.Text or columnType in Type.ImageTypes:
            dataFilter = BlankFilter(self.columnName).toSql()
            blanksFilter = DataFilter(self.columnName).toSql()

            filtersSql = self.filtersToSql(filters.values())
            sql = "SELECT 1 FROM coins WHERE " + filtersSql
            if filtersSql:
                sql += ' AND '

            # Get blank row count
            blank_sql = sql + blanksFilter + " LIMIT 1"
            query = QSqlQuery(blank_sql, self.db)
            if query.first():
                hasBlanks = True

            # Get not blank row count
            not_blank_sql = sql + dataFilter + " LIMIT 1"
            query = QSqlQuery(not_blank_sql, self.db)
            if query.first():
                if columnType in Type.ImageTypes:
                    label = self.tr("(Images)")
                elif columnType == Type.Text:
                    label = self.tr("(Text)")
                else:
                    label = self.tr("(Data)")
                item = QListWidgetItem(label,
                                       type=FilterMenuButton.DataType)
                item.setData(Qt.UserRole, label)
                item.setCheckState(Qt.Checked)
                if columnFilters and columnFilters.hasData():
                    item.setCheckState(Qt.Unchecked)
                self.listWidget.addItem(item)
        elif columnType == Type.Status:
            filtersSql = self.filtersToSql(filters.values())
            if filtersSql:
                filtersSql = 'WHERE ' + filtersSql
            sql = "SELECT DISTINCT %s FROM coins %s ORDER BY %s ASC" % (
                self.columnName, filtersSql, self.columnName)
            query = QSqlQuery(sql, self.db)

            while query.next():
                value = query.record().value(0)
                label = Statuses[value]

                item = StatusSortListWidgetItem(label)
                item.setData(Qt.UserRole, value)

                if self.settings['show_filter_icons']:
                    icon = statusIcon(value)
                    item.setIcon(icon)

                if value in appliedValues:
                    if revert:
                        item.setCheckState(Qt.Checked)
                    else:
                        item.setCheckState(Qt.Unchecked)
                else:
                    if revert:
                        item.setCheckState(Qt.Unchecked)
                    else:
                        item.setCheckState(Qt.Checked)
                self.listWidget.addItem(item)

            self.listWidget.sortItems()
        elif columnType == Type.Denomination:
            filtersSql = self.filtersToSql(filters.values())
            if filtersSql:
                filtersSql = 'WHERE ' + filtersSql
            sql = "SELECT DISTINCT %s FROM coins %s" % (self.columnName, filtersSql)
            query = QSqlQuery(sql, self.db)

            while query.next():
                icon = None
                if query.record().isNull(0):
                    data = None
                else:
                    orig_data = query.record().value(0)
                    data = str(orig_data)
                    label, _ = numberWithFraction(data, self.settings['convert_fraction'])

                if not data:
                    hasBlanks = True
                    continue

                item = CustomSortListWidgetItem()
                item.setData(Qt.DisplayRole, label)
                item.setData(Qt.UserRole, data)
                item.setData(Qt.UserRole + 1, orig_data)
                if data in appliedValues:
                    if revert:
                        item.setCheckState(Qt.Checked)
                    else:
                        item.setCheckState(Qt.Unchecked)
                else:
                    if revert:
                        item.setCheckState(Qt.Unchecked)
                    else:
                        item.setCheckState(Qt.Checked)
                self.listWidget.addItem(item)

            self.listWidget.sortItems()
        else:
            filtersSql = self.filtersToSql(filters.values())
            if filtersSql:
                filtersSql = 'WHERE ' + filtersSql
            sql = "SELECT DISTINCT %s FROM coins %s" % (self.columnName, filtersSql)
            query = QSqlQuery(sql, self.db)

            while query.next():
                icon = None
                if query.record().isNull(0):
                    data = None
                else:
                    orig_data = query.record().value(0)
                    data = str(orig_data)
                    if self.settings['show_filter_icons']:
                        icon = self.reference.getIcon(self.columnName, data)

                if not data:
                    hasBlanks = True
                    continue

                item = QListWidgetItem()
                item.setData(Qt.DisplayRole, orig_data)
                item.setData(Qt.UserRole, data)
                if icon:
                    item.setIcon(icon)
                if data in appliedValues:
                    if revert:
                        item.setCheckState(Qt.Checked)
                    else:
                        item.setCheckState(Qt.Unchecked)
                else:
                    if revert:
                        item.setCheckState(Qt.Unchecked)
                    else:
                        item.setCheckState(Qt.Checked)
                self.listWidget.addItem(item)

            self.listWidget.sortItems()

        item = QListWidgetItem(self.tr("(Select all)"),
                               type=FilterMenuButton.SelectAllType)
        item.setData(Qt.UserRole, self.tr("(Select all)"))
        item.setCheckState(Qt.Checked)
        self.listWidget.insertItem(0, item)

        if hasBlanks:
            item = QListWidgetItem(self.tr("(Blanks)"),
                                   type=FilterMenuButton.BlanksType)
            item.setData(Qt.UserRole, self.tr("(Blanks)"))
            item.setCheckState(Qt.Checked)
            if revert:
                if columnFilters and not columnFilters.hasBlank():
                    item.setCheckState(Qt.Unchecked)
            else:
                if columnFilters and columnFilters.hasBlank():
                    item.setCheckState(Qt.Unchecked)
            self.listWidget.addItem(item)

        self.listWidget.itemChanged.connect(self.itemChanged)

        self.searchBox = QLineEdit(self)
        self.searchBox.setPlaceholderText(self.tr("Filter"))
        self.searchBox.textChanged.connect(self.applySearch)

        self.buttonBox = QDialogButtonBox(Qt.Horizontal)
        self.buttonBox.addButton(QDialogButtonBox.Ok)
        self.buttonBox.addButton(QDialogButtonBox.Cancel)
        self.buttonBox.accepted.connect(self.apply)
        self.buttonBox.rejected.connect(self.menu().hide)

        layout = QVBoxLayout()
        layout.addWidget(self.searchBox)
        layout.addWidget(self.listWidget)
        layout.addWidget(self.buttonBox)

        widget = QWidget(self)
        widget.setLayout(layout)

        widgetAction = QWidgetAction(self)
        widgetAction.setDefaultWidget(widget)
        self.menu().clear()
        self.menu().addAction(widgetAction)

        # Fill items
        if self.listWidget.count() > 1:
            self.itemChanged(self.listWidget.item(1))
    def modelChanged(self):
        self.chartLayout.removeWidget(self.chart)
        chart = self.chartSelector.currentData()
        if chart == 'geochart':
            self.chart = GeoChartCanvas(self)
        elif chart == 'barh':
            self.chart = BarHCanvas(self)
        elif chart == 'pie':
            self.chart = PieCanvas(self)
        elif chart == 'stacked':
            self.chart = StackedBarCanvas(self)
        elif chart == 'progress':
            self.chart = ProgressCanvas(self)
        else:
            self.chart = BarCanvas(self)
        self.chart.setMulticolor(self.colorCheck.checkState() == Qt.Checked)
        self.chartLayout.addWidget(self.chart)

        fieldId = self.fieldSelector.currentData()
        field = self.model.fields.field(fieldId).name
        if field == 'fineness':
            field = 'material,fineness'
        elif field == 'unit':
            field = 'value,unit'
        filter_ = self.model.filter()
        if filter_:
            sql_filter = "WHERE %s" % filter_
        else:
            sql_filter = ""

        if chart == 'geochart':
            sql = "SELECT count(*), country FROM coins %s GROUP BY country" % sql_filter
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy, self.regionSelector.currentData())
        elif chart == 'stacked':
            subfieldId = self.subfieldSelector.currentData()
            subfield = self.model.fields.field(subfieldId).name
            sql = "SELECT count(%s), %s, %s FROM coins %s GROUP BY %s, %s" % (
                subfield, subfield, field, sql_filter, field, subfield)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            zz = []
            vv = {}
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(2))
                if field == 'status':
                    val = Statuses[val]
                elif field == 'value,unit':
                    val = numberWithFraction(val)[0] + ' ' + str(
                        record.value(3))
                elif ',' in field:
                    val += ' ' + str(record.value(3))
                subval = str(record.value(1))
                if subfield == 'status':
                    subval = Statuses[subval]

                if val not in xx:
                    xx.append(val)
                if subval not in zz:
                    zz.append(subval)
                if val not in vv:
                    vv[val] = {}
                vv[val][subval] = count

            for _ in range(len(zz)):
                yy.append([0] * len(xx))

            xx = xx[::-1]
            for i, val in enumerate(xx):
                for j, subval in enumerate(zz):
                    try:
                        yy[j][i] = vv[val][subval]
                    except KeyError:
                        pass

            self.chart.setData(xx, yy, zz)
            self.chart.setLabelY(self.fieldSelector.currentText())
            self.chart.setLabelZ(self.subfieldSelector.currentText())
        elif chart == 'progress':
            items = self.itemsSelector.currentData()
            if items == 'price':
                sql_field = 'sum(payprice)'
                self.chart.setLabel(self.tr("Paid"))
            elif items == 'totalprice':
                sql_field = 'sum(totalpayprice)'
                self.chart.setLabel(self.tr("Total paid"))
            elif items == 'count':
                sql_field = 'count(*)'
                self.chart.setLabel(self.tr("Number of coins"))
            else:
                sql_field = 'count(*)'
                self.chart.setLabel(self.tr("Number of coins"))

            period = self.periodSelector.currentData()
            if items == 'created':
                if period == 'month':
                    sql_filters = [
                        "createdat >= datetime('now', 'start of month', '-11 months')"
                    ]
                elif period == 'week':
                    sql_filters = ["createdat > datetime('now', '-11 months')"]
                elif period == 'day':
                    sql_filters = ["createdat > datetime('now', '-1 month')"]
                else:  # year
                    sql_filters = ["1=1"]
            else:
                sql_filters = [
                    "status IN ('owned', 'ordered', 'sale', 'missing')"
                ]

                if period == 'month':
                    sql_filters.append(
                        "paydate >= datetime('now', 'start of month', '-11 months')"
                    )
                elif period == 'week':
                    sql_filters.append(
                        "paydate > datetime('now', '-11 months')")
                elif period == 'day':
                    sql_filters.append("paydate > datetime('now', '-1 month')")

            if period == 'month':
                date_format = '%m'
            elif period == 'week':
                date_format = '%W'
            elif period == 'day':
                date_format = '%d'
            else:
                date_format = '%Y'

            if filter_:
                sql_filters.append(filter_)

            if items == 'created':
                sql = "SELECT %s, strftime('%s', createdat) FROM coins"\
                      " WHERE %s"\
                      " GROUP BY strftime('%s', createdat) ORDER BY createdat" % (
                          sql_field, date_format, ' AND '.join(sql_filters),
                          date_format)
            else:
                sql = "SELECT %s, strftime('%s', paydate) FROM coins"\
                      " WHERE %s"\
                      " GROUP BY strftime('%s', paydate) ORDER BY paydate" % (
                          sql_field, date_format, ' AND '.join(sql_filters),
                          date_format)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy)
            self.chart.setLabelY(self.periodSelector.currentText())
        else:
            sql = "SELECT count(*), %s FROM coins %s GROUP BY %s" % (
                field, sql_filter, field)
            query = QSqlQuery(self.model.database())
            query.exec_(sql)
            xx = []
            yy = []
            while query.next():
                record = query.record()
                count = record.value(0)
                val = str(record.value(1))
                if field == 'status':
                    val = Statuses[val]
                elif field == 'value,unit':
                    val = numberWithFraction(val)[0] + ' ' + str(
                        record.value(2))
                elif ',' in field:
                    val += ' ' + str(record.value(2))
                xx.append(val)
                yy.append(count)

            self.chart.setData(xx, yy)
            self.chart.setLabelY(self.fieldSelector.currentText())