Files
thetool/application/Api/v1/PreorderconstructionApicontroller.php
2024-11-22 13:54:07 +01:00

184 lines
6.9 KiB
PHP

<?php
class PreorderconstructionApicontroller extends mfBaseApicontroller {
public function init() {
$this->addRoute("/preorderconstruction/address", "getAddresses", "GET");
$this->addRoute("/preorderconstruction/preorder", "getPreorders", "GET");
}
protected function authenticated() {
if($this->me->username != "preorder-construction-api-slc") {
return \mfResponse::Forbidden();
}
}
protected function getAddresses() {
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
/*if($this->me->username != 'r.eschner@rmlinfrastruktur.at') {
return mfResponse::Forbidden();
}*/
$adb_network_ids = [];
$user_network_ids = $this->me->getFlag("preorder_networks")->value();
if(!$user_network_ids) {
return mfResponse::Ok([]);
}
$user_network_ids = json_decode($user_network_ids);
//var_dump($user_network_ids);exit;
if(!is_array($user_network_ids) || !count($user_network_ids)) {
return mfResponse::Ok([]);
}
foreach($user_network_ids as $network_id) {
$network = new Network($network_id);
if(!$network->id) continue;
if(!$network->adb_netzgebiet_id) continue;
$adb_network_ids[] = $network->adb_netzgebiet_id;
}
$sd_terms = [];
$md_terms = [];
foreach(TT_ADB_GDA_TYPES as $term => $type) {
if($type == "sd") $sd_terms[] = $term;
if($type == "md") $md_terms[] = $term;
}
//var_dump($adb_network_ids);exit;
$sql = "SELECT Hausnummer.*, COUNT(Wohneinheit.id) as unit_count FROM Hausnummer
LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id)
WHERE netzgebiet_id IN (".implode(",", $adb_network_ids).")
AND (rimo_type IN ('".implode("', '" ,$md_terms)."')
OR ((rimo_type IS NULL OR rimo_type='') AND gdaeigenschaft IN ('".implode("', '" ,$md_terms)."')))
GROUP BY Hausnummer.id,Wohneinheit.id";
//echo "$sql\n";exit;
$res = $db->query($sql);
$stati = [];
$netzgebiete = [];
$ortschaften = [];
$gemeinden = [];
$strassen = [];
$plzs = [];
$addresses = [];
while($data = $db->fetch_object($res)) {
if(!array_key_exists($data->netzgebiet_id, $netzgebiete)) {
$netzgebiete[$data->netzgebiet_id] = new ADBNetzgebiet($data->netzgebiet_id);
}
$netzgebiet = $netzgebiete[$data->netzgebiet_id];
if(!array_key_exists($data->ortschaft_id, $ortschaften)) {
$ortschaften[$data->ortschaft_id] = new ADBOrtschaft($data->ortschaft_id);
}
$ortschaft = $ortschaften[$data->ortschaft_id];
if(!array_key_exists($data->strasse_id, $strassen)) {
$strassen[$data->strasse_id] = new ADBStrasse($data->strasse_id);
}
$strasse = $strassen[$data->strasse_id];
if(!array_key_exists($strassen[$data->strasse_id]->gemeinde_id, $gemeinden)) {
$gemeinden[$strasse->gemeinde_id] = new ADBGemeinde($strasse->gemeinde_id);
}
$gemeinde = $gemeinden[$strasse->gemeinde_id];
if(!array_key_exists($data->plz_id, $plzs)) {
$plzs[$data->plz_id] = new ADBPlz($data->plz_id);
}
$plz = $plzs[$data->plz_id];
if(!array_key_exists($data->status_id, $stati)) {
$stati[$data->status_id] = new ADBStatus($data->status_id);
}
$status = $stati[$data->status_id]->getApiArray();
//$status->flags = [];
foreach(ADBHausnummerStatusflagValueModel::search(["hausnummer_id" => $data->id]) as $sflag) {
$status["flags"][] = [
"code" => (int)$sflag->flag->code,
"text" => $sflag->flag->name,
"value" => ($sflag->value == 1)
];
}
$address = [];
$address["id"] = (int)$data->id;
$address["extref"] = $data->extref;
$address["adrcd"] = $data->adrcd;
$address["oaid"] = $data->oaid;
$address["status"] = $status;
$address["netzgebiet_extref"] = $netzgebiet->extref;
$address["netzgebiet_name"] = $netzgebiet->name;
$address["rimo_external_id"] = $data->rimo_id;
$address["skz"] = (int)$strasse->kennziffer;
$address["strasse"] = $strasse->name;
$address["hausnummer"] = $data->hausnummer;
$address["plz"] = $plz->plz;
$address["okz"] = (int)$ortschaft->kennziffer;
$address["ortschaft"] = $ortschaft->name;
$address["gkz"] = (int)$gemeinde->kennziffer;
$address["gemeinde"] = $gemeinde->name;
$address["grundstueck"] = $data->grund_nr;
$address["gps"] = [
"lat" => $data->gps_lat,
"long" => $data->gps_long,
];
$address["rollout"] = $data->rollout;
$address["rollout_info"] = $data->rollout_info;
$address["freigabe"] = ($data->freigabe) ? json_decode($data->freigabe) : null;
$address["nutzungseinheiten"] = (int)$data->unit_count;
$address["gdaeigenschaft"] = $data->gdaeigenschaft;
$address["meridian"] = $data->meridian;
$address["rw"] = $data->rw;
$address["hw"] = $data->hw;
$address["order_api_visibility"] = $data->visibility;
$address['created'] = date("c", $data->create);
$address['created_ts'] = (int)$data->create;
$address['updated'] = date("c", $data->edit);
$address['updated_ts'] = (int)$data->edit;
$addresses[] = $address;
}
return mfResponse::Ok(["addresses" => $addresses]);
}
protected function getPreorders() {
$campaign_ids = [];
$user_network_ids = $this->me->getFlag("preorder_networks")->value();
if(!$user_network_ids) {
return mfResponse::Ok([]);
}
$user_network_ids = json_decode($user_network_ids);
//var_dump($user_network_ids);exit;
if(!is_array($user_network_ids) || !count($user_network_ids)) {
return mfResponse::Ok([]);
}
foreach($user_network_ids as $network_id) {
foreach(PreordercampaignModel::search(["network_id" => $network_id]) as $campaign) {
$campaign_ids[] = $campaign->id;
}
}
//var_dump($campaign_ids);exit;
$preorders = [];
foreach(PreorderModel::searchActive(["preordercampaign_id" => $campaign_ids]) as $preorder) {
$preorders[] = $preorder->getApiArray(["full_home"]);
}
return mfResponse::Ok(["preorders" => $preorders]);
}
}