diff pkg/imports/wg.go @ 1837:00d63eb9306a

Waterway gauges import: Finalized with re-inserting the reference water levels.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 16 Jan 2019 23:54:26 +0100
parents 4dcdd8891770
children 62b5f6e48e82
line wrap: on
line diff
--- a/pkg/imports/wg.go	Wed Jan 16 22:39:24 2019 +0100
+++ b/pkg/imports/wg.go	Wed Jan 16 23:54:26 2019 +0100
@@ -121,6 +121,17 @@
   date_info = $14,
   source_organization = $15
 `
+	insertReferenceWaterLevelsSQL = `
+INSERT INTO waterway.gauges_reference_water_levels (
+  gauge_id,
+  reference_water_level,
+  value
+) VALUES (
+  ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int),
+  $6,
+  $7
+)
+`
 )
 
 func (wg *WaterwayGauge) Do(
@@ -130,6 +141,8 @@
 	feedback Feedback,
 ) (interface{}, error) {
 
+	start := time.Now()
+
 	tx, err := conn.BeginTx(ctx, nil)
 	if err != nil {
 		return nil, err
@@ -274,6 +287,13 @@
 	}
 	defer insertStmt.Close()
 
+	insertWaterLevelStmt, err := tx.PrepareContext(
+		ctx, insertReferenceWaterLevelsSQL)
+	if err != nil {
+		return nil, err
+	}
+	defer insertWaterLevelStmt.Close()
+
 	// insert/update the gauges
 	for i := range news {
 		ic := &news[i]
@@ -374,9 +394,39 @@
 			return nil, err
 		}
 
-		// TODO: Reference water levels.
+		for _, wl := range []struct {
+			level **erdms.RisreflevelcodeType
+			value **erdms.RisreflevelvalueType
+		}{
+			{&dr.Reflevel1code, &dr.Reflevel1value},
+			{&dr.Reflevel2code, &dr.Reflevel2value},
+			{&dr.Reflevel3code, &dr.Reflevel3value},
+		} {
+			if *wl.level == nil || *wl.value == nil {
+				continue
+			}
+			if _, err := insertWaterLevelStmt.ExecContext(
+				ctx,
+				ic.code.CountryCode,
+				ic.code.LoCode,
+				ic.code.FairwaySection,
+				ic.code.Orc,
+				ic.code.Hectometre,
+				string(**wl.level),
+				int64(**wl.value),
+			); err != nil {
+				return nil, err
+			}
+		}
 	}
 
-	// TODO: Implement me!
-	return nil, errors.New("Not implemented, yet!")
+	if err = tx.Commit(); err == nil {
+		feedback.Info("Refreshing gauges successfully took %s.",
+			time.Since(start))
+	} else {
+		feedback.Error("Refreshing gauges failed after %s.",
+			time.Since(start))
+	}
+
+	return nil, err
 }