Merge branch 'preorder-improve-map' into 'master'
Added Tickets View for Customers See merge request fronk/thetool!999
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
<a href="<?=self::getUrl("Address","edit", ['id' => $address->id, 's' => $s, 'f' => "view"])?>" class="btn btn-outline-success"><i class="fas fa-edit"></i> Adresse bearbeiten</a>
|
||||
</div>
|
||||
<div class="float-right">
|
||||
<a href="<?=self::getUrl("Address","tickets", ["address_id" => $address->id])?>" class="btn btn-purple mr-1"><i class="far fa-user-headset"></i> Tickets</a>
|
||||
<a href="<?=self::getUrl("Address","invoice", ["address_id" => $address->id])?>" class="btn btn-purple mr-1"><i class="far fa-file-invoice-dollar"></i> Rechungsübersicht</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -172,7 +172,6 @@ class AddressController extends mfBaseController {
|
||||
$this->layout()->set("address", $address);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected function editAction() {
|
||||
@@ -539,7 +538,8 @@ class AddressController extends mfBaseController {
|
||||
if ($address->id) {
|
||||
$result = [
|
||||
'value' => $address->id,
|
||||
'text' => str_replace("'", "\\'", str_replace(["\n", "\r"], " ",$address->getCompanyOrName()))." (".$address->zip." ".$address->city.", ".$address->street.")".(($address->customer_number) ? " [".$address->customer_number."]" : "")
|
||||
'text' => str_replace("'", "\\'", str_replace(["\n",
|
||||
"\r"], " ", $address->getCompanyOrName())) . " (" . $address->zip . " " . $address->city . ", " . $address->street . ")" . (($address->customer_number) ? " [" . $address->customer_number . "]" : "")
|
||||
];
|
||||
$results[] = $result;
|
||||
$this->returnJson($results);
|
||||
@@ -572,11 +572,26 @@ class AddressController extends mfBaseController {
|
||||
|
||||
|
||||
if (isset($_GET['fibu_primary_account'])) {
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "mergedName" => $search, "fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "company" => $search, "fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "firstname" => $search, "fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "lastname" => $search, "fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "street" => $search, "fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po,
|
||||
"addresstype" => [$role],
|
||||
"mergedName" => $search,
|
||||
"fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po,
|
||||
"addresstype" => [$role],
|
||||
"company" => $search,
|
||||
"fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po,
|
||||
"addresstype" => [$role],
|
||||
"firstname" => $search,
|
||||
"fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po,
|
||||
"addresstype" => [$role],
|
||||
"lastname" => $search,
|
||||
"fibu_primary_account" => true]));
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po,
|
||||
"addresstype" => [$role],
|
||||
"street" => $search,
|
||||
"fibu_primary_account" => true]));
|
||||
|
||||
} else {
|
||||
$addresses = array_merge($addresses, AddressModel::search(["parents_only" => $po, "addresstype" => [$role], "mergedName" => $search]));
|
||||
@@ -602,7 +617,8 @@ class AddressController extends mfBaseController {
|
||||
|
||||
if (!$autocomplete) {
|
||||
foreach ($all_addresses as $id => $address) {
|
||||
$results[$id] = str_replace("'", "\\'", str_replace(["\n", "\r"], " ",$address->getCompanyOrName()))." (".$address->zip." ".$address->city.", ".$address->street.")".(($address->customer_number) ? " [".$address->customer_number."]" : "");
|
||||
$results[$id] = str_replace("'", "\\'", str_replace(["\n",
|
||||
"\r"], " ", $address->getCompanyOrName())) . " (" . $address->zip . " " . $address->city . ", " . $address->street . ")" . (($address->customer_number) ? " [" . $address->customer_number . "]" : "");
|
||||
if (count($results) > 15) {
|
||||
$results["more"] = "...";
|
||||
break;
|
||||
@@ -614,10 +630,13 @@ class AddressController extends mfBaseController {
|
||||
|
||||
// return bootstrap-autocomplete format
|
||||
foreach ($all_addresses as $id => $address) {
|
||||
$result = ['value' => $id, 'text' => str_replace("'", "\\'", str_replace(["\n", "\r"], " ",$address->getCompanyOrName()))." (".$address->zip." ".$address->city.", ".$address->street.")".(($address->customer_number) ? " [".$address->customer_number."]" : "")];
|
||||
$result = ['value' => $id,
|
||||
'text' => str_replace("'", "\\'", str_replace(["\n",
|
||||
"\r"], " ", $address->getCompanyOrName())) . " (" . $address->zip . " " . $address->city . ", " . $address->street . ")" . (($address->customer_number) ? " [" . $address->customer_number . "]" : "")];
|
||||
$results[] = $result;
|
||||
if (count($results) > 15) {
|
||||
$results[] = ['value' => 0, 'text' => " --> Mehr Suchergebnisse vorhanden. Bitte Suchbegriff genauer definieren <--"];
|
||||
$results[] = ['value' => 0,
|
||||
'text' => " --> Mehr Suchergebnisse vorhanden. Bitte Suchbegriff genauer definieren <--"];
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -669,4 +688,21 @@ class AddressController extends mfBaseController {
|
||||
die($response);
|
||||
|
||||
}
|
||||
|
||||
protected function ticketsAction() {
|
||||
$address_id = $this->request->address_id;
|
||||
|
||||
$address = new Address($address_id);
|
||||
if (!$address->id) {
|
||||
$this->layout()->setFlash("Addresse nicht gefunden", "error");
|
||||
$this->redirect("Address");
|
||||
}
|
||||
|
||||
$xinon_project = new XinonProject();
|
||||
$tickets = $xinon_project->searchSupportTickets('', 0, ['pageSize' => 100,
|
||||
'filters' => json_encode([['customField6' => ['operator' => '=', 'values' => [$address->customer_number]]]])]);
|
||||
|
||||
Helper::renderVue($this,"AddressTickets",
|
||||
"Tickets von Kunden: " . $address->getCompanyOrName() . '(' . $address->customer_number . ')', ["TICKETS" => $tickets]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,14 +58,13 @@ class XinonProject {
|
||||
* @param int $pageSize - The number of results to return.
|
||||
* @return array - The search results.
|
||||
*/
|
||||
public function searchSupportTickets(string $search, int $pageSize = 25): array {
|
||||
public function searchSupportTickets(string $search, int $pageSize = 25, $overrideQueryParams = null): array {
|
||||
$curl = curl_init();
|
||||
|
||||
$baseUrl = 'https://project.xinon.at/api/v3/projects/10/work_packages';
|
||||
$queryParams = [
|
||||
'pageSize' => 25,
|
||||
'filters' => json_encode([['search' => ['operator' => '**', 'values' => [$search]]]])
|
||||
];
|
||||
$queryParams = ['pageSize' => $pageSize, 'filters' => json_encode([['search' => ['operator' => '**', 'values' => [$search]]]])];
|
||||
|
||||
if (!is_null($overrideQueryParams)) $queryParams = $overrideQueryParams;
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $baseUrl . '?' . http_build_query($queryParams),
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
Vue.component('AddressTickets', {
|
||||
template: `
|
||||
<tt-card>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>Kundennummer</th>
|
||||
<th>Erstellt am</th>
|
||||
<th>Betreff</th>
|
||||
<th>Letztes Update</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="ticket in parsedTickets" :key="ticket.id">
|
||||
<td>{{ ticket.customField7 }}</td>
|
||||
<td>{{ formatDate(ticket.createdAt) }}</td>
|
||||
<td>{{ ticket.subject }}</td>
|
||||
<td>{{ formatDate(ticket.updatedAt) }}</td>
|
||||
<td>
|
||||
<a :href="'https://project.xinon.at' + ticket.activitiesHref.replace('api/v3', 'projects/storungen-and-support').replace('activities', 'activity')" class="btn btn-primary btn-sm" target="_blank">
|
||||
<i class="fas fa-external-link-alt mr-1"></i>
|
||||
Ticket anzeigen
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</tt-card>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
window: window,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
parsedTickets() {
|
||||
return this.window.TT_CONFIG.TICKETS.map(ticket => ({
|
||||
id: ticket.id,
|
||||
customField7: ticket.customField7,
|
||||
createdAt: ticket.createdAt,
|
||||
subject: ticket.subject,
|
||||
updatedAt: ticket.updatedAt,
|
||||
activitiesHref: ticket._links.activities.href
|
||||
}));
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatDate(dateString) {
|
||||
return this.window.moment(dateString).format('DD.MM.YYYY HH:mm');
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user