Files
thetool/application/ADBWohneinheit/ADBWohneinheit.php
T
Frank Schubert 9f051b4cf3 OAID / Rimo Workorder update:
- OAIDs are now auto assigned to preorders/wohneinheiten on save
- OAIDs can be exported to rimo via Preorder Admin functions
- Preorder admin function createWorkorder automatically creates, exports and assigns OAIDs
2023-08-09 09:02:44 +02:00

217 lines
5.4 KiB
PHP

<?php
class ADBWohneinheit extends mfBaseModel {
private $hausnummer;
private $rimo_workorder;
protected function init() {
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$this->table = "Wohneinheit";
}
protected function afterSave() {
if(!$this->id) return true;
if(!$this->hausnummer_id) return true;
if(!defined("ADBWohneinheit_onSave_noAutoUnitCount") || !ADBWohneinheit_onSave_noAutoUnitCount) {
$unit_count = ADBWohneinheitModel::count(['hausnummer_id' => $this->hausnummer_id]);
$hausnummer = $this->getProperty("hausnummer");
if($hausnummer->id) {
$hausnummer->unit_count = $unit_count;
$hausnummer->save();
}
if($hausnummer->netzgebiet_id) {
$netzgebiet = new ADBNetzgebiet($hausnummer->netzgebiet_id);
if($netzgebiet->id) {
$netzgebiet->unit_count = ADBWohneinheitModel::count(['netzgebiet_id' => $hausnummer->netzgebiet_id]);
$netzgebiet->save();
}
}
}
}
public static function parseHausnummerZusatz($text) {
$data = [];
$data['block'] = "";
$data['stock'] = "";
$data['stiege'] = "";
$data['tuer'] = "";
$data['zusatz'] = "";
$text = trim($text);
if(!$text) return $data;
$text = " ".$text;
$m = [];
if(preg_match('/(?:t(?:ü|ue)r|topp|door?)\s+(\d\d?|\w\w?)/i', $text, $m)) {
$data['tuer'] = $m[1];
$text = str_replace($m[0], "", $text);
}
if(preg_match('/(\d+)\.\s+(?:stock|geschoss|etage|level|floor)/i', $text, $m)) {
$data['stock'] = $m[1];
$text = str_replace($m[0], "", $text);
}
if(preg_match('/(?: stock(?:werk)?| geschoss| etage| level | floor)\s+(\d\d?|parterre|erdgescho(?:ss|ß))\.?/i', $text, $m)) {
$data['stock'] = $m[1];
$text = str_replace($m[0], "", $text);
}
if(preg_match('/(parterre|erdgescho(?:ss|ß))/i', $text, $m)) {
$data['stock'] = $m[1];
$text = str_replace($m[0], "", $text);
}
$text = trim(preg_replace('/\s{2,}/', "", $text));
if($text) {
$data['zusatz'] = $text;
}
return $data;
}
public function getNewOAID() {
if(!$this->hausnummer_id) {
return false;
}
$bcode = $this->getProperty("hausnummer")->oaid;
//var_dump($bcode);
if(!$bcode) {
$hausnummer = $this->getProperty("hausnummer");
$hausnummer->oaid = $hausnummer->getNewOAID();
if(!$hausnummer->oaid) {
return false;
}
if(!$hausnummer->save()) {
return false;
}
$bcode = $hausnummer->oaid;
}
$codes = [];
// get existing codes
$res = $this->db->select("Wohneinheit", "oaid", "oaid like '$bcode.%'");
if($this->db->num_rows($res)) {
while($data = $this->db->fetch_object($res)) {
$codes[] = $data->oaid;
}
} else {
return $bcode.".001";
}
if(count($codes)) {
sort($codes);
}
$last_code = end($codes);
$m = [];
if(preg_match('/\.(\d+)$/', $last_code, $m)) {
if($m[1]) {
$last_num = $m[1];
}
} else {
return false;
}
$new_num = ++$last_num;
$code = $bcode.".".sprintf("%03d", $new_num);
return $code;
}
public function afterLoad() {
//$this->hausnummer = new ADBHausnummer($this->hausnummer_id);
//$this->loadStatus();
//$this->loadProvider();
}
/*
public function loadStatus() {
if(!$this->id) {
return false;
}
$status = HausnummerStatus::singleton();
$this->status = $status->getObject($this->status_id);
}
public function loadProvider() {
if(!$this->id) {
return false;
}
$res = $this->db->select("HausnummerProvider", "*", "hausnummer_id=".$this->id);
if($this->db->num_rows($res)) {
while($data = $this->db->fetch_object($res)) {
$provider = new Provider($data->provider_id);
$this->providerlist[$provider->id] = $provider->name;
$this->providers[] = $provider;
}
}
return true;
}*/
public function getProperty($name) {
if($this->$name == null) {
if($name == "hausnummer") {
$this->hausnummer = new ADBHausnummer($this->hausnummer_id);
return $this->hausnummer;
}
if($name == "rimo_workorder") {
$this->rimo_workorder = RimoWorkorderModel::getFirst(['adb_wohneinheit_id' => $this->id]);
return $this->rimo_workorder;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
public function __toString() {
$parts = [];
if($this->block) {
$parts[] = "Block ".$this->block;
}
if($this->stiege) {
$parts[] = "Stiege ".$this->stiege;
}
if($this->stock) {
if(is_numeric($this->stock)) {
$parts[] = $this->stock.". Stock";
} elseif(preg_match('/^(erdgescho(ss|ß)|parterre)$/i', $this->stock)) {
$parts[] = "Erdgeschoss";
} else {
$parts[] = "Stock ".$this->stock;
}
}
if($this->tuer) {
$parts[] = "Tür ".$this->tuer;
}
if($this->zusatz) {
$parts[] = $this->zusatz;
}
return implode(" ", $parts);
}
}