Order/Form: Changed owner and billingaddress to autocomplete instead of

select
This commit is contained in:
Frank Schubert
2022-01-25 22:39:57 +01:00
parent fec01ee1bc
commit 517174de4c
9 changed files with 385 additions and 115 deletions

View File

@@ -232,6 +232,89 @@ class AddressController extends mfBaseController {
$this->redirect("Address", "Edit", ['id' => $new_id]);
}
protected function apiAction() {
if(!$this->me->is(["Admin","salespartner"])) {
$this->redirect("Dashboard");
}
$do = $this->request->do;
$data = [];
switch($do) {
case "findAddress":
$return = $this->findAddressApi();
break;
default:
$return = false;
}
if(!is_array($return) || !count($return)) {
$data = ["status" => "error"];
$this->returnJson($data);
}
$data['status'] = "OK";
$data['result'] = $return;
$this->returnJson($data);
}
private function findAddressApi() {
$search = $this->request->q;
$autocomplete = $this->request->autocomplete;
$po = 1;
$role = false;
// if searching for billingaddress, set role and parents_only to 0
if($this->request->role == "billingaddress") {
$role = "billing";
$po = 0;
}
$addresses = [];
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "company" => $search]));
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "firstname" => $search]));
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "lastname" => $search]));
if(!is_array($addresses) && !count($addresses)) {
return false;
}
$all_addresses = [];
// remove duplicates
foreach($addresses as $address) {
if(!array_key_exists($address->id, $all_addresses)) {
$all_addresses[$address->id] = $address;
}
}
$results = [];
if(!$autocomplete) {
foreach($all_addresses as $id => $address) {
$results[$id] = $address->getCompanyOrName()." (".$address->zip." ".$address->city.", ".$address->street.")".(($address->customer_number) ? " [".$address->customer_number."]" : "");
if(count($results) > 5) {
$results["more"] = "...";
break;
}
}
return ["addresses" => $results];
}
// return bootstrap-autocomplete format
foreach($all_addresses as $id => $address) {
$result = ['value' => $id, 'text' => $address->getCompanyOrName()." (".$address->zip." ".$address->city.", ".$address->street.")".(($address->customer_number) ? " [".$address->customer_number."]" : "")];
$results[] = $result;
if(count($results) > 5) {
$results[] = ['value' => 0, 'text' => "&nbsp;&nbsp;--> &nbsp;&nbsp;Mehr Suchergebnisse vorhanden. Bitte Suchebegriff genauer definieren &nbsp;&nbsp;<--"];
break;
}
}
$this->returnJson($results);
}
private function searchAddress() {
}
}