diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/UPivotTable.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/UPivotTable.kt index cefb9551a..b086b53a0 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/UPivotTable.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/UPivotTable.kt @@ -25,4 +25,9 @@ interface UPivotTable : UWindow { * Builds the pivot table; */ fun build() + + /** + * Print to the PDF format. + */ + fun imprimer() } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/VPivotTable.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/VPivotTable.kt index 09c7ceb98..c748c6570 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/VPivotTable.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/pivottable/VPivotTable.kt @@ -20,21 +20,21 @@ package org.kopi.galite.visual.pivottable import java.io.File import java.net.MalformedURLException -import org.jetbrains.annotations.TestOnly - -import org.vaadin.addons.componentfactory.PivotTable.* +import org.jetbrains.annotations.TestOnly import org.kopi.galite.util.base.InconsistencyException import org.kopi.galite.visual.* +import org.kopi.galite.visual.dsl.common.Trigger import org.kopi.galite.visual.form.VConstants import org.kopi.galite.visual.l10n.LocalizationManager -import org.kopi.galite.visual.dsl.common.Trigger +import org.vaadin.addons.componentfactory.PivotTable.* /** * Represents a pivot table model. */ abstract class VPivotTable internal constructor() : VWindow(), VConstants { companion object { + const val TYP_PDF = 1 init { WindowController.windowController.registerWindowBuilder( @@ -272,6 +272,18 @@ abstract class VPivotTable internal constructor() : VWindow(), VConstants { VHelpViewer().showHelp(genHelp()) } + /** + * Prints the report + */ + fun export(type: Int ) { + when (type) { + TYP_PDF -> { + (getDisplay() as UPivotTable).imprimer() + } + else -> throw InconsistencyException("Export type unknown") + } + } + // ---------------------------------------------------------------------- // Command // ---------------------------------------------------------------------- diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/pivottable/DPivotTable.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/pivottable/DPivotTable.kt index 96c924ca1..200c2996e 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/pivottable/DPivotTable.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/pivottable/DPivotTable.kt @@ -17,14 +17,13 @@ */ package org.kopi.galite.visual.ui.vaadin.pivottable -import org.vaadin.addons.componentfactory.PivotTable import com.vaadin.flow.component.dependency.CssImport - import org.kopi.galite.visual.dsl.pivottable.Dimension.Position import org.kopi.galite.visual.pivottable.MPivotTable import org.kopi.galite.visual.pivottable.UPivotTable import org.kopi.galite.visual.pivottable.VPivotTable import org.kopi.galite.visual.ui.vaadin.visual.DWindow +import org.vaadin.addons.componentfactory.PivotTable @CssImport("./styles/galite/pivottable.css") class DPivotTable(private val pivotTable: VPivotTable) : DWindow(pivotTable), UPivotTable { @@ -37,6 +36,7 @@ class DPivotTable(private val pivotTable: VPivotTable) : DWindow(pivotTable), UP private val pivotOptions = PivotTable.PivotOptions() private val rows = mutableListOf() private val columns = mutableListOf() + private lateinit var pivot: PivotTable init { getModel()!!.setDisplay(this) @@ -89,8 +89,16 @@ class DPivotTable(private val pivotTable: VPivotTable) : DWindow(pivotTable), UP PivotTable.PivotMode.NONINTERACTIVE } - val pivot = PivotTable(pivotData, pivotOptions, pivotMode) + pivot = PivotTable(pivotData, pivotOptions, pivotMode) add(pivot) } + + override fun imprimer() { + if (::pivot.isInitialized) { + ui.get().access { + ui.get().page.executeJs("window.print()") + } + } + } } diff --git a/galite-demo/galite-vaadin/src/main/kotlin/org/kopi/galite/demo/client/ClientP.kt b/galite-demo/galite-vaadin/src/main/kotlin/org/kopi/galite/demo/client/ClientP.kt index 52ee48f2a..0050e04db 100644 --- a/galite-demo/galite-vaadin/src/main/kotlin/org/kopi/galite/demo/client/ClientP.kt +++ b/galite-demo/galite-vaadin/src/main/kotlin/org/kopi/galite/demo/client/ClientP.kt @@ -16,15 +16,9 @@ */ package org.kopi.galite.demo.client -import java.util.Locale - import org.jetbrains.exposed.sql.JoinType import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.transactions.transaction - -import org.vaadin.addons.componentfactory.PivotTable.Aggregator -import org.vaadin.addons.componentfactory.PivotTable.Renderer - import org.kopi.galite.demo.database.Client import org.kopi.galite.demo.database.Product import org.kopi.galite.demo.database.Purchase @@ -35,6 +29,10 @@ import org.kopi.galite.visual.dsl.common.Icon import org.kopi.galite.visual.dsl.form.Key import org.kopi.galite.visual.dsl.pivottable.Dimension.Position import org.kopi.galite.visual.dsl.pivottable.PivotTable +import org.kopi.galite.visual.pivottable.VPivotTable +import org.vaadin.addons.componentfactory.PivotTable.Aggregator +import org.vaadin.addons.componentfactory.PivotTable.Renderer +import java.util.* /** * Client Report @@ -51,8 +49,15 @@ class ClientP : PivotTable(title = "Clients_Pivot_Table", locale = Locale.UK) { key = Key.F1 icon = Icon.HELP } + val imprimer = actor(menu = action, label = "PDF", help = "PDF Format", ident = "pdf") { + key = Key.F9 + icon = Icon.PRINT + } val cmdQuit = command(item = quit) { model.close() } val helpCmd = command(item = helpForm) { model.showHelp() } + val cmdPDF = command(item = imprimer) { + model.export(VPivotTable.TYP_PDF) + } val firstName = dimension(STRING(25), Position.NONE) { label = "First Name"