1713 lines
88 KiB
PHP
1713 lines
88 KiB
PHP
<?php
|
|
$pagination_baseurl = $this->getUrl($Mod,"Index");
|
|
$pagination_baseurl_params = ["filter" => $filter];
|
|
$pagination_entity_name = "Vorbestellungen";
|
|
|
|
?>
|
|
|
|
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/header.php"); ?>
|
|
|
|
<style>
|
|
.select2-selection.select2-selection--multiple {
|
|
min-height: calc(1.5em + .9rem + 2px);
|
|
}
|
|
|
|
.preorder-campaign-header, .preorder-campaign-header-buttons {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.preorder-campaign-import {
|
|
display: flex;
|
|
gap: 8px;
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.preorder-campaign-header-buttons {
|
|
max-width: 900px;
|
|
}
|
|
|
|
.tr-highlight {
|
|
background-color: #a0eaaf !important;
|
|
}
|
|
|
|
.tr-highlight .status {
|
|
border-radius: unset !important;
|
|
}
|
|
|
|
.is-billed-button {
|
|
padding:6px;
|
|
padding-left: 8px;
|
|
padding-right: 8px;
|
|
background-color: #25b343;
|
|
color: #fff;
|
|
}
|
|
|
|
.set-billed-button {
|
|
padding:6px;
|
|
padding-left: 8px;
|
|
padding-right: 8px;
|
|
border: 1px solid #d0d0d0;
|
|
}
|
|
.set-billed-button:hover {
|
|
background-color: #007bff;
|
|
color: #fff;
|
|
}
|
|
|
|
|
|
@media (max-width: 1720px) {
|
|
.preorder-filters .col-sm-12 {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: flex-end;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 576px) {
|
|
.preorder-campaign-import, .preorder-campaign-header {
|
|
display: grid;
|
|
grid-template-columns: 1fr;
|
|
grid-gap: 8px;
|
|
}
|
|
|
|
.preorder-campaign-table-wrapper {
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.preorder-campaign-header h4 {
|
|
text-align: center;
|
|
}
|
|
|
|
.preorder-campaign-header-buttons {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
grid-gap: 8px;
|
|
}
|
|
|
|
.preorder-campaign-table-actions {
|
|
display: grid;
|
|
grid-gap: 4px;
|
|
grid-template-columns: auto auto auto;
|
|
}
|
|
|
|
.preorder-campaign-table-actions a {
|
|
text-align: center;
|
|
font-size: 24px;
|
|
}
|
|
|
|
.preorder-campaign-table-actions a[title="Vorbestellkampagne Löschen"] {
|
|
grid-column: 3;
|
|
}
|
|
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
$(document).ready(function () {
|
|
if (window.matchMedia('(min-width: 576px)').matches) {
|
|
return;
|
|
}
|
|
|
|
// in ul.pagination
|
|
// if .page-item.disabled.text-secondary exists
|
|
// only keep the first 2 .page-item, the last 2 .page-item and the .page-item.disabled.text-secondary and the one before and the one after that
|
|
|
|
const pagination = $("ul.pagination");
|
|
const disabled = pagination.find(".page-item.disabled.points");
|
|
|
|
if (disabled.length) {
|
|
const first = pagination.find(".page-item").first();
|
|
const firstNext = first.next();
|
|
const last = pagination.find(".page-item").last();
|
|
const lastNext = last.prev();
|
|
const prev = disabled.prev();
|
|
const next = disabled.next();
|
|
const notToDelete = [first, firstNext, last, lastNext, prev, next, disabled];
|
|
|
|
// loop through pagination.find(".page-item") and remove all but the first, last, prev, next, firstNext, lastNext
|
|
|
|
pagination.find(".page-item").each(function (index, item) {
|
|
// if (!notToDelete.includes($(item))) {
|
|
// $(item).remove();
|
|
// } fix this becaues of we need [0] of notToDelete to compare
|
|
let check = false;
|
|
notToDelete.forEach(function (n) {
|
|
if (n[0] === item) {
|
|
check = true;
|
|
}
|
|
});
|
|
|
|
if (!check) {
|
|
$(item).remove();
|
|
}
|
|
|
|
});
|
|
|
|
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<!-- start page title -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="page-title-box">
|
|
<div class="page-title-right">
|
|
<ol class="breadcrumb m-0">
|
|
<li class="breadcrumb-item"><a href="<?=self::getUrl("Dashboard")?>"><?=MFAPPNAME_SLUG?></a></li>
|
|
<li class="breadcrumb-item"><a href="<?=self::getUrl("Preordercampaign")?>">Vorbestellkampagnen</a></li>
|
|
<li class="breadcrumb-item active">Vorbestellungen</li>
|
|
</ol>
|
|
</div>
|
|
<h4 class="page-title">Vorbestellungen<?=(isset($campaign) && $campaign) ? " - ".$campaign->name : ""?></h4>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- end page title -->
|
|
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
|
|
<div class="card">
|
|
<div class="card-body mb-3">
|
|
<h4 class="header-title mb-3">Filter</h4>
|
|
|
|
<form method="get" action="<?=self::getUrl("Preorder")?>" class="preorder-filters">
|
|
<div class="row">
|
|
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_preordercampaign_id">Kampagne</label>
|
|
<select name="filter[preordercampaign_id]" id="filter_preordercampaign_id" class="form-control">
|
|
<option value="">Alle</option>
|
|
<?php foreach($my_campaigns as $c): ?>
|
|
<option value="<?=$c->id?>" <?=(isset($campaign) && $c->id == $campaign->id) ? "selected='selected'" : ""?>><?=$c->name?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="partner_id">Partner</label>
|
|
<select name="filter[partner_id][]" id="filter_partner_id" class="form-control" multiple="multiple">
|
|
<?php
|
|
// if partner_id is string unset it from filter
|
|
if(isset($filter) && array_key_exists("partner_id", $filter) && is_string($filter["partner_id"])) {
|
|
unset($filter["partner_id"]);
|
|
}
|
|
?>
|
|
<?php foreach($partners as $partner): ?>
|
|
<option value="<?=$partner['partner_id']?>" <?=(isset($filter) && array_key_exists("partner_id", $filter) && in_array($partner['partner_id'], $filter["partner_id"])) ? "selected='selected'" : ""?>><?=$partner['name']?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_status">Status</label>
|
|
<select name="filter[status][]" id="filter_status" class="form-control" multiple="multiple">
|
|
<?php foreach(PreorderstatusModel::getAll() as $status): ?>
|
|
<option value="<?=$status->id?>" <?=(isset($filter) && array_key_exists("status", $filter) && in_array($status->id, $filter['status'])) ? "selected='selected'" : ""?>><?=$status->code?> - <?=$status->name?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_borderpoint_status">Borderpoint Status</label>
|
|
<select name="filter[borderpoint_status]" id="filter_borderpoint_status" class="form-control">
|
|
<option></option>
|
|
<option value="need_measurement" <?=(isset($filter) && array_key_exists("borderpoint_status", $filter) && $filter["borderpoint_status"] == "need_measurement") ? "selected='selected'" : ""?>>Messung erforderlich</option>
|
|
<option value="informed" <?=(isset($filter) && array_key_exists("borderpoint_status", $filter) && $filter["borderpoint_status"] == "informed") ? "selected='selected'" : ""?>>Beauskunftet</option>
|
|
<option value="need_digging" <?=(isset($filter) && array_key_exists("borderpoint_status", $filter) && $filter["borderpoint_status"] == "need_digging") ? "selected='selected'" : ""?>>Grabung ausständig</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="connection_type">Anschlusstyp</label>
|
|
<select name="filter[connection_type][]" id="connection_type_id" class="form-control" multiple="multiple">
|
|
<?php
|
|
$connection_types = ["single-dwelling","multi-dwelling","apartment-building","apartment","business"];
|
|
foreach($connection_types as $connection_type): ?>
|
|
<option value="<?=$connection_type?>" <?=(isset($filter) && array_key_exists("connection_type", $filter) && in_array($connection_type, $filter["connection_type"])) ? "selected='selected'" : ""?>><?=__($connection_type, "preorder")?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_type">Bestelltyp</label>
|
|
<select name="filter[type][]" id="filter_type" class="form-control" multiple="multiple">
|
|
<option value="interest" <?=(isset($filter) && array_key_exists("type", $filter) && in_array("interest", $filter['type'])) ? "selected='selected'" : ""?>>Interessensbekundung</option>
|
|
<option value="provision" <?=(isset($filter) && array_key_exists("type", $filter) && in_array("provision", $filter['type'])) ? "selected='selected'" : ""?>>Vorsorgeanschluss</option>
|
|
<option value="order" <?=(isset($filter) && array_key_exists("type", $filter) && in_array("order", $filter['type'])) ? "selected='selected'" : ""?>>Vollanschluss</option>
|
|
<option value="legacytransfer" <?=(isset($filter) && array_key_exists("type", $filter) && in_array("legacytransfer", $filter['type'])) ? "selected='selected'" : ""?>>Bestandsübernahme</option>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- INFO THIS FILTER IS CURRENTLY HIDDEN -->
|
|
<!-- <div class="col-sm-12 col-md-2">-->
|
|
<!-- <label class="form-label" for="filter_addon_services">Zusatzdienste</label>-->
|
|
<!-- <select name="filter[addon_services]" id="filter_addon_services" class="form-control">-->
|
|
<!-- <option></option>-->
|
|
<!-- <option value="1" --><?php //=(isset($filter['addon_services']) && $filter['addon_services'] == 1) ? "selected='selected'" : ""?><!-- >Nur mit Zusatzdiensten</option>-->
|
|
<!-- </select>-->
|
|
<!-- </div>-->
|
|
</div>
|
|
<div class="row mt-2">
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_ucode">Bestellcode</label>
|
|
<input type="text" class="form-control" name="filter[ucode]" id="filter_ucode" value="<?=$filter['ucode'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_oaid">OAID</label>
|
|
<input type="text" class="form-control" name="filter[oaid]" id="filter_oaid" value="<?=$filter['oaid'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_workorder_name">Rimo Workorder Name</label>
|
|
<input type="text" class="form-control" name="filter[rimo_workorder_name]" id="filter_workorder_name" value="<?=$filter['workorder_name'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_address">Anschlussadresse</label>
|
|
<input type="text" class="form-control" name="filter[address]" id="filter_address" value="<?=$filter['address'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_kunde">Kunde</label>
|
|
<input type="text" class="form-control" name="filter[kunde]" id="filter_kunde" value="<?=$filter['kunde'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_magic_search">erweiterte Suche</label>
|
|
<input type="text" class="form-control" name="filter[magic_search]" id="filter_magic_search" value="<?=$filter['magic_search'] ?? ""?>" />
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_created_from">Zeitraum</label>
|
|
<select name="filter[created_from]" id="filter_created_from" class="form-control">
|
|
<option value=""></option>
|
|
<option value="7" <?=(isset($filter) && array_key_exists("created_from", $filter) && $filter["created_from"] == 7) ? "selected='selected'" : ""?>>7 Tage</option>
|
|
<option value="14" <?=(isset($filter) && array_key_exists("created_from", $filter) && $filter["created_from"] == 14) ? "selected='selected'" : ""?>>14 Tage</option>
|
|
<option value="30" <?=(isset($filter) && array_key_exists("created_from", $filter) && $filter["created_from"] == 30) ? "selected='selected'" : ""?>>30 Tage</option>
|
|
</select>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row mt-2">
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_unit_missing">Wohneinheit</label>
|
|
<select name="filter[unit_missing]" id="filter_unit_missing" class="form-control">
|
|
<option value=""></option>
|
|
<option value="yes" <?=(isset($filter) && array_key_exists("unit_missing", $filter) && $filter['unit_missing'] == "yes") ? "selected='selected'" : ""?>>Wohneinheit fehlt</option>
|
|
<option value="no" <?=(isset($filter) && array_key_exists("unit_missing", $filter) && $filter['unit_missing'] == "no") ? "selected='selected'" : ""?>>Wohneinheit vorhanden</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="rimo_home_extref">Wohneinheit Rimo-Extref</label>
|
|
<select name="filter[rimo_home_extref]" id="filter_rimo_home_extref" class="form-control">
|
|
<option value=""></option>
|
|
<option value="0" <?=(isset($filter) && array_key_exists("rimo_home_extref", $filter) && strlen($filter['rimo_home_extref']) && intval($filter['rimo_home_extref']) === 0) ? "selected='selected'" : ""?>>Fehlt</option>
|
|
<option value="1" <?=(isset($filter) && array_key_exists("rimo_home_extref", $filter) && intval($filter['rimo_home_extref']) === 1) ? "selected='selected'" : ""?>>Vorhanden</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_connection_count">Anz. Anschlüsse</label>
|
|
<select name="filter[connection_count]" id="filter_connection_count" class="form-control">
|
|
<option value=""></option>
|
|
<option value="1" <?=(isset($filter) && array_key_exists("connection_count", $filter) && intval($filter['connection_count']) === 1) ? "selected='selected'" : ""?>>1</option>
|
|
<option value="2" <?=(isset($filter) && array_key_exists("connection_count", $filter) && intval($filter['connection_count']) === 2) ? "selected='selected'" : ""?>> > 1</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_borderpoint">Übergabepunkt</label>
|
|
<select name="filter[borderpoint]" id="filter_borderpoint" class="form-control">
|
|
<option value="all" <?=(isset($filter) && array_key_exists("borderpoint", $filter) && $filter["borderpoint"] == "all") ? "selected='selected'" : ""?>>Alle</option>
|
|
<option value="with" <?=(isset($filter) && array_key_exists("borderpoint", $filter) && $filter["borderpoint"] == "with") ? "selected='selected'" : ""?>>Mit</option>
|
|
<option value="without" <?=(isset($filter) && array_key_exists("borderpoint", $filter) && $filter["borderpoint"] == "without") ? "selected='selected'" : ""?>>Ohne</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_rimo_workorder">Rimo Workorder</label>
|
|
<select name="filter[rimo_workorder]" id="filter_rimo_workorder" class="form-control">
|
|
<option value=""></option>
|
|
<option value="0" <?=(isset($filter) && array_key_exists("rimo_workorder", $filter) && strlen($filter['rimo_workorder']) && intval($filter['rimo_workorder']) === 0) ? "selected='selected'" : ""?>>Nicht erstellt</option>
|
|
<option value="1" <?=(isset($filter) && array_key_exists("rimo_workorder", $filter) && intval($filter['rimo_workorder']) === 1) ? "selected='selected'" : ""?>>Erstellt</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_rimo_workorder">Workorder Status</label>
|
|
<select name="filter[rimo_workorder_status][]" id="filter_rimo_workorder_status" multiple class="form-control">
|
|
<option value="Clarify" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status']) && in_array("Clarify", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Clarify</option>
|
|
<option value="Accepted" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Accepted", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Accepted</option>
|
|
<option value="Plan released" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Plan released", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Plan released</option>
|
|
<option value="Assigned" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Assigned", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Assigned</option>
|
|
<option value="Executed" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Executed", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Executed</option>
|
|
<option value="Documented" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Documented", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Documented</option>
|
|
<option value="Canceled" <?=(isset($filter) && array_key_exists("rimo_workorder_status", $filter) && is_array($filter['rimo_workorder_status'])&& in_array("Canceled", $filter['rimo_workorder_status'])) ? "selected='selected'" : ""?>>Canceled</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-1">
|
|
<label class="form-label" for="filter_fcp">FCP</label>
|
|
<select name="filter[fcp][]" id="filter_fcp" multiple class="form-control">
|
|
<option value="">Kein FCP gefunden</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_rimo_workorder_team_id">Rimo Workorder Assigned Team</label>
|
|
<select name="filter[rimo_workorder_team_id]" id="filter_rimo_workorder_team_id" class="form-control">
|
|
<option value=""></option>
|
|
<?php foreach(RimoWorkorderModel::getTeams() as $id => $team): ?>
|
|
<option value="<?=$id?>" <?=(isset($filter) && array_key_exists("rimo_workorder_team_id", $filter) && $filter["rimo_workorder_team_id"] == $id) ? "selected='selected'" : ""?>><?=$team?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="filter_preorder_status_flags">Statusflag</label>
|
|
<select name="filter[preorder_status_flags][]" id="filter_preorder_status_flags" multiple class="form-control">
|
|
<?php foreach(PreorderStatusflagModel::getAll() as $flag): ?>
|
|
<option value="<?=$flag->id?>" <?=(isset($filter) && array_key_exists("preorder_status_flags", $filter) && is_array($filter['preorder_status_flags']) && in_array($flag->id, $filter['preorder_status_flags'])) ? "selected='selected'" : ""?>><?=$flag->name?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row mt-2">
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="datum_von">Datum von</label>
|
|
<div class="input-group date" data-provide="datepicker" data-date-format="dd.mm.yyyy" data-date-language="de">
|
|
<input type="text" class="form-control" id="datum_von" name="filter[create_from]" value="<?=$filter['create_from'] ?? ""?>">
|
|
<div class="input-group-append">
|
|
<span class="input-group-text"><i class="fa fa-calendar"></i></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="datum_bis">Datum bis</label>
|
|
<div class="input-group date" data-provide="datepicker" data-date-format="dd.mm.yyyy" data-date-language="de">
|
|
<input type="text" class="form-control" id="datum_bis" name="filter[create_to]" value="<?=$filter['create_to'] ?? ""?>">
|
|
<div class="input-group-append">
|
|
<span class="input-group-text"><i class="fa fa-calendar"></i></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if ($me->isAdmin() || $me->address->id == 209): ?>
|
|
<div class="col-sm-12 col-md-2">
|
|
<label class="form-label" for="billed">Verrechnet</label>
|
|
<select name="filter[billed]" id="filter_billed" class="form-control">
|
|
<option value=""></option>
|
|
<option value="1" <?=(isset($filter) && array_key_exists("billed", $filter) && strlen($filter['billed']) && intval($filter['billed']) === 0) ? "selected='selected'" : ""?>>Ja</option>
|
|
<option value="0" <?=(isset($filter) && array_key_exists("billed", $filter) && intval($filter['billed']) === 1) ? "selected='selected'" : ""?>>Nein</option>
|
|
</select>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
</div>
|
|
|
|
<div class="row mt-2">
|
|
<div class="col preorder-campaign-header-buttons">
|
|
<button type="submit" class="btn btn-primary">Filter anwenden</button>
|
|
<?php if(isset($campaign) && $campaign->id): ?>
|
|
<a class="btn btn-secondary" href="<?=self::getUrl("Preorder", "", ['filter' => ['preordercampaign_id' => $campaign->id], "resetFilter" => 1])?>">Filter zurücksetzen</a>
|
|
<?php else: ?>
|
|
<a class="btn btn-secondary" href="<?=self::getUrl("Preorder", "Index", ["resetFilter" => 1])?>">Filter zurücksetzen</a>
|
|
<?php endif; ?>
|
|
<?php if(!$me->is("Preorderfront")): ?>
|
|
<button type="submit" formaction="<?=self::getUrl("Preorder", "export")?>" id="export-button" class="btn btn-outline-success"><i class="fas fa-download"></i> CSV-Export</button>
|
|
<?php endif; ?>
|
|
<?php if ($me->isAdmin() || $me->address->id == 209): ?>
|
|
<a href="<?=self::getUrl("Preorder", "custom300")?>" class="btn btn-outline-info"><i class="fas fa-envelope"></i> Custom-300 Benachrichtigungen</a>
|
|
<?php endif; ?>
|
|
|
|
<div class="dropdown">
|
|
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
|
|
Filter-Vorlagen <i class="fas fa-caret-down"></i>
|
|
</button>
|
|
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
|
<li><a class="dropdown-item" href="<?=self::getUrl("Preorder", "Index", ["filter" => ["status" => [21,22,23,24,25], "rimo_workorder" => 1, "borderpoint" => "all"]])?>">Gelöschte Bestellungen mit Workorder</a></li>
|
|
<li><a class="dropdown-item" href="<?=self::getUrl("Preorder", "Index", ["filter" => ["preorder_status_flags" => [4], "connection_type" => ["apartment", "apartment-building"], "borderpoint" => "all"]])?>">Wohnung - Verkabelung erledigt</a></li>
|
|
<?php if ($me->isAdmin() || $me->address->id == 209): ?>
|
|
<li><a class="dropdown-item" href="<?=self::getUrl("Preorder", "Index", ["filter" => ["onlyShowCustomMailSent" => 1]])?>">Bestellungen mit gesendeter Custom-300 Benachrichtigung</a></li>
|
|
<input type="hidden" name="filter[onlyShowCustomMailSent]" value="<?= (isset($filter['onlyShowCustomMailSent']) && $filter['onlyShowCustomMailSent'] == 1) ? 1 : 0 ?>"/>
|
|
<?php endif; ?>
|
|
</ul>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="row col" id="map-link">
|
|
<a href="#" class="btn btn-success" onclick="refreshMap()"><i class="far fa-map"></i> Übersichtskarte einblenden</a>
|
|
</div>
|
|
<div class="row hidden" id="map-row">
|
|
<div id="preorder-map" style="height:70vh; width: 100%"></div>
|
|
<div class="row mt-1">
|
|
<div class="col">
|
|
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="centerMap()"><i class="far fa-dot-circle fa-fw"></i> Zentrieren</button>
|
|
<button type="button" class="btn btn-sm btn-outline-success" onclick="toggleTileset()" title="Zwischen Karte und Satellitenbild umschalten"><i class="far fa-arrow-right-arrow-left fa-fw"></i> Karte/Satellit</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="card">
|
|
<div class="card-body mb-3">
|
|
|
|
<div class="preorder-campaign-header">
|
|
<h4 class="header-title">Liste aller Vorbestellungen<?= (isset($campaign) && $campaign) ? " - " . $campaign->name : "" ?></h4>
|
|
<?php if (isset($filter['preordercampaign_id'])): ?>
|
|
<div class="float-right">
|
|
<a class="btn btn-primary mb-2"
|
|
href="<?= self::getUrl("Preorder", "add", ["preordercampaign_id" => $filter['preordercampaign_id']]) ?>"><i
|
|
class="fas fa-plus"></i> Neue Vorbestellung anlegen</a>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
|
|
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination.php"); ?>
|
|
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination-summary.php"); ?>
|
|
|
|
<div class="preorder-campaign-table-wrapper">
|
|
<table class="table table-striped table-hover">
|
|
<tr>
|
|
<?php if(!$me->is(["preorderfront"]) && !$me->is("preorderreadonly")): ?>
|
|
<th></th>
|
|
<?php endif; ?>
|
|
<?php if(!$me->is("preorderfront")): ?><th>Kampagne</th><?php endif; ?>
|
|
<th>Bestelltyp<br />Bestellcode</th>
|
|
<th>Status</th>
|
|
<th>Anschlussadresse</th>
|
|
<th>Anschlüsse<br />OAID</th>
|
|
<th>Kunde</th>
|
|
<th>Kontakt</th>
|
|
<th>Partner</th>
|
|
<th>Attribute</th>
|
|
<th>Erstellt<br />Bearbeitet</th>
|
|
<th></th>
|
|
<th></th>
|
|
</tr>
|
|
<?php foreach($preorders as $preorder):
|
|
|
|
$hasStatus245 = false;
|
|
foreach (PreorderstatusModel::getAll() as $status) {
|
|
if ($preorder->status_id == $status->id && $status->code == 245) {
|
|
$hasStatus245 = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$requiredFlagIds = [1, 3, 4, 5];
|
|
$allFlagsChecked = true;
|
|
|
|
foreach ($requiredFlagIds as $flagId) {
|
|
if (!array_key_exists($flagId, $preorder->statusflags) ||
|
|
!$preorder->statusflags[$flagId]->value ||
|
|
!$preorder->statusflags[$flagId]->value->value) {
|
|
$allFlagsChecked = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$doHighlight = $hasStatus245 && $allFlagsChecked;
|
|
|
|
?>
|
|
<tr class="preorder-list-tr <?=($doHighlight) ? " tr-highlight" : ""?>" id="preorder-<?=$preorder->id?>">
|
|
<?php if(!$me->is(["preorderfront"]) && !$me->is("preorderreadonly")): ?>
|
|
<td class="bg-lightblue border border-end text-center pointer" onclick="togglePreorder(<?=$preorder->id?>); return false;">
|
|
<i class="fas fa-fw fa-angle-down"></i>
|
|
</td>
|
|
<?php endif; ?>
|
|
<?php if(!$me->is("preorderfront")): ?><td><?=$preorder->campaign->name?></td><?php endif; ?>
|
|
<td>
|
|
<?=__($preorder->type, "preorder")?><br />
|
|
<?=$preorder->ucode?>
|
|
</td>
|
|
<td class="status"><?=$preorder->status->code?> - <?=$preorder->status->name?></td>
|
|
<?php if($preorder->building_id): ?>
|
|
<td><?=$preorder->building->street?><br /><?=$preorder->building->zip?> <?=$preorder->building->city?></td>
|
|
<?php elseif($preorder->adb_hausnummer_id): ?>
|
|
<td <?=($preorder->address_created) ? "class='alert-warning' title='Adresse manuell angelegt'" : ""?>">
|
|
<?=$preorder->adb_hausnummer->strasse->name?>
|
|
<?=$preorder->adb_hausnummer->hausnummer?><?=($preorder->adb_hausnummer->stiege) ? "/".$preorder->adb_hausnummer->stiege : ""?><br />
|
|
<?=($preorder->adb_wohneinheit_id) ? ((string)$preorder->adb_wohneinheit ? $preorder->adb_wohneinheit."<br />" : "") : "<i class='text-pink'><keine Wohneinheit></i><br />"?>
|
|
<?=$preorder->adb_hausnummer->plz->plz?>
|
|
<?=$preorder->adb_hausnummer->ortschaft->name?><br />
|
|
<?=$preorder->adb_hausnummer->strasse->gemeinde->name?>
|
|
</td>
|
|
<?php else: ?>
|
|
<td></td>
|
|
<?php endif; ?>
|
|
<td>
|
|
<?=($preorder->connection_count) ? $preorder->connection_count : 1?><br />
|
|
<span class="text-pink"><?=$preorder->oaid?></span>
|
|
</td>
|
|
<td>
|
|
<?=($preorder->company) ? $preorder->company : $preorder->firstname." ".$preorder->lastname?><br />
|
|
<?=$preorder->street?><?=($preorder->housenumber) ? " ".$preorder->housenumber : ""?><br />
|
|
<?=$preorder->zip?> <?=$preorder->city?>
|
|
</td>
|
|
<td>
|
|
<?=($preorder->phone) ? $preorder->phone."<br />" : ""?>
|
|
<?=($preorder->email) ? $preorder->email : ""?>
|
|
</td>
|
|
|
|
<td><?=($preorder->partner_id) ? $preorder->partner->getCompanyOrName() : ""?></td>
|
|
<td>
|
|
<label><input type="checkbox" name="attributes_bep_specified" id="attributes_bep_specified-<?=$preorder->id?>" data-preorder-id="<?=$preorder->id?>" value="1" <?=(is_array($preorder->attribute) && array_key_exists("bep_specified", $preorder->attribute) && $preorder->attribute["bep_specified"]) ? "checked='checked'" : ""?> /> Borderpoint festgelegt</label><br />
|
|
<label><input type="checkbox" name="attributes_inhouse_cabling_supplied" id="attributes_inhouse_cabling_supplied-<?=$preorder->id?>" data-preorder-id="<?=$preorder->id?>" value="1" <?=(is_array($preorder->attribute) && array_key_exists("inhouse_cabling_supplied", $preorder->attribute) && $preorder->attribute["inhouse_cabling_supplied"]) ? "checked='checked'" : ""?> /> Starterpaket erhalten</label>
|
|
</td>
|
|
<td style="white-space: nowrap" class="text-monospace">
|
|
<?=date('d.m.Y H:i', $preorder->create)?><br />
|
|
<span id="update-<?=$preorder->id?>"><?=date('d.m.Y H:i', $preorder->edit)?></span>
|
|
</td>
|
|
|
|
<td class="text-nowrap">
|
|
<?php if(0): ?>
|
|
<?php if(!$me->address->hasPreorderBilling()): ?>
|
|
<?php if($preorder->adb_wohneinheit_id && $preorder->adb_wohneinheit->enduser_setup_invoice_date): ?>
|
|
<i class="fas fa-euro is-billed-button" title="Herstellungsentgelt verrechnet am <?=(new DateTime($preorder->adb_wohneinheit->enduser_setup_invoice_date))->format("d.m.Y")?>"></i>
|
|
<?php else: ?>
|
|
<a href="#" class="text-muted" onclick="setBilled(<?=$preorder->id?>)"><i class="fas fa-euro set-billed-button" title="Herstellungsentgelt als verrechnet markieren"></i></a>
|
|
<?php endif; ?>
|
|
<?php endif; ?>
|
|
<?php endif; ?>
|
|
|
|
<?php if($preorder->adb_wohneinheit_id && is_array($preorder->adb_wohneinheit->rimo_workorders) && count($preorder->adb_wohneinheit->rimo_workorders)):?>
|
|
<i class="fas fa-r p-1" title="Rimo Workorder erstellt"></i>
|
|
<?php endif; ?>
|
|
|
|
</td>
|
|
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
|
|
<div class="preorder-campaign-table-actions">
|
|
<?php if(!$me->is(["preorderfront"]) && !$me->is("preorderreadonly")): ?>
|
|
<a href="<?=self::getUrl("Preorder", "edit", ["id" => $preorder->id])?>"><i class="far fa-edit" title="Vorbestellung Bearbeiten"></i></a>
|
|
<a href="<?=self::getUrl("Preorder", "delete", ["id" => $preorder->id, "filter" => $filter])?>" class="text-danger" onclick="if(!confirm('Vorbestellung wirklich löschen?')) return false;" title="Vorbestellung Löschen"><i class="fas fa-trash"></i></a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<?php if(!$me->is(["preorderfront"]) && !$me->is("preorderreadonly")): ?>
|
|
<tr id="preorder-detail-<?=$preorder->id?>" style="display:none; background-color:#fff">
|
|
<td colspan="13">
|
|
<?php include(realpath(dirname(__FILE__))."/include/preorder-detail.php"); ?>
|
|
</td>
|
|
</tr>
|
|
<tr style="display:none;"></tr>
|
|
<?php endif; ?>
|
|
|
|
<?php endforeach; ?>
|
|
</table>
|
|
</div>
|
|
|
|
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination-summary.php"); ?>
|
|
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination.php"); ?>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function() {
|
|
$(".datepicker").datepicker({
|
|
//orientation: "bottom",
|
|
language: 'de',
|
|
format: "dd.mm.yyyy",
|
|
showWeekDays: true,
|
|
todayBtn: 'linked',
|
|
autoclose: true
|
|
});
|
|
$("#filter_type").select2({closeOnSelect: false});
|
|
$("#filter_status").select2({closeOnSelect: false});
|
|
$("#filter_partner_id").select2({closeOnSelect: false});
|
|
$("#connection_type_id").select2({closeOnSelect: false});
|
|
$("#filter_rimo_workorder_status").select2({closeOnSelect: false});
|
|
$("#filter_preorder_status_flags").select2({closeOnSelect: false});
|
|
|
|
var attributes = ["bep_specified", "inhouse_cabling_supplied"];
|
|
|
|
$(document).ready(function() {
|
|
// Toggle dropdown on button click
|
|
$('.dropdown-toggle').on('click', function(e) {
|
|
e.preventDefault();
|
|
$(this).siblings('.dropdown-menu').toggleClass('show');
|
|
});
|
|
|
|
// Close dropdown when clicking outside
|
|
$(document).on('click', function(e) {
|
|
if (!$(e.target).closest('.dropdown').length) {
|
|
$('.dropdown-menu').removeClass('show');
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
attributes.forEach(function(attrib) {
|
|
$("input[name=attributes_" + attrib + "]").change(function(ev) {
|
|
// save new value
|
|
var cb = $("#" + ev.currentTarget.id);
|
|
var value = $(cb).is(":checked") ? 1 : 0;
|
|
var preorder_id = $(cb).data("preorder-id");
|
|
|
|
$.post("<?=self::getUrl("Preorder", "Api")?>", {
|
|
do: "saveAttribute",
|
|
id: preorder_id,
|
|
attribute: attrib,
|
|
value: value
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
attributeSuccess(success.result);
|
|
} else {
|
|
attributeError(success.result.id, success.result.attribute);
|
|
}
|
|
},
|
|
"json"
|
|
);
|
|
|
|
// if attribute is inhouse_cabling_supplied and is checked or unchecked send an api request
|
|
// api
|
|
// do: setStatusFlag, preorder_id, flag_id: 1, value (0 or 1)
|
|
|
|
if (attrib == "inhouse_cabling_supplied") {
|
|
var flag_id = 1;
|
|
$.post("<?=self::getUrl("Preorder", "Api")?>", {
|
|
do: "setStatusFlag",
|
|
preorder_id: preorder_id,
|
|
flag_id: flag_id,
|
|
value: value
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
attributeSuccess(success.result);
|
|
} else {
|
|
attributeError(success.result.id, success.result.attribute);
|
|
}
|
|
},
|
|
"json"
|
|
);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
function setBilled(pid) {
|
|
if(!pid) return;
|
|
|
|
$.post("<?=self::getUrl("Preorder", "Api")?>", {
|
|
do: "setBilled",
|
|
id: pid
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
$("#preorder-" + pid + " .set-billed-button").parent().html("<i class='fas fa-euro is-billed-button' title='Herstellungsentgelt verrechnet am " + success.result.date + "'></i>");
|
|
}
|
|
},
|
|
"json"
|
|
);
|
|
}
|
|
|
|
function attributeSuccess(result) {
|
|
var id = result.id
|
|
var attribute = result.attribute
|
|
var update = result.update
|
|
|
|
$("#attributes_" + attribute + "-" + id).parent().removeClass("text-danger");
|
|
$("#attributes_" + attribute + "-" + id).parent().addClass("text-success");
|
|
if(update) {
|
|
$("#update-" + id).text(update);
|
|
$("#update-" + id).addClass("text-success")
|
|
}
|
|
setTimeout(function() {
|
|
$("#attributes_" + attribute + "-" + id).parent().removeClass("text-success");
|
|
$("#update-" + id).removeClass("text-success")
|
|
}, 2000, id, attribute);
|
|
}
|
|
|
|
function attributeError(id, attribute) {
|
|
$("#attributes_" + attribute + "-" + id).parent().addClass("text-danger");
|
|
$("#attributes_" + attribute + "-" + id).prop("checked", !$("#attributes_" + attribute + "-" + id).is(":checked"));
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Globals for map display
|
|
*/
|
|
var borderpoly = [];
|
|
<?php if(isset($campaign) && $campaign && $campaign->adb_netzgebiet): ?>
|
|
borderpoly = <?=($campaign->adb_netzgebiet->borderpoly) ? $campaign->adb_netzgebiet->borderpoly : "[]"?>;
|
|
<?php elseif($me->is("Admin")): ?>
|
|
borderpoly = [];
|
|
<?php foreach(ADBNetzgebietModel::search(["borderpoly" => true]) as $bp_netz): ?>
|
|
borderpoly.push(<?=$bp_netz->borderpoly?>);
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
|
|
var preorderMap;
|
|
var preorders = [];
|
|
var markers = [];
|
|
var markerState = true;
|
|
var mapCenterPos = [<?=TT_PLACEHOLDER_GPS_LAT?>, <?=TT_PLACEHOLDER_GPS_LONG?>];
|
|
var tileLayers = {};
|
|
var tilesets = {
|
|
"geolandbasemap": {name: "geolandbasemap", imgtype: "png"},
|
|
"bmaporthofoto30cm": {name: "bmaporthofoto30cm", imgtype: "jpeg"}
|
|
};
|
|
var currentTileset = "geolandbasemap";
|
|
|
|
|
|
|
|
function toggleTileset() {
|
|
if(currentTileset == "geolandbasemap") {
|
|
currentTileset = "bmaporthofoto30cm";
|
|
} else {
|
|
currentTileset = "geolandbasemap";
|
|
}
|
|
renderMap(true);
|
|
}
|
|
|
|
function refreshMap() {
|
|
// get Preorders and render map
|
|
$('#map-link').hide();
|
|
$('#map-row').show();
|
|
getMapdata();
|
|
$([document.documentElement, document.body]).animate({
|
|
scrollTop: $("#preorder-map").offset().top - 150
|
|
}, 500);
|
|
}
|
|
|
|
function renderMap(tilesetChangeOnly = false) {
|
|
if(preorderMap) {
|
|
if(!tilesetChangeOnly) {
|
|
markers.forEach(function(m) {
|
|
preorderMap.removeLayer(m);
|
|
});
|
|
}
|
|
} else {
|
|
preorderMap = L.map('preorder-map', {fullscreenControl: true, centerControl: true, switchviewControl: true}).setView([<?=TT_PLACEHOLDER_GPS_LAT?>, <?=TT_PLACEHOLDER_GPS_LONG?>], 12);
|
|
}
|
|
|
|
if(!(currentTileset in tileLayers)) {
|
|
tileLayers[currentTileset] = L.tileLayer('https://mapsneu.wien.gv.at/basemap/{id}/normal/google3857/{z}/{y}/{x}.{imgtype}', {
|
|
attribution: '© <a href="https://basemap.at">Basemap.at</a>',
|
|
minZoom: 6,
|
|
maxZoom: 19,
|
|
id: tilesets[currentTileset].name,
|
|
imgtype: tilesets[currentTileset].imgtype
|
|
});
|
|
}
|
|
|
|
tileLayers[currentTileset].addTo(preorderMap);
|
|
|
|
for(const [name, t] of Object.entries(tilesets)) {
|
|
if(name != currentTileset && preorderMap.hasLayer(tileLayers[name])) {
|
|
preorderMap.removeLayer(tileLayers[name]);
|
|
}
|
|
}
|
|
|
|
L.MakiMarkers.accessToken = '<?=TT_MAPBOX_TILE_API_TOKEN?>';
|
|
|
|
if(!tilesetChangeOnly) {
|
|
addMarkers();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function addMarkers() {
|
|
if(borderpoly) {
|
|
var border = L.polygon(borderpoly, {
|
|
fillColor: 'blue',
|
|
weight: 8,
|
|
opacity: 0.5,
|
|
color: 'violet', //Outline color
|
|
fillOpacity: 0.05
|
|
}).addTo(preorderMap);
|
|
}
|
|
|
|
if(!Array.isArray(preorders) | !preorders.length) {
|
|
return false;
|
|
}
|
|
// draw markers and calculate center position
|
|
var all_coords = [];
|
|
preorders.forEach(function(preorder) {
|
|
if(!preorder.gps_lat || !preorder.gps_long) {
|
|
return;
|
|
}
|
|
var gps = [preorder.gps_lat, preorder.gps_long];
|
|
all_coords.push(gps);
|
|
|
|
var icon_color = "#acf0ab";
|
|
var icon_name = "home";
|
|
|
|
if(preorder.type == "interest") {
|
|
icon_color = "#ec98a2";
|
|
} else if(preorder.type == "provision") {
|
|
icon_color = "#ffcd8b";
|
|
}
|
|
|
|
if(preorder.connection_type.match(/^multi/i) || preorder.count > 1) {
|
|
icon_name = "town";
|
|
} else if(preorder.connection_type.match(/^apartment-building/i)) {
|
|
icon_name = "city";
|
|
} else if(preorder.connection_type.match(/^business/i)) {
|
|
icon_name = "industry";
|
|
}
|
|
|
|
var marker_popup_content = `<?php include(realpath(dirname(__FILE__))."/include/preorder_popup.php");?>`;
|
|
|
|
// popup fields
|
|
const preorder_view_url = `<?=self::getUrl("Preorder")?>/Index?filter[ucode]=${preorder.ucode}#preorder=${preorder.id}`;
|
|
[
|
|
["PREORDER_URL", preorder_view_url],
|
|
["street", preorder.adb_strasse],
|
|
["hausnummer", preorder.adb_hausnummer],
|
|
["zip", preorder.adb_plz],
|
|
["city", preorder.adb_ort],
|
|
["type", preorder.type_label],
|
|
["typestyle", "color: #000; background-color: " + icon_color],
|
|
["adrcd", preorder.adrcd],
|
|
["extref", preorder.extref ? preorder.extref : ""],
|
|
["gps", (preorder.gps_lat && preorder.gps_long) ? preorder.gps_lat + ", " + preorder.gps_long : ""],
|
|
["contact", (preorder.company ? preorder.company + " " : preorder.firstname + " " + preorder.lastname)],
|
|
["phone", preorder.phone ? preorder.phone : ""],
|
|
["email", preorder.email ? preorder.email : ""],
|
|
["connectiontype", preorder.connection_type_label],
|
|
["count", preorder.connection_count]
|
|
].forEach(function(item) {
|
|
marker_popup_content = marker_popup_content.replaceAll("{{" + item[0].toUpperCase() + "}}", item[1]);
|
|
});
|
|
|
|
var icon = L.MakiMarkers.icon({icon: icon_name, color: icon_color, size: "l"});
|
|
var marker = L.marker(gps, {icon: icon}).addTo(preorderMap).bindPopup(marker_popup_content);
|
|
markers[preorder.id] = marker;
|
|
|
|
<?php if($me->is("Admin")): ?>
|
|
if(preorder.borderpoint_lat && preorder.borderpoint_long) {
|
|
var circle = L.circle([preorder.borderpoint_lat,preorder.borderpoint_long], {
|
|
color: 'orange',
|
|
fillColor: 'aqua',
|
|
fillOpacity: 0.8,
|
|
radius: 1
|
|
}).bindTooltip(preorder.borderpoint_lat + ", " + preorder.borderpoint_long).addTo(preorderMap);
|
|
}
|
|
|
|
/*if(preorder.trenches) {
|
|
preorder.trenches.forEach((trench) => {
|
|
var trench_line = L.polyline(trench, {
|
|
color: "limegreen"
|
|
}).addTo(preorderMap);
|
|
});
|
|
}*/
|
|
|
|
if(preorder.home_trench) {
|
|
var home_line = L.polyline(preorder.home_trench, {
|
|
color: "aqua"
|
|
}).addTo(preorderMap);
|
|
}
|
|
<?php endif; ?>
|
|
|
|
});
|
|
|
|
//fetch fcps and show on map
|
|
getFCPs(preorderMap);
|
|
|
|
// calculate center position
|
|
mapCenterPos = GetCenterFromDegrees(all_coords);
|
|
preorderMap.setView(mapCenterPos, 12);
|
|
|
|
return true;
|
|
}
|
|
|
|
async function getFCPs(map) {
|
|
var fcp = await $.get("<?=self::getUrl("Preorder", "Api")?>", {
|
|
do: "getFCPsForCampaign",
|
|
campaign_id: "<?=$campaign->id?>"
|
|
});
|
|
|
|
if(fcp.status == "OK") {
|
|
fcp.result.forEach((fcp) => {
|
|
var icon = L.MakiMarkers.icon({icon: "viewpoint", color: "yellow", size: "m"});
|
|
var marker = L.marker([fcp.lat, fcp.lng], {icon: icon}).addTo(map);
|
|
var google_maps_link = "https://www.google.com/maps/search/?api=1&query=" + fcp.lat + "," + fcp.lng;
|
|
var popup_content = "<a href='" + google_maps_link + "' target='_blank'>Google Maps</a><br />" + fcp.text;
|
|
marker.bindPopup(popup_content);
|
|
});
|
|
}
|
|
}
|
|
|
|
function centerMap() {
|
|
preorderMap.setView(mapCenterPos, 12);
|
|
}
|
|
|
|
// gets preorders and calls renderMap()
|
|
function getMapdata() {
|
|
filter = getFilter();
|
|
|
|
$.post('<?=self::getUrl("Preorder", "Api")?>', {
|
|
'do': "getFilteredPreorders",
|
|
filter: filter
|
|
},function(success) {
|
|
if(success.status == "OK") {
|
|
|
|
if(Array.isArray(success.result.preorders)) {
|
|
preorders = success.result.preorders;
|
|
renderMap();
|
|
}
|
|
}
|
|
},
|
|
'json'
|
|
);
|
|
|
|
}
|
|
|
|
function getFilter() {
|
|
var fields = ['preordercampaign_id', 'status', 'type', 'address', 'kunde', 'address_source'];
|
|
var filter = {};
|
|
fields.forEach(function(field) {
|
|
if(!field) {
|
|
return;
|
|
}
|
|
if(!$('#filter_' + field).length) {
|
|
return;
|
|
}
|
|
let val = $('#filter_' + field).val();
|
|
if(val.length) {
|
|
filter[field] = val;
|
|
}
|
|
});
|
|
|
|
return filter;
|
|
}
|
|
|
|
<?php if(is_array($filter) && count($filter)): ?>
|
|
//refreshMap();
|
|
<?php endif; ?>
|
|
|
|
|
|
function togglePreorder(id) {
|
|
$('#preorder-detail-' + id).toggle();
|
|
if($('#preorder-detail-' + id).is(":hidden")) {
|
|
$('#preorder-' + id).removeClass("bg-lightblue");
|
|
$('#preorder-' + id).removeClass("text-info");
|
|
history.replaceState(null, null, ' ');
|
|
} else {
|
|
$('#preorder-' + id).addClass("text-info");
|
|
$('#preorder-' + id).addClass("bg-lightblue");
|
|
location.hash = "preorder=" + id;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$("input.preorder-statusflag").change((e) => {
|
|
var elem = e.target;
|
|
var preorder_id = $(elem).data("preorder_id");
|
|
var flag_id = $(elem).data("flag_id");
|
|
var value = $(elem).prop("checked") ? 1 : 0;
|
|
|
|
$.ajax({
|
|
url: "<?=self::getUrl("Preorder", "api")?>",
|
|
type: "POST",
|
|
data: {
|
|
do: "setStatusFlag",
|
|
preorder_id: preorder_id,
|
|
flag_id: flag_id,
|
|
value: value
|
|
},
|
|
dataType: "json",
|
|
context: {
|
|
elem: elem,
|
|
preorder_id: preorder_id,
|
|
flag_id: flag_id,
|
|
},
|
|
success: function (success) {
|
|
var textelem = $("#preorder-" + this.preorder_id + "-statusflag-" + this.flag_id + "-text");
|
|
if(success.status != "OK") {
|
|
notify("error","Fehler beim Speichern des Statusflags");
|
|
$(this.elem).prop("checked", !$(this.elem).prop("checked"));
|
|
} else {
|
|
textelem.removeClass("text-danger").addClass("text-success");
|
|
setTimeout(function() {
|
|
textelem.removeClass("text-success");
|
|
textelem.removeClass("text-success")
|
|
}, 2000, textelem);
|
|
}
|
|
|
|
|
|
},
|
|
error: function () {
|
|
notify("error","Fehler beim Speichern des Statusflags");
|
|
$(this.elem).prop("checked", !$(this.elem).prop("checked"));
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// navigation
|
|
var preorder_id;
|
|
var hash = window.location.hash.substr(1);
|
|
var match = hash.match(/preorder=(\d+)/);
|
|
if(match && match[1]) {
|
|
preorder_id = match[1]
|
|
togglePreorder(preorder_id);
|
|
$('html, body').animate( {scrollTop: $('#preorder-' + preorder_id).offset().top - 230}, 200);
|
|
}
|
|
|
|
|
|
/*
|
|
* Borderpoint map
|
|
*/
|
|
|
|
var maps = {};
|
|
|
|
function loadBorderpointMap(id) {
|
|
var lat = $("#preorder-detail-" + id + "-map").data("lat");
|
|
var long = $("#preorder-detail-" + id + "-map").data("long");
|
|
|
|
var blat = $("#preorder-detail-" + id + "-map").data("blat");
|
|
var blong = $("#preorder-detail-" + id + "-map").data("blong");
|
|
|
|
var trenches = $("#preorder-detail-" + id + "-map").data("trench");
|
|
var home_trench = $("#preorder-detail-" + id + "-map").data("home-trench");
|
|
|
|
if(!("map-" + id in maps)) {
|
|
|
|
var map = L.map('preorder-map-' + id).setView([lat, long], 19);
|
|
|
|
var tileLayer = L.tileLayer('https://mapsneu.wien.gv.at/basemap/{id}/normal/google3857/{z}/{y}/{x}.{imgtype}', {
|
|
attribution: '© <a href="https://basemap.at">Basemap.at</a>',
|
|
minZoom: 12,
|
|
maxZoom: 19,
|
|
id: "bmaporthofoto30cm",
|
|
imgtype: "jpeg"
|
|
}).addTo(map);
|
|
|
|
var circle = L.circle([lat,long], {
|
|
color: 'orange',
|
|
fillColor: 'orange',
|
|
fillOpacity: 0.5,
|
|
radius: 1
|
|
}).bindTooltip(lat + ", " + long).addTo(map);
|
|
|
|
if(trenches) {
|
|
trenches.forEach((trench) => {
|
|
var trench_line = L.polyline(trench, {
|
|
color: "maroon",
|
|
weight: 7
|
|
}).addTo(map);
|
|
});
|
|
}
|
|
|
|
if(home_trench) {
|
|
var home_line = L.polyline(home_trench, {
|
|
color: "blue",
|
|
weight: 7
|
|
}).addTo(map);
|
|
}
|
|
|
|
maps["map-" + id] = map;
|
|
|
|
setTimeout((id) => {maps["map-" + id].invalidateSize()}, 50, id);
|
|
}
|
|
}
|
|
|
|
|
|
// detail
|
|
function togglePortdata(pid) {
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").val($("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").data("default"));
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_shelf']").val($("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_shelf']").data("default"));
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_module']").val($("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_module']").data("default"));
|
|
|
|
$("#preorder-detail-" + pid + "-patchposition-port-form input[name='patch_port']").val($("#preorder-detail-" + pid + "-patchposition-port-form input[name='patch_port']").data("default"));
|
|
|
|
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form").toggle();
|
|
$("#preorder-detail-" + pid + "-patchposition-string").toggle();
|
|
|
|
$("#preorder-detail-" + pid + "-patchposition-port-form").toggle();
|
|
$("#preorder-detail-" + pid + "-patchposition-port").toggle();
|
|
|
|
$("#preorder-detail-" + pid + "-patchposition-edit").toggle();
|
|
$("#preorder-detail-" + pid + "-patchposition-controls").toggle();
|
|
|
|
}
|
|
|
|
function savePortdata(pid) {
|
|
if(!pid) return;
|
|
|
|
var cluster = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").val();
|
|
var shelf = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_shelf']").val();
|
|
var module = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_module']").val();
|
|
var port = $("#preorder-detail-" + pid + "-patchposition-port-form input[name='patch_port']").val();
|
|
|
|
$.post("<?=self::getUrl("Preorder", "Api")?>", {
|
|
do: "savePatchposition",
|
|
id: pid,
|
|
cluster: cluster,
|
|
shelf: shelf,
|
|
module: module,
|
|
port: port
|
|
},
|
|
(success) => {
|
|
if(success.status == "OK") {
|
|
var pid = success.result.id;
|
|
var default_cluster = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").data("default");
|
|
var cluster = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").val();
|
|
var shelf = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_shelf']").val();
|
|
var module = $("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_module']").val();
|
|
var port = $("#preorder-detail-" + pid + "-patchposition-port-form input[name='patch_port']").val();
|
|
|
|
if(!cluster) cluster = default_cluster;
|
|
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_cluster']").data("default", cluster);
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_shelf']").data("default", shelf);
|
|
$("#preorder-detail-" + pid + "-patchposition-data-form input[name='patch_module']").data("default", module);
|
|
$("#preorder-detail-" + pid + "-patchposition-port-form input[name='patch_port']").data("default", port);
|
|
$("#preorder-detail-" + pid + "-patchposition-string").text(cluster + "-" + shelf + "-" + module);
|
|
$("#preorder-detail-" + pid + "-patchposition-port").text(port);
|
|
togglePortdata(pid);
|
|
|
|
}
|
|
},
|
|
"json"
|
|
);
|
|
}
|
|
|
|
function toggleStatusControl(pid, sid) {
|
|
// set select to current status id
|
|
$("#preorder-detail-status-" + pid + "-input select").val($("#preorder-detail-status-" + pid + "-text").data("status-id"));
|
|
|
|
// toggle controls
|
|
$("#preorder-detail-status-" + pid + "-text").toggle();
|
|
$("#preorder-detail-status-" + pid + "-input").toggle();
|
|
|
|
return false;
|
|
}
|
|
|
|
function savePreorderStatusControl(pid) {
|
|
if(!Number.isInteger(pid) || pid < 1) {
|
|
return false;
|
|
}
|
|
|
|
var value = $("#preorder-detail-status-" + pid + "-input select").val();
|
|
|
|
//console.log("add opacity-5 to ")
|
|
$("#preorder-" + pid + "-body").addClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").show();
|
|
|
|
// reset loading overlay if request times out
|
|
setTimeout(() => {
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
}, 5000);
|
|
|
|
$.post("<?=self::getUrl("Preorder","Api")?>",
|
|
{
|
|
'do': "updateStatus",
|
|
id: pid,
|
|
status_id: value
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
var updates = success.result.updates;
|
|
//console.log(updates);
|
|
|
|
updates.forEach(function(u) {
|
|
//console.log(u);
|
|
// update detail status text
|
|
$("#preorder-detail-status-" + u.id + "-statustext").text(u.code + " - " + u.text);
|
|
$("#preorder-detail-status-" + u.id + "-text").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-detail-status-" + u.id + "-text").removeClass("text-success") }, 1500);
|
|
|
|
// update list status text
|
|
$("#preorder-" + u.id + " .status").text(u.code + " - " + u.text);
|
|
$("#preorder-" + u.id + " .status").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-" + u.id + " .status").removeClass("text-success") }, 1500);
|
|
|
|
// update status id data attribute
|
|
$("#preorder-detail-status-" + u.id + "-text").data("status-id", u.sid);
|
|
|
|
if(u.bcode) {
|
|
$("#preorder-detail-building-status-" + u.id).text(u.bcode + " - " + u.btext);
|
|
}
|
|
if(u.ucode) {
|
|
$("#preorder-detail-unit-status-" + u.id).text(u.ucode + " - " + u.utext);
|
|
}
|
|
|
|
if(u.ciftoken) {
|
|
$("#preorder-detail-ciftoken-" + u.id).text(u.ciftoken);
|
|
}
|
|
if(u.cifcableurl) {
|
|
$("#preorder-detail-cifcableurl-" + u.id).text(u.cifcableurl);
|
|
}
|
|
});
|
|
/*
|
|
if("preorder" in update) {
|
|
// update detail status text
|
|
$("#preorder-detail-status-" + pid + "-statustext").text(update.preorder.status.code + " - " + update.preorder.status.text);
|
|
$("#preorder-detail-status-" + pid + "-text").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-detail-status-" + pid + "-text").removeClass("text-success") }, 1500);
|
|
|
|
// update list status text
|
|
$("#preorder-" + pid + " .status").text(update.preorder.status.code + " - " + update.preorder.status.text);
|
|
$("#preorder-" + pid + " .status").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-" + pid + " .status").removeClass("text-success") }, 1500);
|
|
|
|
// update status id data attribute
|
|
$("#preorder-detail-status-" + pid + "-text").data("status-id", update.preorder.status.id);
|
|
}
|
|
|
|
if("building" in update) {
|
|
// update building status text
|
|
$("#preorder-detail-building-status-" + pid).text(update.building.status.code + " - " + update.building.status.text);
|
|
}
|
|
if("unit" in update) {
|
|
// update unit status text
|
|
$("#preorder-detail-unit-status-" + pid).text(update.unit.status.code + " - " + update.unit.status.text);
|
|
}
|
|
*/
|
|
toggleStatusControl(pid);
|
|
|
|
}
|
|
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
},
|
|
'json');
|
|
}
|
|
|
|
function toggleOrderdateControl(pid) {
|
|
// set select to current status id
|
|
//$("#preorder-detail-orderdate-" + pid + "-input select").val($("#preorder-detail-orderdate-" + pid + "-text").data("orderdate"));
|
|
|
|
// toggle controls
|
|
$("#preorder-detail-orderdate-" + pid + "-text").toggle();
|
|
$("#preorder-detail-orderdate-" + pid + "-input").toggle();
|
|
|
|
return false;
|
|
}
|
|
|
|
function savePreorderOrderdateControl(pid) {
|
|
if(!Number.isInteger(pid) || pid < 1) {
|
|
return false;
|
|
}
|
|
|
|
var value = $("#preorder-detail-orderdate-" + pid + "-input input").val();
|
|
|
|
//console.log("add opacity-5 to ")
|
|
$("#preorder-" + pid + "-body").addClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").show();
|
|
|
|
// reset loading overlay if request times out
|
|
setTimeout(() => {
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
}, 5000);
|
|
|
|
$.post("<?=self::getUrl("Preorder","Api")?>",
|
|
{
|
|
'do': "saveOrderdate",
|
|
id: pid,
|
|
order_date: value
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
console.log(success);
|
|
var new_orderdate = success.result.order_date;
|
|
var pid = success.result.preorder_id;
|
|
//console.log(updates);
|
|
$("#preorder-detail-orderdate-" + pid + "-textpart").text(new_orderdate);
|
|
$("#preorder-detail-orderdate-" + pid + "-input").val(new_orderdate);
|
|
|
|
$("#preorder-detail-orderdate-" + pid + "-text").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-detail-orderdate-" + pid + "-text").removeClass("text-success") }, 1500);
|
|
|
|
toggleOrderdateControl(pid);
|
|
|
|
}
|
|
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
},
|
|
'json');
|
|
}
|
|
|
|
function toggleActivationdateControl(pid) {
|
|
// set select to current status id
|
|
//$("#preorder-detail-activationdate-" + pid + "-input select").val($("#preorder-detail-activationdate-" + pid + "-text").data("activationdate"));
|
|
|
|
// toggle controls
|
|
$("#preorder-detail-activationdate-" + pid + "-text").toggle();
|
|
$("#preorder-detail-activationdate-" + pid + "-input").toggle();
|
|
$("#preorder-detail-activation-billing-" + pid).toggle();
|
|
|
|
return false;
|
|
}
|
|
|
|
function savePreorderActivationdateControl(pid) {
|
|
if(!Number.isInteger(pid) || pid < 1) {
|
|
return false;
|
|
}
|
|
|
|
var value = $("#preorder-detail-activationdate-" + pid + "-input input").val();
|
|
var activation_billing = $("#preorder-detail-activation-billing-" + pid + " input[type='checkbox'").is(":checked") ? 1 : 0;
|
|
console.log($("#preorder-detail-activation-billing-" + pid + " input[type='checkbox'"));
|
|
console.log(activation_billing);
|
|
|
|
//console.log("add opacity-5 to ")
|
|
$("#preorder-" + pid + "-body").addClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").show();
|
|
|
|
// reset loading overlay if request times out
|
|
setTimeout(() => {
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
}, 5000);
|
|
|
|
$.post("<?=self::getUrl("Preorder","Api")?>",
|
|
{
|
|
'do': "saveActivationdate",
|
|
id: pid,
|
|
activation_date: value,
|
|
activation_billing: activation_billing
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
console.log(success);
|
|
var new_activationdate = success.result.activation_date;
|
|
var new_activation_billing = success.result.activation_billing;
|
|
var pid = success.result.preorder_id;
|
|
//console.log(updates);
|
|
$("#preorder-detail-activationdate-" + pid + "-textpart").text(new_activationdate);
|
|
$("#preorder-detail-activationdate-" + pid + "-input").val(new_activationdate);
|
|
|
|
console.log($("#preorder-detail-activationdate-" + pid + "-activation-billing-part"));
|
|
$("#preorder-detail-activationdate-" + pid + "-activation-billing-part").text("");
|
|
if(new_activation_billing) {
|
|
$("#preorder-detail-activationdate-" + pid + "-activation-billing-part").text("(Billing ab Aktivierung)");
|
|
}
|
|
|
|
$("#preorder-detail-activationdate-" + pid + "-text").addClass("text-success");
|
|
setTimeout(() => { $("#preorder-detail-activationdate-" + pid + "-text").removeClass("text-success") }, 1500);
|
|
|
|
toggleActivationdateControl(pid);
|
|
|
|
}
|
|
|
|
$("#preorder-" + pid + "-body").removeClass("opacity-5");
|
|
$("#preorder-" + pid + "-body .loader-big").hide();
|
|
},
|
|
'json');
|
|
}
|
|
|
|
/*
|
|
* Toggle Borderpoint status radio buttons on/off
|
|
*/
|
|
// get and save initial radio button states
|
|
var bpstatus_radiostate = [];
|
|
$("input[name^='borderpoint_status_']").each(function(i) {
|
|
let match = $(this).attr("name").match(/_(\d+)$/);
|
|
let pid = match[1];
|
|
bpstatus_radiostate[pid + "-" + $(this).val()] = $(this).is(":checked");
|
|
});
|
|
|
|
// if saved value is checked => uncheck
|
|
$("input[name^='borderpoint_status_']").click(async (e) => {
|
|
var radio = $(e.target);
|
|
var val = radio.val();
|
|
|
|
console.log(radio.attr("name"));
|
|
let match = radio.attr("name").match(/_(\d+)$/);
|
|
if(!match || !match[1]) {
|
|
return;
|
|
}
|
|
|
|
let pid = match[1];
|
|
var new_status;
|
|
|
|
if(bpstatus_radiostate[pid + "-" + val]) {
|
|
new_status = false;
|
|
radio.prop("checked", false);
|
|
bpstatus_radiostate[pid + "-" + val] = false;
|
|
} else {
|
|
new_status = true;
|
|
radio.prop("checked", true);
|
|
for(const [key, value] of Object.entries(bpstatus_radiostate)) {
|
|
if(key.startsWith(pid + "-")) {
|
|
bpstatus_radiostate[key] = false;
|
|
}
|
|
}
|
|
bpstatus_radiostate[pid + "-" + val] = true;
|
|
}
|
|
|
|
// save new status
|
|
await fetch("<?=self::getUrl("Preorder", "Api")?>", {
|
|
method: "POST",
|
|
headers: {
|
|
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
|
|
},
|
|
body: new URLSearchParams({
|
|
do: "saveBorderpointStatus",
|
|
preorder_id: pid,
|
|
status_type: val,
|
|
value: new_status ? 1 : 0
|
|
})
|
|
}).then(resp => {
|
|
if(resp.ok) {
|
|
return resp.json();
|
|
}
|
|
}).then((data) => {
|
|
console.log(data);
|
|
console.log(pid);
|
|
if(data.status == "OK") {
|
|
window.notify("success", "Borderpoint Status gespeichert");
|
|
} else {
|
|
window.notify("error", "Fehler beim Speichern des Borderpoint Status");
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
function createWorkorder(pid) {
|
|
if(!Number.isInteger(pid) || pid < 1) {
|
|
return false;
|
|
}
|
|
|
|
$("#preorder-detail-" + pid + "-rimo button.create-workorder").prop("disabled", true);
|
|
$("#preorder-detail-" + pid + "-rimo .workorder-container").append("<img src='<?=self::getResourcePath()?>img/ajax-loader.gif' />");
|
|
|
|
|
|
$.ajax({
|
|
url: "<?=self::getUrl("Preorder","Api")?>",
|
|
method: "POST",
|
|
data: {
|
|
do: "createWorkorder",
|
|
id: pid,
|
|
},
|
|
context: {
|
|
pid: pid
|
|
},
|
|
dataType: 'json',
|
|
success: function(response) {
|
|
if(response.status == "OK") {
|
|
wo = response.result;
|
|
html = '<h4> \
|
|
' + wo.name + ' \
|
|
<a href="<?=self::getUrl("RimoWorkorder", "downloadAh")?>?id=' + wo.id + '" onclick="event.preventDefault(); downloadWorkorderAha(' + wo.id + ');"><i class="fas fa-fw fa-file-download ml-2"></i> AHA Blatt</a> \
|
|
</h4> \
|
|
<table class="table table-sm table-striped" id="preorder-detail-' + wo.preorder_id + '-workorder-' + wo.id + '"> \
|
|
<tr> \
|
|
<th>Name</th> \
|
|
<td class="text-monospace">' + wo.name + '</td> \
|
|
</tr><tr> \
|
|
<th>External ID</th> \
|
|
<td class="text-monospace">' + wo.external_id + '</td> \
|
|
</tr><tr> \
|
|
<th>Status</th> \
|
|
<td>' + wo.status + '</td> \
|
|
</tr> \
|
|
<tr> \
|
|
<th>Zugewiesen an:</th> \
|
|
<td>' + wo.assigned_to + '</td> \
|
|
</tr> \
|
|
<tr> \
|
|
<th>Erstellt</th> \
|
|
<td class="text-monospace">' + wo.created + '</td> \
|
|
</tr> \
|
|
</table>';
|
|
|
|
$("#preorder-detail-" + wo.preorder_id + "-rimo img").remove();
|
|
$("#preorder-detail-" + wo.preorder_id + "-rimo .workorder-container img").remove();
|
|
$("#preorder-detail-" + wo.preorder_id + "-rimo button.create-workorder").remove();
|
|
$("#preorder-detail-" + wo.preorder_id + "-rimo .workorder-container").append(html);
|
|
|
|
} else {
|
|
restoreBlankWorkorderView(this.pid);
|
|
window.notify("error", "Workorder konnte nicht erstellt werden!");
|
|
}
|
|
},
|
|
error: function() {
|
|
restoreBlankWorkorderView(this.pid);
|
|
window.notify("error", "Workorder konnte nicht erstellt werden!");
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
function restoreBlankWorkorderView(pid) {
|
|
$("#preorder-detail-" + pid + "-rimo .workorder-container img").remove();
|
|
$("#preorder-detail-" + pid + "-rimo button.create-workorder").prop("disabled", false);
|
|
}
|
|
|
|
function deleteWorkorder(pid, wid) {
|
|
//console.log("in delete workorder");
|
|
if(!Number.isInteger(pid) || pid < 1) {
|
|
return false;
|
|
}
|
|
|
|
if(!Number.isInteger(wid) || wid < 1) {
|
|
return false;
|
|
}
|
|
|
|
$.post("<?=self::getUrl("Preorder","Api")?>",
|
|
{
|
|
'do': "deleteWorkorder",
|
|
id: pid,
|
|
wid: wid
|
|
},
|
|
function(success) {
|
|
if(success.status == "OK") {
|
|
$("#preorder-detail-" + success.result.id + "-workorder-" + success.result.wid + " td").each(function() {
|
|
$(this).html("<em class='text-monospace'>--gelöscht--</em>");
|
|
});
|
|
|
|
$("#preorder-detail-" + success.result.id + "-workorder-" + success.result.wid + "-del").remove();
|
|
}
|
|
},
|
|
'json');
|
|
|
|
return false;
|
|
}
|
|
|
|
async function downloadWorkorderAha(workorder_id) {
|
|
if(!workorder_id) return false;
|
|
|
|
var filename;
|
|
|
|
await fetch('<?=self::getUrl("RimoWorkorder", "downloadAha")?>?id=' + workorder_id)
|
|
.then(resp => {
|
|
const header = resp.headers.get("Content-disposition");
|
|
let matches = header.match(/filename=['"]?([^'"]+)/i);
|
|
filename = matches[1];
|
|
if(!filename) {
|
|
window.notify("error", "Fehler beim Download des AH-Blatts");
|
|
return false;
|
|
}
|
|
return resp.blob();
|
|
})
|
|
.then(blob => {
|
|
const url = window.URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.style.display = 'none';
|
|
a.href = url;
|
|
a.download = filename;
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
window.URL.revokeObjectURL(url);
|
|
window.notify("success", "Download gestartet...");
|
|
})
|
|
.catch(() => {
|
|
window.notify("error", "Fehler beim Download des AH-Blatts");
|
|
});
|
|
|
|
}
|
|
|
|
async function saveRemark(pid, wid) {
|
|
if(!pid || !wid) return false;
|
|
|
|
var new_remark_elem = $("#wo-remark-" + pid + "-" + wid + " input[name='new_remark']");
|
|
var new_remark = new_remark_elem.val();
|
|
|
|
new_remark_elem.prop("readonly", true);
|
|
|
|
|
|
await fetch("<?=self::getUrl("Preorder", "Api")?>", {
|
|
method: "POST",
|
|
headers: {
|
|
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
|
|
},
|
|
body: new URLSearchParams({
|
|
do: "addWorkorderRemark",
|
|
preorder_id: pid,
|
|
workorder_id: wid,
|
|
remark: new_remark
|
|
})
|
|
}).then(resp => {
|
|
if(resp.ok) {
|
|
return resp.json();
|
|
}
|
|
}).then((data) => {
|
|
if(data.status == "OK") {
|
|
var remark = data.result.remark.replaceAll("\n", "<br />");
|
|
$("#wo-remark-" + pid + "-" + wid + " div.remark-text").html(remark);
|
|
new_remark_elem.val("");
|
|
window.notify("success", "Bemerkung gespeichert");
|
|
} else {
|
|
window.notify("error", "Fehler beim Speichern der Bemerkung");
|
|
}
|
|
});
|
|
|
|
new_remark_elem.prop("readonly", false);
|
|
|
|
}
|
|
</script>
|
|
<script>
|
|
$(document).ready(function() {
|
|
const fcpSelect = $("#filter_fcp");
|
|
const campaignSelect = $("#filter_preordercampaign_id");
|
|
const apiUrl = "<?=self::getUrl("Preorder", "Api")?>";
|
|
|
|
fcpSelect.select2({ data: [], placeholder: "Bitte Kampagne auswählen", allowClear: true });
|
|
|
|
campaignSelect.on("change", function() {
|
|
const campaign_id = $(this).val();
|
|
if (!campaign_id) {
|
|
fcpSelect.empty().select2({ data: [], placeholder: "Bitte Kampagne auswählen", allowClear: true });
|
|
return;
|
|
}
|
|
$.get(apiUrl, { do: "getFCPsForCampaign", campaign_id: campaign_id }, (success) => {
|
|
let fcpData = [];
|
|
let opts = { data: [], placeholder: "Bitte Kampagne auswählen", allowClear: true };
|
|
if (success?.status === "OK" && Array.isArray(success.result)) {
|
|
fcpData = success.result;
|
|
fcpData.unshift({ id: "", text: "" });
|
|
fcpData.sort((a, b) => {
|
|
const aN = a.text.replace(/\D/g, ""), bN = b.text.replace(/\D/g, "");
|
|
return aN && bN ? parseInt(aN, 10) - parseInt(bN, 10) : a.text.localeCompare(b.text);
|
|
});
|
|
opts = { data: fcpData, placeholder: "", allowClear: true };
|
|
fcpSelect.empty().select2(opts);
|
|
const searchParams = new URLSearchParams(window.location.search);
|
|
const fcpValues = searchParams.getAll("filter[fcp][]");
|
|
if (fcpValues && fcpValues.length > 0) {
|
|
fcpSelect.val(fcpValues).trigger("change");
|
|
}
|
|
} else {
|
|
fcpSelect.empty().select2(opts);
|
|
}
|
|
}, "json").fail(() => {
|
|
fcpSelect.empty().select2({ data: [], placeholder: "Fehler", allowClear: true });
|
|
});
|
|
});
|
|
campaignSelect.trigger("change");
|
|
});
|
|
</script>
|
|
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>
|