I broke these a while ago and didn't realize because the compiler doesn't catch them.
1419 lines
60 KiB
Go
1419 lines
60 KiB
Go
package db
|
|
|
|
/*
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
fslayer "github.com/Gleipnir-Technology/arcgis-go/fieldseeker/layer"
|
|
"github.com/Gleipnir-Technology/bob"
|
|
"github.com/Gleipnir-Technology/bob/dialect/psql"
|
|
"github.com/Gleipnir-Technology/nidus-sync/db/models"
|
|
"github.com/aarondl/opt/omit"
|
|
"github.com/aarondl/opt/omitnull"
|
|
"github.com/gofrs/uuid/v5"
|
|
googleuuid "github.com/google/uuid"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/stephenafamo/scan"
|
|
)
|
|
|
|
func SaveOrUpdateAerialSpraySession(ctx context.Context, org *models.Organization, fs []*fslayer.AerialSpraySession) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring AerialSpraySession data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "AerialSpraySession", "fieldseeker.insert_aerialspraysession", func(row *fslayer.AerialSpraySession) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
//Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateAerialSprayLine(ctx context.Context, org *models.Organization, fs []*fslayer.AerialSprayLine) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring AerialSprayLine data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "AerialSprayLine", "fieldseeker.insert_aerialsprayline", func(row *fslayer.AerialSprayLine) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateBarrierSpray(ctx context.Context, org *models.Organization, fs []*fslayer.BarrierSpray) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring BarrierSpray data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "BarrierSpray", "fieldseeker.insert_barrierspray", func(row *fslayer.BarrierSpray) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateBarrierSprayRoute(ctx context.Context, org *models.Organization, fs []*fslayer.BarrierSprayRoute) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring BarrierSprayRoute data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "BarrierSprayRoute", "fieldseeker.insert_barriersprayroute", func(row *fslayer.BarrierSprayRoute) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateContainerRelate(ctx context.Context, org *models.Organization, fs []*fslayer.ContainerRelate) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "ContainerRelate", "fieldseeker.insert_containerrelate", func(row *fslayer.ContainerRelate) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID()),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
UUID("p_inspsampleid", row.InspsampleID),
|
|
UUID("p_mosquitoinspid", row.MosquitoinspID),
|
|
UUID("p_treatmentid", row.TreatmentID),
|
|
String("p_containertype", row.ContainerType),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateFieldScoutingLog(ctx context.Context, org *models.Organization, fs []*fslayer.FieldScoutingLog) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "FieldScoutingLog", "fieldseeker.insert_fieldscoutinglog", func(row *fslayer.FieldScoutingLog) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Int16("p_status", row.Status),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateHabitatRelate(ctx context.Context, org *models.Organization, fs []*fslayer.HabitatRelate) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "HabitatRelate", "fieldseeker.insert_habitatrelate", func(row *fslayer.HabitatRelate) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_foreign_id", row.ForeignID),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
String("p_habitattype", row.HabitatType),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateInspectionSample(ctx context.Context, org *models.Organization, fs []*fslayer.InspectionSample) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "InspectionSample", "fieldseeker.insert_inspectionsample", func(row *fslayer.InspectionSample) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_insp_id", row.InspID),
|
|
String("p_sampleid", row.SampleID),
|
|
Int16("p_processed", row.Processed),
|
|
String("p_idbytech", row.TechIdentifyingSpeciesInLab),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateInspectionSampleDetail(ctx context.Context, org *models.Organization, fs []*fslayer.InspectionSampleDetail) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "InspectionSampleDetail", "fieldseeker.insert_inspectionsampledetail", func(row *fslayer.InspectionSampleDetail) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_inspsample_id", row.InspsampleID),
|
|
String("p_fieldspecies", row.FieldSpecies),
|
|
Int16("p_flarvcount", row.FieldLarvaCount),
|
|
Int16("p_fpupcount", row.FieldPupaCount),
|
|
Int16("p_feggcount", row.FieldEggCount),
|
|
String("p_flstages", row.FieldLarvalStages),
|
|
String("p_fdomstage", row.FieldDominantStage),
|
|
String("p_fadultact", row.FieldAdultActivity),
|
|
String("p_labspecies", row.LabSpecies),
|
|
Int16("p_llarvcount", row.LabLarvaCount),
|
|
Int16("p_lpupcount", row.LabPupaCount),
|
|
Int16("p_leggcount", row.LabEggCount),
|
|
String("p_ldomstage", row.LabDominantStage),
|
|
String("p_comments", row.Comments),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int16("p_processed", row.Processed),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateLandingCount(ctx context.Context, org *models.Organization, fs []*fslayer.LandingCount) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring LandingCount data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "LandingCount", "fieldseeker.insert_landingcount", func(row *fslayer.LandingCount) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateLandingCountLocation(ctx context.Context, org *models.Organization, fs []*fslayer.LandingCountLocation) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring LandingCountLocation data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "LandingCountLocation", "fieldseeker.insert_landingcountlocation", func(row *fslayer.LandingCountLocation) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateLineLocation(ctx context.Context, org *models.Organization, fs []*fslayer.LineLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "LineLocation", "fieldseeker.insert_linelocation", func(row *fslayer.LineLocation) ([]SqlParam, error) {
|
|
gisPoint, err := lineOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
String("p_zone", row.Zone),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.UseType),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.AccessDescription),
|
|
String("p_comments", row.Comments),
|
|
String("p_symbology", row.Symbology),
|
|
String("p_externalid", row.ExternalID),
|
|
Float64("p_acres", row.Acres),
|
|
Timestamp("p_nextactiondatescheduled", row.NextScheduledAction),
|
|
Int16("p_larvinspectinterval", row.LarvalInspectionInterval),
|
|
Float64("p_length_ft", row.Length),
|
|
Float64("p_width_ft", row.Width),
|
|
String("p_zone2", row.Zone2),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_lastinspectdate", row.LastInspectionDate),
|
|
String("p_lastinspectbreeding", row.LastInspectionBreeding),
|
|
Float64("p_lastinspectavglarvae", row.LastInspectionAverageLarvae),
|
|
Float64("p_lastinspectavgpupae", row.LastInspectionAveragePupae),
|
|
String("p_lastinspectlstages", row.LastInspectionLarvalStages),
|
|
String("p_lastinspectactiontaken", row.LastInspectionAction),
|
|
String("p_lastinspectfieldspecies", row.LastInspectionFieldSpecies),
|
|
Timestamp("p_lasttreatdate", row.LastTreatmentDate),
|
|
String("p_lasttreatproduct", row.LastTreatmentProduct),
|
|
Float64("p_lasttreatqty", row.LastTreatmentQuantity),
|
|
String("p_lasttreatqtyunit", row.LastTreatmentQuantityUnit),
|
|
Float64("p_hectares", row.Hectares),
|
|
String("p_lastinspectactivity", row.LastInspectionActivity),
|
|
String("p_lasttreatactivity", row.LastTreatmentActivity),
|
|
Float64("p_length_meters", row.LengthMeters),
|
|
Float64("p_width_meters", row.WidthMeters),
|
|
String("p_lastinspectconditions", row.LastInspectionConditions),
|
|
String("p_waterorigin", row.WaterOrigin),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateLocationTracking(ctx context.Context, org *models.Organization, fs []*fslayer.LocationTracking) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "LocationTracking", "fieldseeker.insert_locationtracking", func(row *fslayer.LocationTracking) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Float64("p_accuracy", row.Accuracym),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_fieldtech", row.FieldTech),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateMosquitoInspection(ctx context.Context, org *models.Organization, fs []*fslayer.MosquitoInspection) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "MosquitoInspection", "fieldseeker.insert_mosquitoinspection", func(row *fslayer.MosquitoInspection) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Int16("p_numdips", row.Dips),
|
|
String("p_activity", row.Activity),
|
|
String("p_breeding", row.Breeding),
|
|
Int16("p_totlarvae", row.TotalLarvae),
|
|
Int16("p_totpupae", row.TotalPupae),
|
|
Int16("p_eggs", row.Eggs),
|
|
Int16("p_posdips", row.PositiveDips),
|
|
String("p_adultact", row.AdultActivity),
|
|
String("p_lstages", row.LarvalStages),
|
|
String("p_domstage", row.DominantStage),
|
|
String("p_actiontaken", row.Action),
|
|
String("p_comments", row.Comments),
|
|
Float64("p_avetemp", row.AverageTemperature),
|
|
Float64("p_windspeed", row.WindSpeed),
|
|
Float64("p_raingauge", row.RainGauge),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
String("p_winddir", row.WindDirection),
|
|
Float64("p_avglarvae", row.AverageLarvae),
|
|
Float64("p_avgpupae", row.AveragePupae),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
String("p_locationname", row.LocationName),
|
|
String("p_zone", row.Zone),
|
|
Int16("p_recordstatus", row.RecordStatus),
|
|
String("p_zone2", row.Zone2),
|
|
Int16("p_personalcontact", row.PersonalContact),
|
|
Int16("p_tirecount", row.TireCount),
|
|
Int16("p_cbcount", row.CatchBasinCount),
|
|
Int16("p_containercount", row.ContainerCount),
|
|
String("p_fieldspecies", row.FieldSpecies),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
UUID("p_linelocid", row.LinelocID),
|
|
UUID("p_pointlocid", row.PointlocID),
|
|
UUID("p_polygonlocid", row.PolygonlocID),
|
|
UUID("p_srid", row.SrID),
|
|
String("p_fieldtech", row.FieldTech),
|
|
Int16("p_larvaepresent", row.LarvaePresent),
|
|
Int16("p_pupaepresent", row.PupaePresent),
|
|
UUID("p_sdid", row.StormDrainID),
|
|
String("p_sitecond", row.Conditions),
|
|
Int16("p_positivecontainercount", row.PositiveContainerCount),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
Int16("p_visualmonitoring", row.VisualMonitoring),
|
|
String("p_vmcomments", row.VmComments),
|
|
String("p_adminaction", row.AdminAction),
|
|
UUID("p_ptaid", row.PtaID),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateOfflineMapAreas(ctx context.Context, org *models.Organization, fs []*fslayer.OfflineMapAreas) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring OfflineMapAreas data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "OfflineMapAreas", "fieldseeker.insert_offlinemapareas", func(row *fslayer.OfflineMapAreas) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateProposedTreatmentArea(ctx context.Context, org *models.Organization, fs []*fslayer.ProposedTreatmentArea) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "ProposedTreatmentArea", "fieldseeker.insert_proposedtreatmentarea", func(row *fslayer.ProposedTreatmentArea) ([]SqlParam, error) {
|
|
gisPoint, err := polygonOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
// At this point we've got data that's bad and can't actually be inserted in the database
|
|
// so let's just always make the geo null
|
|
gisPoint = NullParam{"p_geospatial"}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_method", row.Method),
|
|
String("p_comments", row.Comments),
|
|
String("p_zone", row.Zone),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
String("p_zone2", row.Zone2),
|
|
Timestamp("p_completeddate", row.CompletedDate),
|
|
String("p_completedby", row.CompletedBy),
|
|
Int16("p_completed", row.Completed),
|
|
Int16("p_issprayroute", row.IsSprayRoute),
|
|
String("p_name", row.Name),
|
|
Float64("p_acres", row.Acres),
|
|
UUID("p_globalid", row.GlobalID),
|
|
Int16("p_exported", row.Exported),
|
|
String("p_targetproduct", row.TargetProduct),
|
|
Float64("p_targetapprate", row.TargetAppRate),
|
|
Float64("p_hectares", row.Hectares),
|
|
String("p_lasttreatactivity", row.LastTreatmentActivity),
|
|
Timestamp("p_lasttreatdate", row.LastTreatmentDate),
|
|
String("p_lasttreatproduct", row.LastTreatmentProduct),
|
|
Float64("p_lasttreatqty", row.LastTreatmentQuantity),
|
|
String("p_lasttreatqtyunit", row.LastTreatmentQuantityUnit),
|
|
String("p_priority", row.Priority),
|
|
Timestamp("p_duedate", row.DueDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_targetspecies", row.TargetSpecies),
|
|
Float64("p_shape__area", row.ShapeArea),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdatePointLocation(ctx context.Context, org *models.Organization, fs []*fslayer.PointLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "PointLocation", "fieldseeker.insert_pointlocation", func(row *fslayer.PointLocation) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
String("p_zone", row.Zone),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.UseType),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.AccessDescription),
|
|
String("p_comments", row.Comments),
|
|
String("p_symbology", row.Symbology),
|
|
String("p_externalid", row.ExternalID),
|
|
Timestamp("p_nextactiondatescheduled", row.NextScheduledAction),
|
|
Int16("p_larvinspectinterval", row.LarvalInspectionInterval),
|
|
String("p_zone2", row.Zone2),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_stype", row.SourceType),
|
|
Timestamp("p_lastinspectdate", row.LastInspectionDate),
|
|
String("p_lastinspectbreeding", row.LastInspectionBreeding),
|
|
Float64("p_lastinspectavglarvae", row.LastInspectionAverageLarvae),
|
|
Float64("p_lastinspectavgpupae", row.LastInspectionAveragePupae),
|
|
String("p_lastinspectlstages", row.LastInspectionLarvalStages),
|
|
String("p_lastinspectactiontaken", row.LastInspectionAction),
|
|
String("p_lastinspectfieldspecies", row.LastInspectionFieldSpecies),
|
|
Timestamp("p_lasttreatdate", row.LastTreatmentDate),
|
|
String("p_lasttreatproduct", row.LastTreatmentProduct),
|
|
Float64("p_lasttreatqty", row.LastTreatmentQuantity),
|
|
String("p_lasttreatqtyunit", row.LastTreatmentQuantityUnit),
|
|
String("p_lastinspectactivity", row.LastInspectionActivity),
|
|
String("p_lasttreatactivity", row.LastTreatmentActivity),
|
|
String("p_lastinspectconditions", row.LastInspectionConditions),
|
|
String("p_waterorigin", row.WaterOrigin),
|
|
Float64("p_x", row.X),
|
|
Float64("p_y", row.Y),
|
|
String("p_assignedtech", row.AssignedTech),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
String("p_deactivate_reason", row.ReasonForDeactivation),
|
|
Int32("p_scalarpriority", row.ScalarPriority),
|
|
String("p_sourcestatus", row.SourceStatus),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdatePolygonLocation(ctx context.Context, org *models.Organization, fs []*fslayer.PolygonLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "PolygonLocation", "fieldseeker.insert_polygonlocation", func(row *fslayer.PolygonLocation) ([]SqlParam, error) {
|
|
gisPoint, err := polygonOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
// At this point we've got data that's bad and can't actually be inserted in the database
|
|
// so let's just always make the geo null
|
|
gisPoint = NullParam{"p_geospatial"}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
String("p_zone", row.Zone),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.UseType),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.AccessDescription),
|
|
String("p_comments", row.Comments),
|
|
String("p_symbology", row.Symbology),
|
|
String("p_externalid", row.ExternalID),
|
|
Float64("p_acres", row.Acres),
|
|
Timestamp("p_nextactiondatescheduled", row.NextScheduledAction),
|
|
Int16("p_larvinspectinterval", row.LarvalInspectionInterval),
|
|
String("p_zone2", row.Zone2),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
UUID("p_globalid", row.GlobalID),
|
|
Timestamp("p_lastinspectdate", row.LastInspectionDate),
|
|
String("p_lastinspectbreeding", row.LastInspectionBreeding),
|
|
Float64("p_lastinspectavglarvae", row.LastInspectionAverageLarvae),
|
|
Float64("p_lastinspectavgpupae", row.LastInspectionAveragePupae),
|
|
String("p_lastinspectlstages", row.LastInspectionLarvalStages),
|
|
String("p_lastinspectactiontaken", row.LastInspectionAction),
|
|
String("p_lastinspectfieldspecies", row.LastInspectionFieldSpecies),
|
|
Timestamp("p_lasttreatdate", row.LastTreatmentDate),
|
|
String("p_lasttreatproduct", row.LastTreatmentProduct),
|
|
Float64("p_lasttreatqty", row.LastTreatmentQuantity),
|
|
String("p_lasttreatqtyunit", row.LastTreatmentQuantityUnit),
|
|
Float64("p_hectares", row.Hectares),
|
|
String("p_lastinspectactivity", row.LastInspectionActivity),
|
|
String("p_lasttreatactivity", row.LastTreatmentActivity),
|
|
String("p_lastinspectconditions", row.LastInspectionConditions),
|
|
String("p_waterorigin", row.WaterOrigin),
|
|
String("p_filter", row.Filter),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
Float64("p_shape__area", row.ShapeArea),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdatePoolDetail(ctx context.Context, org *models.Organization, fs []*fslayer.PoolDetail) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "PoolDetail", "fieldseeker.insert_pooldetail", func(row *fslayer.PoolDetail) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_trapdata_id", row.TrapDataID),
|
|
UUID("p_pool_id", row.PoolID),
|
|
String("p_species", row.Species),
|
|
Int16("p_females", row.Females),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdatePool(ctx context.Context, org *models.Organization, fs []*fslayer.Pool) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "Pool", "fieldseeker.insert_pool", func(row *fslayer.Pool) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_trapdata_id", row.TrapDataID),
|
|
Timestamp("p_datesent", row.DateSent),
|
|
String("p_survtech", row.SurveyTech),
|
|
Timestamp("p_datetested", row.DateTested),
|
|
String("p_testtech", row.TestTech),
|
|
String("p_comments", row.Comments),
|
|
String("p_sampleid", row.SampleID),
|
|
Int16("p_processed", row.Processed),
|
|
UUID("p_lab_id", row.LabID),
|
|
String("p_testmethod", row.TestMethods),
|
|
String("p_diseasetested", row.DiseasesTested),
|
|
String("p_diseasepos", row.DiseasesPositive),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
String("p_lab", row.Lab),
|
|
Int16("p_poolyear", row.PoolYear),
|
|
Int16("p_gatewaysync", row.GatewaySync),
|
|
String("p_vectorsurvcollectionid", row.VectorsurvcollectionID),
|
|
String("p_vectorsurvpoolid", row.VectorsurvpoolID),
|
|
String("p_vectorsurvtrapdataid", row.VectorsurvtrapdataID),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdatePoolBuffer(ctx context.Context, org *models.Organization, fs []*fslayer.PoolBuffer) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring PoolBuffer data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "PoolBuffer", "fieldseeker.insert_poolbuffer", func(row *fslayer.PoolBuffer) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateQALarvCount(ctx context.Context, org *models.Organization, fs []*fslayer.QALarvCount) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring QALarvCount data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "QALarvCount", "fieldseeker.insert_qalarvcount", func(row *fslayer.QALarvCount) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateQAMosquitoInspection(ctx context.Context, org *models.Organization, fs []*fslayer.QAMosquitoInspection) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "QAMosquitoInspection", "fieldseeker.insert_qamosquitoinspection", func(row *fslayer.QAMosquitoInspection) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Int16("p_posdips", row.PositiveDips),
|
|
String("p_actiontaken", row.Action),
|
|
String("p_comments", row.Comments),
|
|
Float64("p_avetemp", row.AverageTemperature),
|
|
Float64("p_windspeed", row.WindSpeed),
|
|
Float64("p_raingauge", row.RainGauge),
|
|
UUID("p_globalid", row.GlobalID),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
String("p_winddir", row.WindDirection),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.Reviewedby),
|
|
Timestamp("p_revieweddate", row.Revieweddate),
|
|
String("p_locationname", row.Locationname),
|
|
String("p_zone", row.Zone),
|
|
Int16("p_recordstatus", row.Recordstatus),
|
|
String("p_zone2", row.Zone2),
|
|
Int16("p_lr", row.LandingRate),
|
|
Int16("p_negdips", row.NegativeDips),
|
|
Float64("p_totalacres", row.TotalAcres),
|
|
Float64("p_acresbreeding", row.AcresBreeding),
|
|
Int16("p_fish", row.FishPresent),
|
|
String("p_sitetype", row.SiteType),
|
|
String("p_breedingpotential", row.BreedingPotential),
|
|
Int16("p_movingwater", row.MovingWater),
|
|
Int16("p_nowaterever", row.NoEvidenceOfWaterEver),
|
|
String("p_mosquitohabitat", row.MosquitoHabitatIndicators),
|
|
Int16("p_habvalue1", row.HabitatValue),
|
|
Int16("p_habvalue1percent", row.Habvalue1percent),
|
|
Int16("p_habvalue2", row.HabitatValue2),
|
|
Int16("p_habvalue2percent", row.Habvalue2percent),
|
|
Int16("p_potential", row.Potential),
|
|
Int16("p_larvaepresent", row.LarvaePresent),
|
|
Int16("p_larvaeinsidetreatedarea", row.LarvaeInsideTreatedArea),
|
|
Int16("p_larvaeoutsidetreatedarea", row.LarvaeOutsideTreatedArea),
|
|
String("p_larvaereason", row.ReasonLarvaePresent),
|
|
String("p_aquaticorganisms", row.AquaticOrganisms),
|
|
String("p_vegetation", row.Vegetation),
|
|
String("p_sourcereduction", row.SourceReduction),
|
|
Int16("p_waterpresent", row.WaterPresent),
|
|
String("p_watermovement1", row.WaterMovement),
|
|
Int16("p_watermovement1percent", row.Watermovement1percent),
|
|
String("p_watermovement2", row.WaterMovement2),
|
|
Int16("p_watermovement2percent", row.Watermovement2percent),
|
|
String("p_soilconditions", row.SoilConditions),
|
|
String("p_waterduration", row.HowLongWaterPresent),
|
|
String("p_watersource", row.WaterSource),
|
|
String("p_waterconditions", row.WaterConditions),
|
|
Int16("p_adultactivity", row.AdultActivity),
|
|
UUID("p_linelocid", row.LinelocID),
|
|
UUID("p_pointlocid", row.PointlocID),
|
|
UUID("p_polygonlocid", row.PolygonlocID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
String("p_fieldtech", row.FieldTech),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateQAProductObservation(ctx context.Context, org *models.Organization, fs []*fslayer.QAProductObservation) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring QAProductObservation data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "QAProductObservation", "fieldseeker.insert_qaproductobservation", func(row *fslayer.QAProductObservation) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateRestrictedArea(ctx context.Context, org *models.Organization, fs []*fslayer.RestrictedArea) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring RestrictedArea data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "RestrictedArea", "fieldseeker.insert_restrictedarea", func(row *fslayer.RestrictedArea) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateRodentInspection(ctx context.Context, org *models.Organization, fs []*fslayer.RodentInspection) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring RodentInspection data")
|
|
return 0, 0, nil
|
|
/*
|
|
return doUpdatesViaFunction(ctx, org, fs, "RodentInspection", "fieldseeker.insert_rodentinspection", func(row *fslayer.RodentInspection) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateRodentLocation(ctx context.Context, org *models.Organization, fs []*fslayer.RodentLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "RodentLocation", "fieldseeker.insert_rodentlocation", func(row *fslayer.RodentLocation) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_locationname", row.LocationName),
|
|
String("p_zone", row.Zone),
|
|
String("p_zone2", row.Zone2),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.Usetype),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.Accessdesc),
|
|
String("p_comments", row.Comments),
|
|
String("p_symbology", row.Symbology),
|
|
String("p_externalid", row.ExternalID),
|
|
Timestamp("p_nextactiondatescheduled", row.Nextactiondatescheduled),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
Timestamp("p_lastinspectdate", row.LastInspectionDate),
|
|
String("p_lastinspectspecies", row.LastInspectionSpecies),
|
|
String("p_lastinspectaction", row.LastInspectionAction),
|
|
String("p_lastinspectconditions", row.LastInspectionConditions),
|
|
String("p_lastinspectrodentevidence", row.LastInspectionRodentEvidence),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
}
|
|
|
|
func SaveOrUpdateSampleCollection(ctx context.Context, org *models.Organization, fs []*fslayer.SampleCollection) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "SampleCollection", "fieldseeker.insert_samplecollection", func(row *fslayer.SampleCollection) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_loc_id", row.LocID),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
String("p_sitecond", row.Conditions),
|
|
String("p_sampleid", row.SampleID),
|
|
String("p_survtech", row.SurveillanceTechnician),
|
|
Timestamp("p_datesent", row.Sent),
|
|
Timestamp("p_datetested", row.Tested),
|
|
String("p_testtech", row.TestTechnician),
|
|
String("p_comments", row.Comments),
|
|
Int16("p_processed", row.Processed),
|
|
String("p_sampletype", row.SampleType),
|
|
String("p_samplecond", row.SampleCondition),
|
|
String("p_species", row.Species),
|
|
String("p_sex", row.Sex),
|
|
Float64("p_avetemp", row.AverageTemperature),
|
|
Float64("p_windspeed", row.WindSpeed),
|
|
String("p_winddir", row.WindDirection),
|
|
Float64("p_raingauge", row.RainGauge),
|
|
String("p_activity", row.Activity),
|
|
String("p_testmethod", row.TestMethod),
|
|
String("p_diseasetested", row.DiseaseTested),
|
|
String("p_diseasepos", row.DiseasePositive),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
String("p_locationname", row.LocationName),
|
|
String("p_zone", row.Zone),
|
|
Int16("p_recordstatus", row.RecordStatus),
|
|
String("p_zone2", row.Zone2),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
String("p_lab", row.Lab),
|
|
String("p_fieldtech", row.FieldTech),
|
|
UUID("p_flockid", row.FlockID),
|
|
Int16("p_samplecount", row.SampleCount),
|
|
UUID("p_chickenid", row.ChickenID),
|
|
Int16("p_gatewaysync", row.GatewaySync),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateSampleLocation(ctx context.Context, org *models.Organization, fs []*fslayer.SampleLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "SampleLocation", "fieldseeker.insert_samplelocation", func(row *fslayer.SampleLocation) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
String("p_zone", row.Zone),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.UseType),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.AccessDescription),
|
|
String("p_comments", row.Comments),
|
|
String("p_externalid", row.ExternalID),
|
|
Timestamp("p_nextactiondatescheduled", row.NextScheduledAction),
|
|
String("p_zone2", row.Zone2),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int16("p_gatewaysync", row.GatewaySync),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateServiceRequest(ctx context.Context, org *models.Organization, fs []*fslayer.ServiceRequest) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "ServiceRequest", "fieldseeker.insert_servicerequest", func(row *fslayer.ServiceRequest) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Timestamp("p_recdatetime", row.Received),
|
|
String("p_source", row.Source),
|
|
String("p_entrytech", row.EnteredBy),
|
|
String("p_priority", row.Priority),
|
|
String("p_supervisor", row.Supervisor),
|
|
String("p_assignedtech", row.AssignedTo),
|
|
String("p_status", row.Status),
|
|
Int16("p_clranon", row.AnonymousCaller),
|
|
String("p_clrfname", row.CallerName),
|
|
String("p_clrphone1", row.CallerPhone),
|
|
String("p_clrphone2", row.CallerAlternatePhone),
|
|
String("p_clremail", row.CallerEmail),
|
|
String("p_clrcompany", row.CallerCompany),
|
|
String("p_clraddr1", row.CallerAddress),
|
|
String("p_clraddr2", row.CallerAddress2),
|
|
String("p_clrcity", row.CallerCity),
|
|
String("p_clrstate", row.CallerState),
|
|
String("p_clrzip", row.CallerZip),
|
|
String("p_clrother", row.CallerOther),
|
|
String("p_clrcontpref", row.CallerContactPreference),
|
|
String("p_reqcompany", row.RequestCompany),
|
|
String("p_reqaddr1", row.RequestAddress),
|
|
String("p_reqaddr2", row.RequestAddress2),
|
|
String("p_reqcity", row.RequestCity),
|
|
String("p_reqstate", row.RequestState),
|
|
String("p_reqzip", row.RequestZip),
|
|
String("p_reqcrossst", row.RequestCrossStreet),
|
|
String("p_reqsubdiv", row.RequestSubdivision),
|
|
String("p_reqmapgrid", row.RequestMapGrID),
|
|
Int16("p_reqpermission", row.PermissionToEnter),
|
|
String("p_reqtarget", row.RequestTarget),
|
|
String("p_reqdescr", row.RequestDescription),
|
|
String("p_reqnotesfortech", row.NotesForFieldTechnician),
|
|
String("p_reqnotesforcust", row.NotesForCustomer),
|
|
String("p_reqfldnotes", row.RequestFieldNotes),
|
|
String("p_reqprogramactions", row.RequestProgramActions),
|
|
Timestamp("p_datetimeclosed", row.Closed),
|
|
String("p_techclosed", row.ClosedBy),
|
|
Int32("p_sr_number", row.Sr),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
Int16("p_accepted", row.Accepted),
|
|
Timestamp("p_accepteddate", row.AcceptedDate),
|
|
String("p_rejectedby", row.RejectedBy),
|
|
Timestamp("p_rejecteddate", row.RejectedDate),
|
|
String("p_rejectedreason", row.RejectedReason),
|
|
Timestamp("p_duedate", row.DueDate),
|
|
String("p_acceptedby", row.AcceptedBy),
|
|
String("p_comments", row.Comments),
|
|
Timestamp("p_estcompletedate", row.EstimatedCompletionDate),
|
|
String("p_nextaction", row.NextAction),
|
|
Int16("p_recordstatus", row.RecordStatus),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_firstresponsedate", row.FirstResponseDate),
|
|
Int16("p_responsedaycount", row.ResponseDayCount),
|
|
String("p_allowed", row.VerifyCorrectLocation),
|
|
String("p_xvalue", row.Xvalue),
|
|
String("p_yvalue", row.Yvalue),
|
|
String("p_validx", row.ValidX),
|
|
String("p_validy", row.ValidY),
|
|
String("p_externalid", row.ExternalID),
|
|
String("p_externalerror", row.ExternalError),
|
|
UUID("p_pointlocid", row.PointlocID),
|
|
Int16("p_notified", row.Notified),
|
|
Timestamp("p_notifieddate", row.NotifiedDate),
|
|
Int16("p_scheduled", row.Scheduled),
|
|
Timestamp("p_scheduleddate", row.ScheduledDate),
|
|
Int32("p_dog", row.Dog),
|
|
String("p_schedule_period", row.SchedulePeriod),
|
|
String("p_schedule_notes", row.ScheduleNotes),
|
|
Int32("p_spanish", row.PreferSpeakingSpanish),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_issuesreported", row.IssuesReported),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
String("p_notificationtimestamp", row.NotificationTimestamp),
|
|
String("p_zone", row.Zone),
|
|
String("p_zone2", row.Zone2),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateSpeciesAbundance(ctx context.Context, org *models.Organization, fs []*fslayer.SpeciesAbundance) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "SpeciesAbundance", "fieldseeker.insert_speciesabundance", func(row *fslayer.SpeciesAbundance) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_trapdata_id", row.TrapDataID),
|
|
String("p_species", row.Species),
|
|
Int16("p_males", row.Males),
|
|
Int16("p_unknown", row.Unknown),
|
|
Int16("p_bloodedfem", row.BloodedFemales),
|
|
Int16("p_gravidfem", row.GravidFemales),
|
|
Int16("p_larvae", row.Larvae),
|
|
Int16("p_poolstogen", row.PoolsToGenerate),
|
|
Int16("p_processed", row.Processed),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int16("p_pupae", row.Pupae),
|
|
Int16("p_eggs", row.Eggs),
|
|
Int32("p_females", row.Females),
|
|
Int32("p_total", row.TotalAdults),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
Int32("p_yearweek", row.YearWeek),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateStormDrain(ctx context.Context, org *models.Organization, fs []*fslayer.StormDrain) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "StormDrain", "fieldseeker.insert_stormdrain", func(row *fslayer.StormDrain) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
Timestamp("p_nexttreatmentdate", row.NextTreatmentDate),
|
|
Timestamp("p_lasttreatdate", row.LastTreatDate),
|
|
String("p_lastaction", row.LastAction),
|
|
String("p_symbology", row.Symbology),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
String("p_laststatus", row.LastStatus),
|
|
String("p_zone", row.Zone),
|
|
String("p_zone2", row.Zone2),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_type", row.Type),
|
|
String("p_jurisdiction", row.Jurisdiction),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateTracklog(ctx context.Context, org *models.Organization, fs []*fslayer.Tracklog) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring RodentInspection data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "Tracklog", "fieldseeker.insert_tracklog", func(row *fslayer.Tracklog) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateTrapLocation(ctx context.Context, org *models.Organization, fs []*fslayer.TrapLocation) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "TrapLocation", "fieldseeker.insert_traplocation", func(row *fslayer.TrapLocation) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
String("p_zone", row.Zone),
|
|
String("p_habitat", row.Habitat),
|
|
String("p_priority", row.Priority),
|
|
String("p_usetype", row.UseType),
|
|
Int16("p_active", row.Active),
|
|
String("p_description", row.Description),
|
|
String("p_accessdesc", row.AccessDescription),
|
|
String("p_comments", row.Comments),
|
|
String("p_externalid", row.ExternalID),
|
|
Timestamp("p_nextactiondatescheduled", row.NextScheduledAction),
|
|
String("p_zone2", row.Zone2),
|
|
Int32("p_locationnumber", row.Locationnumber),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int16("p_gatewaysync", row.GatewaySync),
|
|
Int32("p_route", row.Route),
|
|
Int32("p_set_dow", row.SetDayOfWeek),
|
|
Int32("p_route_order", row.RouteOrder),
|
|
String("p_vectorsurvsiteid", row.VectorsurvsiteID),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateTrapData(ctx context.Context, org *models.Organization, fs []*fslayer.TrapData) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "TrapData", "fieldseeker.insert_trapdata", func(row *fslayer.TrapData) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_traptype", row.TrapType),
|
|
String("p_trapactivitytype", row.TrapActivityType),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
String("p_comments", row.Comments),
|
|
String("p_idbytech", row.TechIdentifyingSpeciesInLab),
|
|
String("p_sortbytech", row.TechSortingTrapResultsInLab),
|
|
Int16("p_processed", row.Processed),
|
|
String("p_sitecond", row.SiteConditions),
|
|
String("p_locationname", row.LocationName),
|
|
Int16("p_recordstatus", row.RecordStatus),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
String("p_trapcondition", row.TrapCondition),
|
|
Int16("p_trapnights", row.TrapNights),
|
|
String("p_zone", row.Zone),
|
|
String("p_zone2", row.Zone2),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
UUID("p_srid", row.SrID),
|
|
String("p_fieldtech", row.FieldTech),
|
|
Int16("p_gatewaysync", row.GatewaySync),
|
|
UUID("p_loc_id", row.LocID),
|
|
Float64("p_voltage", row.Voltage),
|
|
String("p_winddir", row.Winddir),
|
|
Float64("p_windspeed", row.Windspeed),
|
|
Float64("p_avetemp", row.Avetemp),
|
|
Float64("p_raingauge", row.Raingauge),
|
|
Int16("p_lr", row.LandingRate),
|
|
Int32("p_field", row.Field),
|
|
String("p_vectorsurvtrapdataid", row.VectorsurvtrapdataID),
|
|
String("p_vectorsurvtraplocationid", row.VectorsurvtraplocationID),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_lure", row.Lure),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateTimeCard(ctx context.Context, org *models.Organization, fs []*fslayer.TimeCard) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "TimeCard", "fieldseeker.insert_timecard", func(row *fslayer.TimeCard) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_activity", row.Activity),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
String("p_comments", row.Comments),
|
|
String("p_externalid", row.ExternalID),
|
|
String("p_equiptype", row.EquipmentType),
|
|
String("p_locationname", row.LocationName),
|
|
String("p_zone", row.Zone),
|
|
String("p_zone2", row.Zone2),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
UUID("p_linelocid", row.LinelocID),
|
|
UUID("p_pointlocid", row.PointlocID),
|
|
UUID("p_polygonlocid", row.PolygonlocID),
|
|
UUID("p_lclocid", row.LclocID),
|
|
UUID("p_samplelocid", row.SamplelocID),
|
|
UUID("p_srid", row.SrID),
|
|
UUID("p_traplocid", row.TraplocID),
|
|
String("p_fieldtech", row.FieldTech),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
UUID("p_rodentlocid", row.RodentlocID),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateTreatment(ctx context.Context, org *models.Organization, fs []*fslayer.Treatment) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "Treatment", "fieldseeker.insert_treatment", func(row *fslayer.Treatment) ([]SqlParam, error) {
|
|
gisPoint, err := pointOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_activity", row.Activity),
|
|
Float64("p_treatarea", row.AreaTreated),
|
|
String("p_areaunit", row.AreaUnit),
|
|
String("p_product", row.Product),
|
|
Float64("p_qty", row.Quantity),
|
|
String("p_qtyunit", row.QuantityUnit),
|
|
String("p_method", row.Method),
|
|
String("p_equiptype", row.EquipmentType),
|
|
String("p_comments", row.Comments),
|
|
Float64("p_avetemp", row.AverageTemperature),
|
|
Float64("p_windspeed", row.WindSpeed),
|
|
String("p_winddir", row.WindDirection),
|
|
Float64("p_raingauge", row.RainGauge),
|
|
Timestamp("p_startdatetime", row.Start),
|
|
Timestamp("p_enddatetime", row.Finish),
|
|
UUID("p_insp_id", row.InspID),
|
|
Int16("p_reviewed", row.Reviewed),
|
|
String("p_reviewedby", row.ReviewedBy),
|
|
Timestamp("p_revieweddate", row.ReviewedDate),
|
|
String("p_locationname", row.LocationName),
|
|
String("p_zone", row.Zone),
|
|
Int16("p_warningoverride", row.WarningOverride),
|
|
Int16("p_recordstatus", row.RecordStatus),
|
|
String("p_zone2", row.Zone2),
|
|
Float64("p_treatacres", row.TreatedAcres),
|
|
Int16("p_tirecount", row.TireCount),
|
|
Int16("p_cbcount", row.CatchBasinCount),
|
|
Int16("p_containercount", row.ContainerCount),
|
|
UUID("p_globalid", row.GlobalID),
|
|
Float64("p_treatmentlength", row.TreatmentLength),
|
|
Float64("p_treatmenthours", row.TreatmentHours),
|
|
String("p_treatmentlengthunits", row.TreatmentLengthUnits),
|
|
UUID("p_linelocid", row.LinelocID),
|
|
UUID("p_pointlocid", row.PointlocID),
|
|
UUID("p_polygonlocid", row.PolygonlocID),
|
|
UUID("p_srid", row.SrID),
|
|
UUID("p_sdid", row.SdID),
|
|
UUID("p_barrierrouteid", row.BarrierrouteID),
|
|
UUID("p_ulvrouteid", row.UlvrouteID),
|
|
String("p_fieldtech", row.FieldTech),
|
|
UUID("p_ptaid", row.PtaID),
|
|
Float64("p_flowrate", row.Flowrate),
|
|
String("p_habitat", row.Habitat),
|
|
Float64("p_treathectares", row.TreatHectares),
|
|
String("p_invloc", row.InventoryLocation),
|
|
String("p_temp_sitecond", row.TempConditions),
|
|
String("p_sitecond", row.Conditions),
|
|
Float64("p_totalcostprodcut", row.TotalCostProduct),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
String("p_targetspecies", row.TargetSpecies),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateTreatmentArea(ctx context.Context, org *models.Organization, fs []*fslayer.TreatmentArea) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "TreatmentArea", "fieldseeker.insert_treatmentarea", func(row *fslayer.TreatmentArea) ([]SqlParam, error) {
|
|
gisPoint, err := polygonOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
gisPoint = NullParam{"p_geospatial"}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
UUID("p_treat_id", row.TreatID),
|
|
UUID("p_session_id", row.SessionID),
|
|
Timestamp("p_treatdate", row.TreatmentDate),
|
|
String("p_comments", row.Comments),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int16("p_notified", row.Notified),
|
|
String("p_type", row.Type),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
Float64("p_shape__area", row.ShapeArea),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateULVSprayRoute(ctx context.Context, org *models.Organization, fs []*fslayer.ULVSprayRoute) (inserts uint, updates uint, err error) {
|
|
log.Warn().Msg("Ignoring RodentInspection data")
|
|
return 0, 0, nil
|
|
return doUpdatesViaFunction(ctx, org, fs, "ULVSprayRoute", "fieldseeker.insert_ulvsprayroute", func(row *fslayer.ULVSprayRoute) ([]SqlParam, error) {
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
}, nil
|
|
})
|
|
}
|
|
func SaveOrUpdateZones(ctx context.Context, org *models.Organization, fs []*fslayer.Zones) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "Zones", "fieldseeker.insert_zones", func(row *fslayer.Zones) ([]SqlParam, error) {
|
|
gisPoint, err := polygonOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
// At this point we've got data that's bad and can't actually be inserted in the database
|
|
// so let's just always make the geo null
|
|
gisPoint = NullParam{"p_geospatial"}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Int32("p_active", row.Active),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
Float64("p_shape__area", row.ShapeArea),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
func SaveOrUpdateZones2(ctx context.Context, org *models.Organization, fs []*fslayer.Zones2) (inserts uint, updates uint, err error) {
|
|
return doUpdatesViaFunction(ctx, org, fs, "Zones2", "fieldseeker.insert_zones2", func(row *fslayer.Zones2) ([]SqlParam, error) {
|
|
gisPoint, err := polygonOrNull(row.Geometry)
|
|
if err != nil {
|
|
return []SqlParam{}, err
|
|
}
|
|
// At this point we've got data that's bad and can't actually be inserted in the database
|
|
// so let's just always make the geo null
|
|
gisPoint = NullParam{"p_geospatial"}
|
|
return []SqlParam{
|
|
Uint("p_objectid", row.ObjectID),
|
|
Int32("p_organization_id", org.ID),
|
|
String("p_name", row.Name),
|
|
UUID("p_globalid", row.GlobalID),
|
|
String("p_created_user", row.CreatedUser),
|
|
Timestamp("p_created_date", row.CreatedDate),
|
|
String("p_last_edited_user", row.LastEditedUser),
|
|
Timestamp("p_last_edited_date", row.LastEditedDate),
|
|
Timestamp("p_creationdate", row.CreationDate),
|
|
String("p_creator", row.Creator),
|
|
Timestamp("p_editdate", row.EditDate),
|
|
String("p_editor", row.Editor),
|
|
Float64("p_shape__area", row.ShapeArea),
|
|
Float64("p_shape__length", row.ShapeLength),
|
|
JsonB("p_geometry", row.Geometry),
|
|
gisPoint,
|
|
}, nil
|
|
})
|
|
return 0, 0, nil
|
|
}
|
|
|
|
type InsertResultRow struct {
|
|
Inserted bool `db:"row_inserted"`
|
|
Version int `db:"version_num"`
|
|
}
|
|
|
|
type rowConverter[T any] func(*T) ([]SqlParam, error)
|
|
|
|
func doUpdatesViaFunction[T any](ctx context.Context, org *models.Organization, fs []*T, table string, procedure string, converter rowConverter[T]) (inserts uint, updates uint, err error) {
|
|
//log.Info().Int("rows", len(fs)).Msg("Processing RodentLocation")
|
|
for _, row := range fs {
|
|
params, err := converter(row)
|
|
if err != nil {
|
|
return inserts, updates, fmt.Errorf("Failed to convert row '%s': %w", row, err)
|
|
}
|
|
q := queryStoredProcedure(procedure, params...)
|
|
query := psql.RawQuery(q)
|
|
result, err := bob.One[InsertResultRow](ctx, PGInstance.BobDB, query, scan.StructMapper[InsertResultRow]())
|
|
if err != nil {
|
|
log.Error().Str("query", q).Msg("Query failed")
|
|
return inserts, updates, fmt.Errorf("Failed to execute %s: %w", procedure, err)
|
|
}
|
|
if result.Inserted {
|
|
if result.Version == 1 {
|
|
inserts += 1
|
|
} else {
|
|
updates += 1
|
|
}
|
|
}
|
|
}
|
|
return inserts, updates, err
|
|
|
|
}
|
|
func toUUID(u googleuuid.UUID) omitnull.Val[uuid.UUID] {
|
|
bytes := u[:]
|
|
converted, err := uuid.FromBytes(bytes)
|
|
if err != nil {
|
|
log.Warn().Str("uuid", u.String()).Msg("Failed to convert uuid")
|
|
return omitnull.FromPtr[uuid.UUID](nil)
|
|
}
|
|
return omitnull.From(converted)
|
|
}
|
|
func toObjectID(o uint) omit.Val[int64] {
|
|
return omit.From[int64](int64(o))
|
|
}
|
|
*/
|