Speichervorgang und Datenmodell des Immobilienformulars

Schritte beim Speichern einer Immobilie mit Validierung, Koordinaten- und Etikettenbehandlung, Zustand vor der Migration, Schreiben in den Geo-Speicher, Stamm- und verknüpfte Tabellen sowie öffentliche Methoden des Eigentümermodells.

Das Formular (masterdata/property.form, Recht edit) hat zwei Spalten (40/60). Das Speichern (masterdata/property.save, canSave(route, property_id); mangels Schlüssel add auch bei neuen Datensätzen edit) schreibt Stammdaten, Beschreibungen, Etiketten, Räume, Zähler und Vollmachten in einer Anfrage.

Speicherschritte

  1. Titel, Kurzbeschreibung und Beschreibung je Sprache (property_description[language_id]); die Spalte name ist der Titel der Standardsprache, sonst der ersten ausgefüllten Sprache; leer ergibt einen Fehler am Feld title-<Standard>.
  2. Koordinaten: nur ein gültiges Paar (|Breite| ≤ 90, |Länge| ≤ 180), Komma durch Punkt ersetzt, auf 7 Dezimalstellen gerundet; leer = kein Punkt.
  3. Prüfung des Inhaltsbereichs für den Client (Betreiber).
  4. Prüfung der Vollmachtszeilen (falls mandate_form = 1).
  5. Normalisierung des Datenblatts (Dlbtproperty::normalize()), Räume (normalizeRooms()) und Flächenberechnung (computeAreas()).
  6. Wohnanlage: parent_property_id darf nicht auf sich selbst zeigen (dann 0).
  7. Etiketten: das erste aktive Etikett mit Engine-Handler, sonst das erste aktive, kommt in die alte Spalte label_id.
  8. Neuer Datensatz: addProperty() (Antwort mit property_id); bestehend: editProperty(); Shop-Zuordnung (sync_stores = 1) über savePropertyStores().
  9. saveDescriptions(), Etiketten (label::setObjectLabels('property', …)), saveRooms(), saveMeters(), saveMandates() (Antwort mit mandate_ids).
  10. Zurücklesen (getProperty()); mit Koordinaten geht der Punkt in den gemeinsamen Geo-Speicher (dlbtgeo->ingest(Dlbtproperty::geoSpec(...)), Quelltyp property, eine Immobilie = ein Punkt); bei Fehler bleibt das Speichern erfolgreich mit geo_warning.
  11. Erfolg: „Success: Property saved.“; keine Weiterleitung, der passive Listener schreibt die neue Kennung ins versteckte property_id.

Fehlen die Datenblattspalten noch, schreibt das Speichern die Stammdaten und nennt in einer Warnung, was nicht gespeichert wurde; das Formular zeigt einen gelben Kasten mit Migrationsprotokoll-Zeile und Kettenblockade, mit system/update + install eine Schaltfläche „Retry migrations“ (system/update.retry).

Datenmodell

Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation.

TabelleHauptfelder
propertyname, identifier, address, owner_company_id, match_value, label_id, note, status, created_by; Adresse: operator_company_id, country_code, postcode, city, street_name, street_type, house_number, building, staircase, floor, door, lot_number; Datenblatt: property_type (erster Typ), property_types, property_uses, Flächen, latitude, longitude, details (JSON), cover_doc_id, parent_property_id
property_description(property_id, language_id): title, short_description, description
property_to_storeproperty_id, store_id

Referenzierte Fremdtabellen (nicht beschrieben): company, doc_link (object_type = property), label_link, contract (Löschschutz), der Geo-Speicher.

Eigentümermodell

admin/model/masterdata/property.php. Von anderen Modulen genutzte öffentliche Methoden: getProperty(), getProperties(), getActiveProperties() (Vertrag), getOperatedProperties() und hasOperatorColumn() (Tourismussteuer), getValidMandate(), getMandatedPropertyIds(), mandateCovers() (Vertrag), getGeocodeCandidates(), setCoordinates() (Geo-Karte), countRoomsByType() (Löschschutz des Raumtypstamms), getPropertyStores(), savePropertyStores(). Katalogmodell: getPropertyForView() (aktiv + dem aktuellen Shop zugeordnet), getDescription(), getRooms(), getPropertyForApi(), getPropertyChanges(). Die Bibliothek Dlbtproperty ist ein SQL-freies Feldregister und Rechenwerk.

Hilfsendpunkte

labelsearch (höchstens 20 aktive Etiketten), labelcreate (dlbtlabel->ensureLabel), companies (gemeinsame Firmenauswahl), companysearch (mindestens 2 Zeichen, 20 aktive Firmen; nicht nach Inhaltsbereich gefiltert — jede aktive Firma kann Eigentümer sein). Karte im Formular: Google Maps mit dem API-Schlüssel vom Typ „maps“; „From address“ geokodiert die gegliederte Adresse.

Related topics: Immobilie Karte Berechtigungen