Der Preisskript erzeugt aus den Bestellparametern die
Preisdatei (price.txt
). Für die Abfrage der
Parameter steht eine iG/Script Bibliothek zur Verfügung. Die
einzelnen Parameter bzw. die Bibliothek sind im folgenden
beschrieben. Am Schluss des Kapitels ist ein vollständiges Beispiel
angegeben.
Dem Preisskript werden vom GeoShop folgende Parameter in der
Map OPT
übergeben:
Parameter | Beschreibung |
product | Produktname. |
area | Effektiv bestellte Fläche (d.h. nach dem Schnitt mit den Tarifzonen). |
fence_area | Fläche des Bestellpolygon. |
user | Benutzername. |
prefix | Benutzerprefix (falls vorhanden). |
topics | Ausgewählte Datenebenen als kommaseparierte Liste. |
polygon_rate | Name des Textfiles, welches die Schnittresultate mit den Tarifzonen enthält. |
point_rate | Name des Textfiles, welches die Schnittresultate mit der Punktebene enthält. |
temp_dir | Name des Verzeichnis in welchem temporäre Dateien abgelegt werden können. Wird vom GeoShop nach der Preisberechnung automatisch gelöscht. |
log | Name der Logdatei. |
output | Name der Textdatei in welchem das Resultat der Berechnung gespeichert werden soll. Die ersten beiden Zeilen haben eine spezielle Bedeutung. 1. Zeile: Währung, 2. Zeile: Preis. Der Rest der Outputdatei wird dem Benutzer im GeoShop Client Applet angezeigt. |
Für das Auslesen der Parameter
|
Folgende Prozeduren aus der Bibliothek
\script\price.lib
können für die Berechnung des
Preis bzw. für das Schreiben der Preisdatei benutzt werden:
PRICE_DISPLAY_INPUT [][]
Zeigt alle Inputparameter in der Logdatei an.
PRICE_CREATE_OUTPUT [][]
Erstellt eine neue, leere Preisdatei.
PRICE_WRITELN [s line][]
Schreibt eine Zeile in die Preisdatei.
PRICE_CLOSE_OUTPUT [][]
Schliesst die Preisdatei.
PRICE_SET_LOG [s logfile][]
Setzt die Logdatei auf einen bestimmten fixen Pfad (vorallem für Debuggingzwecke nützlich).
PRICE_GET_TOPICS [][]
Füllt die vordefinierte Map
PRICE_TOPICS
mit Einträgen der Art
<Ebene> => TRUE
(bzw.
DEFAULT => FALSE
). Nach dem Aufruf von
PRICE_GET_TOPICS
kann über die Map
PRICE_TOPICS
sehr einfach festgestellt
werden, ob eine bestimmte Datenebene vom Benutzer ausgewählt
wurde oder nicht.
PRICE_COUNT_TOPICS [][i count]
Gibt die Anzahl ausgewählter Datenebenen zurück.
PRICE_GET_POLYGON_RATES [][]
Füllt die vordefinierte Map
PRICE_POLYGON_RATES
mit Einträgen für
jede Flächenart (Rate Class im GeoEditor). Der Wert für jede
Flächenart ist als Faktor zwischen 0.0
und 1.0
zu verstehen (DEFAULT
=> 0.0
). xy => 0.5
bedeutet z.B., dass 50% der Bestellfläche in der Flächenart
xy
liegen.
PRICE_GET_POINT_RATES [][]
Füllt die vordefinierte Map
PRICE_POINT_RATES
mit Einträgen für jede
Punktart (Rate Class im GeoEditor). Als Wert für jede
Punktart wird die Anzahl Punkte in der Bestellfläche
eingetragen (DEFAULT => 0
).
Das Beispielskript \user\script\price\price.cfg berechnet folgende Preisfunktion:
Für Flächen <= 10 ha wird eine Grundgebühr von SFr. 20.- und pro Datenebene ein Zuschlag von SFr. 5.- erhoben.
Für Flächen ] 10.0 .. 300.0] ha wird eine Grundgebühr von SFr. 100.- und pro Datenebene ein Zuschlag von SFr. 25.- erhoben.
Für Flächen > 300 ha wird eine Grundgebühr von SFr. 200.- und ein pro Datenebene ein Zuschlag von SFr. 50.- erhoben.
Es wird kein Schnitt mit Tarifzonen oder einer Punktebene gemacht.
Nachfolgend ist der vollständige Quelltext des Beispielskript
price.cfg
angegeben (Prozeduren der Bibliothek
price.lib
sind fett markiert):
|LICENSE \license\geoshop.lic |INCL \script\price.lib ! Hilfsfunktion für die Formatierung von Preisen PROCEDURE FORMAT_PRICE ! [r price][s result] 'SFr. ' SWAP TO_STRING 8 RJUST APP END_PROCEDURE ! Hilfsfunktion für die Berechnung des Tarifs PROCEDURE CALCULATE_PRICE ! [][r price] OPT.fence_area TO_INT 0.0001 * TO_INT => OPT.ha ! der Tarif ist abhängig von der Anzahl ausgewählter Ebenen PRICE_COUNT_TOPICS => OPT.topcount IF OPT.ha <= 10 THEN 20.0 => OPT.grundgebuehr 5.0 OPT.topcount * => OPT.ebenengebuehr ELSIF OPT.ha <= 300 THEN 100.0 => OPT.grundgebuehr 25.0 OPT.topcount * => OPT.ebenengebuehr ELSE 200.0 => OPT.grundgebuehr 50.0 OPT.topcount * => OPT.ebenengebuehr END_IF OPT.grundgebuehr OPT.ebenengebuehr + => OPT.price END_PROCEDURE ! Hauptprogramm 'price.log' PRICE_SET_LOG ! Logdatei für Fehlermeldungen setzen PRICE_DISPLAY_INPUT ! Alle Inputparameter anzeigen PRICE_CREATE_OUTPUT ! Leeres price.txt erzeugen ! calculate price CALCULATE_PRICE ! header OPT.price TO_STRING PRICE_WRITELN ! 1. Zeile price.txt mit Preis 'SFr' PRICE_WRITELN ! 2. Zeile price.txt mit Währung ! info OPT.ha TO_STRING . ' ha' 14 LJUST . ': ' OPT.grundgebuehr FORMAT_PRICE APP PRICE_WRITELN ! 1. Ausgabe OPT.topcount TO_STRING . ' Ebenen' 14 LJUST . ': ' OPT.ebenengebuehr FORMAT_PRICE APP PRICE_WRITELN ! 2. Ausgabe '-----------------------------' PRICE_WRITELN ! etc. 'Zwischentotal' 14 LJUST . ': ' OPT.price FORMAT_PRICE APP PRICE_WRITELN '-----------------------------' PRICE_WRITELN 'Demorabatt' 14 LJUST . ': ' OPT.price -1.0 * FORMAT_PRICE APP PRICE_WRITELN 'Netto' 14 LJUST . ': ' 0.0 FORMAT_PRICE APP PRICE_WRITELN 'MwSt. 7.6%' 14 LJUST . ': ' 0.0 FORMAT_PRICE APP PRICE_WRITELN '-----------------------------' PRICE_WRITELN 'Total' 14 LJUST . ': ' 0.0 FORMAT_PRICE APP PRICE_WRITELN '=============================' PRICE_WRITELN PRICE_CLOSE_OUTPUT ! price.txt schliessen
Ein komplexeres Beispiel (nach Modell Buschor) ist im Skript
\user\script\price\zh.cfg
enthalten (inkl.
Schnitt mit Tarifzonen).
Schlussendlich muss der Preisskript (hier z.B.
\script\price\price.cfg
) einem GeoShop
Datenprodukt zugeordnet werden (hier z.B.
\user\products\dxf.pro
). Dazu muss man in der
.pro
Produktdatei folgenden zusätzlichen Eintrag
machen (fett markiert):
PRODUCT
name STRING dxf
display_name STRING GEOBAU2/DXF
models LIST
MODEL
name STRING Grunddatensatz
display_name STRING 'amtl. Vermessung'
topics LIST
STRING Fixpunkte
STRING Liegenschaften
}
}
MODEL
name STRING SIA405_mit_Erweiterungen
display_name STRING 'SIA Werkleitungen'
topics LIST
STRING SIA405_Abwasser
STRING SIA405_Wasser
STRING SIA405_Kabelkommunikation
}
}
}
params MAP
}
services MAP
Grunddatensatz STRING il2dxf
SIA405_mit_Erweiterungen STRING il2dxf
}
price_function STRING \script\price\price.cfg
}
Die vollständige Syntax für den
price_function
Eintrag lautet:
price_function STRING <script>,<layer>
Falls der Preisskript auf die Berechnung eines Schnitts von
Bestellpolygon mit den Tarifzonen bzw. einer Punktebene angewiesen
ist, muss in <layer>
der entsprechende Layer
angegeben werden, in welchem die PolygonRate
bzw.
PointRate
Objekte enthalten sind.
Nur wenn dem ausgewählten Produkt ein Preisskript zugeordnet
wurde, wird dem Benutzer das Menü |