Added status id and flag filter to AddressDB/Index
This commit is contained in:
@@ -98,6 +98,24 @@
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-2">
|
||||
<label class="form-label" for="filter_status_id">Status</label>
|
||||
<select name="filter[status_id][]" id="filter_status_id" class="form-control" multiple="multiple">
|
||||
<?php foreach(ADBStatusModel::getAll() as $status): ?>
|
||||
<option value="<?=$status->id?>" <?=(isset($filter) && array_key_exists("status_id", $filter) && in_array($status->id, $filter['status_id'])) ? "selected='selected'" : ""?>><?=$status->code?> - <?=$status->name?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<label class="form-label" for="filter_status_flag">Status Flags</label>
|
||||
<select name="filter[status_flag][]" id="filter_status_flag" class="form-control" multiple="multiple">
|
||||
<?php foreach(ADBStatusflagModel::getAll() as $status): ?>
|
||||
<option value="<?=$status->id?>" <?=(isset($filter) && array_key_exists("status_flag", $filter) && in_array($status->id, $filter['status_flag'])) ? "selected='selected'" : ""?>><?=$status->code?> - <?=$status->name?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_oaid">OAID</label>
|
||||
<input type="text" class="form-control" name="filter[oaid]" id="filter_oaid" value="<?=(array_key_exists("oaid", $filter)) ? $filter['oaid'] : ""?>" />
|
||||
</div>
|
||||
@@ -106,10 +124,8 @@
|
||||
<label class="form-label" for="filter_adrcd">Adrcd (GWR)</label>
|
||||
<input type="text" class="form-control" name="filter[adrcd]" id="filter_adrcd" value="<?=(array_key_exists("adrcd", $filter)) ? $filter['adrcd'] : ""?>" />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-2">
|
||||
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_extref">extref</label>
|
||||
<input type="text" class="form-control" name="filter[extref]" id="filter_extref" value="<?=(array_key_exists("extref", $filter)) ? $filter['extref'] : ""?>" />
|
||||
</div>
|
||||
@@ -119,12 +135,12 @@
|
||||
<input type="text" class="form-control" name="filter[rollout]" id="filter_rollout" value="<?=(array_key_exists("rollout", $filter)) ? $filter['rollout'] : ""?>" />
|
||||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_rollout_info">Rollout Info</label>
|
||||
<input type="text" class="form-control" name="filter[rollout_info]" id="filter_rollout_info" value="<?=(array_key_exists("rollout_info", $filter)) ? $filter['rollout_info'] : ""?>" />
|
||||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_visibility">Sichtbarkeit API</label>
|
||||
<select name="filter[visibility]" id="filter_visibility" class="form-control">
|
||||
<option value="">Alle</option>
|
||||
@@ -150,6 +166,7 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a class="btn btn-outline-secondary" href="<?=self::getUrl("AddressDB", "updateVisibilityExternalId")?>"><i class="fas fa-fw fa-file-csv"></i> Sichtbarkeit / Rimo ID Update</a>
|
||||
<a class="btn btn-outline-purple ml-1" href="<?=self::getUrl("AddressDB", "statusUpdateImport")?>"><i class="fas fa-fw fa-retweet"></i> Statusupdates importieren</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
@@ -223,6 +240,9 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$("#filter_status_id").select2({closeOnSelect: false});
|
||||
$("#filter_status_flag").select2({closeOnSelect: false});
|
||||
|
||||
$('#filter_network_id').change(function() {
|
||||
if($('#filter_network_id').val() === "null") {
|
||||
$('#filter-gemeinde-id').hide();
|
||||
|
||||
@@ -77,7 +77,9 @@ class ADBHausnummerModel {
|
||||
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
|
||||
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
|
||||
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
|
||||
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)
|
||||
WHERE $where
|
||||
GROUP BY Hausnummer.id
|
||||
ORDER BY netzgebiet_id,Gemeinde.id,ortschaft_id,strasse_id,LENGTH(hausnummer), hausnummer
|
||||
LIMIT 1";
|
||||
|
||||
@@ -115,14 +117,19 @@ class ADBHausnummerModel {
|
||||
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$sql = "SELECT COUNT(*) as cnt FROM Hausnummer
|
||||
LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id)
|
||||
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
|
||||
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
|
||||
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
|
||||
WHERE $where
|
||||
$sql = "SELECT COUNT(*) as cnt FROM (
|
||||
SELECT Hausnummer.id FROM Hausnummer
|
||||
LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id)
|
||||
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
|
||||
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
|
||||
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
|
||||
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)
|
||||
WHERE $where
|
||||
GROUP BY Hausnummer.id
|
||||
) hn
|
||||
";
|
||||
|
||||
|
||||
mfLoghandler::singleton()->debug($sql);
|
||||
|
||||
$res = $db->query($sql);
|
||||
if($db->num_rows($res)) {
|
||||
@@ -142,7 +149,9 @@ class ADBHausnummerModel {
|
||||
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
|
||||
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
|
||||
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
|
||||
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)
|
||||
WHERE $where
|
||||
GROUP BY Hausnummer.id
|
||||
ORDER BY netzgebiet_id,Gemeinde.id,ortschaft_id,strasse_id,LENGTH(hausnummer), hausnummer";
|
||||
|
||||
if(is_array($limit) && count($limit)) {
|
||||
@@ -402,6 +411,24 @@ class ADBHausnummerModel {
|
||||
$where .= " AND Hausnummer.rollout_info like '%$rollout_info%'";
|
||||
}
|
||||
}
|
||||
|
||||
if(array_key_exists("status_id", $filter)) {
|
||||
$status_id = $filter['status_id'];
|
||||
if(is_array($status_id)) {
|
||||
$where .= " AND Hausnummer.status_id IN (".implode(", ", $status_id).")";
|
||||
} elseif(is_numeric($status_id)) {
|
||||
$where .= " AND Hausnummer.status_id = $status_id";
|
||||
}
|
||||
}
|
||||
|
||||
if(array_key_exists("status_flag", $filter)) {
|
||||
$status_flag = $filter['status_flag'];
|
||||
if(is_array($status_flag)) {
|
||||
$where .= " AND HausnummerStatusflagValue.flag_id IN (".implode(", ", $status_flag).") AND HausnummerStatusflagValue.value=1";
|
||||
} elseif(is_numeric($status_flag)) {
|
||||
$where .= " AND HausnummerStatusflagValue.flag_id = $status_flag AND HausnummerStatusflagValue.value=1";
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
|
||||
@@ -41,10 +41,10 @@ class ADBStatusModel {
|
||||
|
||||
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
|
||||
$res = $db->select("Status", "*");
|
||||
$res = $db->select("Status", "*", "1=1 ORDER BY code, name");
|
||||
if($db->num_rows($res)) {
|
||||
while($data = $db->fetch_object($res)) {
|
||||
$items[] = new Status($data);
|
||||
$items[] = new ADBStatus($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
@@ -100,7 +100,7 @@ class ADBStatusModel {
|
||||
if(is_array($limit) && count($limit)) {
|
||||
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
|
||||
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
|
||||
} elseif(is_numeric($count)) {
|
||||
} elseif(is_numeric($limit['count'])) {
|
||||
$sql .= " LIMIT ".$limit['count'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +167,20 @@ class AddressDBController extends mfBaseController {
|
||||
$new_filter["visibility"] = ["public", "private"];
|
||||
unset($filter['visibility']);
|
||||
}
|
||||
|
||||
if(array_key_exists("status_id", $filter)) {
|
||||
if(is_array($filter["status_id"])) {
|
||||
$new_filter["status_id"] = $filter["status_id"];
|
||||
}
|
||||
unset($filter["status_id"]);
|
||||
}
|
||||
|
||||
if(array_key_exists("status_flag", $filter)) {
|
||||
if(is_array($filter["status_flag"])) {
|
||||
$new_filter["status_flag"] = $filter["status_flag"];
|
||||
}
|
||||
unset($filter["status_flag"]);
|
||||
}
|
||||
|
||||
if(is_array($filter) && count($filter)) {
|
||||
foreach($filter as $name => $value) {
|
||||
@@ -544,6 +558,161 @@ class AddressDBController extends mfBaseController {
|
||||
}
|
||||
}
|
||||
|
||||
protected function statusUpdateimportAction() {
|
||||
$this->layout()->setTemplate("AddressDB/Statusupdateimport");
|
||||
}
|
||||
|
||||
protected function saveStatusupdateImportAction() {
|
||||
$headline_included = $this->request->headline;
|
||||
|
||||
if(is_array($_FILES) && array_key_exists("statusupdate_csv", $_FILES) && !$_FILES['statusupdate_csv']['error']) {
|
||||
// look for uploaded import file
|
||||
try {
|
||||
// returns File object or throws Exception on error
|
||||
$file = mfUpload::handleFormUpload("statusupdate_csv");
|
||||
} catch(Exception $ex) {
|
||||
$this->layout()->setFlash("Fehler beim Dateiupload: " . $ex->getMessage(), "error");
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
$forbidden = 0;
|
||||
$notfound = 0;
|
||||
$invalidcode = 0;
|
||||
$nochange = 0;
|
||||
$saved = 0;
|
||||
$flags_saved = 0;
|
||||
|
||||
$statusflags = [];
|
||||
|
||||
$filename = $file->getFullPath();
|
||||
$input = fopen($filename, "r");
|
||||
while($csv = fgetcsv($input, 0, ";")) {
|
||||
$i++;
|
||||
|
||||
if($i == 1 && $headline_included) {
|
||||
// get statusflag order in header
|
||||
$col = 2;
|
||||
while(array_key_exists($col, $csv) && trim($csv[$col])) {
|
||||
$code = trim($csv[$col]);
|
||||
if(!is_numeric($code)) {
|
||||
$this->layout()->setFlash("Ungültige Überschrift für Spalte ".++$col, "error");
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
}
|
||||
|
||||
$sflag = PreorderStatusflagModel::getFirst(["code" => $code]);
|
||||
if(!$sflag) {
|
||||
$this->layout()->setFlash("Statusflag mit Code $code nicht gefunden", "error");
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
}
|
||||
$sflag->col = $col;
|
||||
$statusflags[$code] = $sflag;
|
||||
$col++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!trim($csv[0])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$oaid = trim($csv[0]);
|
||||
$new_status_code = trim($csv[1]);
|
||||
|
||||
$preorder = PreorderModel::getFirstActive(["oaid" => $oaid]);
|
||||
if(!$preorder) {
|
||||
$notfound++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if($preorder->campaign->network->owner_id != $this->me->address_id) {
|
||||
$forbidden++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if($preorder->status->code != $new_status_code) {
|
||||
$new_status = PreorderstatusModel::getFirst(["code" => $new_status_code]);
|
||||
if(!$new_status_code) {
|
||||
$invalidcode++;
|
||||
continue;
|
||||
}
|
||||
$preorder->status_id = $new_status->id;
|
||||
$preorder->save();
|
||||
$preorder->resetSaveNesting();
|
||||
$saved++;
|
||||
} else {
|
||||
$nochange++;
|
||||
}
|
||||
|
||||
if(count($statusflags)) {
|
||||
foreach($statusflags as $code => $origin_sflag) {
|
||||
$this->log->debug(__METHOD__.": $oaid - testing flag $code for update.");
|
||||
$sflag = clone($origin_sflag);
|
||||
$sflag->preorder_id = $preorder->id;
|
||||
|
||||
if(!$sflag->col) {
|
||||
$this->layout()->setFlash("Kann Statusflagcode $code nicht zuordnen. Line $i col ".$sflag->col, "error");
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
}
|
||||
|
||||
if(!array_key_exists($sflag->col, $csv)) {
|
||||
$this->log->debug(__METHOD__.": no col.");
|
||||
continue;
|
||||
}
|
||||
|
||||
$value = trim($csv[$sflag->col]);
|
||||
if(!strlen($value)) {
|
||||
$this->log->debug(__METHOD__.": no val");
|
||||
continue;
|
||||
}
|
||||
|
||||
if($value) {
|
||||
$sflag->value->value = 1;
|
||||
} else {
|
||||
$sflag->value->value = 0;
|
||||
}
|
||||
|
||||
$this->log->debug(__METHOD__.": $oaid - saving flag value $code value: ".$sflag->value->value." ($value)");
|
||||
$sflag->value->save();
|
||||
|
||||
$flags_saved++;
|
||||
//$this->log->debug(__METHOD__.": $oaid - loading preorder again");
|
||||
}
|
||||
|
||||
$preorder = PreorderModel::getFirstActive(["oaid" => $oaid]);
|
||||
$preorder->resetSaveNesting();
|
||||
$preorder->afterSave();
|
||||
$preorder = PreorderModel::getFirstActive(["oaid" => $oaid]);
|
||||
$preorder->resetSaveNesting();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$message = "Import erfolgreich. $saved Statusupdates importiert";
|
||||
if($flags_saved) {
|
||||
$message .= "<br />$flags_saved Statusflags upgedatet";
|
||||
}
|
||||
if($notfound) {
|
||||
$message .= "<br />$notfound Bestellungen nicht gefunden";
|
||||
}
|
||||
if($forbidden) {
|
||||
$message .= "<br />$forbidden Bestellungen in falschem Netzgebiet";
|
||||
}
|
||||
/*if($nochange) {
|
||||
$message .= "<br />$nochange Bestelllungen haben bereits den neuen Status";
|
||||
}*/
|
||||
if($invalidcode) {
|
||||
$message .= "<br />$invalidcode ungültige Statuscodes";
|
||||
}
|
||||
$this->layout()->setFlash($message);
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
|
||||
} else {
|
||||
$this->layout()->setFlash("Nichts importiert!", "info");
|
||||
$this->redirect("Preorder", "statusupdateimport");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function apiAction() {
|
||||
if(!$this->me->is(["Admin","netowner"]) && !$this->me->can("Preorder")) {
|
||||
|
||||
Reference in New Issue
Block a user