added new button to create tickets

This commit is contained in:
2024-10-31 14:04:52 +01:00
parent 1bd7163011
commit e67a4a67ff
5 changed files with 216 additions and 5 deletions

View File

@@ -232,6 +232,7 @@
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
<a href="<?=self::getUrl("User", "Index", ["filter" => ["address_id" => $address->id]])?>" title="Benutzer anzeigen"><i class="fas fa-users"></i></a>
<a href="<?=self::getUrl("Address", "view", ["id" => $address->id, 's' => $pagination['start']])?>"><i class="far fa-eyes" title="Anzeigen"></i></a>
<a href="#" onclick="openCreateTicketModal('<?=$address->getFullName()?>', '<?=$address->customer_number?>', '<?=$address->street . ', ' . $address->zip . ' ' . $address->city?>', '<?=$address->phone?>', '<?=$address->email?>', '<?=$address->spin?>')" title="Störungs-Ticket erstellen" class="text-warning"><i class="fas fa-exclamation-triangle"></i></a>
<a href="<?=self::getUrl("Address", "edit", ["id" => $address->id, 's' => $pagination['start']])?>"><i class="far fa-edit" title="Bearbeiten"></i></a>
<a href="<?=self::getUrl("Address", "delete", ["id" => $address->id, 's' => $pagination['start']])?>" onclick="if(!confirm('Person/Firma wirklich löschen?')) return false;" class="text-danger" title="Löschen"><i class="fas fa-trash"></i></a>
</td>
@@ -249,6 +250,122 @@
</div>
</div>
<!-- CREATE TICKET MODAL START -->
<!--add a bootstrap modal here and below add a new <script> which creates a form for self::getUrl("Address", "createTicket") with post parameters
string $subject, string $description, string $customer_name, string $customer_number, string $customer_address, string $customer_phone_number, string $customer_email, string $customer_service_ping
-->
<div class="modal" id="createTicketModal" tabindex="-1" role="dialog" aria-labelledby="createTicketModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="createTicketModalLabel">Störungs-Ticket erstellen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="createTicketForm">
<div class="row">
<div class="col-6">
<label class="form-label required" for="subject">Betreff</label>
<input type="text" class="form-control" name="subject" id="subject" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="description">Beschreibung</label>
<textarea class="form-control" name="description" id="description" required="required"></textarea>
</div>
<div class="col-6">
<label class="form-label required" for="customer_name">Kundenname</label>
<input type="text" class="form-control" name="customer_name" id="customer_name" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="customer_number">Kundennummer</label>
<input type="text" class="form-control" name="customer_number" id="customer_number" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="customer_address">Kundenadresse</label>
<input type="text" class="form-control" name="customer_address" id="customer_address" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="customer_phone_number">Telefon</label>
<input type="text" class="form-control" name="customer_phone_number" id="customer_phone_number" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="customer_email">Email</label>
<input type="text" class="form-control" name="customer_email" id="customer_email" required="required" />
</div>
<div class="col-6">
<label class="form-label required" for="customer_service_pin">Service-Pin</label>
<input type="text" class="form-control" name="customer_service_pin" id="customer_service_pin" required="required" />
</div>
</div>
<!-- add submit and close button here-->
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Ticket erstellen</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal" @click="closeModal">Schließen</button>
</div>
</form>
</div>
<script>
const newTicketUrl = '<?=self::getUrl("Address", "createTicket")?>';
function openCreateTicketModal(customer_name, customer_number, customer_address, customer_phone_number, customer_email, customer_service_pin) {
$("#createTicketModal").modal("show");
$("#subject").val('');
$("#description").val('');
$("#customer_name").val(customer_name);
$("#customer_number").val(customer_number);
$("#customer_address").val(customer_address);
$("#customer_phone_number").val(customer_phone_number);
$("#customer_email").val(customer_email);
$("#customer_service_pin").val(customer_service_pin);
}
document.getElementById('createTicketForm').addEventListener('submit', submitNewTicket);
function submitNewTicket(e) {
e.preventDefault();
const data = {
subject: $("#subject").val(),
description: $("#description").val(),
customer_name: $("#customer_name").val(),
customer_number: $("#customer_number").val(),
customer_address: $("#customer_address").val(),
customer_phone_number: $("#customer_phone_number").val(),
customer_email: $("#customer_email").val(),
customer_service_pin: $("#customer_service_pin").val()
};
$.post(newTicketUrl, data, function(response) {
response = JSON.parse(response);
console.log(response);
if(response.id) {
window.open('https://project.xinon.at/projects/storungen-and-support/work_packages/' + response.id + '/activity', '_blank');
closeModal();
} else {
alert("Fehler beim Erstellen des Tickets.");
}
});
}
function closeModal() {
$("#createTicketModal").modal("hide");
// set all input fields to empty
$("#createTicketForm").trigger("reset");
}
</script>
<!-- CREATE TICKET MODAL END -->
<script type="text/javascript">
$("#filter_addresstype").select2({closeOnSelect: false});

View File

@@ -68,10 +68,14 @@
<option value="true" <?=(isset($user) && $user->is("employee")) ? "selected='selected'" : ""?>>Yes</option>
</select>
</div>
<div class="form-group <?=(!isset($user) || !$user->is("employee")) ? "hidden" : ""?>" id="employee-number-container">
<label for="employee_number"><span class="text-warning font-weight-bold font-16">X</span><span class="text-primary font-weight-bold">inon</span> Mitarbeiternummer:</label>
<input type="text" id="employee_number" name="employee_number" class="form-control" value="<?=(isset($user)) ? (new WorkerFlag($user->id, "employee_number"))->value() : ""?>" />
</div>
<div class="form-group <?=(!isset($user) || !$user->is("employee")) ? "hidden" : ""?>" id="employee-number-container">
<label for="employee_number"><span class="text-warning font-weight-bold font-16">X</span><span class="text-primary font-weight-bold">inon</span> Mitarbeiternummer:</label>
<input type="text" id="employee_number" name="employee_number" class="form-control" value="<?=(isset($user)) ? (new WorkerFlag($user->id, "employee_number"))->value() : ""?>" />
</div>
<div class="form-group <?=(!isset($user) || !$user->is("employee")) ? "hidden" : ""?>" id="project-api-key-container">
<label for="project_api_key">Project API Key:</label>
<input type="text" id="project_api_key" name="project_api_key" class="form-control" value="<?=(isset($user)) ? (new WorkerFlag($user->id, "project_api_key"))->value() : ""?>" />
</div>
<div class="form-group">
<label for="technician">Techniker:</label>
<select name="technician" id="technician" class="form-control">

File diff suppressed because one or more lines are too long

View File

@@ -283,6 +283,16 @@ class UserController extends mfBaseController
$enum->delete();
}
// workerflag for project_api_key
$pak = new WorkerFlag($user->id, "project_api_key");
if($r->project_api_key) {
$pak->value($r->project_api_key);
$pak->save();
} else {
$pak->delete();
}
}
$this->layout()->setFlash("Benutzer gespeichert.", "success");

View File

@@ -0,0 +1,54 @@
<?php
/**
* Represents the OpenProject API.
*/
class XinonProject {
private string $apiUrl = 'https://project.xinon.at/api/v3/';
/**
* XinonProject constructor.
*/
public function __construct() {}
public function createNewFaultTicket(string $subject, string $description, string $customer_name, string $customer_number, string $customer_address, string $customer_phone_number, string $customer_email, string $customer_service_pin, string $apiKey) {
$data = [
'subject' => $subject,
'customField2' => $customer_name,
'customField3' => $customer_address,
'customField4' => $customer_phone_number,
'customField5' => $customer_email,
'customField6' => $customer_number,
'customField7' => $customer_service_pin,
'description' => [
'raw' => $description
]
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://project.xinon.at/api/v3/projects/10/work_packages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
CURLOPT_USERPWD => 'apikey:'.$apiKey
));
curl_setopt($curl, CURLOPT_USERPWD, 'apikey:'.$apiKey);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
}
?>