|
|
@@ -259,12 +259,15 @@ class Record extends Component
|
|
|
}
|
|
|
public function export()
|
|
|
{
|
|
|
+ ini_set('memory_limit', '512M');
|
|
|
+
|
|
|
+ gc_enable();
|
|
|
+
|
|
|
$letters = array('F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA');
|
|
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
|
$activeWorksheet = $spreadsheet->getActiveSheet();
|
|
|
|
|
|
- //$activeWorksheet->setCellValue('A1', 'PrimaNota');
|
|
|
$activeWorksheet->setCellValue('A1', "Data");
|
|
|
$activeWorksheet->setCellValue('B1', "Causale");
|
|
|
$activeWorksheet->setCellValue('C1', "Dettaglio");
|
|
|
@@ -297,7 +300,6 @@ class Record extends Component
|
|
|
if ($idx >= count($letters)) {
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "Entrate");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "Uscite");
|
|
|
@@ -306,7 +308,6 @@ class Record extends Component
|
|
|
if ($idx >= count($letters)) {
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "Entrate");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "");
|
|
|
@@ -315,7 +316,6 @@ class Record extends Component
|
|
|
if ($idx >= count($letters)) {
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . '2', "Uscite");
|
|
|
@@ -325,62 +325,73 @@ class Record extends Component
|
|
|
|
|
|
$activeWorksheet->getStyle('A1:Q1')->getFont()->setBold(true);
|
|
|
$activeWorksheet->getStyle('A2:Q2')->getFont()->setBold(true);
|
|
|
- // $activeWorksheet->getStyle('A1:N1')->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('00ff00');
|
|
|
|
|
|
$count = 3;
|
|
|
+ $batchSize = 1000;
|
|
|
+ $recordsProcessed = 0;
|
|
|
+
|
|
|
+ $totalRecords = count($this->records);
|
|
|
+ $recordsArray = array_chunk($this->records, $batchSize, true);
|
|
|
+
|
|
|
+ foreach ($recordsArray as $recordsBatch) {
|
|
|
+ foreach ($recordsBatch as $causal => $record) {
|
|
|
+ $check = strpos($causal, "$") ? explode("$", $causal)[1] : $causal;
|
|
|
+
|
|
|
+ $parts = explode("§", $check);
|
|
|
+ $d = $parts[0] ?? '';
|
|
|
+ $c = $parts[1] ?? '';
|
|
|
+ $j = $parts[2] ?? '';
|
|
|
+ $k = $parts[3] ?? '';
|
|
|
+ $deleted = $parts[4] ?? '';
|
|
|
+ $numeroLinea = $parts[5] ?? '';
|
|
|
+
|
|
|
+ $activeWorksheet->setCellValue('A' . $count, !empty($d) ? date("d/m/Y", strtotime($d)) : '');
|
|
|
+ $activeWorksheet->setCellValue('B' . $count, $c);
|
|
|
+ $activeWorksheet->setCellValue('C' . $count, $k);
|
|
|
+ $activeWorksheet->setCellValue('D' . $count, $j);
|
|
|
+
|
|
|
+ $stato = ($deleted === 'DELETED') ? 'ANNULLATA' : '';
|
|
|
+ $activeWorksheet->setCellValue('E' . $count, $stato);
|
|
|
+
|
|
|
+ if ($stato === 'ANNULLATA') {
|
|
|
+ $activeWorksheet->getStyle('E' . $count)->getFont()->getColor()->setARGB('FFFF0000');
|
|
|
+ }
|
|
|
|
|
|
- $totals = [];
|
|
|
-
|
|
|
- foreach ($this->records as $causal => $record) {
|
|
|
-
|
|
|
- $check = strpos($causal, "$") ? explode("$", $causal)[1] : $causal;
|
|
|
- list($d, $c, $j, $k, $deleted, $numeroLinea) = explode("§", $check);
|
|
|
-
|
|
|
- $activeWorksheet->setCellValue('A' . $count, date("d/m/Y", strtotime($d)));
|
|
|
- $activeWorksheet->setCellValue('B' . $count, $c);
|
|
|
- $activeWorksheet->setCellValue('C' . $count, $k);
|
|
|
- $activeWorksheet->setCellValue('D' . $count, $j);
|
|
|
-
|
|
|
- $stato = ($deleted === 'DELETED') ? 'ANNULLATA' : '';
|
|
|
- $activeWorksheet->setCellValue('E' . $count, $stato);
|
|
|
-
|
|
|
- if ($stato === 'ANNULLATA') {
|
|
|
- $activeWorksheet->getStyle('E' . $count)->getFont()->getColor()->setARGB('FFFF0000');
|
|
|
- }
|
|
|
+ $idx = 0;
|
|
|
+ foreach ($this->payments as $p) {
|
|
|
+ if ($idx >= count($letters) - 1) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- $idx = 0;
|
|
|
- foreach ($this->payments as $p) {
|
|
|
- if (isset($record[$p->name])) {
|
|
|
+ if (isset($record[$p->name])) {
|
|
|
+ $inValue = isset($record[$p->name]["IN"]) ? formatPrice($record[$p->name]["IN"]) : "";
|
|
|
+ $outValue = isset($record[$p->name]["OUT"]) ? formatPrice($record[$p->name]["OUT"]) : "";
|
|
|
|
|
|
- if (isset($record[$p->name]["IN"])) {
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($record[$p->name]["IN"]));
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, $inValue);
|
|
|
+ $idx++;
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, $outValue);
|
|
|
+ $idx++;
|
|
|
} else {
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
- }
|
|
|
- $idx++;
|
|
|
- if (isset($record[$p->name]["OUT"])) {
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($record[$p->name]["OUT"]));
|
|
|
- } else {
|
|
|
+ $idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
+ $idx++;
|
|
|
}
|
|
|
- $idx++;
|
|
|
- } else {
|
|
|
- if ($idx >= count($letters)) {
|
|
|
- break;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
- $idx++;
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
- $idx++;
|
|
|
+ $count++;
|
|
|
+ $recordsProcessed++;
|
|
|
+
|
|
|
+ if ($recordsProcessed % 500 === 0) {
|
|
|
+ gc_collect_cycles();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $count += 1;
|
|
|
+ unset($recordsBatch);
|
|
|
+ gc_collect_cycles();
|
|
|
}
|
|
|
|
|
|
- $count += 1;
|
|
|
-
|
|
|
+ $count++;
|
|
|
$idx = 0;
|
|
|
|
|
|
$activeWorksheet->setCellValue('A' . $count, 'Totale');
|
|
|
@@ -390,47 +401,39 @@ class Record extends Component
|
|
|
$activeWorksheet->setCellValue('E' . $count, '');
|
|
|
|
|
|
foreach ($this->payments as $p) {
|
|
|
+ if ($idx >= count($letters) - 1) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (isset($this->totals[$p->name])) {
|
|
|
if ($p->type == 'ALL') {
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["IN"]));
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["IN"] ?? 0));
|
|
|
$idx++;
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["OUT"]));
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["OUT"] ?? 0));
|
|
|
$idx++;
|
|
|
} elseif ($p->type == 'IN') {
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["IN"]));
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["IN"] ?? 0));
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
$idx++;
|
|
|
} elseif ($p->type == 'OUT') {
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
$idx++;
|
|
|
- $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["OUT"]));
|
|
|
+ $activeWorksheet->setCellValue($letters[$idx] . $count, formatPrice($this->totals[$p->name]["OUT"] ?? 0));
|
|
|
$idx++;
|
|
|
}
|
|
|
} else {
|
|
|
if ($p->type == 'ALL') {
|
|
|
- if ($idx >= count($letters)) {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "0");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "0");
|
|
|
$idx++;
|
|
|
} elseif ($p->type == 'IN') {
|
|
|
- if ($idx >= count($letters)) {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "0");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
$idx++;
|
|
|
} elseif ($p->type == 'OUT') {
|
|
|
- if ($idx >= count($letters)) {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "");
|
|
|
$idx++;
|
|
|
$activeWorksheet->setCellValue($letters[$idx] . $count, "0");
|
|
|
@@ -446,11 +449,16 @@ class Record extends Component
|
|
|
$activeWorksheet->getColumnDimension('C')->setWidth(40);
|
|
|
$activeWorksheet->getColumnDimension('D')->setWidth(40);
|
|
|
$activeWorksheet->getColumnDimension('E')->setWidth(20);
|
|
|
- foreach ($letters as $l)
|
|
|
+ foreach ($letters as $l) {
|
|
|
$activeWorksheet->getColumnDimension($l)->setWidth(20);
|
|
|
+ }
|
|
|
|
|
|
$writer = new Xlsx($spreadsheet);
|
|
|
- $writer->save($path = storage_path('prima_nota_' . date("YmdHis") . '.xlsx'));
|
|
|
+ $path = storage_path('prima_nota_' . date("YmdHis") . '.xlsx');
|
|
|
+ $writer->save($path);
|
|
|
+
|
|
|
+ unset($spreadsheet, $activeWorksheet, $writer);
|
|
|
+ gc_collect_cycles();
|
|
|
|
|
|
return response()->download($path)->deleteFileAfterSend();
|
|
|
}
|