Merge branch 'master' into fronkdev

This commit is contained in:
Frank Schubert
2025-03-05 17:35:35 +01:00
23 changed files with 1382 additions and 512 deletions

View File

@@ -37,6 +37,7 @@ endforeach;
<script type="text/javascript"
src="<?= self::getResourcePath() ?>assets/js/calendar/rrule/rrule.min.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript"
src="<?= self::getResourcePath() ?>assets/js/calendar/moment/moment.min.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript"
@@ -57,6 +58,7 @@ endforeach;
src="<?= self::getResourcePath() ?>assets/js/calendar/eventsource.min.js?<?= $git_merge_ts ?>"></script>
<link href="<?= self::getResourcePath() ?>assets/css/datatables-std.css?<?= $git_merge_ts ?>" rel="stylesheet"
type="text/css"/>
<!-- start page title -->
<div class="row">
<div class="col-12">
@@ -102,6 +104,7 @@ endforeach;
class="btn btn-light btn-light-search top-search-filter"><i
class="fa-duotone fa-solid fa-phone-volume fa-calendar-call fa-calendar-call-search"></i>
</button>
</div>
</div>
<?php if (!$rights) : ?>
@@ -109,7 +112,14 @@ endforeach;
<span class="font-18 font-weight-500">Du wurdest nicht für den Kalender frei geschalten.</span>
</div>
<?php die(); endif; ?>
<div class="d-inline-block mr-1">
<button title="Excel Export"
class="btn btn-light btn-xls-calendar">
<i class="fa-duotone fa-solid fa-file-xls fa-xls-calendar"></i>
</div>
</button>
<div class="d-inline-block w-50 search-div" style="margin-top: -7px;">
<select id="jumpevent" class="jumpevent"></select>
</div>
@@ -349,129 +359,219 @@ endforeach;
</div>
</div>
<div class="modal fade" id="EventModal" aria-labelledby="EventModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title font-18 ml-2" id="EventModalLabel"><i
class="fa-duotone fa-solid fa-calendar-symbol"></i> <span>neuer Termin</span></h1>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row justify-content-center">
<div class="col-1">
<label for="name" class="col-form-label fw-medium ">Betreff</label>
</div>
<div class="col-6">
<div class="mb-2">
<input type="text" class="form-control is-require eventmodal-input" id="name">
</div>
</div>
<div class="col-3">
<div class="input-group mb-2">
<span title="Erinnerung" class="input-group-text spanwidht">Typ</span>
<select class="form-control form-select select-2" aria-label="Default select" id="type">
<option value="1">Termin</option>
<option value="2">IBN Xinon</option>
<option value="3">IBN ESTMK</option>
<option value="4">IBN SNOPP</option>
<option value="5">Störung</option>
<option value="6">Support Gespräch</option>
</select>
</div>
</div>
<div class="col-1 text-center">
<i title="Normal" class="fa-duotone privacy-click fa-regular fa-unlock mt-1"></i>
</div>
<div class="modal fade" id="EventModal" aria-labelledby="EventModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title font-18 ml-2" id="EventModalLabel"><i
class="fa-duotone fa-solid fa-calendar-symbol"></i> <span>neuer Termin</span></h1>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="row justify-content-center">
<div class="col-1">
<label for="location" class="col-form-label fw-medium ">Ort</label>
</div>
<div class="col-6">
<div class="mb-2">
<input type="text" class="form-control eventmodal-input" id="location">
<div class="modal-body">
<div class="row justify-content-center">
<div class="col-1">
<label for="name" class="col-form-label fw-medium ">Betreff</label>
</div>
<div class="col-6">
<div class="mb-2">
<input type="text" class="form-control is-require eventmodal-input" id="name">
</div>
</div>
<div class="col-3">
<div class="input-group mb-2">
<span title="Erinnerung" class="input-group-text spanwidht">Typ</span>
<select class="form-control form-select select-2" aria-label="Default select" id="type">
<option value="1">Termin</option>
<option value="2">IBN Xinon</option>
<option value="3">IBN ESTMK</option>
<option value="4">IBN SNOPP</option>
<option value="5">Störung</option>
<option value="6">Support Gespräch</option>
</select>
</div>
</div>
<div class="col-1 text-center">
<i title="Normal" class="fa-duotone privacy-click fa-regular fa-unlock mt-1"></i>
</div>
</div>
<div class="col-4">
<div class="input-group mb-2">
<div class="row justify-content-center">
<div class="col-1">
<label for="location" class="col-form-label fw-medium ">Ort</label>
</div>
<div class="col-6">
<div class="mb-2">
<input type="text" class="form-control eventmodal-input" id="location">
</div>
</div>
<div class="col-4">
<div class="input-group mb-2">
<span title="Erinnerung" class="input-group-text spanwidht"><i
class="fa-regular fa-eye"></i></span>
<select class="form-control form-select" aria-label="Default select" id="busy">
<option value="1">gebucht</option>
<option value="0">frei</option>
<option value="2">mit Vorbehalt</option>
</select>
</div>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<div class="input-group mb-2">
<span class="input-group-text spanwidht">Start</span>
<input id="start-date" type="date" class="form-control is-require eventmodal-input"
placeholder="Datum"
aria-label="Datum"
aria-describedby="Datum">
</div>
</div>
<div class="col-2">
<input id="start-time" type="time" class="form-control is-require eventmodal-input"
placeholder="Uhrzeit"
aria-label="Uhrzeit"
aria-describedby="Uhrzeit">
</div>
<div class="col-3 text-center">
<div class="form-check" style="margin-top: 7px;">
<input class="form-check-input eventmodal-checkbox" type="checkbox" value=""
id="allday"> <label class="form-check-label fw-medium checkbox-label" for="allday">
Ganztägig
</label>
<select class="form-control form-select" aria-label="Default select" id="busy">
<option value="1">gebucht</option>
<option value="0">frei</option>
<option value="2">mit Vorbehalt</option>
</select>
</div>
</div>
</div>
</div>
<div class="row justify-content-center">
<div class="row justify-content-center">
<div class="col-4">
<div class="input-group mb-2">
<span class="input-group-text spanwidht">Ende</span>
<input id="end-date" type="date" class="form-control is-require eventmodal-input"
placeholder="Datum"
aria-label="Datum"
aria-describedby="Datum">
<div class="col-4">
<div class="input-group mb-2">
<span class="input-group-text spanwidht">Start</span>
<input id="start-date" type="date" class="form-control is-require eventmodal-input"
placeholder="Datum"
aria-label="Datum"
aria-describedby="Datum">
</div>
</div>
<div class="col-2">
<input id="start-time" type="time" class="form-control is-require eventmodal-input"
placeholder="Uhrzeit"
aria-label="Uhrzeit"
aria-describedby="Uhrzeit">
</div>
<div class="col-2 text-center">
<div class="form-check" style="margin-top: 7px;">
<input class="form-check-input eventmodal-checkbox" type="checkbox" value=""
id="allday"> <label class="form-check-label fw-medium checkbox-label"
for="allday">
Ganztägig
</label>
</div>
</div>
<div class="col-2 text-right">
<div class="form-check" style="margin-top: 7px;">
<input class="form-check-input eventmodal-checkbox" type="checkbox" value=""
id="recurringCheck">
<label class="form-check-label fw-medium checkbox-label" for="recurringCheck">
Serientermin
</label>
</div>
</div>
</div>
<div class="col-2">
<input id="end-time" type="time" class="form-control is-require eventmodal-input"
placeholder="Uhrzeit"
aria-label="Uhrzeit"
aria-describedby="Uhrzeit">
</div>
<div class="col-3">
<div class="input-group mb-2">
<div class="row justify-content-center">
<div class="col-4">
<div class="input-group mb-2">
<span class="input-group-text spanwidht">Ende</span>
<input id="end-date" type="date" class="form-control is-require eventmodal-input"
placeholder="Datum"
aria-label="Datum"
aria-describedby="Datum">
</div>
</div>
<div class="col-2">
<input id="end-time" type="time" class="form-control is-require eventmodal-input"
placeholder="Uhrzeit"
aria-label="Uhrzeit"
aria-describedby="Uhrzeit">
</div>
<div class="col-4">
<div class="input-group mb-2">
<span title="Erinnerung" class="input-group-text spanwidht"><i
class="fa-regular fa-bell"></i></span>
<select class="form-control form-select select2" aria-label="Default select" id="reminder">
<option value="NULL">Keine</option>
<option value="0">Zum Termin</option>
<option value="300">5 Minuten</option>
<option value="600">10 Minuten</option>
<option value="900">15 Minuten</option>
<option value="1800">30 Minuten</option>
<option value="3600">1 Stunde</option>
<option value="86400">1 Tag</option>
<option value="604800">1 Woche</option>
<select class="form-control form-select select2" aria-label="Default select"
id="reminder">
<option value="NULL">Keine</option>
<option value="0">Zum Termin</option>
<option value="300">5 Minuten</option>
<option value="600">10 Minuten</option>
<option value="900">15 Minuten</option>
<option value="1800">30 Minuten</option>
<option value="3600">1 Stunde</option>
<option value="86400">1 Tag</option>
<option value="604800">1 Woche</option>
</select>
</div>
</div>
</div>
<!-- Serientermin-Checkbox und zugehörige RRule-Optionen -->
<div class="row" id="recurring-settings" style="display:none;">
<div class="col-1"></div>
<div class="col-3"
">
<!-- Frequenz: Täglich / Wöchentlich / Monatlich / Jährlich -->
<div class="mb-2">
<label for="rrule-frequency" class="col-form-label fw-medium">Wiederholungstyp</label>
<select class="form-control" id="rrule-frequency">
<option value="">Bitte wählen</option>
<option value="DAILY">Täglich</option>
<option value="WEEKLY">Wöchentlich</option>
<option value="MONTHLY">Monatlich</option>
<option value="YEARLY">Jährlich</option>
</select>
</div>
<div class="mb-2">
<label for="rrule-count" class="col-form-label fw-medium">Wiederhol. (optional)</label>
<input type="number" min="1" class="form-control" id="rrule-count" placeholder="z.B. 10">
</div>
<!-- Enddatum der Serie (optional) -->
<div class="mb-2">
<label for="rrule-until" class="col-form-label fw-medium">Ende (optional)</label>
<input type="date" class="form-control" id="rrule-until">
</div>
</div>
<!-- Wöchentliche Optionen (z.B. jeden Dienstag, jeden Freitag + Montag) -->
<div class="col-7">
<div class="mb-2" id="weekly-options" style="display:none;">
<label for="rrule-byweekday" class="col-form-label fw-medium">Wochentag(e)</label>
<select class="form-control" id="rrule-byweekday" multiple>
<option value="MO">Montag</option>
<option value="TU">Dienstag</option>
<option value="WE">Mittwoch</option>
<option value="TH">Donnerstag</option>
<option value="FR">Freitag</option>
<option value="SA">Samstag</option>
<option value="SU">Sonntag</option>
</select>
</div>
<div class="mb-2" id="monthly-options" style="display:none;">
<label class="col-form-label fw-medium">Monatliches Muster</label>
<select class="form-control" id="monthly-type">
<option value="BYMONTHDAY">Jeden X. Tag des Monats</option>
<option value="BYSETPOS">Jeden X. [Wochentag] im Monat</option>
</select>
<div class=" mt-2 row" id="monthly-day-select">
<label class="mr-2 col-form-label fw-medium col-2">Tag:</label>
<select class="form-control w-auto col-3" id="rrule-bymonthday">
<!-- Auswahl 131 -->
<?php for ($i = 1; $i <= 31; $i++): ?>
<option value="<?= $i ?>"><?= $i ?></option>
<?php endfor; ?>
</select>
</div>
<div class="mt-2 row" id="monthly-setpos-select" style="display:none;">
<label class="mr-2 col-2 col-form-label fw-medium">Position:</label>
<select class="form-control col-3 w-auto" id="rrule-setpos">
<option value="1">Erster</option>
<option value="2">Zweiter</option>
<option value="3">Dritter</option>
<option value="4">Vierter</option>
<option value="-1">Letzter</option>
</select>
<label class="mr-2 col-2 ml-3 col-form-label fw-medium text-center">Tag:</label>
<select class="form-control col-3 w-auto" id="rrule-bynweekday">
<option value="MO">Montag</option>
<option value="TU">Dienstag</option>
<option value="WE">Mittwoch</option>
<option value="TH">Donnerstag</option>
<option value="FR">Freitag</option>
<option value="SA">Samstag</option>
<option value="SU">Sonntag</option>
</select>
</div>
</div>
</div>
</div>
@@ -570,6 +670,7 @@ endforeach;
</div>
<div class="d-inline-block" id="customer-info-check-info"></div>
</div>
<div id="relContainer2" style="position:relative">
<select id="customer" class="jumpevent"></select>
</div>
@@ -651,13 +752,16 @@ endforeach;
</div>
<div id="output"></div>
<script type="text/javascript" src="<?= self::getResourcePath() ?>plugins/select2/js/i18n/de.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript" src="<?=self::getResourcePath()?>plugins/tinymce/tinymce.min.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript"
src="<?= self::getResourcePath() ?>plugins/select2/js/i18n/de.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript"
src="<?= self::getResourcePath() ?>plugins/tinymce/tinymce.min.js?<?= $git_merge_ts ?>"></script>
<script>
let requestUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'getCalendarEvents']) ?>";
let requestEventUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'getCalendarEvent']) ?>";
let requestEventSearchURL = "<?= self::getUrl("Calendar", "api", ['do' => 'searchCalendarEvents']) ?>";
let requestgenerateEventsxlsx = "<?= self::getUrl("Calendar", "api", ['do' => 'generateCalendarEventsXlsx']) ?>";
let requestEventAttachmentUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'getCalendarEventAttachment']) ?>";
let requestEventAttachmentTmpUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'getCalendarEventAttachmentTmp']) ?>";
let requestEventAttachmentTmpDeleteUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'deleteCalendarEventAttachmentTmp']) ?>";
@@ -728,7 +832,6 @@ endforeach;
endforeach; ?>
</script>
<script type="text/javascript"
src="<?= self::getResourcePath() ?>js/pages/Calendar/View.js?<?= $git_merge_ts ?>"></script>

View File

@@ -184,7 +184,7 @@ $pagination_entity_name = "Zustimmungserklärungen";
'key' => 'inspection_planner',
'header' => 'Begehung Planer durchgeführt',
'icon' => 'fas fa-clipboard-check',
'denominator' => $stats['building'] + $stats['street'],
'denominator' => $stats['building'],
'color' => '#28a745'
],
[
@@ -198,7 +198,7 @@ $pagination_entity_name = "Zustimmungserklärungen";
'key' => 'conduit_installed_ftu',
'header' => 'Leerrohr bis HAK',
'icon' => 'fas fa-road',
'denominator' => $stats['street'],
'denominator' => $stats['building'],
'color' => '#f5b902'
],
[

View File

@@ -142,6 +142,12 @@
$('body').on('click', '#bmd-export-nlz', function () {
window.open('<?= self::getUrl("TimerecordingBilling", "api", ['do' => 'generatebmdexportnlz']) ?>&month=' + $('#month').data('month'), '_blank');
});
$('body').on('click', '#open-workdays', function () {
window.open('<?= self::getUrl("TimerecordingBilling", "api", ['do' => 'generateopenworkdays']) ?>&month=' + $('#month').data('month'), '_blank');
});
$('body').on('click', '#month-complete', function () {
if (confirm('Monat ' + $('#month').data('month') + ' wirklich abschließen?')) {
$('#datatable_wrapper').hide();

View File

@@ -92,7 +92,7 @@
</li>
<?php endif; ?>
<?php if($me->is(["Admin", "netowner", "salespartner"]) && ($me->is("employee") || $me->can(["Fibu", "Billing", "Preorderpricing", "Preorderbilling"]) || $me->address_id == 2187)): ?>
<?php if($me->is(["Admin", "netowner", "salespartner"]) && ($me->is("employee") || $me->can(["Fibu", "Billing", "Preorderpricing", "Preorderbilling"])) || in_array($me->address_id, [1,209,5908,2187])): ?>
<li class="has-submenu mobile-hide">
<a href="#">
<i class="fas fa-fw fa-money-from-bracket"></i> Backoffice <div class="arrow-down"></div>