TestGefData.py

De afhandeling in functie save_gef van TestGefData.py is een van de meer ingewikkeldere onderdelen van het portaal.

Eerst wordt gecheckt of het project van een gef-file al bestaat. Als het project al in gebruik is bij een andere gebruiker wordt de gef afgekeurd met g = false. Het script wordt nog wel doorgelezen om te kijken of er nog meer fouten in zitten.

Als het project al bestaat voor de ingelogde gebruiker gebeurd er niets. Als het nog niet bestaat wordt het aangemaakt.:

# Projecten
# optie 1) project hoort altijd bij 1 gebruiker
# check of project al bestaat onder andere gebruiker
if Projecten.objects.filter(project_name = ProjectID).exists() and not Projecten.objects.filter(project_name = ProjectID, user_id_id = UserId).exists():
        messages.add_message(request, messages.ERROR, 'Project: %s al in gebruik door andere gebruiker'%(ProjectID))
        g = False
# check of project al bestaat voor huidige gebruiker
if not Projecten.objects.filter(project_name = ProjectID).exists() and g == True:
        print ("save new project with %s %s "%(ProjectID,UserID))
        project = Projecten(project_name=ProjectID, user_id_id=UserId, username=request.user.username)
        project.save()
# optie 2) gedeeld projecten: kan verschillende gebruikers hebben. geen constraint
## if Projecten.objects.filter(project_name = ProjectID, user_id_id = UserId).exists() == False and g == True: # if Projecten.objects.get(id=files_id)

Vanaf dit punt in functie save_gef van TestGefData.py wordt gekeken naar het soort gef-bestand (boring, peilbuisput of sondering) en afhankelijk daarvan behandeld.

Afhandeling boringen

# Boring: nog een keer uitwerken voor andere velden
if SoortGef == 'boring' and g == True: # boring
        print ("Boring %s bestaat al"%(gefFileNaam))
        b = Boring.objects.get(bestand_gef=gefFileNaam)
        b.bestand_gef=gefFileNaam
        b.download_gef=(hyperlink_root+gefFileNaam)
        b.bedrijf=CompanyID
        b.project_id=ProjectID
        b.datum_boring=StartDatum
        b.username=User
        b.x_rd=X
        b.y_rd=Y
        b.mv_nap=Z
        b.gef_file=gefFile
        b.geometry=PointGeom
        b.save()
        #messages.add_message(request, messages.INFO, '%s: succesvol overschreven!'%GefFile)
else:
        boring = Boring(bestand_gef=gefFileNaam, download_gef=(hyperlink_root+gefFileNaam), datum_boring=StartDatum, username=User, x_rd=X, y_rd=Y, mv_nap=Z, gef_file=g)
        boring.save()

Afhandeling sonderingen

Deze lijkt erg veel op die van boringen:

if SoortGef == 'sondering' and g == True: # sondering
        if Sondering.objects.filter(bestand_gef=gefFileNaam).exists():
                print ("Sondering %s bestaat al"%(gefFileNaam))
                s = Sondering.objects.get(bestand_gef=gefFileNaam)
                s.bestand_gef=gefFileNaam
                s.download_gef=(hyperlink_root+gefFileNaam)
                s.bedrijf=CompanyId
                s.project_id=ProjectID
                s.datum_sondering=StartDatum
                s.username=User
                s.x_rd=X
                s.y_rd=Y
                s.mv_nap=Z
                s.gef_file=gefFile
                s.geometry=PointGeom
                s.save()
                #messages.add_message(request, messages.INFO, '%s: succesvol overschreven!'%gefFile)
else: # object bestaat nog niet
        sondering = Sondering(bestand_gef=gefFileNaam, download_gef=(hyperlink_root+gefFileNaam), datum_sondering=StartDatum, username=User, x_rd=X, y_rd=Y, mv_nap=Z, gef_file=g)
        sondering.save()

Afhandeling waypoints

Waypoints worden alleen maar gebruikt voor de interactieve tabel op het portaal. Een waypoint kan zowel een boringen, peilbuisput of sondering zijn en bevat alleen algemene informatie (gedefinieerd als gef-standaard oftewel gegevens die niet specifiek zijn en altijd voorkomen ongeacht of het om een boring, peilbuisput of sondering gaat.):

# Waypoint
if Waypoint.objects.filter(name=gefFileNaam).exists() and g == True:
        print ("Waypoint %s bestaat al "%(gefFileNaam))
        w = Waypoint.objects.get(name=gefFIleNaam)
        w.name=gefFileNaam
        w.download_gef=(hyperlink_root+GefFileNaam)
        w.company=CompanyID
        w.projectid=ProjectID
        w.startdatum=StartDatum
        w.username=User
        w.soortgef=SoortGef
        w.x=X
        w.y=Y
        w.z=Z
        w.geometry=PointGeom
        w.save()
        messages.add_message(request, messages.INFO, '%s: succesvol overschreven!'%(gefFile))
elif g==True:
        waypoint = Waypoint(name=gefFileNaam, download_gef=(hyperlink_root+gefFileNaam), company='x', startdatum=StartDatum, username=User, soortgef=SoortGef, x=X, y=Y, z=Z, geometry=PointGeom)
        waypoint.save()

Afhandeling peilbuisput

Peilbuisputten zijn wat ingewikkelder dan de andere objecten. Specifieke attributen worden opgevraagd in functie “gef_peilbuisput” van TestGefData.py:

# Peilbuisput
if SoortGef == 'peilbuisput' and g == True:
        # ga naar functie gef_peilbuisput voor specifieke peilbuisput-attributen
        print ("ga hier naar gef_peilbuisput")
        BESTAND_PARENT, BORING_ID, DATUM_PLAATSING, AANTAL_PEILBUIZEN, PROJECTNUMMER = gef_peilbuisput(request,gefFile,d_GEF)
        if BESTAND_PARENT == None or BORING_ID ==None:
                print ("geen parent gevonden")
                messages.add_message(request, messages.ERROR, '%s Parent (boring) bij niet gevonden!'%(gefFile))
                g = False
                return False
        print ("terug uit gef_peilbuisput")
        # print (Peilbuisput.objects.get(bestand_gef=gefFileNaam))
        if Peilbuisput.objects.filter(bestand_gef=gefFileNaam).exists() and g==True:
                print ("Peilbuisput %s bestaat al"%(gefFileNaam))
                p = Peilbuisput.objects.get(bestand_gef=gefFileNaam)
                print (p)
                p.status = "test"
                p.boreholeident = None
                p.boring_id_id = BORING_ID
                p.peilbuisraai_id = None
                p.x_rd = X
                p.y_rd = Yz
                p.dwarspositie = None
                p.datum_plaatsing = StartDatum #DATUM_PLAATSING moet nog omgezet worden naar 'yymmdd'
                p.aanwezig = None
                p.datum_verwijdering = None
                p.bedrijf = CompanyID
                p.project_id = ProjectID
                p.type_peilbuizen = None
                p.aantal_peilbuizen = AANTAL_PEILBUIZEN
                p.bestand_peilbuisput = None
                p.bestand_parent = BESTAND_PARENT
                p.gtlp_id = None
                p.bestand_gef = gefFileNaam
                p.bestand_grondonderzoek = None
                p.gef_file = gefFile
                p.download_gef = (hyperlink_root+gefFileNaam)
                # status
                # #DateCreated =
                # #DateMutated =
                p.username = User
                p.geometry = PointGeom
                p.save()
                #messages.add_message(request, messages.INFO, '%s: succesvol overschreven!'%(gefFile))
        elif g == True:
                peilbuisput = Peilbuisput(boreholeident=None)

Functie gef_peilbuisput

Voert tests uit voor de correctheid van de peilbuisput. Haalt specifieke data op zoals het BORING_ID.:

def gef_peilbuisput(request,gefFile,d_GEF):
        #'''    haalt de standaard gegevens op uit gef-bestanden via UtlGefOpen.
        #       functie gef_peilbuisput voor specifieke peilbuisput-attributen
        #       voert verschillende checks uit en genereert desgewenst foutmeldingen.'''
        # checks werken nog niet, dus alles op 'false'
        sTEST1 = 'false' # plotable
        sTEST2 = 'false' # consistent data block
        sTEST3 = 'false' # correcte header
        sTEST4 = 'false' # beschreven als BOREHOLE-Report
        # Valideer het ingelezen bestand eerst
        print ("gaat naar IsCorrectBestandPeilbuisput")
        if not isCorrectBestandPeilbuisput(gefFile, d_GEF, sTEST1, sTEST2, sTEST3, sTEST4):
                # Bestand is niet in orde, skip
                # pass
                return None, None, None, None, None
        else:
                print ("gaat verder na IsCOrrectBestandPeilbuisput")
                # Attribuutwaarden
                # iMaxID +=1 # verhoog volgnummer ID
                # sPeilbuisputID = sFORMATSTRING % iMaxID, b.k.note: is dit nodig om zelf hier te bepalen
                # BOREHOLE_ID = sPeilbuisputID
                # BESTAND_PEILBUISPUT = sGefBestand # bestandsnaam, b.k.note: bestandsnaam weten we al.
                sBestandParent = UtlGefOpen.Get_PBP_BestandParent(d_GEF)
                BESTAND_PARENT = sBestandParent
                BORING_ID = GetBoringID(BESTAND_PARENT)
                print("BORING_ID = %s"%(BORING_ID))
                if not BORING_ID == None:
                        BORING_ID = int(BORING_ID)
                PROJECTNUMMER = UtlGefOpen.Get_ALG_ProjectNummer(d_GEF)
                DATUM_PLAATSING = UtlGefOpen.Get_PBP_DatumPlaatsing(d_GEF)
                AANTAL_PEILBUIZEN = UtlGefOpen.Get_PBP_AantalPeilbuizen(d_GEF)
                print(PROJECTNUMMER,DATUM,PLAATSING,AANTAL_PEILBUIZEN)
                # VUl de bijbehorende peilbuisgegevens
                # VulTblPb(i_oGp, i_sPadTargetTblPb, sPeilbuisputID, i_sPadTargetTblFt)
                # iCountPunten += 1
                return BESTAND_PARENT, BORING_ID, DATUM_PLAATSING, AANTAL_PEILBUIZEN, PROJECTNUMMER

        # Print ('\nTotaal aantal GEF bestanden in folder: %6i' %(len(oListGefBestanden)))
        # Print ('Aantal peilbuisput locaties toegevoegd: %6i' %(iCountPunten))
        # Print ('- met daarin aantal peilbuizen: %6i'%(iCountPb))
        # Print ('- met daarin aantal filters: %6i'%(iCountFt))
# -------------------------------------------------------------------------------
# Purpose: Haal uit fc BORING het ID dat hoort bij de opgegeven parent-
#          bestandsnaam
# -------------------------------------------------------------------------------
def GetBoringID(BESTAND_PARENT):
        # Maxmimale afstand tussen peilbuisput en parent-boring
        fMAX_AFSTAND = 10.0
        sResult = None
        iCount = 0
        print ("zoekt "+str(BESTAND_PARENT)+" in Boringen.bestand_gef")
        q = Boring.objects.all().filter(bestand_gef = BESTAND_PARENT)
        if len(q)>0:
                print ("%i boringen gevonden met %s"%(len(q),BESTAND_PARENT))
                q = q[0]
                sResult = q.id
        return sResult