@php function numberToWords($number) { $number = floor($number); $words = [ '', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan', 'sepuluh', 'sebelas' ]; if ($number < 12) { return $words[$number]; } else if ($number < 20) { return $words[$number - 10] . ' belas'; } else if ($number < 100) { $result = $words[floor($number / 10)] . ' puluh ' . $words[$number % 10]; } else if ($number < 200) { $result = 'seratus ' . $this->numberToWords($number - 100); } else if ($number < 1000) { $result = $words[floor($number / 100)] . ' ratus ' . $this->numberToWords($number % 100); } else if ($number < 2000) { $result = 'seribu ' . $this->numberToWords($number - 1000); } else if ($number < 1000000) { $result = $this->numberToWords(floor($number / 1000)) . ' ribu ' . $this->numberToWords($number % 1000); } else if ($number < 1000000000) { $result = $this->numberToWords(floor($number / 1000000)) . ' juta ' . $this->numberToWords($number % 1000000); } else if ($number < 1000000000000) { $result = $this->numberToWords(floor($number / 1000000000)) . ' milyar ' . $this->numberToWords($number % 1000000000); } else if ($number < 1000000000000000) { $result = $this->numberToWords(floor($number / 1000000000000)) . ' triliun ' . $this->numberToWords($number % 1000000000000); } else { return 'Jumlah terlalu besar'; } // Remove double spaces and trim return trim(preg_replace('/\s+/', ' ', $result)); } // Define the maximum number of lines per page $maxLines = 22; $allDetails = $salesInvoice->details; $pages = []; $currentPageItems = []; $currentLines = 0; $currentPageSubtotal = 0; foreach ($allDetails as $detail) { $maxLength = 31; $itemName = $detail->item_name.' '.$detail->notes; $prefix = '| BUTTERFLY |'; // Check if the item name starts with the prefix if (str_starts_with($itemName, $prefix)) { // Remove the prefix if it exists //$itemName = substr($itemName, strlen($prefix)); // Optional: Trim any leading/trailing whitespace left after removal $itemName = trim($itemName); } $linesNeeded = count(explode("\n", wordwrap($itemName, $maxLength, "\n", false))); // dump($linesNeeded); if (($currentLines + $linesNeeded) > $maxLines) { $pages[] = [ 'items' => $currentPageItems, ]; $currentPageItems = []; $currentLines = 0; } $currentPageItems[] = $detail; $currentLines += $linesNeeded; } if (!empty($currentPageItems)) { $pages[] = [ 'items' => $currentPageItems, ]; } $names=''; $names=$salesInvoice->alias?$name:($salesInvoice->si->logo==true?'O L SURABAYA':'SERBAJAYALAKU'); $name = !$salesInvoice->alias?$name:$salesInvoice->alias_name; $city = !$salesInvoice->alias?$salesInvoice->city:$salesInvoice->alias_city; $totalPages = count($pages); @endphp @foreach($pages as $pageNumber => $page) @php $qtys=0; @endphp


  {{ str_pad('SURAT JALAN', 27) }} {{$name ?? 'N/A'}}
  {{ str_pad('', 45) }} {{''}}
  {{ str_pad('', 45) }} {{$city ?? ''}}{{$salesInvoice->phone_number?' - '.$salesInvoice->phone_number:''}}
  {{ str_pad('', 45) }} {{ \Carbon\Carbon::parse($salesInvoice->document_date)->format('d/m/Y') }}
                                                {{ substr($salesInvoice->sales_invoice_number,7) }}
 ———————————————————————————————————————————————————————————————————————————————————————
  NO                      NAMA BARANG                      QTY       UNIT
 ———————————————————————————————————————————————————————————————————————————————————————
@php
    $count = 0;
    $startingIndex = 0;
    for ($i = 0; $i < $pageNumber; $i++) {
        $startingIndex += count($pages[$i]['items']);
    }
@endphp
@foreach($page['items'] as $index => $detail)
@php
    $maxLength = 49; // Max length for item name
    $itemName = $detail->item_name.' '.$detail->notes;
    $prefix = '| BUTTERFLY |';
    // Check if the item name starts with the prefix
    if (str_starts_with($itemName, $prefix)) {
        // Remove the prefix if it exists
        $itemName = substr($itemName, strlen($prefix));
        // Optional: Trim any leading/trailing whitespace left after removal
        $itemName = trim($itemName);
    }
    $lines = explode("\n", wordwrap($itemName, $maxLength, "\n", false)); // Word-based wrapping
    $qtys+=$detail->qty;
@endphp
@foreach($lines as $lineIndex => $line)
@if($lineIndex == 0)
  {{ str_pad($startingIndex + $loop->parent->iteration, 3) }} {{ str_pad($line, 49) }} {{ str_pad(number_format( $detail->qty, 0, ',', '.') , 10, ' ', STR_PAD_BOTH) }} {{ str_pad($salesInvoice->unit_name , 10, ' ', STR_PAD_BOTH) }} {{ str_pad(' ', 9) }}
@else
  {{ str_pad('', 3) }} {{ str_pad($line, 49) }} {{ str_pad('', 10) }} {{ str_pad('', 10) }} {{ str_pad(' ', 9) }}
@endif
@php
    $count++;
@endphp
@endforeach
@endforeach
@for($i = 0; $i < (11 - $count-1); $i++)
  {{ str_pad('', 3) }} {{ str_pad('', 49) }} {{ str_pad('', 10) }} {{ str_pad('', 10) }} {{ str_pad(' ', 9) }}
@endfor
@php
    $maxLength = 40;
    $exp = ($salesInvoice->ekspedisi && $salesInvoice->ekspedisi != '') ? 'EXP    : ' . $salesInvoice->ekspedisi : '';
    $expLines = explode("\n", wordwrap($exp, $maxLength, "\n", false));
    $maxLength = 35;
    $alamat = ($salesInvoice->ekspedisi && $salesInvoice->alamat != '') ?'ALAMAT : ' . $salesInvoice->alamat:'';
    $alamatLines = explode("\n", wordwrap($alamat, $maxLength, "\n", false));
@endphp
 ———————————————————————————————————————————————————————————————————————————————————————
 {{str_pad(('Terbilang: '.strtoupper(numberToWords($qtys)).' '.$salesInvoice->unit_name),58,' ',STR_PAD_RIGHT)}} {{str_pad($qtys.'         '.$salesInvoice->unit_name,24, ' ', STR_PAD_RIGHT)}}
 ———————————————————————————————————————————————————————————————————————————————————————
  PENERIMA: {{ str_pad('', 10) }} {{ str_pad($expLines[0] , 40, ' ', STR_PAD_RIGHT) }}   PENGIRIM:
@if(isset($expLines[1]))
  {{ str_pad('', 20) }} {{ str_pad('         '.$expLines[1] , 40, ' ', STR_PAD_RIGHT) }}
@endif
@if(isset($expLines[2]))
  {{ str_pad('', 20) }} {{ str_pad('         '.$expLines[2] , 40, ' ', STR_PAD_RIGHT) }}
@endif
  {{ str_pad('', 20) }} {{ str_pad($alamatLines[0], 40, ' ', STR_PAD_RIGHT) }}
@if(isset($alamatLines[1]))
  {{ str_pad('', 20) }} {{ str_pad('         '.$alamatLines[1], 40, ' ', STR_PAD_RIGHT) }}
@else

@endif
@if(!isset($expLines[1]))

@endif


{{str_pad($names,77,' ',STR_PAD_LEFT)}}       {{ ($pageNumber + 1) }} of {{ $totalPages }}
        
@endforeach Kembali