Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EnforcerStatisticSheet.php 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace App\Exports;
  3. use Maatwebsite\Excel\Concerns\FromCollection;
  4. use Maatwebsite\Excel\Concerns\WithHeadings;
  5. use Maatwebsite\Excel\Concerns\WithTitle;
  6. use Maatwebsite\Excel\Concerns\ShouldAutoSize;
  7. use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
  8. use Maatwebsite\Excel\Concerns\WithCalculatedFormulas;
  9. use Maatwebsite\Excel\Concerns\WithStartRow;
  10. use Maatwebsite\Excel\Concerns\WithCustomStartCell;
  11. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  12. use Maatwebsite\Excel\Concerns\WithColumnFormatting;
  13. use Maatwebsite\Excel\Concerns\WithEvents;
  14. use Maatwebsite\Excel\Events\BeforeExport;
  15. use Maatwebsite\Excel\Events\AfterSheet;
  16. use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  17. class EnforcerStatisticSheet implements FromCollection, WithHeadings, ShouldAutoSize, WithTitle, WithEvents, WithStrictNullComparison, WithCalculatedFormulas, WithCustomStartCell
  18. {
  19. protected $data, $year, $title, $text_last_row;
  20. public function __construct($data, $year, $title)
  21. {
  22. $this->data = $data;
  23. $this->year = $year;
  24. $this->title = $this->year.'('.$title.')';
  25. if($title == 'KEPING'){
  26. $this->text_last_row = 'JUMLAH PENGELUARAN KOMPAUN BAGI SETIAP ANGGOTA ADALAH SEBANYAK 14 KEPING SEBULAN = 168 KEPING SETAHUN';
  27. }else {
  28. $this->text_last_row = 'JUMLAH PENGELUARAN KOMPAUN BAGI SETIAP ANGGOTA ADALAH SEBANYAK 1000.00 SEBULAN';
  29. }
  30. }
  31. public function collection()
  32. {
  33. return collect($this->data);
  34. }
  35. public function headings(): array
  36. {
  37. return [
  38. 'BIL',
  39. 'NAMA ANGGOTA',
  40. 'JAN',
  41. 'FEB',
  42. 'MAC',
  43. 'APRIL',
  44. 'MEI',
  45. 'JUN',
  46. 'JULAI',
  47. 'OGOS',
  48. 'SEPT',
  49. 'OKT',
  50. 'NOV',
  51. 'DIS',
  52. 'JUM',
  53. ];
  54. }
  55. public function title(): string
  56. {
  57. return $this->title;
  58. }
  59. public function startCell(): string
  60. {
  61. return 'A4';
  62. }
  63. public function registerEvents(): array
  64. {
  65. return [
  66. AfterSheet::class => function(AfterSheet $event) {
  67. // set up a style array for cell formatting
  68. $style_bold_text_center = [
  69. 'alignment' => [
  70. 'horizontal' => 'center',
  71. 'vertical' => 'center',
  72. ],
  73. 'font' => [
  74. 'bold' => true
  75. ],
  76. ];
  77. $style_bold_text_left = [
  78. 'alignment' => [
  79. 'horizontal' => 'left',
  80. ],
  81. 'font' => [
  82. 'bold' => true
  83. ]
  84. ];
  85. $style_normal_text_left = [
  86. 'alignment' => [
  87. 'horizontal' => 'left',
  88. ],
  89. 'font' => [
  90. 'bold' => false
  91. ]
  92. ];
  93. $style_normal_text_center = [
  94. 'alignment' => [
  95. 'horizontal' => 'center',
  96. ],
  97. 'font' => [
  98. 'bold' => false
  99. ]
  100. ];
  101. $style_border = [
  102. 'borders' => [
  103. 'allBorders' => [
  104. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
  105. 'color' => ['argb' => '000000'],
  106. ],
  107. ],
  108. ];
  109. if(count($this->data) > 0){
  110. // last column as letter value (e.g., D)
  111. $last_column = Coordinate::stringFromColumnIndex(count($this->data[0]));
  112. $second_last_column = Coordinate::stringFromColumnIndex(count($this->data[0])-1);
  113. // calculate last row + 1 (total results + header rows + column headings row + new row)
  114. $last_row = count($this->data) + 2 + 2 + 1 + 3;
  115. // merge cells for header
  116. $event->sheet->mergeCells('A3:A4');
  117. $event->sheet->mergeCells('B3:B4');
  118. $event->sheet->mergeCells(sprintf('C3:%s3', $second_last_column));
  119. $event->sheet->mergeCells(sprintf('%s3:%s4',$last_column, $last_column));
  120. // merge cells for full-width
  121. $event->sheet->mergeCells(sprintf('A1:%s1',$last_column));
  122. $event->sheet->mergeCells(sprintf('A2:%s2',$last_column));
  123. $event->sheet->mergeCells(sprintf('B%d:%s%d',$last_row,$last_column,$last_row));
  124. // assign cell values
  125. $event->sheet->setCellValue('A1','STATISTIK PENGELUARAN KOMPAUN (BULANAN) BAGI TAHUN '.$this->year);
  126. $event->sheet->setCellValue('A2','');
  127. $event->sheet->setCellValue('A3','BIL');
  128. $event->sheet->setCellValue('B3','NAMA ANGGOTA');
  129. $event->sheet->setCellValue(sprintf('%s3',$last_column),'JUM');
  130. $event->sheet->setCellValue('C3','BULAN');
  131. $event->sheet->setCellValue('C4','JAN');
  132. $event->sheet->setCellValue('D4','FEB');
  133. $event->sheet->setCellValue('E4','MAC');
  134. $event->sheet->setCellValue('F4','APRIL');
  135. $event->sheet->setCellValue('G4','MEI');
  136. $event->sheet->setCellValue('H4','JUN');
  137. $event->sheet->setCellValue('I4','JULAI');
  138. $event->sheet->setCellValue('J4','OGOS');
  139. $event->sheet->setCellValue('K4','SEPT');
  140. $event->sheet->setCellValue('L4','OKT');
  141. $event->sheet->setCellValue('M4','NOV');
  142. $event->sheet->setCellValue('N4','DIS');
  143. $event->sheet->setCellValue(sprintf('A%d',$last_row),'**');
  144. $event->sheet->setCellValue(sprintf('B%d',$last_row), $this->text_last_row);
  145. $event->sheet->setCellValue(sprintf('B%d',$last_row-2), 'JUMLAH BESAR');
  146. $event->sheet->setCellValue(sprintf('C%d',$last_row-2), '=SUM(C5:C'.($last_row-3).')');
  147. $event->sheet->setCellValue(sprintf('D%d',$last_row-2), '=SUM(D5:D'.($last_row-3).')');
  148. $event->sheet->setCellValue(sprintf('E%d',$last_row-2), '=SUM(E5:E'.($last_row-3).')');
  149. $event->sheet->setCellValue(sprintf('F%d',$last_row-2), '=SUM(F5:F'.($last_row-3).')');
  150. $event->sheet->setCellValue(sprintf('G%d',$last_row-2), '=SUM(G5:G'.($last_row-3).')');
  151. $event->sheet->setCellValue(sprintf('H%d',$last_row-2), '=SUM(H5:H'.($last_row-3).')');
  152. $event->sheet->setCellValue(sprintf('I%d',$last_row-2), '=SUM(I5:I'.($last_row-3).')');
  153. $event->sheet->setCellValue(sprintf('J%d',$last_row-2), '=SUM(J5:J'.($last_row-3).')');
  154. $event->sheet->setCellValue(sprintf('K%d',$last_row-2), '=SUM(K5:K'.($last_row-3).')');
  155. $event->sheet->setCellValue(sprintf('L%d',$last_row-2), '=SUM(L5:L'.($last_row-3).')');
  156. $event->sheet->setCellValue(sprintf('M%d',$last_row-2), '=SUM(M5:M'.($last_row-3).')');
  157. $event->sheet->setCellValue(sprintf('N%d',$last_row-2), '=SUM(N5:N'.($last_row-3).')');
  158. $event->sheet->setCellValue(sprintf('O%d',$last_row-2), '=SUM(O5:O'.($last_row-3).')');
  159. // assign cell styles
  160. $event->sheet->getStyle('A1:A2')->applyFromArray($style_bold_text_center);
  161. $event->sheet->getStyle(sprintf('A3:%s3',$last_column))->applyFromArray($style_bold_text_center);
  162. $event->sheet->getStyle('C4:N4')->applyFromArray($style_bold_text_center);
  163. $event->sheet->getStyle(sprintf('A5:A%d',($last_row-2)))->applyFromArray($style_bold_text_center);
  164. $event->sheet->getStyle(sprintf('%s5:%s%d',$last_column,$last_column,($last_row-2)))->applyFromArray($style_normal_text_center);
  165. $event->sheet->getStyle(sprintf('C5:C%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  166. $event->sheet->getStyle(sprintf('D5:D%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  167. $event->sheet->getStyle(sprintf('E5:E%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  168. $event->sheet->getStyle(sprintf('F5:F%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  169. $event->sheet->getStyle(sprintf('G5:G%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  170. $event->sheet->getStyle(sprintf('H5:H%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  171. $event->sheet->getStyle(sprintf('I5:I%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  172. $event->sheet->getStyle(sprintf('J5:J%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  173. $event->sheet->getStyle(sprintf('K5:K%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  174. $event->sheet->getStyle(sprintf('L5:L%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  175. $event->sheet->getStyle(sprintf('M5:M%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  176. $event->sheet->getStyle(sprintf('N5:N%d',($last_row-2)))->applyFromArray($style_normal_text_center);
  177. $event->sheet->getStyle(sprintf('B%d:O%d',($last_row-2),($last_row-2)))->applyFromArray($style_bold_text_center);
  178. $event->sheet->getStyle('A3:O3')->getFill()
  179. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  180. ->getStartColor()->setARGB('A5A5A5');
  181. $event->sheet->getStyle('C4:N4')->getFill()
  182. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  183. ->getStartColor()->setARGB('A5A5A5');
  184. $event->sheet->getStyle(sprintf('A%d:O%d', ($last_row-2), ($last_row-2) ))->getFill()
  185. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  186. ->getStartColor()->setARGB('A5A5A5');
  187. $event->sheet->getStyle(sprintf('A5:A%d', ($last_row-3)))->getFill()
  188. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  189. ->getStartColor()->setARGB('E5B8B7');
  190. $event->sheet->getStyle(sprintf('B5:B%d', ($last_row-3)))->getFill()
  191. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  192. ->getStartColor()->setARGB('E5B8B7');
  193. $event->sheet->getStyle(sprintf('O5:O%d', ($last_row-3)))->getFill()
  194. ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  195. ->getStartColor()->setARGB('E5B8B7');
  196. $event->sheet->getStyle(sprintf('A%d',$last_row))->applyFromArray($style_bold_text_left);
  197. $event->sheet->getStyle(sprintf('B%d',$last_row))->applyFromArray($style_bold_text_left);
  198. // assign border styles
  199. $event->sheet->getStyle(sprintf('A3:A%d',($last_row-2)))->applyFromArray($style_border);
  200. $event->sheet->getStyle(sprintf('B3:B%d',($last_row-2)))->applyFromArray($style_border);
  201. $event->sheet->getStyle(sprintf('C3:C%d',($last_row-2)))->applyFromArray($style_border);
  202. $event->sheet->getStyle(sprintf('D3:D%d',($last_row-2)))->applyFromArray($style_border);
  203. $event->sheet->getStyle(sprintf('E3:E%d',($last_row-2)))->applyFromArray($style_border);
  204. $event->sheet->getStyle(sprintf('F3:F%d',($last_row-2)))->applyFromArray($style_border);
  205. $event->sheet->getStyle(sprintf('G3:G%d',($last_row-2)))->applyFromArray($style_border);
  206. $event->sheet->getStyle(sprintf('H3:H%d',($last_row-2)))->applyFromArray($style_border);
  207. $event->sheet->getStyle(sprintf('I3:I%d',($last_row-2)))->applyFromArray($style_border);
  208. $event->sheet->getStyle(sprintf('J3:J%d',($last_row-2)))->applyFromArray($style_border);
  209. $event->sheet->getStyle(sprintf('K3:K%d',($last_row-2)))->applyFromArray($style_border);
  210. $event->sheet->getStyle(sprintf('L3:L%d',($last_row-2)))->applyFromArray($style_border);
  211. $event->sheet->getStyle(sprintf('M3:M%d',($last_row-2)))->applyFromArray($style_border);
  212. $event->sheet->getStyle(sprintf('N3:N%d',($last_row-2)))->applyFromArray($style_border);
  213. $event->sheet->getStyle(sprintf('O3:O%d',($last_row-2)))->applyFromArray($style_border);
  214. }
  215. },
  216. ];
  217. }
  218. }