MetadataProgramDetailExport.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace App\Exports;
  3. use Maatwebsite\Excel\Concerns\FromArray;
  4. use Maatwebsite\Excel\Concerns\WithTitle;
  5. use App\Model\MetadataProgram;
  6. use App\Model\TahunProgramDetail;
  7. use App\Model\ItemProgram;
  8. use Illuminate\Http\Request;
  9. use DB;
  10. class MetadataProgramDetailExport implements FromArray, WithTitle
  11. {
  12. private $month;
  13. private $year;
  14. public function __construct(Request $request, object $tahunProgramDetail)
  15. {
  16. $this->request = $request;
  17. $this->tahunProgramDetail = $tahunProgramDetail;
  18. }
  19. public function array(): array
  20. {
  21. $values = [];
  22. if(!empty($this->tahunProgramDetail->templateProgramDetail) && !empty($this->tahunProgramDetail->templateProgramDetail->itemProgram)){
  23. $select = '';
  24. //header
  25. $header = [];
  26. $header[] = 'UPT';
  27. $header[] = 'Program';
  28. $header[] = 'Sub Program';
  29. $header[] = 'Target';
  30. $itemProgram = $this->tahunProgramDetail->templateProgramDetail->itemProgram->sortBy('order_by');
  31. $header = array_merge($header, $itemProgram->pluck('label')->toArray());
  32. $header[] = 'Tanggal Pelaporan';
  33. $values[] = $header;
  34. //column
  35. $column = [];
  36. $column[] = 'u_p_t_s.office_name as nama_upt';
  37. $column[] = 'template_program.nama as nama_program';
  38. $column[] = 'template_program_detail.nama as nama_sub_program';
  39. $column[] = DB::raw("(SELECT CONCAT(target,' ',satuan) as target from tahun_program_detail_upt WHERE id_tahun_program_detail = metadata_program.id_tb_tahun_program_detail AND id_upt = metadata_program.id_upt AND periode = metadata_program.periode LIMIT 1)");
  40. $column = array_merge($column, $itemProgram->pluck('kolom')->toArray());
  41. $column[] = 'metadata_program.created_at';
  42. //data
  43. $query = new MetadataProgram;
  44. $query = $query->select($column);
  45. $query = $query->leftJoin('u_p_t_s','metadata_program.id_upt','u_p_t_s.office_id');
  46. $query = $query->leftJoin('tahun_program_detail','tahun_program_detail.id','=','metadata_program.id_tb_tahun_program_detail');
  47. $query = $query->leftJoin('template_program','template_program.id','=','tahun_program_detail.id_template_program');
  48. $query = $query->leftJoin('template_program_detail','template_program_detail.id','=','tahun_program_detail.id_template_program_detail');
  49. $query = $query->leftJoin('tahun_program_detail_upt','tahun_program_detail.id','=','tahun_program_detail_upt.id_tahun_program_detail');
  50. $query = $query->where('id_tb_tahun_program_detail',$this->tahunProgramDetail->id);
  51. $query = $query->distinct('metadata_program.id');
  52. if(!empty($this->request->upt)){
  53. $query = $query->where('metadata_program.id_upt',$this->request->upt);
  54. }
  55. if (!empty($this->request->dari) && !empty($this->request->sampai)) {
  56. $query = $query->whereBetween('metadata_program.created_at', array($this->request->dari, $this->request->sampai));
  57. }
  58. // dd($query->get()->toArray());
  59. $values[] = $query->get()->toArray();
  60. }
  61. return $values;
  62. }
  63. public function startCell(): string
  64. {
  65. return 'A1';
  66. }
  67. /**
  68. * @return string
  69. */
  70. public function title(): string
  71. {
  72. return !empty($this->tahunProgramDetail->templateProgramDetail)?$this->tahunProgramDetail->templateProgramDetail->nama:'-';
  73. }
  74. }
  75. ?>