From 1fddf682a1c573f165b5b8994195033cfc9eebda Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Wed, 15 Jun 2022 17:34:04 +0200 Subject: [PATCH] Added linework export with progress bar --- Layout/default/Linework/Index.php | 99 ++++- .../default/Linework/export_progress.xls.php | 363 ++++++++++++++++++ application/Linework/LineworkController.php | 136 ++++++- application/Termination/TerminationModel.php | 2 + application/WorkflowExport/WorkflowExport.php | 17 + scripts/start_workflow_export.php | 67 ++++ 6 files changed, 671 insertions(+), 13 deletions(-) create mode 100644 Layout/default/Linework/export_progress.xls.php create mode 100644 application/WorkflowExport/WorkflowExport.php create mode 100755 scripts/start_workflow_export.php diff --git a/Layout/default/Linework/Index.php b/Layout/default/Linework/Index.php index 9e0f98038..b6c65b2c0 100644 --- a/Layout/default/Linework/Index.php +++ b/Layout/default/Linework/Index.php @@ -30,7 +30,7 @@

Filter

-
"> + ">
@@ -99,11 +99,23 @@
-
+
">Filter zurücksetzen +
+
isAdmin()): ?> - +
+
+ +
+
+ +
+
+
@@ -665,6 +677,87 @@ function validateWorkflowItem(id) { return true; } + + var export_uid = ""; + var export_progress = 0; + + $('#export-button').click(function() { + var form = $('#filterform'); + var actionUrl = ''; + /*var formdata = new FormData(form); + for (const [key, value] of formdata) { + //console.log(key + ": " + value); + } + */ + + console.log(form.serialize()); + + $.ajax({ + type: "POST", + url: actionUrl, + data: form.serialize(), + dataType: "json", + success: function(success) { + if(success.status = "OK") { + if(success.uid) { + export_uid = success.uid; + export_progress = success.progress; + $('#progress-bar-wrapper').show(); + setTimeout(updateExportProgress, 200); + } else { + console.log("no uid returned"); + } + } + } + + }); + }); + + function updateExportProgress() { + if(!export_uid) { + return false; + } + + $.get("", + { + uid: export_uid + }, + function(success) { + if(success.status == "OK") { + updateProgressBar(success.progress); + if(success.progress >= 100) { + setTimeout(() => {document.location.href = '?uid=' + export_uid}, 200); + setTimeout(clearProgressBar, 5000); + } else { + setTimeout(updateExportProgress, 200); + } + } + }, + "json" + ); + } + + function updateProgressBar(progress) { + $('#progress-bar').css("width", progress + "%"); + $('#progress-bar').text("Bitte warten... " + progress + "%"); + + if(progress > 50) { + $('#progress-bar').removeClass("text-secondary"); + } + + if(progress >= 100) { + $('#progress-bar').addClass("bg-success").removeClass("bg-primary"); + } + + } + + function clearProgressBar() { + $('#progress-bar-wrapper').hide(); + $('#progress-bar').css("width", "0%"); + $('#progress-bar').text("Bitte warten... 0%"); + $('#progress-bar').addClass("bg-primary").removeClass("bg-success"); + } + diff --git a/Layout/default/Linework/export_progress.xls.php b/Layout/default/Linework/export_progress.xls.php new file mode 100644 index 000000000..904ab0491 --- /dev/null +++ b/Layout/default/Linework/export_progress.xls.php @@ -0,0 +1,363 @@ +loadByUid($export_uid); + $progress->filename = $filename; +} + + +$col = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ','BA', + 'BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ' + ); + +use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Writer\Xlsx; +use PhpOffice\PhpSpreadsheet\Style\Alignment; +use PhpOffice\PhpSpreadsheet\Style\Border; +use PhpOffice\PhpSpreadsheet\Style\Color; + +$lightgreen = "f5ffeb"; + +$xls = new Spreadsheet(); +$sheet = $xls->getActiveSheet(); + +// header +$i = 0; + +$sheet->setCellValue($col[$i++].'1', "id"); +$sheet->setCellValue($col[$i++].'1', "Netzgebiet"); +$sheet->setCellValue($col[$i++].'1', "Bauabschnitt"); +$sheet->setCellValue($col[$i++].'1', "Gebäudecode"); +$sheet->setCellValue($col[$i++].'1', "Straße"); +$sheet->setCellValue($col[$i++].'1', "GPS Breite"); +$sheet->setCellValue($col[$i++].'1', "GPS Länge"); +$sheet->setCellValue($col[$i++].'1', "Gebäudestatus Code"); +$sheet->setCellValue($col[$i++].'1', "Gebäudestatus"); + +$sheet->setCellValue($col[$i++].'1', "Anschlusscode"); +$sheet->setCellValue($col[$i++].'1', "Anschlussname"); +$sheet->setCellValue($col[$i++].'1', "Anschlussstatus Code"); +$sheet->setCellValue($col[$i++].'1', "Anschlussstatus"); +$sheet->setCellValue($col[$i++].'1', "Kontakt"); +$sheet->setCellValue($col[$i++].'1', "Telefon"); +$sheet->setCellValue($col[$i++].'1', "Email"); + +$sheet->setCellValue($col[$i++].'1', "Doku-Aufschub"); +$sheet->setCellValue($col[$i++].'1', "Baufreigabe"); + +$sheet->setCellValue($col[$i++].'1', "AP-Typ"); +$sheet->setCellValue($col[$i++].'1', "AP-Name"); +$sheet->setCellValue($col[$i++].'1', "AP GPS Breite"); +$sheet->setCellValue($col[$i++].'1', "AP GPS Länge"); +$sheet->setCellValue($col[$i++].'1', "Rohrverband"); +$sheet->setCellValue($col[$i++].'1', "Rohrtyp"); +$sheet->setCellValue($col[$i++].'1', "Rohrfarbe"); + +$sheet->setCellValue($col[$i++].'1', "POP (Planung)"); +$sheet->setCellValue($col[$i++].'1', "POP (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Schrank (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Schrank (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "HE/Einschub (Planung)"); +$sheet->setCellValue($col[$i++].'1', "HE/Einschub (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Modul (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Modul (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Ports (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Ports (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Abschlusstyp (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Abschlusstyp (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "BB-Kabel (Planung)"); +$sheet->setCellValue($col[$i++].'1', "BB-Kabel (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "BB-Kabel Typ (Planung)"); +$sheet->setCellValue($col[$i++].'1', "BB-Kabel Typ (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "BB-Fasern (Planung)"); +$sheet->setCellValue($col[$i++].'1', "BB-Fasern (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Kundenkabel-Typ (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Kundenkabel-Typ (Ist-Zustand)"); +$sheet->setCellValue($col[$i++].'1', "Fasern im KU-Kabel (Planung)"); +$sheet->setCellValue($col[$i++].'1', "Fasern im KU-Kabel (Ist-Zustand)"); + +$sheet->setCellValue($col[$i++].'1', "Backbone hergestellt"); +$sheet->setCellValue($col[$i++].'1', "BB-Bautermin"); +$sheet->setCellValue($col[$i++].'1', "KU-Bautermin"); + +$sheet->setCellValue($col[$i++].'1', "BEP montiert"); +$sheet->setCellValue($col[$i++].'1', "Kundenkabel eingeblasen"); +$sheet->setCellValue($col[$i++].'1', "Spleiß Netz"); +$sheet->setCellValue($col[$i++].'1', "Spleiß Kunde"); + +$sheet->setCellValue($col[$i++].'1', "ONT montiert"); +$sheet->setCellValue($col[$i++].'1', "ONT Seriennummer"); +$sheet->setCellValue($col[$i++].'1', "Kunde passiv fertiggestellt"); + +$sheet->setCellValue($col[$i++].'1', "Kommentar Tiefbau"); +$sheet->setCellValue($col[$i++].'1', "Kommentar Leitungsbau"); + +$sheet->getStyle("A1:".$col[$i]."1")->getFont()->setBold(true); + +$sheet->getRowDimension(1)->setRowHeight(16); + + +$line = 2; + +foreach($networks as $networkname => $terminations) { + + foreach($terminations as $term) { + $i = 0; + + $building = $term->building; + + $sheet->setCellValue($col[$i].$line, $term->id)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $networkname); + $i++; + $sheet->setCellValue($col[$i].$line, $building->networksection->name); + $i++; + $sheet->setCellValue($col[$i].$line, $building->code)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $building->street); + $i++; + $sheet->setCellValue($col[$i].$line, $building->gps_lat)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $building->gps_long)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $building->status->code)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $building->status->name)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $term->code)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $term->name); + $i++; + $sheet->setCellValue($col[$i].$line, $term->status->code)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $term->status->name)->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $term->contact); + $i++; + $sheet->setCellValue($col[$i].$line, $term->phone); + $i++; + $sheet->setCellValue($col[$i].$line, $term->email); + $i++; + $sheet->setCellValue($col[$i].$line, $term->linework_doku_delay); + $i++; + $sheet->setCellValue($col[$i].$line, $term->linework_enabled); + $i++; + + $sheet->setCellValue($col[$i].$line, ($term->building->getWorkflowvalue("ist_anschlusspunkt_typ")) ? $term->building->getWorkflowvalue("ist_anschlusspunkt_typ") : $term->building->getWorkflowvalue("anschlusspunkt_typ")); + $i++; + $sheet->setCellValue($col[$i].$line, ($term->building->getWorkflowvalue('ist_anschlusspunkt_name')) ? $term->building->getWorkflowvalue('ist_anschlusspunkt_name') : $term->building->getWorkflowvalue('anschlusspunkt_name')); + $i++; + + + $gps = explode(";", ($term->building->getWorkflowvalue('ist_anschlusspunkt_gps')) ? $term->building->getWorkflowvalue('ist_anschlusspunkt_gps') : $term->building->getWorkflowvalue('anschlusspunkt_gps')); + if(is_array($gps) & count($gps) == 2) { + $sheet->setCellValue($col[$i].$line, $gps[0])->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $sheet->setCellValue($col[$i+1].$line, $gps[1])->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i+1].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + } + $i += 2; + + $sheet->setCellValue($col[$i].$line, ($term->building->getWorkflowvalue('ist_rohrverband_name')) ? $term->building->getWorkflowvalue('ist_rohrverband_name') : $term->building->getWorkflowvalue('rohrverband_name')); + $i++; + $sheet->setCellValue($col[$i].$line, ($term->building->getWorkflowvalue('ist_rohrtype')) ? $term->building->getWorkflowvalue('ist_rohrtype') : $term->building->getWorkflowvalue('rohrtype')); + $i++; + + + $color = ($term->building->getWorkflowvalue('ist_rohrfarbe')) ? $term->building->getWorkflowvalue('ist_rohrfarbe') : $term->building->getWorkflowvalue('rohrfarbe'); + if($color) { + if(TT_CABLE_COLORS[$color]["mark"]) { + $sheet->setCellValue($col[$i].$line, "----- ".ucfirst($color)." -----"); + } else { + $sheet->setCellValue($col[$i].$line, ucfirst($color)); + } + $sheet->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10)->getColor()->setARGB(TT_CABLE_COLORS[$color]["hexfg"]); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB(TT_CABLE_COLORS[$color]["hex"]); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $sheet->getStyle($col[$i].$line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); + } + $i++; + + + /* + * Linework data + */ + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('pop_id'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_pop_id'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('schrank'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_schrank'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('baugruppe'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_baugruppe'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('modul'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_modul'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ports'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_ports'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('abschlusstyp'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_abschlusstyp'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('bb_kabel'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_bb_kabel'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('bb_kabel_steps'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_bb_kabel_steps'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('bb_fasern'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_bb_fasern'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('kundenkabel_typ'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_kundenkabel_typ'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('kundenkabel_fasern'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $i++; + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ist_kundenkabel_fasern'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('backbone_finished'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('backbone_setup_date'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('customer_setup_date'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('bep_deployed'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('customer_cable_injected'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('spliced_network'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('spliced_customer'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ont_deployed'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('ont_sn'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->getWorkflowvalue('customer_passive_finished'))->getStyle($col[$i].$line)->getFont()->setName("monospace")->setSize(10); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + + $sheet->setCellValue($col[$i].$line, $building->workflow_comment); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->setCellValue($col[$i].$line, $term->workflow_comment); + $sheet->getStyle($col[$i].$line)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB($lightgreen); + $i++; + + $sheet->getRowDimension($line)->setRowHeight(16); + $line++; + + + // progress + if($progress) { + $progress_percent = floor(($line * 100) / $lineMax); + $progress->progress = $progress_percent; + if($progress_percent >= 100) { + $progress->progress = 99; + } + $progress->save(); + } + } +} + +$sheet->freezePane("A2"); +//$sheet->getStyle("A2:".$col[$i].$line)->getFont()->setName("monospace")->setSize(10); +$sheet->getStyle("A2:".$col[$i].$line)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color("C0C0C0")); +//$sheet->getStyle("A2:".$col[$i].$line)->getBorders()->getBottom()->setBorderStyle(Border::BORDER_MEDIUM); +//$sheet->getStyle("A2:".$col[$i].$line)->getBorders()->getLeft()->setBorderStyle(Border::BORDER_MEDIUM); +//$sheet->getStyle("A2:".$col[$i].$line)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM); + + +for($c = 0; $c < $i-2; $c++) { + $sheet->getColumnDimension($col[$c])->setAutoSize(true); +} +$sheet->getColumnDimension($col[$c])->setWidth(6, "in"); +$sheet->getColumnDimension($col[$c+1])->setWidth(6, "in"); + +//$writer = new Xls($xls); +$writer = new Xlsx($xls); + +//header("Content-type: application/vnd.ms-excel"); +//header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + +//header('Content-disposition: attachment; filename="leitungsbau-'.date('Y-m-d_H-i-s').'-'.uniqid().'.xlsx"'); +$writer->save($path."/".$filename); + +$progress->progress = 100; +$progress->save(); + +exit; + diff --git a/application/Linework/LineworkController.php b/application/Linework/LineworkController.php index 27fa9cfa2..77a2bc8c8 100644 --- a/application/Linework/LineworkController.php +++ b/application/Linework/LineworkController.php @@ -3,7 +3,7 @@ class LineworkController extends mfBaseController { protected function init() { - $this->needlogin=true; + $this->needlogin = true; $me = mfValuecache::singleton()->get("me"); if(!$me) { $me = new User(); @@ -32,14 +32,24 @@ class LineworkController extends mfBaseController { $pagination['count'] = 20; $pagination['maxItems'] = 0; - if($this->request->export) { - $this->layout()->setTemplate("Linework/export.xls"); - $pagination = false; - } - if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } + + if($this->request->export) { + $this->layout()->setTemplate("Linework/export.xls"); + $pagination = []; + } + if($this->request->export_progress) { + $this->layout()->setTemplate("Linework/export_progress.xls"); + if($this->request->uid) { + $this->layout()->set("export_uid", $this->request->uid); + $this->layout()->set("path", BASEDIR."/var/temp/export"); + } + $pagination = false; + } + + //var_dump($pagination);exit; $my_networks = []; @@ -103,7 +113,6 @@ class LineworkController extends mfBaseController { } $networks = []; - $pagination['maxItems'] = TerminationModel::count($termination_search); foreach(TerminationModel::search($termination_search, $pagination) as $term) { if(!array_key_exists($term->building->network->name, $networks)) { @@ -138,9 +147,7 @@ class LineworkController extends mfBaseController { $this->layout()->set("networks", $networks); $this->layout()->set("pagination", $pagination); //var_dump($networks);exit; - - - + } private function getPreparedFilter($filter) { @@ -165,6 +172,115 @@ class LineworkController extends mfBaseController { return $new_filter; } + public function startExport($request) { + $this->request = new mfRequest($request); + //var_dump($request);exit; + return $this->indexAction(); + } + + protected function exportAction() { + $uid = "wfExport_".uniqid()."-".mt_rand(10000,99999); + + $method = "http"; + if($_SERVER['HTTPS'] == "on") { + $method = "https"; + } + + $get = $this->request->get(); + unset($get['mod']); + unset($get['action']); + $get['export_progress'] = 1; + $get['uid'] = $uid; + $url = $method."://".$_SERVER['HTTP_HOST'].$this->getUrl("Linework", "Index", $get); + $url = escapeshellarg($url); + //var_dump($url);exit; + + $progress = new WorkflowExport(); + $progress->uid = $uid; + $progress->create_by = $this->me->id; + $progress->edit_by = $this->me->id; + $progress->save(); + /* + $cmd = "nohup curl ".$url." >/dev/null 2>&1 &"; + var_dump($cmd);exit; + // start excel generation in background and dont wait + exec($cmd); + */ + + $cmd = BASEDIR."/scripts/start_workflow_export.php"; + $args = ""; + + foreach($get['filter'] as $key => $value) { + $args .= " ".escapeshellarg("--$key")." ". escapeshellarg($value); + } + + + $cmd = "$cmd --uid ". escapeshellarg($uid)." $args >/dev/null 2>&1 &"; + exec($cmd); + + // return progress + $this->returnJson(['status' => "OK", 'uid' => $uid, "progress" => 0]); + } + + protected function exportProgressAction() { + $uid = $this->request->uid; + if(!$uid) { + $this->returnJson(['status' => "error", "msg" => "no uid"]); + } + + $progress = new WorkflowExport(); + $progress->loadByUid($this->request->uid); + if(!$progress->id) { + $this->returnJson(['status' => "error", "msg" => "export not found"]); + } + + $this->returnJson(['status' => "OK", 'export_uid ' => $uid, 'progress' => $progress->progress]); + } + + protected function downloadExportAction() { + $uid = $this->request->uid; + if(!$uid) { + $this->returnJson(['status' => "error", "msg" => "no uid"]); + } + + $progress = new WorkflowExport(); + $progress->loadByUid($this->request->uid); + if(!$progress->id) { + $this->returnJson(['status' => "error", "msg" => "export not found"]); + } + + $file = BASEDIR."/var/temp/export/".$progress->filename; + + if (!$fh = fopen($file, 'r')) { + $this->layout()->setFlash("Fehler beim Export.", "error"); + $this->redirect("Linework"); + return false; + } + + set_time_limit(36000); + header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + header('Content-disposition: attachment; filename="' . $progress->filename . '"'); + + $size = exec('stat -c %s '.escapeshellarg($file)); + + $this->log->debug("filename: ".$file); + $this->log->debug("filesize: ".$size); + + if(strlen($size)) { + if($size < (pow(2,31))-1) { + header('Content-Length: ' . $size); + } + } + + while (!feof($fh)) { + $data = fread($fh, 8192); + echo $data; + } + exit; + + } + + protected function saveAction() { $r = $this->request; //var_dump($r->get());exit; diff --git a/application/Termination/TerminationModel.php b/application/Termination/TerminationModel.php index 630dcbb57..de26190b0 100644 --- a/application/Termination/TerminationModel.php +++ b/application/Termination/TerminationModel.php @@ -127,6 +127,8 @@ class TerminationModel { private function getSqlFilter($filter) { $where = "1=1 "; + //var_dump($filter);exit; + if(array_key_exists("building_id", $filter)) { $building_id = $filter['building_id']; diff --git a/application/WorkflowExport/WorkflowExport.php b/application/WorkflowExport/WorkflowExport.php new file mode 100644 index 000000000..4e05b6ebe --- /dev/null +++ b/application/WorkflowExport/WorkflowExport.php @@ -0,0 +1,17 @@ +db->escape($uid); + + $res = $this->db->select("WorkflowExport", "*", "uid='$uid' ORDER BY id DESC LIMIT 1"); + if($this->db->num_rows($res)) { + $this->load($this->db->fetch_object($res)); + } + } +} \ No newline at end of file diff --git a/scripts/start_workflow_export.php b/scripts/start_workflow_export.php new file mode 100755 index 000000000..bf4171b1c --- /dev/null +++ b/scripts/start_workflow_export.php @@ -0,0 +1,67 @@ +#!/usr/bin/php +set("me", $me); + +$request=array(); + +// Put commandline arguments into $request +if(count($argv)) { + $args=$argv; + array_shift($args); // shift scriptname off of args array + + foreach($args as $i => $arg) { + if(preg_match('/^--([^ ]+)/',$arg,$m)) { + if(!preg_match('/^--/',$args[$i+1])) { + $request[$m[1]]=$args[$i+1]; + } + } + } +} + +//var_dump($request);exit; + + +if(array_key_exists("uid", $request)) { + if($request['uid']) { + $uid = $request['uid']; + unset($request['uid']); + } +} else { + die("uid missing\n"); +} + + +$filter = []; + +foreach($request as $key => $value) { + if(strlen($value)) { + $filter[$key] = $value; + } else { + if($key == "status_id" || $key == "network_id" || $key == "networksection_id") { + $filter[$key] = ""; + } + } +} + +$params = ['export_progress' => 1, 'uid' => $uid, 'filter' => $filter]; + +//var_dump($uid, $filter);exit; + +$Layout=Layout::singleton(); + +$lc = new LineworkController(); +$lc->startExport($params); + +$Layout->display(); \ No newline at end of file