Merge branch 'main' into dev
This commit is contained in:
commit
99f4f8a746
3 files changed
+227
-2
No files matched your search
+9
-2
@@ -32,12 +32,13 @@ $serviceGroups = array (
|
||||
1 => 'zeiterfassung',
|
||||
2 => 'berichte_arbeit_gen',
|
||||
3 => 'berichte',
|
||||
4 => 'firmenberichte',
|
||||
),
|
||||
),
|
||||
'Logs' =>
|
||||
array (
|
||||
'label' => 'Webserver',
|
||||
'defaultOpen' => true,
|
||||
'defaultOpen' => false,
|
||||
'services' =>
|
||||
array (
|
||||
0 => 'public_request_logs',
|
||||
@@ -206,6 +207,12 @@ $services = array (
|
||||
'active' => true,
|
||||
'adminOnly' => false,
|
||||
),
|
||||
'firmenberichte' =>
|
||||
array (
|
||||
'name' => 'Firmenberichte',
|
||||
'active' => true,
|
||||
'adminOnly' => false,
|
||||
),
|
||||
);
|
||||
|
||||
$linkGroups = array (
|
||||
@@ -396,4 +403,4 @@ $linkButtons = array (
|
||||
'adminOnly' => false,
|
||||
'group' => 'tools',
|
||||
),
|
||||
);
|
||||
);
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
include_once(__DIR__ . '/../controller/DataController.php');
|
||||
include_once(__DIR__ . '/../controller/DatabaseController.php');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_bericht'])) {
|
||||
$prozess1 = $_POST['prozess1'];
|
||||
$prozess2 = $_POST['prozess2'];
|
||||
$prozess3 = $_POST['prozess3'];
|
||||
$prozess4 = $_POST['prozess4'];
|
||||
$startzeit = $_POST['startzeit'];
|
||||
$endzeit = $_POST['endzeit'];
|
||||
$datum = $_POST['datum'];
|
||||
|
||||
// IHK konforme zeiten berechnen und Überstunden berechnen
|
||||
$soll = new DateTime($startzeit);
|
||||
$soll->modify("+8 hours 30 minutes");
|
||||
|
||||
$randomMin = rand(1, 15);
|
||||
$endePublicDt = clone $soll;
|
||||
$endePublicDt->modify("+{$randomMin} minutes");
|
||||
$endePublic = $endePublicDt->format("H:i");
|
||||
|
||||
$real = DateTime::createFromFormat("H:i", $endzeit);
|
||||
|
||||
$beginnDt = new DateTime($startzeit);
|
||||
$arbeitsDiff = $beginnDt->diff($real);
|
||||
$arbeitsMinuten = ($arbeitsDiff->h * 60) + $arbeitsDiff->i;
|
||||
$sollMinuten = 8 * 60 + 30;
|
||||
|
||||
if ($arbeitsMinuten <= $sollMinuten) {
|
||||
$overtime = 0;
|
||||
} else {
|
||||
$diff = $soll->diff($real);
|
||||
$overtime = ($diff->h * 60) + $diff->i;
|
||||
}
|
||||
|
||||
DatabaseInsert(
|
||||
"Firmenberichte",
|
||||
"DATUM, PROZESS_1, PROZESS_2, PROZESS_3, PROZESS_4, BEGINN, ENDE_REAL, ENDE_PUBLIC, OVERTIME",
|
||||
$datum,
|
||||
$prozess1,
|
||||
$prozess2,
|
||||
$prozess3,
|
||||
$prozess4,
|
||||
$startzeit,
|
||||
$endzeit,
|
||||
$endePublic,
|
||||
$overtime
|
||||
);
|
||||
|
||||
redirectToWebsite((new getSpecificData())->getReferer());
|
||||
exit;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div>
|
||||
<div class="berichte-container">
|
||||
<form method="POST" class="berichte-form">
|
||||
|
||||
<div class="form-group">
|
||||
<label>Prozess 1</label>
|
||||
<input type="text" name="prozess1" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Prozess 2</label>
|
||||
<input type="text" name="prozess2" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Prozess 3</label>
|
||||
<input type="text" name="prozess3" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Prozess 4</label>
|
||||
<input type="text" name="prozess4" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Startzeit</label>
|
||||
<input type="time" name="startzeit" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Endzeit</label>
|
||||
<input type="time" name="endzeit" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Datum</label>
|
||||
<input type="date" name="datum" required>
|
||||
</div>
|
||||
|
||||
<button type="submit" name="add_bericht" class="btn-submit-bericht">
|
||||
Bericht Speichern
|
||||
</button>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1280,4 +1280,125 @@ body.dark-mode input[type="date"] {
|
||||
padding: 10px;
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ===== Optimiertes Firmenberichte Erfassungsformular ===== */
|
||||
|
||||
.berichte-container {
|
||||
background: var(--card-bg);
|
||||
border: 1px solid var(--card-border);
|
||||
border-top: 4px solid #007bff;
|
||||
/* Eleganter blauer Akzentstreifen oben statt links */
|
||||
border-radius: 12px;
|
||||
padding: 30px;
|
||||
max-width: 500px;
|
||||
/* Kompakt und perfekt lesbar auf Monitoren */
|
||||
margin: 40px auto;
|
||||
/* Schön zentriert mit Luft nach oben/unten */
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* Tiefenwirkung für den Dark Mode */
|
||||
body.dark-mode .berichte-container {
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
|
||||
background: #161616;
|
||||
/* Passt sich perfekt deiner CSS-Variable an */
|
||||
}
|
||||
|
||||
.berichte-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.berichte-form .form-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.berichte-form .form-group label {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
color: var(--text);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.8px;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
/* Einheitlicher, moderner Look für ALLE Input-Typen */
|
||||
.berichte-form input[type="text"],
|
||||
.berichte-form input[type="time"],
|
||||
.berichte-form input[type="date"] {
|
||||
width: 100%;
|
||||
padding: 12px 16px;
|
||||
background: var(--input-bg);
|
||||
border: 1px solid var(--input-border);
|
||||
color: var(--input-text);
|
||||
border-radius: 8px;
|
||||
font-size: 0.95rem;
|
||||
box-sizing: border-box;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
/* Behebt das Problem mit den grellweißen Zeit/Datumsfeldern im Dark Mode */
|
||||
body.dark-mode .berichte-form input[type="time"],
|
||||
body.dark-mode .berichte-form input[type="date"] {
|
||||
color-scheme: dark;
|
||||
/* Zwingt den Browser, das native Dropdown dunkel zu machen */
|
||||
background: #222;
|
||||
border-color: #444;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Fokus-Effekt (weicher blauer Schein) */
|
||||
.berichte-form input:focus {
|
||||
outline: none;
|
||||
border-color: #007bff;
|
||||
box-shadow: 0 0 0 4px rgba(0, 123, 255, 0.15);
|
||||
}
|
||||
|
||||
body.dark-mode .berichte-form input:focus {
|
||||
box-shadow: 0 0 0 4px rgba(0, 123, 255, 0.3);
|
||||
}
|
||||
|
||||
/* Vollbreiter, moderner Absende-Button */
|
||||
.btn-submit-bericht {
|
||||
width: 100%;
|
||||
background: #28a745;
|
||||
/* Kräftiges Success-Grün */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 14px;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
margin-top: 10px;
|
||||
box-shadow: 0 4px 12px rgba(40, 167, 69, 0.2);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.btn-submit-bericht:hover {
|
||||
background: #218838;
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 6px 15px rgba(40, 167, 69, 0.3);
|
||||
}
|
||||
|
||||
.btn-submit-bericht:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* Kleine Bildschirme (Smartphones) */
|
||||
@media (max-width: 600px) {
|
||||
.berichte-container {
|
||||
margin: 15px;
|
||||
padding: 20px;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user