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.

CompoundBacklogSheet.php 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  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 CompoundBacklogSheet implements FromCollection, WithTitle, WithEvents, WithStrictNullComparison, WithCalculatedFormulas, WithCustomStartCell, WithColumnFormatting
  18. {
  19. protected $data_, $year_, $jumlah_, $keping_;
  20. public function __construct($data, $year, $jumlah, $keping)
  21. {
  22. $this->data_ = $data;
  23. $this->year_ = $year;
  24. $this->jumlah_ = $jumlah;
  25. $this->keping_ = $keping;
  26. }
  27. public function collection()
  28. {
  29. return collect($this->data_);
  30. }
  31. public function startCell(): string
  32. {
  33. return 'A10';
  34. }
  35. public function title(): string
  36. {
  37. return 'LAP. TUNGGAKAN';
  38. }
  39. public function columnFormats(): array
  40. {
  41. return [
  42. 'A' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  43. 'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  44. 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  45. 'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  46. 'F' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  47. 'G' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  48. 'H' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  49. 'I' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  50. 'J' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
  51. ];
  52. }
  53. public function registerEvents(): array
  54. {
  55. return
  56. [
  57. AfterSheet::class => function(AfterSheet $event)
  58. {
  59. $event->sheet->getDelegate()->getColumnDimension('A')->setWidth(10.34);
  60. $event->sheet->getDelegate()->getColumnDimension('B')->setWidth(26.01);
  61. $event->sheet->getDelegate()->getColumnDimension('C')->setWidth(15.07);
  62. $event->sheet->getDelegate()->getColumnDimension('D')->setWidth(14.34);
  63. $event->sheet->getDelegate()->getColumnDimension('E')->setWidth(16.85);
  64. $event->sheet->getDelegate()->getColumnDimension('F')->setWidth(16.78);
  65. $event->sheet->getDelegate()->getColumnDimension('G')->setWidth(12.95);
  66. $event->sheet->getDelegate()->getColumnDimension('H')->setWidth(13.86);
  67. $event->sheet->getDelegate()->getColumnDimension('I')->setWidth(11.88);
  68. $event->sheet->getDelegate()->getColumnDimension('J')->setWidth(14.12);
  69. // set up a style array for cell formatting
  70. $style_bold_text_center_arial = [
  71. 'alignment' => [
  72. 'horizontal' => 'center',
  73. 'vertical' => 'center',
  74. ],
  75. 'font' => [
  76. 'bold' => true,
  77. 'size' => 11,
  78. 'name' => 'Arial'
  79. ]
  80. ];
  81. $style_bold_text_center_calibri_12 = [
  82. 'alignment' => [
  83. 'horizontal' => 'center',
  84. 'vertical' => 'center',
  85. ],
  86. 'font' => [
  87. 'bold' => true,
  88. 'size' => 12,
  89. 'name' => 'Calibri'
  90. ]
  91. ];
  92. $style_bold_text_center_calibri = [
  93. 'alignment' => [
  94. 'horizontal' => 'center',
  95. 'vertical' => 'center',
  96. ],
  97. 'font' => [
  98. 'bold' => true,
  99. 'size' => 10,
  100. 'name' => 'Calibri'
  101. ]
  102. ];
  103. $style_normal_text_center = [
  104. 'alignment' => [
  105. 'horizontal' => 'center',
  106. 'vertical' => 'center',
  107. ],
  108. 'font' => [
  109. 'bold' => false,
  110. 'size' => 10,
  111. 'name' => 'Calibri'
  112. ]
  113. ];
  114. $style_bold_text_right = [
  115. 'alignment' => [
  116. 'horizontal' => 'right',
  117. ],
  118. 'font' => [
  119. 'bold' => true,
  120. 'size' => 10,
  121. 'name' => 'Calibri'
  122. ]
  123. ];
  124. $style_border = [
  125. 'borders' => [
  126. 'allBorders' => [
  127. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_MEDIUM,
  128. 'color' => ['argb' => '000000'],
  129. ],
  130. ],
  131. ];
  132. $style_border_thin = [
  133. 'borders' => [
  134. 'allBorders' => [
  135. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
  136. 'color' => ['argb' => '000000'],
  137. ],
  138. ],
  139. ];
  140. $style_border_medium = [
  141. 'borders' => [
  142. 'top' => [
  143. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_MEDIUM,
  144. 'color' => ['argb' => '000000'],
  145. ],
  146. ],
  147. ];
  148. $style_border_top = [
  149. 'borders' => [
  150. 'top' => [
  151. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
  152. 'color' => ['argb' => '000000'],
  153. ],
  154. ],
  155. 'font' => [
  156. 'bold' => true,
  157. 'size' => 10,
  158. 'name' => 'Calibri'
  159. ],
  160. 'alignment' => [
  161. 'horizontal' => 'center',
  162. 'vertical' => 'center',
  163. ],
  164. ];
  165. $style_border_side = [
  166. 'borders' => [
  167. 'left' => [
  168. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_MEDIUM,
  169. 'color' => ['argb' => '000000'],
  170. ],
  171. 'right' => [
  172. 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_MEDIUM,
  173. 'color' => ['argb' => '000000'],
  174. ],
  175. ],
  176. 'font' => [
  177. 'bold' => false,
  178. 'size' => 11,
  179. 'name' => 'Arial'
  180. ],
  181. 'alignment' => [
  182. 'horizontal' => 'center',
  183. 'vertical' => 'center',
  184. ],
  185. ];
  186. if(count($this->data_ ) > 0)
  187. {
  188. $last_column = Coordinate::stringFromColumnIndex(count($this->data_[0]));
  189. $last_row = count($this->data_) + 5 + 4 + 1 ;
  190. $last_row_data = count($this->data_) + 5 + 4 + 1 + 2 ;
  191. //merge cells for full width (main title)
  192. $event->sheet->mergeCells(sprintf('A2:%s2',$last_column));
  193. $event->sheet->mergeCells(sprintf('A3:%s3',$last_column));
  194. $event->sheet->mergeCells(sprintf('A4:%s4',$last_column));
  195. //declare merging cells for header
  196. //horizontal
  197. $event->sheet->mergeCells('A22:B22');
  198. // $event->sheet->mergeCells('B6:C6');
  199. // $event->sheet->mergeCells('B8:C8');
  200. $event->sheet->mergeCells('B24:C24');
  201. //vertical
  202. $event->sheet->mergeCells('A6:A9');
  203. $event->sheet->mergeCells('B6:B7');
  204. $event->sheet->mergeCells('B10:B21');
  205. $event->sheet->mergeCells('C6:C9');
  206. $event->sheet->mergeCells('D6:D9');
  207. $event->sheet->mergeCells('E6:E9');
  208. $event->sheet->mergeCells('E24:E25');
  209. $event->sheet->mergeCells('F6:F9');
  210. $event->sheet->mergeCells('F24:F25');
  211. $event->sheet->mergeCells('G6:G9');
  212. $event->sheet->mergeCells('H6:H9');
  213. $event->sheet->mergeCells('I6:I9');
  214. $event->sheet->mergeCells('J6:J9');
  215. //assign cell values for table header
  216. $event->sheet->setCellValue('A2', 'LAPORAN TUNGGAKAN TAHUN '. $this->year_);
  217. $event->sheet->setCellValue('A3', 'BAHAGIAN PENGUATKUASA');
  218. $event->sheet->setCellValue('A4', 'MAJLIS DAERAH CAMERON HIGHLAND');
  219. $event->sheet->setCellValue('A6', 'BULAN');
  220. $event->sheet->setCellValue('B6', 'BAKI PADA 1.1.'. $this->year_);
  221. $event->sheet->setCellValue('B8', $this->jumlah_);
  222. $event->sheet->setCellValue('B9', $this->keping_);
  223. $event->sheet->setCellValue('C6', 'KUTIPAN BULANAN (RM)');
  224. $event->sheet->setCellValue('D6', 'JUMLAH KOMPAUN BAYAR');
  225. $event->sheet->setCellValue('E6', 'KUTIPAN TERKUMPUL (RM)');
  226. $event->sheet->setCellValue('F6', 'BAKI TUNGGAKAN (RM)');
  227. $event->sheet->setCellValue('G6', 'BAKI BELUM BAYAR');
  228. $event->sheet->setCellValue('H6', 'JUMLAH KURANG (RM)');
  229. $event->sheet->setCellValue('I6', '% KUTIPAN');
  230. $event->sheet->setCellValue('J6', '% TERKUMPUL');
  231. //assign cell values for table footer
  232. $event->sheet->setCellValue(sprintf('C%d',$last_row),'=SUM(C10:C'.$last_row.')');
  233. $event->sheet->setCellValue(sprintf('D%d',$last_row),'=SUM(D10:D'.$last_row.')');
  234. $event->sheet->setCellValue(sprintf('H%d',$last_row),'=SUM(H10:H'.$last_row.')');
  235. $event->sheet->setCellValue(sprintf('B%d',$last_row_data), 'Kutipan tunggakan terkumpul : ');
  236. $event->sheet->setCellValue(sprintf('D%d',$last_row_data), '=SUM(C10:C'.($last_row-1).')');
  237. $event->sheet->setCellValue(sprintf('D%d',$last_row_data+1), $this->jumlah_);
  238. $event->sheet->setCellValue(sprintf('E%d',$last_row_data), 'x 100 =');
  239. $event->sheet->setCellValue(sprintf('F%d',$last_row_data), '=D'.($last_row_data).'/D'.($last_row_data+1).'*100');
  240. // $event->sheet->setCellValue(sprintf('G%d',$last_row_data), '%');
  241. //styling cells
  242. $event->sheet->getStyle('A2')->applyFromArray($style_bold_text_center_arial);
  243. $event->sheet->getStyle('A3:A4')->applyFromArray($style_bold_text_center_arial);
  244. $event->sheet->getStyle('A6:J6')->applyFromArray($style_bold_text_center_arial);
  245. $event->sheet->getStyle('B7:B9')->applyFromArray($style_bold_text_center_arial);
  246. $event->sheet->getStyle('C22')->applyFromArray($style_bold_text_center_arial);
  247. $event->sheet->getStyle('D22')->applyFromArray($style_bold_text_center_arial);
  248. $event->sheet->getStyle('H22')->applyFromArray($style_bold_text_center_arial);
  249. $event->sheet->getStyle('B24:F24')->applyFromArray($style_bold_text_center_arial);
  250. $event->sheet->getStyle('D25')->applyFromArray($style_bold_text_center_arial);
  251. $event->sheet->getStyle('A6:O6')->getAlignment()->setWrapText(true);
  252. $event->sheet->getStyle('A7:O7')->getAlignment()->setWrapText(true);
  253. //text alignment
  254. $event->sheet->getStyle(sprintf('A10:A%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  255. $event->sheet->getStyle(sprintf('B10:B%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  256. $event->sheet->getStyle(sprintf('C10:C%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  257. $event->sheet->getStyle(sprintf('D10:D%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  258. $event->sheet->getStyle(sprintf('E10:E%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  259. $event->sheet->getStyle(sprintf('F10:F%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  260. $event->sheet->getStyle(sprintf('G10:G%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  261. $event->sheet->getStyle(sprintf('H10:H%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  262. $event->sheet->getStyle(sprintf('I10:I%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  263. $event->sheet->getStyle(sprintf('J10:J%d',($last_row-1)))->applyFromArray($style_normal_text_center);
  264. // assign border styles
  265. $event->sheet->getStyle('A6:A9')->applyFromArray($style_border);
  266. $event->sheet->getStyle('B6')->applyFromArray($style_border);
  267. $event->sheet->getStyle('B10')->applyFromArray($style_border);
  268. $event->sheet->getStyle('C6:C9')->applyFromArray($style_border);
  269. $event->sheet->getStyle('D6:D9')->applyFromArray($style_border);
  270. $event->sheet->getStyle('E6:E9')->applyFromArray($style_border);
  271. $event->sheet->getStyle('F6:F9')->applyFromArray($style_border);
  272. $event->sheet->getStyle('G6:G9')->applyFromArray($style_border);
  273. $event->sheet->getStyle('H6:H9')->applyFromArray($style_border);
  274. $event->sheet->getStyle('I6:I9')->applyFromArray($style_border);
  275. $event->sheet->getStyle('J6:J9')->applyFromArray($style_border);
  276. $event->sheet->getStyle(sprintf('A10:A%d',$last_row-1))->applyFromArray($style_border_side);
  277. $event->sheet->getStyle(sprintf('B10:B%d',$last_row-1))->applyFromArray($style_border_side);
  278. $event->sheet->getStyle(sprintf('C10:C%d',$last_row-1))->applyFromArray($style_border_side);
  279. $event->sheet->getStyle(sprintf('D10:D%d',$last_row-1))->applyFromArray($style_border_side);
  280. $event->sheet->getStyle(sprintf('E10:E%d',$last_row-1))->applyFromArray($style_border_side);
  281. $event->sheet->getStyle(sprintf('F10:F%d',$last_row-1))->applyFromArray($style_border_side);
  282. $event->sheet->getStyle(sprintf('G10:G%d',$last_row-1))->applyFromArray($style_border_side);
  283. $event->sheet->getStyle(sprintf('H10:H%d',$last_row-1))->applyFromArray($style_border_side);
  284. $event->sheet->getStyle(sprintf('I10:I%d',$last_row-1))->applyFromArray($style_border_side);
  285. $event->sheet->getStyle(sprintf('J10:J%d',$last_row-1))->applyFromArray($style_border_side);
  286. $event->sheet->getStyle(sprintf('A%d',$last_row))->applyFromArray($style_border);
  287. $event->sheet->getStyle(sprintf('B%d',$last_row))->applyFromArray($style_border);
  288. $event->sheet->getStyle(sprintf('C%d',$last_row))->applyFromArray($style_border);
  289. $event->sheet->getStyle(sprintf('D%d',$last_row))->applyFromArray($style_border);
  290. $event->sheet->getStyle(sprintf('E%d',$last_row))->applyFromArray($style_border);
  291. $event->sheet->getStyle(sprintf('F%d',$last_row))->applyFromArray($style_border);
  292. $event->sheet->getStyle(sprintf('G%d',$last_row))->applyFromArray($style_border);
  293. $event->sheet->getStyle(sprintf('H%d',$last_row))->applyFromArray($style_border);
  294. $event->sheet->getStyle(sprintf('I%d',$last_row))->applyFromArray($style_border);
  295. $event->sheet->getStyle(sprintf('J%d',$last_row))->applyFromArray($style_border);
  296. //cell numbering style
  297. $event->sheet->getStyle('B8')->applyFromArray($style_border_medium)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  298. $event->sheet->getStyle(sprintf('D%d', $last_row_data))->applyFromArray($style_bold_text_center_calibri)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  299. $event->sheet->getStyle(sprintf('D%d', $last_row_data+1))->applyFromArray($style_border_top)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  300. $event->sheet->getStyle(sprintf('F%d', $last_row_data))->applyFromArray($style_bold_text_center_calibri)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  301. $event->sheet->getStyle('C22')->applyFromArray($style_bold_text_center_calibri_12)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  302. $event->sheet->getStyle('D22')->applyFromArray($style_bold_text_center_calibri_12)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
  303. $event->sheet->getStyle(sprintf('D10:D%d', $last_row))->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
  304. $event->sheet->getStyle('G22')->applyFromArray($style_bold_text_center_calibri)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
  305. $event->sheet->getStyle(sprintf('G10:G%d', $last_row))->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
  306. $event->sheet->getStyle('H22')->applyFromArray($style_bold_text_center_calibri_12)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
  307. }
  308. }
  309. ];
  310. }
  311. }