PembuatanProgramController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. namespace App\Http\Controllers\Core;
  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\ItemProgram;
  9. use App\Model\TemplateProgram;
  10. use App\Model\MasterOption;
  11. use App\Model\TemplateProgramDetail;
  12. use Auth;
  13. use Session;
  14. class PembuatanProgramController extends Controller
  15. {
  16. public function __construct()
  17. {
  18. $this->middleware('auth');
  19. $this->table = new TemplateProgram;
  20. }
  21. public function index () {
  22. $data = $this->table->orderBy('id')->get();
  23. $roles = Role::whereNotIn('akses',Role::SPECIAL_ACCESS)->get();
  24. return view('pembuatan-program/pembuatan-program',compact('data','roles'));
  25. }
  26. public function detail($id) {
  27. $nama = Auth::user()->name;
  28. $input = ItemProgram::INPUT_TYPE_VARIABLE;
  29. $data = $this->table->with('itemProgram')->find($id);
  30. return view('pembuatan-program/detail', compact('nama', 'id','input','data'));
  31. }
  32. public function edit($id) {
  33. $nama = Auth::user()->name;
  34. $input = ItemProgram::INPUT_TYPE_VARIABLE;
  35. $masterOption = MasterOption::where('status',1)->get();
  36. $data = $this->table->with('templateProgramDetail.itemProgram')->find($id);
  37. return view('pembuatan-program/edit', compact('nama', 'id','input','data','masterOption'));
  38. }
  39. public function subprogram(int $id_template_program, int $id_template_program_detail) {
  40. $data = TemplateProgramDetail::with('itemProgram')->find($id_template_program_detail);
  41. if(!$data){
  42. return redirect()->back();
  43. }
  44. $input = ItemProgram::INPUT_TYPE_VARIABLE;
  45. $masterOption = MasterOption::where('status',1)->get();
  46. return view('pembuatan-program/subprogram', compact('data', 'input','data','masterOption'));
  47. }
  48. public function add(Request $request) {
  49. $input = ItemProgram::INPUT_TYPE_VARIABLE;
  50. $masterOption = MasterOption::where('status',1)->get();
  51. $nama = Auth::user()->name;
  52. return view('pembuatan-program/add', compact('nama','input','masterOption'));
  53. }
  54. public function update($id,Request $request) {
  55. $query = $this->table->find($id);
  56. $query->nama = strtoupper($request->nama);
  57. $query->tipe = $request->tipe;
  58. $query->is_required = !empty($request->is_required)?$request->is_required:0;
  59. if(!empty($request->file('logo'))){
  60. $fileName = time().'.'.$request->file('logo')->extension();
  61. $move = $request->file('logo')->move(public_path('assets/images/template/'), $fileName);
  62. if($move){
  63. $query->logo = $fileName;
  64. }
  65. }
  66. if($query->save()){
  67. Session::flash('info', $query->nama);
  68. Session::flash('colors', 'green');
  69. Session::flash('icons', 'fas fa-clipboard-check');
  70. Session::flash('alert', 'Berhasil Menyimpan Data!');
  71. return redirect()->back();
  72. }else{
  73. Session::flash('info', $query->nama);
  74. Session::flash('colors', 'red');
  75. Session::flash('icons', 'fas fa-times');
  76. Session::flash('alert', 'Gagal Menyimpan Data!');
  77. return redirect()->back();
  78. }
  79. }
  80. public function updateSubprogram($id_template_program,$id_template_program_detail,Request $request) {
  81. $query = TemplateProgramDetail::find($id_template_program_detail);
  82. $query->nama = strtoupper($request->nama);
  83. if($query->save()){
  84. $itemProgramIds = [];
  85. if($request->has('total_label') && $request->total_label != ""){
  86. $total_label = explode(",",$request->total_label);
  87. $total_tipe_kolom = explode(",",$request->total_tipe_kolom);
  88. $total_required = explode(",",$request->total_required);
  89. $total_description = explode(",",$request->total_description);
  90. $total_master_option = explode(",",$request->total_master_option);
  91. $tmp_master_option = 0;
  92. //delete unused data
  93. $total_description_filtered = array_filter($total_description);
  94. $item_program_selected = ItemProgram::where('id_template_program_detail',$query->id)->whereNotIn('id',$total_description_filtered);
  95. //delete existing metadata_program data
  96. //...............
  97. $item_program_selected->delete();
  98. foreach($total_label as $key => $row){
  99. $attribute['order_by'] = ($key+1);
  100. $attribute['label'] = $row;
  101. $attribute['tipe_kolom'] = $total_tipe_kolom[$key];
  102. $attribute['is_required'] = $total_required[$key]=="true"?1:0;
  103. $attribute['id_template'] = $id_template_program;
  104. $id = !empty($total_description[$key])?$total_description[$key]:null;
  105. //special case for tipe_kolom select
  106. if($attribute['tipe_kolom'] == 'select'){
  107. $attribute['id_master_option'] = $total_master_option[$tmp_master_option];
  108. $tmp_master_option++;
  109. }
  110. if(empty($id)){
  111. $kolom = $this->checkAvabilityColumn($query->id,$attribute['tipe_kolom']);
  112. $attribute['kolom'] = $kolom;
  113. }
  114. $qItemProgram = $query->itemProgram()->updateOrCreate(['id'=>$id],$attribute);
  115. $itemProgramIds[] = $qItemProgram->id;
  116. }
  117. }
  118. if($query){
  119. Session::flash('info', $query->nama);
  120. Session::flash('colors', 'green');
  121. Session::flash('icons', 'fas fa-clipboard-check');
  122. Session::flash('alert', 'Berhasil Menyimpan Data!');
  123. return redirect()->back();
  124. }else{
  125. Session::flash('info', $query->nama);
  126. Session::flash('colors', 'red');
  127. Session::flash('icons', 'fas fa-times');
  128. Session::flash('alert', 'Gagal Menyimpan Data!');
  129. return redirect()->back();
  130. }
  131. }else{
  132. Session::flash('info', $query->nama);
  133. Session::flash('colors', 'red');
  134. Session::flash('icons', 'fas fa-times');
  135. Session::flash('alert', 'Gagal Menyimpan Data!');
  136. return redirect()->back();
  137. }
  138. }
  139. public function assignRole(Request $request) {
  140. $query = $this->table->find($request->id_template_program);
  141. if(!empty($query)){
  142. $roles = Role::whereNotIn('akses',Role::SPECIAL_ACCESS)->get();
  143. $ids = [];
  144. foreach($roles as $role){
  145. if($request->has('id_role_'.$role->id)){
  146. $attributes = [
  147. 'id_role' => $role->id,
  148. 'id_template_program' => $query->id
  149. ];
  150. $ids[] = $query->templateProgramRole()->updateOrCreate($attributes,$attributes)->id;
  151. }
  152. }
  153. $query->templateProgramRole()->whereNotIn('id',$ids)->delete();
  154. if($query){
  155. Session::flash('info', $query->nama);
  156. Session::flash('colors', 'green');
  157. Session::flash('icons', 'fas fa-clipboard-check');
  158. Session::flash('alert', 'Berhasil Menyimpan Data!');
  159. return redirect()->back();
  160. }else{
  161. Session::flash('info', $query->nama);
  162. Session::flash('colors', 'red');
  163. Session::flash('icons', 'fas fa-times');
  164. Session::flash('alert', 'Gagal Menyimpan Data!');
  165. return redirect()->back();
  166. }
  167. }else{
  168. Session::flash('info', $query->nama);
  169. Session::flash('colors', 'red');
  170. Session::flash('icons', 'fas fa-times');
  171. Session::flash('alert', 'Gagal Menyimpan Data!');
  172. return redirect()->back();
  173. }
  174. }
  175. //function to check avability column
  176. function checkAvabilityColumn($id,$tipe_kolom){
  177. $templateProgramDetail = TemplateProgramDetail::find($id);
  178. $selected = $templateProgramDetail->itemProgram->pluck('kolom')->toArray();
  179. $masterColumn = ItemProgram::COLUMN_CLASSIFICATION_VARIABLE[$tipe_kolom];
  180. foreach($masterColumn as $row){
  181. if(!in_array($row,$selected)){
  182. return $row;
  183. }
  184. }
  185. }
  186. public function createSubprogram(Request $request){
  187. $attribute = [
  188. 'id_template_program' => $request->id_template_program,
  189. 'nama' => strtoupper($request->nama),
  190. ];
  191. $query = TemplateProgramDetail::create($attribute);
  192. if($query){
  193. Session::flash('info', $query->nama);
  194. Session::flash('colors', 'green');
  195. Session::flash('icons', 'fas fa-clipboard-check');
  196. Session::flash('alert', 'Berhasil Menyimpan Data!');
  197. return redirect()->back();
  198. }else{
  199. Session::flash('info', $query->nama);
  200. Session::flash('colors', 'red');
  201. Session::flash('icons', 'fas fa-times');
  202. Session::flash('alert', 'Gagal Menyimpan Data!');
  203. return redirect()->back();
  204. }
  205. }
  206. public function create(Request $request){
  207. $query = $this->table;
  208. $query->nama = strtoupper($request->nama);
  209. $query->tipe = $request->tipe;
  210. $query->is_required = !empty($request->is_required)?$request->is_required:0;
  211. if(!empty($request->file('logo'))){
  212. $fileName = time().'.'.$request->file('logo')->extension();
  213. $move = $request->file('logo')->move(public_path('assets/images/template/'), $fileName);
  214. if($move){
  215. $query->logo = $fileName;
  216. }
  217. }
  218. if($query->save()){
  219. Session::flash('info', $query->nama);
  220. Session::flash('colors', 'green');
  221. Session::flash('icons', 'fas fa-clipboard-check');
  222. Session::flash('alert', 'Berhasil Menyimpan Data!');
  223. return redirect('pengaturan/pembuatan-program/edit/'.$query->id);
  224. }else{
  225. Session::flash('info', $query->nama);
  226. Session::flash('colors', 'red');
  227. Session::flash('icons', 'fas fa-times');
  228. Session::flash('alert', 'Gagal Menyimpan Data!');
  229. return redirect()->back();
  230. }
  231. }
  232. public function delete($id, Request $request){
  233. $query = $this->table->find($id);
  234. if($query->delete()){
  235. Session::flash('info', 'Sukses');
  236. Session::flash('colors', 'green');
  237. Session::flash('icons', 'fas fa-clipboard-check');
  238. Session::flash('alert', 'Berhasil Menghapus Data!');
  239. return redirect('pengaturan/pembuatan-program');
  240. }else{
  241. Session::flash('info', 'Gagal');
  242. Session::flash('colors', 'red');
  243. Session::flash('icons', 'fas fa-times');
  244. Session::flash('alert', 'Gagal Menghapus Data!');
  245. return redirect()->back();
  246. }
  247. }
  248. }