Skip to content

Commit

Permalink
Improved Certificado Catastral Villa Florida
Browse files Browse the repository at this point in the history
  • Loading branch information
fdiaz authored and fdiaz committed Jun 9, 2022
1 parent e117e74 commit 49b4e27
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 108 deletions.
43 changes: 5 additions & 38 deletions actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,10 @@
from org.gvsig.scripting.app.extension import ScriptingExtension
from org.gvsig.tools.swing.api import ToolsSwingLocator
from org.gvsig.tools import ToolsLocator
from addons.CertificadoCatastralVillaFlorida.certificadoCatastralVillaFloridaPanel import CertificadoCatastralVillaFloridaPanel
from addons.CertificadoCatastralVillaFlorida.certificadoCatastralVillaFloridaPanel import CertificadoCatastralVillaFloridaPanel, isLayerValid

class CertificadoCatastralVillaFloridaExtension(ScriptingExtension):
def __init__(self):
self.attrNames = [
'CODIGO',
'MAPA',
'CUADRANTE',
'MANZANA',
'N_LOTE',
'PROPIETARI',
'TENENCIA',
'AREA_DE_TE',
#'FRENTE_s_m',
'TIPO_DE_CA',
'USO_DE_SUE',
'MEJORAS_DE',
'USO_CONSTR',
#'CATEGORIAS',
#'AREA_CONST',
#'OBSERVECIO',
'BARRIO',
'UBICACION'#,
#'IMAGEN'
]
pass

def canQueryByAction(self):
Expand All @@ -51,26 +30,14 @@ def isVisible(self, action):
return True
return False

def isLayerValid(self, layer):
if not isinstance(layer, FLyrVect):
return False
store = layer.getFeatureStore()
featureType = store.getDefaultFeatureTypeQuietly()
for attrName in self.attrNames:
if featureType.get(attrName) == None:
return False
return True

def isEnabled(self, action):
view = currentView()
if view==None:
return False
mapContext = view.getMapContext()
activeLayers = mapContext.getLayers().getActives()
if len(activeLayers) != 1:
layer = currentLayer()
if layer == None:
return False
layer = activeLayers[0]
if not self.isLayerValid(layer):
if not isLayerValid(layer):
return False
store = layer.getFeatureStore()
selection = store.getSelection()
Expand All @@ -82,7 +49,7 @@ def execute(self,actionCommand, *args):
actionCommand = actionCommand.lower()
print actionCommand
if actionCommand == "settool-certificadocatastralvillaflorida":
certificadoCatastralVillaFlorida = CertificadoCatastralVillaFloridaPanel(currentLayer())
certificadoCatastralVillaFlorida = CertificadoCatastralVillaFloridaPanel()
i18n = ToolsLocator.getI18nManager()
print "showTool"
certificadoCatastralVillaFlorida.showTool(i18n.getTranslation("_Certificado_Catastral_Villa_Florida"))
Expand Down
227 changes: 157 additions & 70 deletions certificadoCatastralVillaFloridaPanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,54 @@
use_plugin("org.gvsig.app.document.layout2.app.mainplugin")
use_plugin("org.gvsig.pdf.app.mainplugin")

from gvsig.commonsdialog import msgbox

from org.gvsig.tools import ToolsLocator
from org.gvsig.pdf.swing.api import PDFSwingLocator, PDFViewer
from org.gvsig.pdf.lib.api import PDFLocator
from org.gvsig.tools.swing.api import ToolsSwingLocator, ToolsSwingUtils
from org.gvsig.tools.swing.api.windowmanager import WindowManager
from java.io import File, FileInputStream
from java.io import File, FileInputStream, FileOutputStream
from gvsig.libs.formpanel import FormPanel, FormComponent
from gvsig import currentLayer
from gvsig import currentLayer, currentView
from org.gvsig.app.project.documents.layout.gui import DefaultLayoutPanel
from org.gvsig.fmap.mapcontext import MapContextLocator
from org.gvsig.tools.dispose import DisposeUtils
from java.awt.event import ComponentAdapter
from org.gvsig.tools.util import ToolsUtilLocator
from org.gvsig.fmap.mapcontext.layers.vectorial import FLyrVect

from org.gvsig.scripting import ScriptingLocator

REQUIRED_ATTR_NAMES = [
'CODIGO',
'MAPA',
'CUADRANTE',
'MANZANA',
'N_LOTE',
'PROPIETARI',
'TENENCIA',
'AREA_DE_TE',
'TIPO_DE_CA',
'USO_DE_SUE',
'MEJORAS_DE',
'USO_CONSTR',
'BARRIO',
'UBICACION',
'IMAGEN1',
'IMAGEN2',
'IMAGEN3'
]
def isLayerValid(layer):
if not isinstance(layer, FLyrVect):
return False
store = layer.getFeatureStore()
featureType = store.getDefaultFeatureTypeQuietly()
for attrName in REQUIRED_ATTR_NAMES:
if featureType.get(attrName) == None:
return False
return True

def getDataFolder():
return ScriptingLocator.getManager().getDataFolder("CertificadoCatastralVillaFlorida").getAbsolutePath()

Expand Down Expand Up @@ -52,11 +87,10 @@ def writeConfigFile(**args):


class CertificadoCatastralVillaFloridaPanel(FormPanel):
def __init__(self, layer):
def __init__(self):
FormPanel.__init__(self, gvsig.getResource(__file__,"certificadoCatastralVillaFloridaPanel.xml"))
i18n = ToolsLocator.getI18nManager()
swingManager = ToolsSwingLocator.getToolsSwingManager()
self.layer = layer

self.pickerFolder = swingManager.createFolderPickerController(
self.txtImagesFolder,
Expand All @@ -67,78 +101,107 @@ def __init__(self, layer):
swingManager.translate(self.btnGenerateCertificate)

config = readConfigFile()
self.txtImagesFolder.setText(config.get("imagesfolder",""))
imagesFolder = config.get("imagesfolder",None)
if imagesFolder != None:
self.pickerFolder.set(File(imagesFolder))
ToolsSwingUtils.ensureRowsCols(self.asJComponent(), 7, 70, 10, 100)


def btnGenerateCertificate_click(self, event):
layout = self.loadTemplate()
context = layout.getLayoutContext()
store = self.layer.getFeatureStore()
layer = currentLayer()
if layer == None:
msgbox(u"Debe seleccionar una capa")
return
if not isLayerValid(layer):
msgbox(u"La capa seleccionada no es válida")
return
store = layer.getFeatureStore()
selection = store.getSelection()
if selection.getSelectedCount() != 1:
msgbox(u"Debe seleccionar una y solo una geometría")
return

feature = selection.first()
if feature:
images = self.getImages(feature)
#feature = None #Coger la feature seleccionada de la vista
geometry = feature.getDefaultGeometry()
encuadre = geometry.buffer(2).getEnvelope()
# Nos recorremos todos los elementos del mapa buscando los que hemos etiquetado
imageFrames = [None, None, None]
for elemento in context.getAllFFrames():
if elemento.getTag() == "VISTA":
# Ajustamos el encuadre de la vista al del elemento seleccionado
mapContext = elemento.getMapContext()
mapContext.getViewPort().setEnvelope(encuadre)
mapContext.invalidate()

elif elemento.getTag() == "SOLICITANTE":
elemento.clearText()
elemento.addText(self.txtSolicitante.getText())

elif elemento.getTag() == "ATRIBUTO":
name = elemento.getText().get(0)
elemento.clearText()
value = feature.getString(name)
if value:
elemento.addText(value)
else:
elemento.addText("")
elif elemento.getTag() == "IMAGEN0":
elemento.setImage(images[0])
imageFrames[0] = elemento

elif elemento.getTag() == "IMAGEN1":
elemento.setImage(images[1])
imageFrames[1] = elemento

elif elemento.getTag() == "IMAGEN2":
elemento.setImage(images[2])
imageFrames[2] = elemento
for n in range(0,3):
if images[n] == None:
context.delFFrame(imageFrames[n])

context.fullRefresh()
layout.getLayoutControl().getLayoutDraw().initialize()

tmpFile = ToolsLocator.getFoldersManager().getUniqueTemporaryFile("informe.pdf")
self.highlightFeature(feature,mapContext)
layout.layoutToPDF(tmpFile);
mapContext = None
imageFrames = [None, None, None]
viewFrame = None
try:
layout = loadTemplate()
context = layout.getLayoutContext()
feature = selection.first()

if feature:
images = self.getImages(feature)
#feature = None #Coger la feature seleccionada de la vista
geometry = feature.getDefaultGeometry()
encuadre = geometry.buffer(2).getEnvelope()
# Nos recorremos todos los elementos del mapa buscando los que hemos etiquetado
for elemento in context.getAllFFrames():
if elemento.getTag() == "VISTA":
# Ajustamos el encuadre de la vista al del elemento seleccionado
elemento.setView(currentView())
mapContext = elemento.getMapContext()
mapContext.getViewPort().setEnvelope(encuadre)
mapContext.invalidate()
viewFrame = elemento

elif elemento.getTag() == "SOLICITANTE":
elemento.clearText()
elemento.addText(self.txtSolicitante.getText())

elif elemento.getTag() == "ATRIBUTO":
name = elemento.getText().get(0)
elemento.clearText()
value = feature.getString(name)
if value:
elemento.addText(value)
else:
elemento.addText("")
elif elemento.getTag() == "IMAGEN0":
elemento.setImage(images[0])
imageFrames[0] = elemento

elif elemento.getTag() == "IMAGEN1":
elemento.setImage(images[1])
imageFrames[1] = elemento

elif elemento.getTag() == "IMAGEN2":
elemento.setImage(images[2])
imageFrames[2] = elemento
for n in range(0,3):
if images[n] == None:
context.delFFrame(imageFrames[n])

context.fullRefresh()
layout.getLayoutControl().getLayoutDraw().initialize()

tmpFile = ToolsLocator.getFoldersManager().getUniqueTemporaryFile("informe.pdf")
self.highlightFeature(layer, feature, mapContext)
layout.layoutToPDF(tmpFile);
finally:
DisposeUtils.disposeQuietly(mapContext)
for f in imageFrames:
if f != None:
f.setImage(None)


desktop = ToolsUtilLocator.getToolsUtilManager().createDesktopOpen()
desktop.open(tmpFile)

'''
pdfDoc = PDFLocator.getPDFManager().createPDFDocument(tmpFile)
pdfViewer = PDFSwingLocator.getPDFSwingManager().createPDFViewer()
pdfViewer.setMode(PDFViewer.MODE_COMPLETE)
pdfViewer.put(pdfDoc)
pdfViewer.asJComponent().addComponentListener(OnComponentHidden(lambda: pdfViewer.dispose()))
i18n = ToolsLocator.getI18nManager()
ToolsSwingLocator.getWindowManager().showWindow(
pdfViewer.asJComponent(),
i18n.getTranslation("_Report"),
WindowManager.MODE.WINDOW
)
)
'''

writeConfigFile(imagesfolder=self.txtImagesFolder.getText())

def getImages(self, feature):
Expand All @@ -160,16 +223,7 @@ def getImages(self, feature):
n = n+1
return images

def loadTemplate(self):
xmlFile = File(gvsig.getResource(__file__,"plantilla.gvslt"))
inputStream = FileInputStream(xmlFile)

persistenceManager = ToolsLocator.getPersistenceManager()
persistentState = persistenceManager.loadState(inputStream)
layout = persistenceManager.create(persistentState)
return layout

def highlightFeature(self, feature, mapContext):
def highlightFeature(self, layer, feature, mapContext):
graphics = mapContext.getGraphicsLayer()
graphics.clearAllGraphics()
graphics.clearAllSymbols()
Expand All @@ -178,17 +232,50 @@ def highlightFeature(self, feature, mapContext):
if os.path.exists(f):
sym = MapContextLocator.getSymbolManager().loadSymbol(File(f))
if sym == None:
sym = self.layer.getLegend().getSymbolByFeature(feature).getSymbolForSelection()
sym = layer.getLegend().getSymbolByFeature(feature).getSymbolForSelection()
setTransparency = getattr(sym, 'setTransparency', None)
if setTransparency != None:
setTransparency(0.5)
n = graphics.addSymbol(sym)
graphics.addGraphic("CertificadoCatastralVillaFlorida", feature.getDefaultGeometry(), n)


def loadTemplate():
xmlFile = File(gvsig.getResource(__file__,"plantilla.gvslt"))
inputStream = FileInputStream(xmlFile)

persistenceManager = ToolsLocator.getPersistenceManager()
persistentState = persistenceManager.loadState(inputStream)
layout = persistenceManager.create(persistentState)
return layout

def saveTemplate(layout):
xmlFile = File(gvsig.getResource(__file__,"plantilla.gvslt"))
fos = FileOutputStream(xmlFile)

persistenceManager = ToolsLocator.getPersistenceManager()
persistentState = persistenceManager.getState(layout)
persistenceManager.saveState(persistentState, fos)

class OnComponentHidden(ComponentAdapter):
def __init__(self, listener):
self.listener = listener

def componentHidden(self, *args):
self.listener();

def fixTemplate():
layout = loadTemplate()
context = layout.getLayoutContext()
for elemento in context.getAllFFrames():
if elemento.getTag() == "VISTA":
# Ajustamos el encuadre de la vista al del elemento seleccionado
elemento.setView(None)
saveTemplate(layout)

def main(*args):

i18n = ToolsLocator.getI18nManager()
swingManager = ToolsSwingLocator.getToolsSwingManager()
f = CertificadoCatastralVillaFloridaPanel(currentLayer())
f = CertificadoCatastralVillaFloridaPanel()
f.showWindow(i18n.getTranslation("_Certificado_Catastral_Villa_Florida"))
#fixTemplate()
Binary file modified plantilla.gvslt
Binary file not shown.

0 comments on commit 49b4e27

Please sign in to comment.