Merge branch 'Preorderlogistics/add-new-button' into 'master'
added new button See merge request fronk/thetool!1656
This commit is contained in:
@@ -1,374 +1,307 @@
|
||||
<?php
|
||||
$pagination_baseurl = $this->getUrl($Mod,"Index");
|
||||
$pagination_baseurl_params = ["filter" => $filter];
|
||||
$pagination_entity_name = "Bestellungen";
|
||||
$pagination_baseurl = $this->getUrl($Mod, "Index");
|
||||
$pagination_baseurl_params = ["filter" => $filter];
|
||||
$pagination_entity_name = "Bestellungen";
|
||||
$resetUrl = isset($campaign, $campaign->id)
|
||||
? self::getUrl("Preorderlogistics", "Index", ['filter' => ['preordercampaign_id' => $campaign->id], "resetFilter" => 1])
|
||||
: self::getUrl("Preorderlogistics");
|
||||
|
||||
include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/header.php");
|
||||
?>
|
||||
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/header.php"); ?>
|
||||
|
||||
<!-- 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("Preorderlogistics")?>">
|
||||
|
||||
<div class="row mt-2">
|
||||
|
||||
<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-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 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>
|
||||
|
||||
<div class="col-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-2">
|
||||
<label class="form-label" for="filter_sent">Status</label>
|
||||
<select name="filter[sent]" id="filter_sent" class="form-control">
|
||||
<option value="no">Noch nicht versendet</option>
|
||||
<option value="yes" <?=(is_array($filter) && array_key_exists("sent", $filter) && $filter['sent'] == "yes") ? "selected='selected'" : ""?>>Versendet</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-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-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-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>
|
||||
|
||||
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col">
|
||||
<button type="submit" class="btn btn-primary">Filter anwenden</button>
|
||||
<?php if(isset($campaign) && $campaign->id): ?>
|
||||
<a class="btn btn-secondary" href="<?=self::getUrl("Preorderlogistics", "Index", ['filter' => ['preordercampaign_id' => $campaign->id], "resetFilter" => 1])?>">Filter zurücksetzen</a>
|
||||
<?php else: ?>
|
||||
<a class="btn btn-secondary" href="<?=self::getUrl("Preorderlogistics")?>">Filter zurücksetzen</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<button id="printAllInView" type="button" class="btn btn-success">Alle in der Liste drucken</button>
|
||||
<button id="csvExportAddressesAndMarkAsSent" type="button" class="btn btn-success">CSV Export für Versand</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="float-left">
|
||||
<h4 class="header-title">Bestellungen</h4>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="page-title">Vorbestellungen<?= isset($campaign, $campaign->name) ? " - " . $campaign->name : "" ?></h4>
|
||||
</div>
|
||||
|
||||
|
||||
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination.php"); ?>
|
||||
<?php include(realpath(dirname(__FILE__)."/../")."/tpl/pagination-summary.php"); ?>
|
||||
|
||||
<table class="table table-striped table-hover">
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th>Status</th>
|
||||
<th>Versandadresse</th>
|
||||
<th>OAID</th>
|
||||
<th>Bestellcode</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
<?php foreach($preorders as $preorder): ?>
|
||||
<tr class="preorder-list-tr" id="preorder-<?=$preorder->id?>"
|
||||
data-ucode="<?=$preorder->ucode?>"
|
||||
data-oaid="<?=$preorder->oaid?>"
|
||||
data-addr-name="<?=$preorder->company ? $preorder->company : $preorder->firstname." ".$preorder->lastname?>"
|
||||
data-addr-street="<?=$preorder->street?><?=($preorder->housenumber) ? " ".$preorder->housenumber : ""?>"
|
||||
data-addr-zip="<?=$preorder->zip?>"
|
||||
data-addr-city="<?=$preorder->city?>"
|
||||
data-phone="<?=$preorder->phone?>"
|
||||
data-email="<?=$preorder->email?>"
|
||||
>
|
||||
<td class="text-right align-middle"><button type="button" class="btn btn-sm btn-success font-weight-bold" onclick="printShippingSlip(<?=$preorder->id?>)"><i class="fas fa-fw fa-print"></i> DRUCKEN</button> </td>
|
||||
<td class="text-center align-middle">
|
||||
<label>Versandt <i class="fas fa-check text-success hidden" id="sent-label-<?=$preorder->id?>"></i>
|
||||
<input type="checkbox" class="form-control pointer" name="sent" value="1"
|
||||
id="sent-<?=$preorder->id?>" <?=($preorder->logistics && $preorder->logistics->sent) ? "checked='checked'" : ""?>
|
||||
onchange="saveSent(<?=$preorder->id?>)" />
|
||||
</label>
|
||||
</td>
|
||||
<td><?=$preorder->status->code?></td>
|
||||
<td>
|
||||
<?php if($preorder->adb_hausnummer_id): ?>
|
||||
<?php if($preorder->company): ?>
|
||||
<?=$preorder->company?><br />
|
||||
<?=($preorder->firstname) ? $preorder->firstname : ""?>
|
||||
<?=($preorder->lastname) ? $preorder->lastname : ""?>
|
||||
<?php else: ?>
|
||||
<?=$preorder->firstname?> <?=$preorder->lastname?>
|
||||
<?php endif; ?>
|
||||
<br />
|
||||
<?=$preorder->adb_hausnummer->strasse->name?>
|
||||
<?=$preorder->adb_hausnummer->hausnummer?><br />
|
||||
<?=($preorder->adb_wohneinheit_id && (string)$preorder->adb_wohneinheit) ? (string)$preorder->adb_wohneinheit."<br />" : ""?>
|
||||
<?=$preorder->adb_hausnummer->plz->plz?>
|
||||
<?=$preorder->adb_hausnummer->ortschaft->name?><br />
|
||||
<?=$preorder->adb_hausnummer->strasse->gemeinde->name?>
|
||||
<?php else: ?>
|
||||
<?=($preorder->company) ? $preorder->company : $preorder->firstname." ".$preorder->lastname?><br />
|
||||
<?=$preorder->street?><?=($preorder->housenumber) ? " ".$preorder->housenumber : ""?><br />
|
||||
<?=$preorder->zip?> <?=$preorder->city?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="text-pink"><span><?=$preorder->oaid?></span></td>
|
||||
<td><?=$preorder->ucode?></td>
|
||||
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</table>
|
||||
|
||||
<?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">
|
||||
|
||||
function printShippingSlip(id) {
|
||||
|
||||
var w = window.open("<?=self::getUrl("Preorderlogistics", "print")?>?id=" + id, "_blank", "popup=yes");
|
||||
w.print();
|
||||
}
|
||||
|
||||
function saveSent(id) {
|
||||
if(!id) return;
|
||||
var checked = $("#sent-" + id).is(":checked");
|
||||
console.log(checked);
|
||||
|
||||
if(checked) {
|
||||
var sent = 1;
|
||||
} else {
|
||||
var sent = 0;
|
||||
}
|
||||
|
||||
$.post("<?=self::getUrl("Preorderlogistics", "Api")?>", {
|
||||
do: "saveSent",
|
||||
id: id,
|
||||
sent: sent
|
||||
},
|
||||
function(success) {
|
||||
console.log(success);
|
||||
if(success.status == "OK") {
|
||||
if(checked) {
|
||||
$("#sent-label-" + success.result.preorder_id).show();
|
||||
} else {
|
||||
$("#sent-label-" + success.result.preorder_id).hide();
|
||||
}
|
||||
}
|
||||
},
|
||||
"json"
|
||||
);
|
||||
}
|
||||
|
||||
</script>
|
||||
<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("Preorderlogistics") ?>">
|
||||
<div class="row mt-2">
|
||||
<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" : "" ?>><?= $c->name ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-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-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-2">
|
||||
<label class="form-label" for="filter_sent">Status</label>
|
||||
<select name="filter[sent]" id="filter_sent" class="form-control">
|
||||
<option value="no">Noch nicht versendet</option>
|
||||
<option value="yes" <?= ($filter['sent'] ?? '') == "yes" ? "selected" : "" ?>>Versendet</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-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-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-1">
|
||||
<label class="form-label" for="filter_fcp">FCP</label>
|
||||
<select name="filter[fcp][]" id="filter_fcp" multiple class="form-control"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-2">
|
||||
<div class="col">
|
||||
<button type="submit" class="btn btn-primary">Filter anwenden</button>
|
||||
<a class="btn btn-secondary" href="<?= $resetUrl ?>">Filter zurücksetzen</a>
|
||||
<button id="printAllInView" type="button" class="btn btn-success">Alle in der Liste drucken</button>
|
||||
<button id="csvExportAddresses" type="button" class="btn btn-success">CSV Export für Versand</button>
|
||||
<button id="csvExportAddressesAndMarkAsSent" type="button" class="btn btn-success">CSV Export & als versendet markieren</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function printAllInView() {
|
||||
console.log("printAllInView");
|
||||
$("#printAllInView").html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...');
|
||||
$("#printAllInView").prop("disabled", true);
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<h4 class="header-title">Bestellungen</h4>
|
||||
<?php include(realpath(dirname(__FILE__) . "/../") . "/tpl/pagination.php"); ?>
|
||||
<?php include(realpath(dirname(__FILE__) . "/../") . "/tpl/pagination-summary.php"); ?>
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th>Status</th>
|
||||
<th>Versandadresse</th>
|
||||
<th>OAID</th>
|
||||
<th>Bestellcode</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($preorders as $preorder): ?>
|
||||
<tr class="preorder-list-tr" id="preorder-<?= $preorder->id ?>"
|
||||
data-ucode="<?= $preorder->ucode ?>"
|
||||
data-oaid="<?= $preorder->oaid ?>"
|
||||
data-addr-name="<?= htmlspecialchars($preorder->company ?: "{$preorder->firstname} {$preorder->lastname}", ENT_QUOTES) ?>"
|
||||
data-addr-street="<?= htmlspecialchars(trim("{$preorder->street} {$preorder->housenumber}"), ENT_QUOTES) ?>"
|
||||
data-addr-zip="<?= $preorder->zip ?>"
|
||||
data-addr-city="<?= htmlspecialchars($preorder->city, ENT_QUOTES) ?>"
|
||||
data-phone="<?= $preorder->phone ?>"
|
||||
data-email="<?= $preorder->email ?>">
|
||||
<td class="text-right align-middle">
|
||||
<button type="button" class="btn btn-sm btn-success font-weight-bold" onclick="printShippingSlip(<?= $preorder->id ?>)"><i class="fas fa-fw fa-print"></i> DRUCKEN</button>
|
||||
</td>
|
||||
<td class="text-center align-middle">
|
||||
<label>Versandt <i class="fas fa-check text-success <?= ($preorder->logistics && $preorder->logistics->sent) ? "" : "hidden" ?>" id="sent-label-<?= $preorder->id ?>"></i>
|
||||
<input type="checkbox" class="form-control pointer" onchange="saveSent(<?= $preorder->id ?>)" id="sent-<?= $preorder->id ?>" <?= ($preorder->logistics && $preorder->logistics->sent) ? "checked" : "" ?> />
|
||||
</label>
|
||||
</td>
|
||||
<td><?= $preorder->status->code ?></td>
|
||||
<td>
|
||||
<?php if ($preorder->adb_hausnummer_id): ?>
|
||||
<?= $preorder->company ? htmlspecialchars($preorder->company) . "<br />" . htmlspecialchars(trim("{$preorder->firstname} {$preorder->lastname}")) : htmlspecialchars(trim("{$preorder->firstname} {$preorder->lastname}")) ?><br/>
|
||||
<?= htmlspecialchars($preorder->adb_hausnummer->strasse->name) ?> <?= htmlspecialchars($preorder->adb_hausnummer->hausnummer) ?><br/>
|
||||
<?= ($preorder->adb_wohneinheit_id && (string)$preorder->adb_wohneinheit) ? htmlspecialchars((string)$preorder->adb_wohneinheit) . "<br />" : "" ?>
|
||||
<?= htmlspecialchars($preorder->adb_hausnummer->plz->plz) ?> <?= htmlspecialchars($preorder->adb_hausnummer->ortschaft->name) ?><br/>
|
||||
<?= htmlspecialchars($preorder->adb_hausnummer->strasse->gemeinde->name) ?>
|
||||
<?php else: ?>
|
||||
<?= htmlspecialchars($preorder->company ?: "{$preorder->firstname} {$preorder->lastname}") ?><br/>
|
||||
<?= htmlspecialchars(trim("{$preorder->street} {$preorder->housenumber}")) ?><br/>
|
||||
<?= htmlspecialchars($preorder->zip) ?> <?= htmlspecialchars($preorder->city) ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="text-pink"><span><?= $preorder->oaid ?></span></td>
|
||||
<td><?= $preorder->ucode ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php include(realpath(dirname(__FILE__) . "/../") . "/tpl/pagination-summary.php"); ?>
|
||||
<?php include(realpath(dirname(__FILE__) . "/../") . "/tpl/pagination.php"); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
var preorderIds = [];
|
||||
$(".preorder-list-tr").each(function() {
|
||||
var id = $(this).attr("id").replace("preorder-", "");
|
||||
preorderIds.push(id);
|
||||
});
|
||||
|
||||
var printUrls = preorderIds.map(function(id) {
|
||||
return "<?=self::getUrl("Preorderlogistics", "print")?>?id=" + id;
|
||||
});
|
||||
|
||||
var printWindows = [];
|
||||
var loadedCount = 0;
|
||||
var combinedHtml = "";
|
||||
|
||||
function loadAndCombine(url, index) {
|
||||
$.get(url, function(html) {
|
||||
combinedHtml += html;
|
||||
loadedCount++;
|
||||
|
||||
if (loadedCount === printUrls.length) {
|
||||
var combinedWindow = window.open("", "_blank");
|
||||
combinedWindow.document.write(combinedHtml);
|
||||
combinedWindow.document.close();
|
||||
// sleep for 1 second to allow the window to load
|
||||
setTimeout(function() {
|
||||
combinedWindow.focus();
|
||||
combinedWindow.print();
|
||||
}, 1000);
|
||||
|
||||
$("#printAllInView").html('Alle in der Liste drucken');
|
||||
$("#printAllInView").prop("disabled", false);
|
||||
}
|
||||
});
|
||||
<script>
|
||||
function printShippingSlip(id) {
|
||||
const w = window.open(`<?= self::getUrl("Preorderlogistics", "print") ?>?id=${id}`, "_blank", "popup=yes");
|
||||
w.addEventListener('load', () => w.print());
|
||||
}
|
||||
|
||||
printUrls.forEach(loadAndCombine);
|
||||
}
|
||||
$("#printAllInView").on("click", printAllInView);
|
||||
|
||||
async function csvExportAddressesAndMarkAsSent(){
|
||||
//show confirmation dialog to the user browser api
|
||||
if(!confirm("Möchten Sie die Adressen als CSV exportieren und als versendet markieren?")) {
|
||||
return;
|
||||
}
|
||||
|
||||
$("#csvExportAddressesAndMarkAsSent").html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...');
|
||||
|
||||
// show a confirmation dialog to the user
|
||||
// use .preorder-list-tr and data-ucode, data-oaid, data-addr-name, data-addr-street, data-addr-zip, data-addr-city to export to csv
|
||||
// after exporting mark as sent for each preorder
|
||||
var preorderIds = [];
|
||||
$(".preorder-list-tr").each(function() {
|
||||
var id = $(this).attr("id").replace("preorder-", "");
|
||||
preorderIds.push(id);
|
||||
});
|
||||
|
||||
var csvData = "ucode,oaid,addr_name,addr_street,addr_zip,addr_city,phone,email\n";
|
||||
$(".preorder-list-tr").each(function() {
|
||||
var ucode = $(this).data("ucode");
|
||||
var oaid = $(this).data("oaid");
|
||||
var addr_name = $(this).data("addr-name");
|
||||
var addr_street = $(this).data("addr-street");
|
||||
var addr_zip = $(this).data("addr-zip");
|
||||
var addr_city = $(this).data("addr-city");
|
||||
var phone = $(this).data("phone");
|
||||
var email = $(this).data("email");
|
||||
|
||||
csvData += ucode + "," + oaid + "," + addr_name + "," + addr_street + "," + addr_zip + "," + addr_city + "," + phone + "," + email + "\n";
|
||||
});
|
||||
|
||||
// create a blob from the csv data
|
||||
var blob = new Blob([csvData], { type: "text/csv;charset=utf-8;" });
|
||||
var link = document.createElement("a");
|
||||
link.href = URL.createObjectURL(blob);
|
||||
link.setAttribute("download", "addresses.csv");
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
// mark all as sent
|
||||
|
||||
for (const preorderId of preorderIds) {
|
||||
await $.post("<?=self::getUrl("Preorderlogistics", "Api")?>", {
|
||||
do: "saveSent",
|
||||
id: preorderId,
|
||||
sent: 1
|
||||
});
|
||||
|
||||
$("#sent-label-" + preorderId).show();
|
||||
$("#sent-" + preorderId).prop("checked", true);
|
||||
}
|
||||
|
||||
window.notify('success', 'Adressen als CSV exportiert und als versendet markiert');
|
||||
$("#csvExportAddressesAndMarkAsSent").html('CSV Export für Versand');
|
||||
}
|
||||
$("#csvExportAddressesAndMarkAsSent").on("click", csvExportAddressesAndMarkAsSent);
|
||||
|
||||
$(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");
|
||||
function saveSent(id) {
|
||||
if (!id) return;
|
||||
const isChecked = $(`#sent-${id}`).is(":checked");
|
||||
const sent = isChecked ? 1 : 0;
|
||||
$.post("<?= self::getUrl("Preorderlogistics", "Api") ?>", {do: "saveSent", id, sent})
|
||||
.done(success => {
|
||||
if (success.status === "OK") {
|
||||
$(`#sent-label-${success.result.preorder_id}`).toggle(isChecked);
|
||||
}
|
||||
} else {
|
||||
fcpSelect.empty().select2(opts);
|
||||
}
|
||||
}, "json").fail(() => {
|
||||
fcpSelect.empty().select2({ data: [], placeholder: "Fehler", allowClear: true });
|
||||
});
|
||||
});
|
||||
campaignSelect.trigger("change");
|
||||
})
|
||||
</script>
|
||||
})
|
||||
.fail(err => console.error("Failed to save sent status:", err));
|
||||
}
|
||||
|
||||
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>
|
||||
function getPreorderDataFromDOM() {
|
||||
const preorderData = [];
|
||||
$(".preorder-list-tr").each(function () {
|
||||
const row = $(this);
|
||||
preorderData.push({
|
||||
id: row.attr("id").replace("preorder-", ""),
|
||||
ucode: row.data("ucode"),
|
||||
oaid: row.data("oaid"),
|
||||
name: `"${row.data("addr-name")}"`,
|
||||
street: `"${row.data("addr-street")}"`,
|
||||
zip: row.data("addr-zip"),
|
||||
city: `"${row.data("addr-city")}"`,
|
||||
phone: row.data("phone"),
|
||||
email: row.data("email")
|
||||
});
|
||||
});
|
||||
return preorderData;
|
||||
}
|
||||
|
||||
function generateCsv(preorderData) {
|
||||
const headers = "ucode,oaid,addr_name,addr_street,addr_zip,addr_city,phone,email\n";
|
||||
const rows = preorderData.map(d => `${d.ucode},${d.oaid},${d.name},${d.street},${d.zip},${d.city},${d.phone},${d.email}`);
|
||||
return headers + rows.join("\n");
|
||||
}
|
||||
|
||||
function downloadCsv(csvContent, filename = "addresses.csv") {
|
||||
const blob = new Blob([csvContent], {type: "text/csv;charset=utf-8;"});
|
||||
const link = document.createElement("a");
|
||||
link.href = URL.createObjectURL(blob);
|
||||
link.setAttribute("download", filename);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
}
|
||||
|
||||
async function printAllInView() {
|
||||
const btn = $("#printAllInView");
|
||||
btn.html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...').prop("disabled", true);
|
||||
|
||||
const printUrls = $(".preorder-list-tr").map((_, el) => `<?= self::getUrl("Preorderlogistics", "print") ?>?id=${el.id.replace("preorder-", "")}`).get();
|
||||
const requests = printUrls.map(url => $.get(url));
|
||||
|
||||
try {
|
||||
const responses = await Promise.all(requests);
|
||||
const combinedHtml = responses.join('<div style="page-break-after: always;"></div>');
|
||||
const combinedWindow = window.open("", "_blank");
|
||||
combinedWindow.document.write(combinedHtml);
|
||||
combinedWindow.document.close();
|
||||
setTimeout(() => {
|
||||
combinedWindow.focus();
|
||||
combinedWindow.print();
|
||||
}, 500);
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch all documents for printing:", error);
|
||||
} finally {
|
||||
btn.html('Alle in der Liste drucken').prop("disabled", false);
|
||||
}
|
||||
}
|
||||
|
||||
function csvExportAddresses() {
|
||||
const btn = $("#csvExportAddresses");
|
||||
btn.html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...').prop("disabled", true);
|
||||
const preorders = getPreorderDataFromDOM();
|
||||
const csvContent = generateCsv(preorders);
|
||||
downloadCsv(csvContent);
|
||||
btn.html('CSV Export für Versand').prop("disabled", false);
|
||||
window.notify?.('success', 'Adressen als CSV exportiert');
|
||||
}
|
||||
|
||||
async function csvExportAddressesAndMarkAsSent() {
|
||||
if (!confirm("Möchten Sie die Adressen als CSV exportieren und alle als versendet markieren?")) return;
|
||||
const btn = $("#csvExportAddressesAndMarkAsSent");
|
||||
btn.html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...').prop("disabled", true);
|
||||
|
||||
const preorders = getPreorderDataFromDOM();
|
||||
const csvContent = generateCsv(preorders);
|
||||
downloadCsv(csvContent);
|
||||
|
||||
const markAsSentPromises = preorders.map(p =>
|
||||
$.post("<?= self::getUrl("Preorderlogistics", "Api") ?>", {do: "saveSent", id: p.id, sent: 1})
|
||||
.done(() => {
|
||||
$(`#sent-label-${p.id}`).show();
|
||||
$(`#sent-${p.id}`).prop("checked", true);
|
||||
})
|
||||
);
|
||||
|
||||
try {
|
||||
await Promise.all(markAsSentPromises);
|
||||
window.notify?.('success', 'Adressen als CSV exportiert und als versendet markiert');
|
||||
} catch (error) {
|
||||
console.error("Failed to mark all orders as sent:", error);
|
||||
window.notify?.('error', 'Fehler beim Markieren der Bestellungen');
|
||||
} finally {
|
||||
btn.html('CSV Export & als versendet markieren').prop("disabled", false);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
$("#printAllInView").on("click", printAllInView);
|
||||
$("#csvExportAddresses").on("click", csvExportAddresses);
|
||||
$("#csvExportAddressesAndMarkAsSent").on("click", csvExportAddressesAndMarkAsSent);
|
||||
|
||||
const fcpSelect = $("#filter_fcp");
|
||||
const campaignSelect = $("#filter_preordercampaign_id");
|
||||
const apiUrl = "<?= self::getUrl("Preorder", "Api") ?>";
|
||||
const baseSelect2Options = {placeholder: "Bitte Kampagne auswählen", allowClear: true};
|
||||
|
||||
fcpSelect.select2({data: [], ...baseSelect2Options});
|
||||
|
||||
campaignSelect.on("change", function () {
|
||||
const campaign_id = $(this).val();
|
||||
if (!campaign_id) {
|
||||
fcpSelect.empty().select2({data: [], ...baseSelect2Options});
|
||||
return;
|
||||
}
|
||||
|
||||
$.get(apiUrl, {do: "getFCPsForCampaign", campaign_id})
|
||||
.done(response => {
|
||||
let fcpData = [];
|
||||
if (response?.status === "OK" && Array.isArray(response.result)) {
|
||||
fcpData = response.result;
|
||||
fcpData.unshift({id: "", text: ""});
|
||||
fcpData.sort((a, b) => {
|
||||
const aNum = parseInt(a.text.replace(/\D/g, ''), 10);
|
||||
const bNum = parseInt(b.text.replace(/\D/g, ''), 10);
|
||||
return !isNaN(aNum) && !isNaN(bNum) ? aNum - bNum : a.text.localeCompare(b.text);
|
||||
});
|
||||
}
|
||||
fcpSelect.empty().select2({
|
||||
data: fcpData,
|
||||
placeholder: fcpData.length > 1 ? "FCP auswählen" : "Keine FCPs gefunden",
|
||||
allowClear: true
|
||||
});
|
||||
|
||||
const fcpValues = new URLSearchParams(window.location.search).getAll("filter[fcp][]");
|
||||
if (fcpValues.length > 0) fcpSelect.val(fcpValues).trigger("change");
|
||||
})
|
||||
.fail(() => fcpSelect.empty().select2({data: [], placeholder: "Fehler beim Laden", allowClear: true}));
|
||||
}).trigger("change");
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/footer.php"); ?>
|
||||
Reference in New Issue
Block a user