added concurrency to preorderlogistics

This commit is contained in:
Luca Haid
2025-04-07 09:35:56 +02:00
parent 192244bff9
commit 939a28b107

View File

@@ -73,6 +73,10 @@
<?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>
@@ -106,7 +110,13 @@
<th></th>
</tr>
<?php foreach($preorders as $preorder): ?>
<tr class="preorder-list-tr" id="preorder-<?=$preorder->id?>">
<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?>">
<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>
@@ -197,4 +207,106 @@
</script>
<script>
function printAllInView() {
console.log("printAllInView");
$("#printAllInView").html('<i class="fas fa-spinner fa-spin"></i> Bitte warten...');
$("#printAllInView").prop("disabled", true);
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);
}
});
}
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\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");
csvData += ucode + "," + oaid + "," + addr_name + "," + addr_street + "," + addr_zip + "," + addr_city + "\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);
</script>
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>