MetadataProgramController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <?php
  2. namespace App\Http\Controllers\Program;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Support\Facades\Crypt;
  5. use Illuminate\Http\Request;
  6. use App\Model\Privillage\Role;
  7. use App\Model\Inspeksi\Inspeksi;
  8. use App\Model\Service\Unar;
  9. use App\Model\MetadataProgram;
  10. use App\Exports\MetadataProgramExport;
  11. use App\Model\ItemProgram;
  12. use App\Model\TemplateProgram;
  13. use App\Model\TahunProgramDetail;
  14. use App\Model\MetadataProgramNotification;
  15. use Maatwebsite\Excel\Facades\Excel;
  16. use App\Model\TemplateProgramDetail;
  17. use App\Model\UPTSModel;
  18. use App\Model\Region\Provinsi;
  19. use App\Model\Region\KabupatenKota;
  20. use Auth;
  21. use Carbon\Carbon;
  22. use Session;
  23. class MetadataProgramController extends Controller
  24. {
  25. public function __construct()
  26. {
  27. $this->middleware('auth');
  28. $this->table = new MetadataProgram;
  29. }
  30. public function index(Request $request){
  31. $raw = TahunProgramDetail::find($request->id);
  32. $getStatus = Role::where('id',Auth::user()->role_id)->value('akses');
  33. $tahunProgramDetail = TahunProgramDetail::where('id_template_program',$raw->id_template_program)->where('id_tahun_program',$raw->id_tahun_program)->get();
  34. $template = TemplateProgramDetail::with('itemProgram')->whereIn('id',$tahunProgramDetail->pluck('id_template_program_detail'))->get();
  35. $masterTemplate = TemplateProgram::find($raw->id_template_program);
  36. $upt = UPTSModel::distinct('office_id')->get();
  37. $metadata = new MetadataProgram;
  38. $provinsi = Provinsi::get();
  39. $kabkot = KabupatenKota::get();
  40. return view('program.metadata_program.core.index',compact('raw','upt','masterTemplate','template','metadata','tahunProgramDetail','provinsi','kabkot','getStatus'));
  41. }
  42. public function list($id, Request $request){
  43. $getStatus = Role::where('id',Auth::user()->role_id)->value('akses');
  44. $tahunProgramDetail = TahunProgramDetail::find($id);
  45. $metadata = new MetadataProgram;
  46. $metadata = $metadata->with('upt')->where('id_tb_tahun_program_detail',$tahunProgramDetail->id)->get();
  47. if(!empty($request->dari) && !empty($request->sampai)){
  48. $metadata = $metadata->whereBetween('created_at', array($request->dari, $request->sampai));
  49. }
  50. if($getStatus!='administrator'){
  51. $id_upt = Auth::user()->upt;
  52. $metadata = $metadata->where('id_upt',$id_upt);
  53. }else if(!empty($request->upt)){
  54. $metadata = $metadata->where('id_upt',$request->upt);
  55. }
  56. if ($request->filled('type') && $request->type = 'WEB') {
  57. $metadata = datatables()->of($metadata);
  58. $metadata = $metadata->editColumn('id', function($data) {
  59. return $data['id'];
  60. });
  61. $metadata = $metadata->editColumn('targetPeriode', function($data) {
  62. return $data['targetPeriode'];
  63. });
  64. $metadata = $metadata->editColumn('periode', function($data) {
  65. return $data['periode'];
  66. });
  67. $metadata = $metadata->editColumn('upt', function($data) {
  68. return (!empty($data['upt']) && !empty($data['upt'][0]))?$data['upt'][0]['office_name']:'-';
  69. });
  70. $rawColumn = [];
  71. foreach($tahunProgramDetail->templateProgramDetail->itemProgram->sortBy('order_by') as $key => $row){
  72. if($row->tipe_kolom == 'file'){
  73. $rawColumn[] = $row->kolom;
  74. }
  75. $metadata = $metadata->editColumn($row->kolom, function($data) use($key,$row) {
  76. if(!empty($data[$row->kolom])){
  77. if($row->tipe_kolom=='file'){
  78. return '<a target="_blank" href="'.asset('public/assets/images/attachment').'/'.$data[$row->kolom].'" class="btn btn-info btn-sm"><i class="fa fa-download"></i></a>';
  79. }else{
  80. return $data[$row->kolom];
  81. }
  82. }else{
  83. return '-';
  84. }
  85. });
  86. }
  87. $metadata = $metadata->rawColumns($rawColumn)->make(true);
  88. return $metadata;
  89. }
  90. }
  91. public function create(Request $request){
  92. $raw = TahunProgramDetail::find($request->id_tahun_program_detail);
  93. $masterTemplate = TemplateProgram::find($raw->id_template_program);
  94. $tahunProgramDetail = TahunProgramDetail::with('templateProgramDetail.itemProgram')->where('id_template_program',$raw->id_template_program)->where('id_tahun_program',$raw->id_tahun_program)->get();
  95. $tahun_program = TahunProgramDetail::with('tahunProgram')->find($request->id_tahun_program_detail);
  96. if(empty($tahun_program->tahunProgram) || (!empty($tahun_program->tahunProgram) && $tahun_program->tahunProgram->status!=1)){
  97. Session::flash('info', 'Gagal Menyimpan Data');
  98. Session::flash('colors', 'red');
  99. Session::flash('icons', 'fas fa-times');
  100. Session::flash('alert', 'Tahun Program belum aktif/sudah berakhir. silakan hubungi administrator Anda!');
  101. return redirect()->back();
  102. }
  103. foreach($tahunProgramDetail as $parent){
  104. $template = TemplateProgramDetail::with('itemProgram')->find($parent->id_template_program_detail);
  105. $attribute = [
  106. 'id_tb_tahun_program_detail' => $parent->id,
  107. 'id_upt' => !empty(Auth::user())?Auth::user()->upt:null,
  108. ];
  109. if($masterTemplate->is_required == 1 || $template->id==$request->selected_program){
  110. foreach($template->itemProgram as $row){
  111. if($row->tipe_kolom=='file'){
  112. if(!empty($request->file('value_'.$row->kolom.'_'.$template->id))){
  113. $fileName = time().'.'.$request->file('value_'.$row->kolom.'_'.$template->id)->extension();
  114. $move = $request->file('value_'.$row->kolom.'_'.$template->id)->move(public_path('assets/images/attachment'), $fileName);
  115. if($move){
  116. $attribute[$row->kolom] = $fileName;
  117. }
  118. }
  119. }else{
  120. // $attribute[$row->kolom] = $request->get('value_'.$row->kolom.'_'.$template->id);
  121. $inputValue = $request->get('value_'.$row->kolom.'_'.$template->id);
  122. $attribute[$row->kolom] = $inputValue === "-" ? null : $inputValue;
  123. }
  124. }
  125. $attribute['periode'] = $parent->total_periode_active+1;
  126. $query = MetadataProgram::create($attribute);
  127. if(!$query){
  128. Session::flash('info', $template->nama);
  129. Session::flash('colors', 'red');
  130. Session::flash('icons', 'fas fa-times');
  131. Session::flash('alert', 'Gagal Menyimpan Data!');
  132. return redirect()->back();
  133. }
  134. //insert notification if success
  135. $message = Auth::user()->name.' telah berhasil menambahkan data '.$template->nama;
  136. $this->createNotification($query,$message);
  137. }
  138. }
  139. Session::flash('info', $template->nama);
  140. Session::flash('colors', 'green');
  141. Session::flash('icons', 'fas fa-clipboard-check');
  142. Session::flash('alert', 'Berhasil Menyimpan Data!');
  143. return redirect()->back();
  144. }
  145. function createNotification(MetadataProgram $data, string $message){
  146. config(['app.locale' => 'id']);
  147. Carbon::setLocale('id');
  148. date_default_timezone_set('Asia/Jakarta');
  149. $tahunProgramDetail = TahunProgramDetail::find($data->id_tb_tahun_program_detail);
  150. $notif = [
  151. 'message' => $message,
  152. 'id_tahun_program' => $tahunProgramDetail->id_tahun_program,
  153. 'id_template_program' => $tahunProgramDetail->id_template_program,
  154. 'id_template_program_detail' => $tahunProgramDetail->id_template_program_detail,
  155. 'id_upt' => $data->id_upt,
  156. 'readable_admin' => 1,
  157. 'readable' => 1,
  158. 'created_by' => Auth::user()->id,
  159. 'updated_by' => Auth::user()->id,
  160. ];
  161. $query = MetadataProgramNotification::create($notif);
  162. return $query;
  163. }
  164. public function update($id, Request $request){
  165. $tahun_program_detail = TahunProgramDetail::with('tahunProgram')->find($request->value_id_tahun_program_detail);
  166. if(empty($tahun_program_detail->tahunProgram) || (!empty($tahun_program_detail->tahunProgram) && $tahun_program_detail->tahunProgram->status!=1)){
  167. Session::flash('info', 'Gagal Menyimpan Data');
  168. Session::flash('colors', 'red');
  169. Session::flash('icons', 'fas fa-times');
  170. Session::flash('alert', 'Tahun Program belum aktif/sudah berakhir. silakan hubungi administrator Anda!');
  171. return redirect()->back();
  172. }
  173. $template = TemplateProgramDetail::with('itemProgram')->find($request->value_id_template_program_detail);
  174. $attribute = [
  175. 'id_tb_tahun_program_detail' => $tahun_program_detail->id,
  176. 'id_upt' => !empty(Auth::user())?Auth::user()->upt:null,
  177. ];
  178. foreach($template->itemProgram as $row){
  179. if($row->tipe_kolom=='file'){
  180. if(!empty($request->file('value_'.$row->kolom.'_'.$template->id))){
  181. $fileName = time().'.'.$request->file('value_'.$row->kolom.'_'.$template->id)->extension();
  182. $move = $request->file('value_'.$row->kolom.'_'.$template->id)->move(public_path('assets/images/attachment'), $fileName);
  183. if($move){
  184. $attribute[$row->kolom] = $fileName;
  185. }
  186. }
  187. }else{
  188. $attribute[$row->kolom] = $request->get('value_'.$row->kolom.'_'.$template->id);
  189. }
  190. }
  191. $query = MetadataProgram::find($id)->update($attribute);
  192. if($query){
  193. //insert notification
  194. $query = MetadataProgram::find($id);
  195. $message = Auth::user()->name.' telah berhasil mengubah data '.$template->nama;
  196. $this->createNotification($query,$message);
  197. Session::flash('info', $template->nama);
  198. Session::flash('colors', 'green');
  199. Session::flash('icons', 'fas fa-clipboard-check');
  200. Session::flash('alert', 'Berhasil Menyimpan Data!');
  201. return redirect()->back();
  202. }else{
  203. Session::flash('info', $template->nama);
  204. Session::flash('colors', 'red');
  205. Session::flash('icons', 'fas fa-times');
  206. Session::flash('alert', 'Gagal Menyimpan Data!');
  207. return redirect()->back();
  208. }
  209. }
  210. public function delete($id){
  211. $query = MetadataProgram::with('tbTahunProgramDetail')->find($id);
  212. if(!empty($query->tbTahunProgramDetail)){
  213. $template = TemplateProgram::find($query->tbTahunProgramDetail->id_template_program);
  214. //insert notification
  215. $message = Auth::user()->name.' telah berhasil menghapus data '.$template->nama;
  216. $this->createNotification($query,$message);
  217. }
  218. if(!empty($query) && $query->delete()){
  219. Session::flash('info', 'Sukses');
  220. Session::flash('colors', 'green');
  221. Session::flash('icons', 'fas fa-clipboard-check');
  222. Session::flash('alert', 'Berhasil Menghapus Data!');
  223. return redirect()->back();
  224. }else{
  225. Session::flash('info', 'Gagal');
  226. Session::flash('colors', 'red');
  227. Session::flash('icons', 'fas fa-times');
  228. Session::flash('alert', 'Gagal Menghapus Data!');
  229. return redirect()->back();
  230. }
  231. }
  232. public function export(Request $request){
  233. $push = [];
  234. $raw = TahunProgramDetail::find($request->id);
  235. $tahunProgramDetail = TahunProgramDetail::where('id_template_program',$raw->id_template_program)->where('id_tahun_program',$raw->id_tahun_program)->get();
  236. $filename = !empty($raw->templateProgram)?$raw->templateProgram->nama:'-';
  237. //cleanup invalid character
  238. $filename = preg_replace('/[^a-zA-Z0-9_ () -]/s', '', $filename);
  239. return (new MetadataProgramExport($request))->download($filename.'.xlsx');
  240. }
  241. }