diff --git a/Layout/default/Preorderlogistics/Index.php b/Layout/default/Preorderlogistics/Index.php index 2b4fadb02..40cc85cb0 100644 --- a/Layout/default/Preorderlogistics/Index.php +++ b/Layout/default/Preorderlogistics/Index.php @@ -1,374 +1,307 @@ 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"); ?> - - - -
-
-
-
- -
-

Vorbestellungenname : ""?>

-
-
-
-
-
- -
-
-

Filter

- -
"> - -
- -
- - -
- -
- - " /> +
+
+
+
- -
- - " /> -
- -
- - -
- -
- - " /> -
- -
- - " /> -
- -
- - -
- - -
- - - -
-
- - id): ?> - ['preordercampaign_id' => $campaign->id], "resetFilter" => 1])?>">Filter zurücksetzen - - ">Filter zurücksetzen - - - - - -
-
- - -
-
- - -
-
-
-
-
-

Bestellungen

-
-
+

Vorbestellungenname) ? " - " . $campaign->name : "" ?>

- - - - - - - - - - - - - - - - - lastname?>" - data-addr-street="street?>housenumber) ? " ".$preorder->housenumber : ""?>" - data-addr-zip="zip?>" - data-addr-city="city?>" - data-phone="phone?>" - data-email="email?>" - > - - - - - - - - - - -
StatusVersandadresseOAIDBestellcode
- - status->code?> - adb_hausnummer_id): ?> - company): ?> - company?>
- firstname) ? $preorder->firstname : ""?> - lastname) ? $preorder->lastname : ""?> - - firstname?> lastname?> - -
- adb_hausnummer->strasse->name?> - adb_hausnummer->hausnummer?>
- adb_wohneinheit_id && (string)$preorder->adb_wohneinheit) ? (string)$preorder->adb_wohneinheit."
" : ""?> - adb_hausnummer->plz->plz?> - adb_hausnummer->ortschaft->name?>
- adb_hausnummer->strasse->gemeinde->name?> - - company) ? $preorder->company : $preorder->firstname." ".$preorder->lastname?>
- street?>housenumber) ? " ".$preorder->housenumber : ""?>
- zip?> city?> - -
oaid?>ucode?> - -
- - - - -
- -
- +
+
+
+
+

Filter

+
"> +
+
+ + +
+
+ + "/> +
+
+ + "/> +
+
+ + +
+
+ + "/> +
+
+ + "/> +
+
+ + +
+
+
+
+ + Filter zurücksetzen + + + +
+
+
+
+
- + }) + .fail(err => console.error("Failed to save sent status:", err)); + } - + 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(' Bitte warten...').prop("disabled", true); + + const printUrls = $(".preorder-list-tr").map((_, el) => `?id=${el.id.replace("preorder-", "")}`).get(); + const requests = printUrls.map(url => $.get(url)); + + try { + const responses = await Promise.all(requests); + const combinedHtml = responses.join('
'); + 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(' 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(' Bitte warten...').prop("disabled", true); + + const preorders = getPreorderDataFromDOM(); + const csvContent = generateCsv(preorders); + downloadCsv(csvContent); + + const markAsSentPromises = preorders.map(p => + $.post("", {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 = ""; + 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"); + }); + + + \ No newline at end of file