def test_indset_flere_observationer(firedb: FireDb, sag: Sag, punkt: Punkt): obstype = firedb.session.query(ObservationsType).first() sagsevent = Sagsevent(sag=sag, id=uuid(), eventtype=EventType.OBSERVATION_INDSAT) sagseventtekst = "Ilægning af flere observationer" sagseventinfo = SagseventInfo(beskrivelse=sagseventtekst) sagsevent.sagseventinfos.append(sagseventinfo) obs1 = Observation( antal=0, observationstype=obstype, observationstidspunkt=dt.datetime.utcnow(), opstillingspunkt=punkt, value1=0, value2=0, value3=0, value4=0, value5=0, value6=0, value7=0, value8=0, ) obs2 = Observation( antal=0, observationstype=obstype, observationstidspunkt=dt.datetime.utcnow(), opstillingspunkt=punkt, value1=0, value2=0, value3=0, value4=0, value5=0, value6=0, value7=0, value8=0, ) firedb.indset_sagsevent( Sagsevent( sag=sag, eventtype=EventType.OBSERVATION_INDSAT, sagseventinfos=[ SagseventInfo(beskrivelse="Testindsættelse af flere observationer") ], observationer=[obs1, obs2], ) )
def observationer(firedb, sagsevent, observationstype, punkt): sagsevent.eventtype = EventType.OBSERVATION_INDSAT o0 = Observation( sagsevent=sagsevent, observationstidspunkt=func.current_timestamp(), observationstype=observationstype, opstillingspunkt=punkt, ) o1 = Observation( sagsevent=sagsevent, observationstidspunkt=func.current_timestamp(), observationstype=observationstype, opstillingspunkt=punkt, ) firedb.session.add(o0) firedb.session.add(o1) return [o0, o1]
def indset_observation(self, sagsevent: Sagsevent, observation: Observation): if not self._is_new_object(observation): raise Exception( f"Cannot re-add already persistent observation: {observation}" ) self._check_and_prepare_sagsevent(sagsevent, EventType.OBSERVATION_INDSAT) observation.sagsevent = sagsevent self.session.add(observation) self.session.commit()
def observation(firedb, sagsevent, observationstype, punkt): sagsevent.eventtype = EventType.OBSERVATION_INDSAT o0 = Observation( sagsevent=sagsevent, observationstidspunkt=func.sysdate(), observationstype=observationstype, opstillingspunkt=punkt, antal=1, ) firedb.session.add(o0) return o0
def test_indset_observation(firedb: FireDb, sag: Sag, punkt: Punkt): obstype = firedb.session.query(ObservationType).first() observation = Observation( antal=0, observationstype=obstype, observationstidspunkt=dt.datetime.utcnow(), opstillingspunkt=punkt, value1=0, value2=0, value3=0, value4=0, value5=0, value6=0, value7=0, value8=0, ) firedb.indset_observation(Sagsevent(sag=sag), observation)
def test_indset_beregning( firedb: FireDb, sag: Sag, sagsevent: Sagsevent, punkt: Punkt, srid: Srid, observationstype: ObservationsType, ): o0 = Observation( sagsevent=sagsevent, observationstidspunkt=func.current_timestamp(), observationstype=observationstype, opstillingspunkt=punkt, ) firedb.indset_sagsevent( Sagsevent( sag=sag, sagseventinfos=[ SagseventInfo(beskrivelse="Testindsættelse af observation") ], eventtype=EventType.OBSERVATION_INDSAT, observationer=[o0], )) beregning = Beregning() beregning.observationer.append(o0) koordinat = Koordinat(srid=srid, punkt=punkt, x=0, y=0, z=0, sx=0, sy=0, sz=0) beregning.koordinater.append(koordinat) firedb.indset_sagsevent( Sagsevent( sag=sag, eventtype=EventType.KOORDINAT_BEREGNET, sagseventinfos=[SagseventInfo(beskrivelse="Testberegning")], beregninger=[beregning], koordinater=beregning.koordinater, )) assert koordinat.objektid is not None
def ilæg_observationer(projektnavn: str, sagsbehandler: str, **kwargs) -> None: """Registrer nye observationer i databasen""" sag = find_sag(projektnavn) sagsgang = find_sagsgang(projektnavn) fire.cli.print(f"Sags/projekt-navn: {projektnavn} ({sag.id})") fire.cli.print(f"Sagsbehandler: {sagsbehandler}") obstype_trig = fire.cli.firedb.hent_observationstype( "trigonometrisk_koteforskel") obstype_geom = fire.cli.firedb.hent_observationstype( "geometrisk_koteforskel") til_registrering = [] observationer = find_faneblad(projektnavn, "Observationer", ARKDEF_OBSERVATIONER) alle_kilder = ", ".join(sorted(list(set(observationer.Kilde)))) alle_uuider = observationer.uuid.astype(str) # Generer sagsevent sagsevent = Sagsevent(sag=sag, id=uuid(), eventtype=EventType.OBSERVATION_INDSAT) sagseventtekst = f"Ilægning af observationer fra {alle_kilder}" sagseventinfo = SagseventInfo(beskrivelse=sagseventtekst) sagsevent.sagseventinfos.append(sagseventinfo) # Generer dokumentation til fanebladet "Sagsgang" sagsgangslinje = { "Dato": pd.Timestamp.now(), "Hvem": sagsbehandler, "Hændelse": "observationsilægning", "Tekst": sagseventtekst, "uuid": sagsevent.id, } sagsgang = sagsgang.append(sagsgangslinje, ignore_index=True) for i, obs in enumerate(observationer.itertuples(index=False)): # Ignorer allerede registrerede observationer if str(obs.uuid) not in ["", "None", "nan"]: continue # Vi skal bruge fra- og til-punkterne for at kunne oprette et # objekt af typen Observation try: punktnavn = obs.Fra punkt_fra = fire.cli.firedb.hent_punkt(punktnavn) punktnavn = obs.Til punkt_til = fire.cli.firedb.hent_punkt(punktnavn) except NoResultFound: fire.cli.print(f"Ukendt punkt: '{punktnavn}'", fg="red", bg="white") sys.exit(1) # For nivellementsobservationer er gruppeidentifikatoren identisk # med journalsidenummeret side = obs.Journal.split(":")[0] if side.isnumeric(): gruppe = int(side) else: gruppe = None if obs.Type.upper() == "MTL": observation = Observation( antal=1, observationstype=obstype_trig, observationstidspunkt=obs.Hvornår, opstillingspunkt=punkt_fra, sigtepunkt=punkt_til, gruppe=gruppe, id=uuid(), value1=obs.ΔH, value2=obs.L, value3=obs.Opst, value4=obs.σ, value5=obs.δ, ) observation.sagsevent = sagsevent elif obs.Type.upper() == "MGL": observation = Observation( antal=1, observationstype=obstype_geom, observationstidspunkt=obs.Hvornår, opstillingspunkt=punkt_fra, sigtepunkt=punkt_til, gruppe=gruppe, id=uuid(), value1=obs.ΔH, value2=obs.L, value3=obs.Opst, value4= 0.0, # Refraktion, eta_1, er defineret som non-null, så vi sætter den til 0 istf. None value5=obs.σ, value6=obs.δ, value7= 0, # 1,2,3 henviser til 1.,2.,3. præcisionsnivellement. 0 til "ingen af dem" ) else: fire.cli.print(f"Ukendt observationstype: '{obs.Type}'", fg="red", bg="white") sys.exit(1) alle_uuider[i] = observation.id til_registrering.append(observation) # Gør klar til at persistere observationer["uuid"] = alle_uuider fire.cli.print(sagseventtekst, fg="yellow", bold=True) fire.cli.print(str(observationer[["Journal", "Fra", "Til", "uuid"]])) # Persister observationerne til databasen fire.cli.print(f"Skriver {len(til_registrering)} observationer") sagsevent.observationer = til_registrering fire.cli.firedb.indset_sagsevent(sagsevent, commit=False) try: fire.cli.firedb.session.flush() except Exception as ex: # rul tilbage hvis databasen smider en exception fire.cli.firedb.session.rollback() fire.cli.print( f"Der opstod en fejl - observationer for '{projektnavn}' IKKE indlæst!" ) fire.cli.print(f"Mulig årsag: {ex}") else: spørgsmål = click.style("Du indsætter nu ", fg="white", bg="red") spørgsmål += click.style(f"{len(til_registrering)} observationer ", fg="white", bg="red", bold=True) spørgsmål += click.style(f"i ", fg="white", bg="red") spørgsmål += click.style(f"{fire.cli.firedb.db}", fg="white", bg="red", bold=True) spørgsmål += click.style("-databasen - er du sikker?", fg="white", bg="red") if bekræft(spørgsmål): fire.cli.firedb.session.commit() # Skriv resultater til resultatregneark resultater = {"Sagsgang": sagsgang, "Observationer": observationer} skriv_ark(projektnavn, resultater) fire.cli.print( f"Observationer registreret. Kopiér nu faneblade fra '{projektnavn}-resultat.xlsx' til '{projektnavn}.xlsx'" ) else: fire.cli.firedb.session.rollback() fire.cli.print(f"Observationer for '{projektnavn}' IKKE indlæst!")