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()