| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- package com.tsystems.diwo.business.queries;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.tsystems.common.InwoLogger;
- import com.tsystems.common.model.db.interfaces.IInwoDBCall;
- import java.math.BigDecimal;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Types;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Date;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import oracle.jbo.JboException;
- public class VergleichsansichtMieteToJsonDbFunctions extends VergleichsansichtBaseDbFunctions {
- private static final InwoLogger LOG = InwoLogger.createInwoLogger( VergleichsansichtMieteToJsonDbFunctions.class );
- /* ============================================================
- ÖFFENTLICHE EINSTIEGE (Root: "stammakte" -> vorgaenge[])
- ============================================================ */
- public static String buildJsonAktuellerVorgang ( IInwoDBCall dbCall, Integer sakId, Integer lfdnr,
- Integer konnr ) throws SQLException, JsonProcessingException {
- Map<String, Object> stammakte = fetchStammakte( dbCall, sakId );
- if ( stammakte == null ) {
- stammakte = new LinkedHashMap<>();
- }
- Map<String, Object> stammvorgang = fetchStammvorgang( dbCall, sakId, lfdnr );
- if ( stammvorgang == null ) {
- stammvorgang = new LinkedHashMap<>();
- }
- Date eingang = fetchEingangsdatum( dbCall, sakId, lfdnr );
- // Hole bez und wognr aus t_akten für fetchRecht
- Map<String, Integer> aktenData = fetchBezWognrFromAkten( dbCall, sakId );
- if ( aktenData == null || aktenData.get( "bez" ) == null || aktenData.get( "wognr" ) == null ) {
- throw new JboException( "Fehler: Konnte BEZ/WOGNR für SAK_ID " + sakId + " nicht ermitteln" );
- }
- String recht = fetchRecht( dbCall, aktenData.get( "bez" ), aktenData.get( "wognr" ), lfdnr );
- List<Map<String, Object>> zeitraeume =
- fetchZeitraeumeUndDetails( dbCall, aktenData.get( "bez" ), aktenData.get( "wognr" ), lfdnr, eingang, recht,
- /*onlyKonnr*/konnr );
- if ( zeitraeume == null ) {
- zeitraeume = new ArrayList<>();
- }
- Map<String, Object> vorgangObj = new LinkedHashMap<>();
- vorgangObj.put( "stammvorgang", stammvorgang );
- vorgangObj.put( "zeitraeume", zeitraeume );
- List<Map<String, Object>> vorgaenge = new ArrayList<>();
- vorgaenge.add( vorgangObj );
- stammakte.put( "vorgaenge", vorgaenge );
- String result = om.writeValueAsString( Collections.singletonMap( "stammakte", stammakte ) );
- LOG.finest( "Resulting JSON: " + result );
- // Close database call at the very end after all queries are completed
- dbCall.closeQuery();
- return result;
- }
- /** Alle anderen Vorgänge (≠ lfdnr) + alle deren Zeiträume -> {"stammakte":{..., "vorgaenge":[{...}, ...]}} */
- public static String buildJsonAndereVorgaenge ( IInwoDBCall dbCall, Integer sakId,
- Integer lfdnr ) throws SQLException, JsonProcessingException {
- Map<String, Object> stammakte = fetchStammakte( dbCall, sakId );
- if ( stammakte == null ) {
- stammakte = new LinkedHashMap<>();
- }
- List<Integer> andere = fetchAndereLfdnr( dbCall, sakId, lfdnr );
- List<Map<String, Object>> vorgaenge = new ArrayList<>();
- // Hole bez und wognr aus t_akten für fetchRecht
- Map<String, Integer> aktenData = fetchBezWognrFromAkten( dbCall, sakId );
- if ( aktenData == null || aktenData.get( "bez" ) == null || aktenData.get( "wognr" ) == null ) {
- throw new JboException( "Fehler: Konnte BEZ/WOGNR für SAK_ID " + sakId + " nicht ermitteln" );
- }
- for ( Integer otherLfdnr : andere ) {
- Map<String, Object> stammvorgang = fetchStammvorgang( dbCall, sakId, otherLfdnr );
- if ( stammvorgang == null ) {
- stammvorgang = new LinkedHashMap<>();
- }
- Date eingang = fetchEingangsdatum( dbCall, sakId, otherLfdnr );
- String recht = fetchRecht( dbCall, aktenData.get( "bez" ), aktenData.get( "wognr" ), otherLfdnr );
- List<Map<String, Object>> zeitraeume =
- fetchZeitraeumeUndDetails( dbCall, aktenData.get( "bez" ), aktenData.get( "wognr" ), otherLfdnr,
- eingang, recht, /*onlyKonnr*/null );
- if ( zeitraeume == null ) {
- zeitraeume = new ArrayList<>();
- }
- Map<String, Object> vorgangObj = new LinkedHashMap<>();
- vorgangObj.put( "stammvorgang", stammvorgang );
- vorgangObj.put( "zeitraeume", zeitraeume );
- vorgaenge.add( vorgangObj );
- }
- stammakte.put( "vorgaenge", vorgaenge );
- String result = om.writeValueAsString( Collections.singletonMap( "stammakte", stammakte ) );
- LOG.finest( "Resulting JSON: " + result );
- // Close database call at the very end after all queries are completed
- dbCall.closeQuery();
- return result;
- }
- /* ===========================
- Vorgang / Listen / Felder
- =========================== */
- private static Date fetchEingangsdatum ( IInwoDBCall dbCall, Integer sakId, Integer lfdnr ) throws SQLException {
- String q = "SELECT EING_DAT FROM T_STAMMVORGAENGE WHERE SAK_ID = :sak_id AND LFDNR = :lfdnr";
- dbCall.query( q );
- dbCall.in( "sak_id", sakId, Types.INTEGER );
- dbCall.in( "lfdnr", lfdnr, Types.INTEGER );
- ResultSet rs = dbCall.executeQuery( true );
- if ( rs.next() )
- return rs.getDate( "EING_DAT" );
- return null;
- }
- /** Holt RECHT; Fallback auf SGESETZESFASSUNG (String). */
- private static String fetchRecht ( IInwoDBCall dbCall, Integer bez, Integer wognr,
- Integer lfdnr ) throws SQLException {
- String q = "SELECT RECHT " + "FROM T_ANTRAEGE WHERE WOGNR = :wognr AND BEZ = :bez AND LFDNR = :lfdnr";
- dbCall.query( q );
- dbCall.in( "wognr", wognr, Types.INTEGER );
- dbCall.in( "bez", bez, Types.INTEGER );
- dbCall.in( "lfdnr", lfdnr, Types.INTEGER );
- ResultSet rs = dbCall.executeQuery( true );
- if ( rs.next() ) {
- String recht = nullTrim( rs.getString( "RECHT" ) );
- return recht;
- }
- return null;
- }
- /* ===========================
- Zeiträume + Details
- =========================== */
- /**
- * Lädt Zeiträume für einen Vorgang.
- * - onlyKonnr != null -> nur dieser KONNR (aktueller Vorgang)
- * - onlyKonnr == null -> alle Zeiträume (andere Vorgänge)
- */
- private static List<Map<String, Object>> fetchZeitraeumeUndDetails ( IInwoDBCall dbCall, Integer bez, Integer wognr,
- Integer lfdnr, Date eingang, String recht,
- Integer onlyKonnr ) throws SQLException {
- LOG.finest( "fetchZeitraeumeUndDetails BEZ: " + bez + " - WOGNR: " + wognr + " - LFDNR: " + lfdnr +
- " - onlyKonnr: " + onlyKonnr );
- String base =
- "SELECT TO_CHAR(k.KONNR) AS zeitraum_id, " + " TO_CHAR(k.BEGINN_DAT, 'YYYY-MM-DD') AS beginn, " +
- " TO_CHAR(k.ENDE_DAT, 'YYYY-MM-DD') AS ende, " +
- " k.MIETE AS miete_ref_id, k.AUSSTATTUNG AS ausstattung_ref_id " + "FROM T_KONSTELLATIONEN k " +
- "WHERE k.AN_WOGNR = :wognr AND k.AN_BEZ = :bez AND k.AN_LFDNR = :lfdnr ";
- String filter = ( onlyKonnr != null ) ? "AND k.KONNR = :konnr " : "";
- String order = "ORDER BY k.BEGINN_DAT NULLS FIRST, k.KONNR";
- String q = base + filter + order;
- LOG.finest( "SQL Query: " + q );
- LOG.finest( "Parameters - bez: " + bez + ", wognr: " + wognr + ", lfdnr: " + lfdnr + ", konnr: " + onlyKonnr );
- dbCall.query( q );
- dbCall.in( "wognr", wognr, Types.INTEGER );
- dbCall.in( "bez", bez, Types.INTEGER );
- dbCall.in( "lfdnr", lfdnr, Types.INTEGER );
- if ( onlyKonnr != null )
- dbCall.in( "konnr", onlyKonnr, Types.INTEGER );
- List<Map<String, Object>> out = new ArrayList<>();
- ResultSet rs = dbCall.executeQuery( true );
- LOG.finest( "SQL executed, checking for results..." );
- int rowCount = 0;
- while ( rs.next() ) {
- rowCount++;
- LOG.finest( "Processing row " + rowCount );
- String zeitraumId = rs.getString( "zeitraum_id" );
- String beginn = rs.getString( "beginn" );
- String ende = rs.getString( "ende" );
- Integer mieteId = ( ( BigDecimal ) rs.getObject( "miete_ref_id" ) ).intValue();
- Integer ausstId = ( ( BigDecimal ) rs.getObject( "ausstattung_ref_id" ) ).intValue();
- Map<String, Object> zr = new LinkedHashMap<>();
- zr.put( "id", zeitraumId );
- if ( beginn != null )
- zr.put( "beginn", beginn );
- if ( ende != null )
- zr.put( "ende", ende );
- Map<String, Object> miete = fetchMiete( dbCall, mieteId, recht );
- if ( miete == null ) {
- miete = new LinkedHashMap<>();
- }
- List<Map<String, Object>> untermieter = fetchUntermieter( dbCall, mieteId, recht );
- if ( untermieter == null ) {
- untermieter = new ArrayList<>();
- }
- miete.put( "untermieter", untermieter );
- List<Map<String, Object>> mitbewohner = fetchMitbewohner( dbCall, mieteId, recht );
- if ( mitbewohner == null ) {
- mitbewohner = new ArrayList<>();
- }
- miete.put( "mitbewohner", mitbewohner );
- zr.put( "miete", miete );
- Map<String, Object> ausstattung = fetchAusstattung( dbCall, ausstId, eingang );
- if ( ausstattung == null ) {
- ausstattung = new LinkedHashMap<>();
- }
- zr.put( "ausstattung", ausstattung );
- out.add( zr );
- }
- LOG.finest( "Returning " + out.size() + " zeitraeume" );
- return out;
- }
- /* ===================== Miete inkl. Pauschalen ===================== */
- private static Map<String, Object> fetchMiete ( IInwoDBCall dbCall, Integer mieteIdOrNull,
- String recht ) throws SQLException {
- String q =
- "SELECT " + " TO_CHAR(m.ID) AS id, " +
- " m.MIETE AS miete, m.MIETE_ALT AS mieteAlt, m.SONST_ZUSCHLAG AS sonstZuschlag, " +
- " m.BEITRAG_DRITTER AS beitragDritter, " + " m.HEIZUNG AS heizung, m.HEIZUNG_P AS heizungP_raw, " +
- " m.WARMWASSER AS warmwasser, m.WARMWASSER_P AS warmwasserP_raw, " +
- " m.MOEBLIERUNG AS moeblierung, m.MOEBLIERUNG_P AS moeblierungP_raw, " +
- " m.UMIET_ZUSCHLAG AS umietZuschlag, " +
- " m.GEWERBE_ZUSCHLAG AS gewerbeZuschlag, m.GEWERBE_ZUSCHLAG_P AS gewerbeZuschlagP_raw, " +
- " m.GEWERBE_FLAECHE AS gewerbeFlaeche, " +
- " m.JHRL_FERNWARMW AS jhrlFernwarmw, m.JHRL_FERNWAERME AS jhrlFernwaerme, " +
- " m.ANT_MIET_WW AS antMietWw, m.ANT_BRUT_WW AS antBrutWw, m.JHRL_FERN_W_UND_W AS jhrlFernWUndW, " +
- " m.LSTG_AUFENTHALT_PERSON AS lstgAufenthaltPerson, " +
- " m.SONST_WOG_FAEHIG_BETRAG AS sonstWogFaehigBetrag, m.SONST_WOG_FAEHIG_TEXT AS sonstWogFaehigText, " +
- " m.SONST_ZUSCHLAG_BESCHR AS sonstZuschlagBeschr, " +
- " m.ENERGIE AS energie, m.ENERGIE_P AS energieP_raw, " +
- " m.STELLPLATZ AS stellplatz, m.STELLPLATZ_P AS stellplatzP_raw " +
- "FROM T_MIETEN m WHERE m.ID = COALESCE(:miete_id, 1)";
- dbCall.query( q );
- dbCall.in( "miete_id", mieteIdOrNull, Types.INTEGER );
- Map<String, Object> out = new LinkedHashMap<>();
- ResultSet rs = dbCall.executeQuery( true );
- if ( rs.next() ) {
- out.put( "id", "1" ); // Always set miete ID to "1" in JSON output
- putNum( out, "miete", rs, "miete" );
- putNum( out, "mieteAlt", rs, "mieteAlt" );
- putNum( out, "sonstZuschlag", rs, "sonstZuschlag" );
- putNum( out, "beitragDritter", rs, "beitragDritter" );
- putNum( out, "heizung", rs, "heizung" );
- // Pauschalen-Text nur, wenn *_P nicht NULL und Lookup Treffer:
- out.put( "heizungP",
- resolvePauschaleOrNull( dbCall, rs.getString( "heizungP_raw" ), "HEIZKOSTENPAUSCHALE", recht ) );
- putNum( out, "warmwasser", rs, "warmwasser" );
- out.put( "warmwasserP",
- resolvePauschaleOrNull( dbCall, rs.getString( "warmwasserP_raw" ), "WARMWASSERPAUSCHALE",
- recht ) );
- putNum( out, "moeblierung", rs, "moeblierung" );
- out.put( "moeblierungP",
- resolvePauschaleOrNull( dbCall, rs.getString( "moeblierungP_raw" ), "MOEBLIERUNGSPAUSCHALE",
- recht ) );
- putNum( out, "umietZuschlag", rs, "umietZuschlag" );
- putNum( out, "gewerbeZuschlag", rs, "gewerbeZuschlag" );
- out.put( "gewerbeZuschlagP",
- resolvePauschaleOrNull( dbCall, rs.getString( "gewerbeZuschlagP_raw" ), "GEWERBEPAUSCHALE",
- recht ) );
- putNum( out, "gewerbeFlaeche", rs, "gewerbeFlaeche" );
- putNum( out, "jhrlFernwarmw", rs, "jhrlFernwarmw" );
- putNum( out, "jhrlFernwaerme", rs, "jhrlFernwaerme" );
- putNum( out, "antMietWw", rs, "antMietWw" );
- putNum( out, "antBrutWw", rs, "antBrutWw" );
- putNum( out, "jhrlFernWUndW", rs, "jhrlFernWUndW" );
- putNum( out, "lstgAufenthaltPerson", rs, "lstgAufenthaltPerson" );
- putNum( out, "sonstWogFaehigBetrag", rs, "sonstWogFaehigBetrag" );
- // Ensure string fields are never null
- String sonstWogFaehigText = rs.getString( "sonstWogFaehigText" );
- out.put( "sonstWogFaehigText", sonstWogFaehigText != null ? sonstWogFaehigText : "" );
- String sonstZuschlagBeschr = rs.getString( "sonstZuschlagBeschr" );
- out.put( "sonstZuschlagBeschr", sonstZuschlagBeschr != null ? sonstZuschlagBeschr : "" );
- putNum( out, "energie", rs, "energie" );
- out.put( "energieP",
- resolvePauschaleOrNull( dbCall, rs.getString( "energieP_raw" ), "ENERGIEPAUSCHALE", recht ) );
- putNum( out, "stellplatz", rs, "stellplatz" );
- out.put( "stellplatzP",
- resolvePauschaleOrNull( dbCall, rs.getString( "stellplatzP_raw" ), "STELLPLATZPAUSCHALE",
- recht ) );
- }
- return out;
- }
- private static String resolvePauschaleOrNull ( IInwoDBCall dbCall, String rawValue, String art,
- String recht ) throws SQLException {
- if ( rawValue == null )
- return null;
- if ( recht == null || recht.isEmpty() )
- return null;
- return lookupPauschaleBeschreibung( dbCall, rawValue, art, recht ); // null, wenn kein Treffer
- }
- private static String lookupPauschaleBeschreibung ( IInwoDBCall dbCall, String kuerzel, String art,
- String recht ) throws SQLException {
- String q = "SELECT BESCHREIBUNG FROM T_PAUSCHALE WHERE KUERZEL = :kuerzel AND ART = :art AND RECHT = :recht";
- dbCall.query( q );
- dbCall.in( "kuerzel", kuerzel, Types.VARCHAR );
- dbCall.in( "art", art, Types.VARCHAR );
- dbCall.in( "recht", recht, Types.VARCHAR );
- ResultSet rs = dbCall.executeQuery( true );
- if ( rs.next() )
- return rs.getString( "BESCHREIBUNG" );
- return null;
- }
- /* ===================== Untermieter / Mitbewohner ===================== */
- private static List<Map<String, Object>> fetchUntermieter ( IInwoDBCall dbCall, Integer mieteIdOrNull,
- String recht ) throws SQLException {
- String q =
- "SELECT TO_CHAR(u.MI_ID) AS miId, u.LFDNR, u.NAME, u.VORNAME, u.FLAECHE, u.MIETE, u.HEIZUNG, " +
- " u.HEIZUNG_P AS heizungP_raw, u.WARMWASSER, u.WARMWASSER_P AS warmwasserP_raw, " +
- " u.MOEBLIERUNG, u.MOEBLIERUNG_P AS moeblierungP_raw, u.SONST " +
- "FROM T_UNTERMIETEN u WHERE u.MI_ID = COALESCE(:miete_id, 1) ORDER BY u.LFDNR";
- dbCall.query( q );
- dbCall.in( "miete_id", mieteIdOrNull, Types.INTEGER );
- List<Map<String, Object>> out = new ArrayList<>();
- ResultSet rs = dbCall.executeQuery( true );
- while ( rs.next() ) {
- Map<String, Object> row = new LinkedHashMap<>();
- row.put( "miId", rs.getString( "miId" ) );
- row.put( "lfdnr", ( ( BigDecimal ) rs.getObject( "LFDNR" ) ).intValue() );
- String name = rs.getString( "NAME" );
- row.put( "name", name != null ? name : "" );
- String vorname = rs.getString( "VORNAME" );
- row.put( "vorname", vorname != null ? vorname : "" );
- putNum( row, "flaeche", rs, "FLAECHE" );
- putNum( row, "miete", rs, "MIETE" );
- putNum( row, "heizung", rs, "HEIZUNG" );
- // Pauschalen-Text nur, wenn *_P nicht NULL und Lookup Treffer:
- row.put( "heizungP",
- resolvePauschaleOrNull( dbCall, rs.getString( "heizungP_raw" ), "HEIZKOSTENPAUSCHALE", recht ) );
- putNum( row, "warmwasser", rs, "WARMWASSER" );
- row.put( "warmwasserP",
- resolvePauschaleOrNull( dbCall, rs.getString( "warmwasserP_raw" ), "WARMWASSERPAUSCHALE",
- recht ) );
- putNum( row, "moeblierung", rs, "MOEBLIERUNG" );
- row.put( "moeblierungP",
- resolvePauschaleOrNull( dbCall, rs.getString( "moeblierungP_raw" ), "MOEBLIERUNGSPAUSCHALE",
- recht ) );
- putNum( row, "sonst", rs, "SONST" );
- out.add( row );
- }
- return out;
- }
- private static List<Map<String, Object>> fetchMitbewohner ( IInwoDBCall dbCall,
- Integer mieteIdOrNull, String recht ) throws SQLException {
- String q =
- "SELECT TO_CHAR(mb.MI_ID) AS miId, mb.LFDNR, mb.NAME, mb.VORNAME, mb.ENTGELT, mb.HEIZUNG, " +
- " mb.HEIZUNG_P AS heizungP_raw, mb.WARMWASSER, mb.WARMWASSER_P AS warmwasserP_raw, mb.SONST " +
- "FROM T_MITBEWOHNER mb WHERE mb.MI_ID = COALESCE(:miete_id, 1) ORDER BY mb.LFDNR";
- dbCall.query( q );
- dbCall.in( "miete_id", mieteIdOrNull, Types.INTEGER );
- List<Map<String, Object>> out = new ArrayList<>();
- ResultSet rs = dbCall.executeQuery( true );
- while ( rs.next() ) {
- Map<String, Object> row = new LinkedHashMap<>();
- row.put( "miId", rs.getString( "miId" ) );
- row.put( "lfdnr", ( ( BigDecimal ) rs.getObject( "LFDNR" ) ).intValue() );
- String name = rs.getString( "NAME" );
- row.put( "name", name != null ? name : "" );
- String vorname = rs.getString( "VORNAME" );
- row.put( "vorname", vorname != null ? vorname : "" );
- putNum( row, "entgelt", rs, "ENTGELT" );
- putNum( row, "heizung", rs, "HEIZUNG" );
- // Pauschalen-Text nur, wenn *_P nicht NULL und Lookup Treffer:
- row.put( "heizungP",
- resolvePauschaleOrNull( dbCall, rs.getString( "heizungP_raw" ), "HEIZKOSTENPAUSCHALE", recht ) );
- putNum( row, "warmwasser", rs, "WARMWASSER" );
- row.put( "warmwasserP",
- resolvePauschaleOrNull( dbCall, rs.getString( "warmwasserP_raw" ), "WARMWASSERPAUSCHALE", recht ) );
- putNum( row, "sonst", rs, "SONST" );
- out.add( row );
- }
- return out;
- }
- /* ===================== Ausstattung (mit S-Tabellen) ===================== */
- private static Map<String, Object> fetchAusstattung ( IInwoDBCall dbCall, Integer ausstattungId,
- Date eingangsdatum ) throws SQLException {
- java.sql.Date ed =
- ( eingangsdatum != null ) ? new java.sql.Date( eingangsdatum.getTime() ) :
- java.sql
- .Date
- .valueOf( "2099-12-31" );
- String q =
- "SELECT " + " TO_CHAR(a.ID) AS id, " + " a.FLAECHE AS flaeche, " +
- " COALESCE(heiz.BESCHREIBUNG, a.HEIZUNG) AS heizung, " +
- " COALESCE(badart.BESCHREIBUNG, a.BAD) AS bad, " + " a.SOZBAU_JN AS sozBauJn_raw, " +
- " COALESCE(mietv.BESCHREIBUNG, a.MIETVERHAELTNIS) AS mietverhaeltnis, " +
- " COALESCE(eigent.BESCHREIBUNG, a.EIGENTUM) AS eigentum, " +
- " TO_CHAR(a.FERTIG_DAT, 'YYYY-MM-DD') AS fertigDat, " +
- " a.NAME_EIG AS nameEig, a.ADRESSE_EIG AS adresseEig, a.TELEFON_EIG AS telefonEig, " +
- " a.WOFG_JN AS wofgJn_raw, a.FOERDERUNG_JN AS foerderungJn_raw " + "FROM T_AUSSTATTUNGEN a " +
- "LEFT JOIN T_SHEIZUNGSARTEN heiz " + " ON heiz.WERT = a.HEIZUNG " +
- " AND :eingang_dat >= heiz.AB_DAT " +
- " AND :eingang_dat <= NVL(heiz.BIS_DAT, DATE '9999-12-31') " + "LEFT JOIN T_SBADARTEN badart " +
- " ON badart.WERT = a.BAD " + " AND :eingang_dat >= badart.AB_DAT " +
- " AND :eingang_dat <= NVL(badart.BIS_DAT, DATE '9999-12-31') " +
- "LEFT JOIN T_SMIETVERHAELTNISSE mietv " + " ON mietv.WERT = a.MIETVERHAELTNIS " +
- " AND :eingang_dat >= mietv.AB_DAT " +
- " AND :eingang_dat <= NVL(mietv.BIS_DAT, DATE '9999-12-31') " + "LEFT JOIN T_SEIGENTUMSARTEN eigent " +
- " ON eigent.WERT = a.EIGENTUM " + " AND :eingang_dat >= eigent.AB_DAT " +
- " AND :eingang_dat <= NVL(eigent.BIS_DAT, DATE '9999-12-31') " + "WHERE a.ID = :ausstattung_id";
- dbCall.query( q );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "eingang_dat", ed, Types.DATE );
- dbCall.in( "ausstattung_id", ausstattungId, Types.INTEGER );
- Map<String, Object> out = new LinkedHashMap<>();
- ResultSet rs = dbCall.executeQuery( true );
- if ( rs.next() ) {
- out.put( "id", "1" ); // Always set ausstattung ID to "1" in JSON output
- putNum( out, "flaeche", rs, "flaeche" );
- String heizung = rs.getString( "heizung" );
- out.put( "heizung", heizung != null ? heizung : "" );
- String bad = rs.getString( "bad" );
- out.put( "bad", bad != null ? bad : "" );
- out.put( "sozBauJn", "J".equalsIgnoreCase( rs.getString( "sozBauJn_raw" ) ) );
- String mietverhaeltnis = rs.getString( "mietverhaeltnis" );
- out.put( "mietverhaeltnis", mietverhaeltnis != null ? mietverhaeltnis : "" );
- String eigentum = rs.getString( "eigentum" );
- out.put( "eigentum", eigentum != null ? eigentum : "" );
- String fertig = rs.getString( "fertigDat" );
- if ( fertig != null )
- out.put( "fertigDat", fertig );
- String nameEig = rs.getString( "nameEig" );
- out.put( "nameEig", nameEig != null ? nameEig : "" );
- String adresseEig = rs.getString( "adresseEig" );
- out.put( "adresseEig", adresseEig != null ? adresseEig : "" );
- String telefonEig = rs.getString( "telefonEig" );
- out.put( "telefonEig", telefonEig != null ? telefonEig : "" );
- out.put( "wofgJn", "J".equalsIgnoreCase( rs.getString( "wofgJn_raw" ) ) );
- out.put( "foerderungJn", "J".equalsIgnoreCase( rs.getString( "foerderungJn_raw" ) ) );
- }
- return out;
- }
- }
|