added new button to create tickets
This commit is contained in:
@@ -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">×</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});
|
||||
|
||||
|
||||
@@ -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
@@ -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");
|
||||
|
||||
54
lib/XinonProject/XinonProject.php
Normal file
54
lib/XinonProject/XinonProject.php
Normal 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;
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user