Exemple #1
0
    def new_batch_operation(self):
        dialog = OperationDialog(parent=self)
        ok = dialog.exec_()
        if not ok:
            return

        source = dialog.source

        # Determine the correct source
        if source == 'All Vendor products':
            query = self.dbsession.query(Listing).filter(Listing.vendor_id != 0)
        else:
            vendor_id = self.dbsession.query(Vendor.id).filter_by(name=source).scalar()
            if vendor_id:
                query = self.dbsession.query(Listing).filter_by(vendor_id=vendor_id)
            else:
                list_id = self.dbsession.query(List.id).filter_by(name=source).scalar()
                if list_id is None:
                    QMessageBox.critical(self, 'Error', 'Source \'%s\' could not be found.' % source)
                    return
                query = self.dbsession.query(Listing).join(ListMembership).filter_by(list_id=list_id)

        if dialog.no_linked_products:
            query = query.filter(and_(~Listing.amz_links.any(), ~Listing.vnd_links.any()))

        if dialog.filter_price:
            query = query.filter(Listing.price.between(dialog.min_price, dialog.max_price))

        # Add to the operation table
        for row in query:
            op = Operation.GenericOperation(operation=dialog.operation,
                                            params=dialog.params,
                                            listing_id=row.id)
            self.dbsession.add(op)

        self.dbsession.commit()
        self.update_counts()