Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

395 rader
14 KiB

  1. $(".modalCompanyAll").change((e)=>{
  2. e.preventDefault();
  3. selectCompanyList.preselected = [];
  4. selectCompanyList.preselect();
  5. selectCompanyList.render();
  6. selectCompanyList.load();
  7. selectCompanyList.renderOptions();
  8. selectDivisiList.preselected = [];
  9. selectDivisiList.preselect();
  10. selectDivisiList.render();
  11. selectDivisiList.load();
  12. selectDivisiList.renderOptions();
  13. if($(e.target).prop('checked')){
  14. $("#modal-form .modalCompanySelect").parent('.drop').hide();
  15. $("#modal-form .modalCompanySelect").val('All').change();
  16. }
  17. else{
  18. $(".modalCompanySelect").parent('.drop').show();
  19. }
  20. });
  21. $(".modalCompanySelect").change(async(e)=>{
  22. if($('#modal-form .modalDivisionSelect').length>0){
  23. selectDivisiList.preselected = [];
  24. selectDivisiList.preselect();
  25. selectDivisiList.render();
  26. selectDivisiList.load();
  27. selectDivisiList.renderOptions();
  28. }
  29. if($(e.target).val()&&$(e.target).val().length>0){
  30. // console.log(typeof $(e.target).val());
  31. var filters = [];
  32. if(typeof $(e.target).val() == 'string'){
  33. filters.push($(e.target).val());
  34. }
  35. else {
  36. filters = $(e.target).val();
  37. }
  38. // console.log($(e.target).val() == 'string',filters);
  39. $(".modalDivisionSelect").removeAttr('disabled');
  40. $(".modalDivisiAll").removeAttr('disabled');
  41. var getToken = await fetch(`/session/key?s=jwt`);
  42. if(getToken.ok){
  43. var token = await getToken.text();
  44. var res = await fetch(`/api/divisions${(e.target.value == 'All')?'':`?${filters.map((i,idx)=>`filters[companies][id][$in][${idx}]=${i}`).join('&')}`}`,{
  45. headers:{
  46. "Authorization" : "Bearer "+token,
  47. }
  48. });
  49. if(res.ok){
  50. var obj = await res.json();
  51. $(".modalDivisionSelect").empty();
  52. // $(".modalDivisionSelect").append(($("#formCreateAdmin").length>0)?'<option value="All">Semua</option>':'<option value="">Pilih divisi dari list</option>');
  53. obj.data.forEach((i)=>{
  54. $(".modalDivisionSelect").append(`<option value="${i.id}">${i.attributes.Name}</option>`);
  55. });
  56. if($('#modal-form .modalDivisionSelect').length>0){
  57. selectDivisiList.load();
  58. selectDivisiList.renderOptions();
  59. }
  60. }
  61. }
  62. else{
  63. showAlert('error','Gagal menarik data divisi. Harap login ulang!');
  64. }
  65. }
  66. else {
  67. $(".modalDivisionSelect").attr('disabled','disabled');
  68. }
  69. });
  70. $(".modalDivisiAll").change((e)=>{
  71. e.preventDefault();
  72. selectDivisiList.preselected = [];
  73. selectDivisiList.preselect();
  74. selectDivisiList.render();
  75. selectDivisiList.load();
  76. selectDivisiList.renderOptions();
  77. if($(e.target).prop('checked')){
  78. $(".modalDivisionSelect").parent('.drop').hide();
  79. }
  80. else{
  81. $(".modalDivisionSelect").parent('.drop').show();
  82. }
  83. });
  84. $('#modal-reset-password').on('shown.bs.modal',async function () {
  85. var getToken = await fetch(`/session/key?s=jwt`);
  86. if(getToken.ok){
  87. var res = await fetch("/api/users?populate=*",{
  88. headers:{
  89. Authorization:"Bearer "+await getToken.text(),
  90. }
  91. })
  92. if(res.ok){
  93. var users= await res.json();
  94. $(".modalUserSelect").empty();
  95. $(".modalUserSelect").append(`<option value="">Pilih User</option>`);
  96. users.forEach(i=>{
  97. $(".modalUserSelect").append(`<option value="${i.id}">${i.username}</option>`);
  98. });
  99. }
  100. else{
  101. showAlert('error',"Terjadi kesalahan, harap login kembali atau hubungi admin!");
  102. }
  103. }
  104. else{
  105. showAlert('error',"Terjadi kesalahan, harap login kembali atau hubungi admin!");
  106. }
  107. });
  108. $('#modal-new-user').on('shown.bs.modal',async function () {
  109. var user = $("#modal-new-user").attr('user');
  110. if(user){
  111. $("#modal-new-user").find("button[type=submit]").text('Save');
  112. $("#modal-new-user").find("input[name=password]").parent().parent().hide();
  113. var getToken = await fetch(`/session/key?s=jwt`);
  114. if(getToken.ok){
  115. var res = await fetch("/api/users/"+user,{
  116. headers:{
  117. Authorization:"Bearer "+await getToken.text(),
  118. }
  119. })
  120. if(res.ok){
  121. var user= await res.json();
  122. Object.keys(user).forEach(i=>{
  123. if($(`input[name=${i}]`).length>0){
  124. $(`input[name=${i}]`).val(user[i]);
  125. }
  126. if(i == 'company' && user[i]){
  127. $(".modalCompanySelect").val(`${user[i].id}`);
  128. $(".modalCompanySelect").trigger('change');
  129. }
  130. if(i == 'division'&& user[i]){
  131. setTimeout(function(){ $(".modalDivisionSelect").val(`${user[i].id}`); }, 500);
  132. }
  133. });
  134. }
  135. else{
  136. showAlert('error',"Terjadi kesalahan, harap login kembali atau hubungi admin!");
  137. }
  138. }
  139. else{
  140. showAlert('error',"Terjadi kesalahan, harap login kembali atau hubungi admin!");
  141. }
  142. }
  143. });
  144. $('#modal-new-user').on('hide.bs.modal',async function () {
  145. $("#modal-new-user").removeAttr('user');
  146. $(`#modal-new-user input`).val('');
  147. $('#modal-new-user select').val('');
  148. $("#modal-new-user").find("input[name=password]").parent().parent().show();
  149. $("#modal-new-user").find("button[type=submit]").text('Buat');
  150. });
  151. $("#formReset").submit(async(event)=>{
  152. event.preventDefault();
  153. if($(event.target).serializeArray().filter((item)=>item.value=='').length>0){
  154. showAlert('error',"Cek kembali data yang belum diisi!");
  155. }else{
  156. loading(10,true);
  157. var getToken = await fetch(`/session/key?s=jwt`);
  158. if(getToken.ok){
  159. var data = $(event.target).serializeArray();
  160. var res = await fetch(`/api/users/${data.filter(i=>i.name=='user')[0].value}`,{
  161. method:"PUT",
  162. headers:{
  163. Authorization:"Bearer "+await getToken.text(),
  164. 'Content-Type': 'application/json',
  165. },
  166. body:JSON.stringify({
  167. "password":data.filter(i=>i.name=='password')[0].value
  168. })
  169. });
  170. loading(100,true);
  171. if(res.ok){
  172. loading(0,false);
  173. showAlert('success',"Password sudah di reset!");
  174. }
  175. else{
  176. loading(0,false);
  177. try{
  178. var obj = await res.json();
  179. showAlert('error',obj["error"]["message"]);
  180. }catch(e){
  181. showAlert('error',"Tidak dapat menghapus materi. Terjadi kesalahan!");
  182. }
  183. }
  184. console.log(res.ok);
  185. }
  186. else{
  187. loading(0,false);
  188. showAlert('error','Terjadi kesalahan. Harap login kembali!');
  189. }
  190. }
  191. });
  192. $("#formCreateUser").submit(async(event)=>{
  193. event.preventDefault();
  194. var data = $(event.target).serializeArray();
  195. if($("#modal-new-user").attr('user')){
  196. data = data.filter(i=>i.name!='password');
  197. }
  198. if(data.filter((item)=>item.value=='').length>0){
  199. showAlert('error',"Cek kembali data yang belum diisi!");
  200. }
  201. else {
  202. loading(10,true);
  203. var getToken = await fetch(`/session/key?s=jwt`);
  204. if(getToken.ok){
  205. const formData = new FormData();
  206. data.forEach(element => {
  207. try{
  208. var obj = element;
  209. if(obj.name == 'username') {
  210. var user_=obj.value;
  211. user_ = (user_)?user_.replaceAll(" ",'_'):user_;
  212. formData.append('email',user_ + '@thamrin.co.id');
  213. }
  214. if(obj.value[0]=='{'){
  215. formData.append(obj.name, JSON.parse(obj.value));
  216. }else{
  217. formData.append(obj.name, obj.value);
  218. }
  219. }
  220. catch(e){
  221. // obj[element.name] = element.value;
  222. formData.append(obj.name, obj.value);
  223. }
  224. });
  225. formData.append('role', 3);
  226. const request = new XMLHttpRequest();
  227. request.onreadystatechange=async function()
  228. {
  229. if(request.readyState==4){
  230. loading(0,false);
  231. console.log('status',request.status);
  232. if(request.status<300){
  233. showAlert('success','User Berhasil dibuat!');
  234. }
  235. else{
  236. try{
  237. var message = await JSON.parse(this.responseText);
  238. showAlert('error',message.error.message);
  239. }catch(e){
  240. showAlert('error','Terjadi kesalahan! Harap coba login kembali / hubungi admin!');
  241. }
  242. }
  243. }
  244. }
  245. if($("#modal-new-user").attr('user')){
  246. request.open('PUT', "/api/users/"+$("#modal-new-user").attr('user'));
  247. }
  248. else request.open('POST', "/api/users");
  249. request.setRequestHeader("Authorization", "Bearer "+await getToken.text());
  250. request.send(formData);
  251. }
  252. else{
  253. loading(0,false);
  254. showAlert('error','Terjadi kesalahan. Harap login kembali!');
  255. }
  256. }
  257. });
  258. $('input[type=file]').not('[multiple]').change(function(e){
  259. if(e.target.files.length>0)$('label.custom-file-label[for='+e.target.id+']').text(e.target.files[0].name);
  260. });
  261. function clearAlert(){
  262. $("#alertBox").html('');
  263. }
  264. function showAlert(type,text){
  265. $("#alertBox").html(
  266. `
  267. <div class="alert ${(type =='error')?'alert-danger':'alert-success'} alert-dismissible fade show" role="alert">
  268. <span class="alert-icon">${(type =='error')?'<i class="ni ni-bulb-61"></i>':'<i class="ni ni-like-2"></i>'}</span>
  269. <span class="alert-text">${text}</span>
  270. <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  271. <span aria-hidden="true">&times;</span>
  272. </button>
  273. </div>
  274. `
  275. );
  276. }
  277. function showSpinner(){
  278. $("#spinnerLoading").show();
  279. }
  280. function hideSpinner(){
  281. $("#spinnerLoading").hide();
  282. }
  283. function loading(percent,show){
  284. if(show){
  285. showSpinner();
  286. $("#loadingBar").removeClass('hide');
  287. $("#loadingBar div[role=progressbar]").attr("aria-valuenow",percent);
  288. $("#loadingBar div[role=progressbar]").css("width",`${percent}%`);
  289. }
  290. else{
  291. hideSpinner();
  292. $("#loadingBar").addClass('hide');
  293. }
  294. }
  295. var rowPage = 9;
  296. async function paginationParticipants(pageSize,page,id,token){
  297. var res = await fetch(`/api/participants?filters[material][id][$eq]=${id}&pagination[page]=${page}&pagination[pageSize]=${pageSize}`,{
  298. headers: {
  299. 'Authorization': `Bearer ${token}`
  300. },
  301. });
  302. if(res.ok){
  303. var obj = await res.json();
  304. $("#participantsTable tbody").empty();
  305. $("#participantPagination").empty();
  306. $("#participantPagination").append(`
  307. <li class="page-item ${obj.meta.pagination.page==1?'disabled':''}">
  308. <a value="${obj.meta.pagination.page-1}" class="page-link" href="#" tabindex="-1">
  309. <i class="fas fa-angle-left"></i>
  310. <span class="sr-only">Previous</span>
  311. </a>
  312. </li>
  313. `);
  314. for(var i =1; i <= obj.meta.pagination.pageCount;i++){
  315. $("#participantPagination").append(`
  316. <li class="page-item ${obj.meta.pagination.page==i?"active":''}"><a value="${i}" class="page-link" href="#">${i}</a></li>
  317. `);
  318. }
  319. $("#participantPagination").append(`
  320. <li class="page-item ${obj.meta.pagination.page==obj.meta.pagination.pageCount?'disabled':''}">
  321. <a value="${obj.meta.pagination.page+1}" class="page-link" href="#">
  322. <i class="fas fa-angle-right"></i>
  323. <span class="sr-only">Next</span>
  324. </a>
  325. </li>
  326. `);
  327. obj.data.forEach((i,indx)=>{
  328. $("#participantsTable tbody").append(`
  329. <tr>
  330. <th scope="row">${((obj.meta.pagination.page-1)*pageSize)+indx+1}</th>
  331. <td>${i.attributes.Name}</td>
  332. <td>${i.attributes.Company}</td>
  333. <td>${i.attributes.Division}</td>
  334. <td>${i.attributes.Email}</td>
  335. </tr>
  336. `);
  337. });
  338. //set callback pagination
  339. $(".page-link").click(async(e)=>{
  340. e.preventDefault();
  341. paginationParticipants(pageSize,$(e.target.closest('a')).attr('value'),id,token);
  342. });
  343. }
  344. else{
  345. showAlert('error','Gagal menarik data divisi. Harap login ulang!');
  346. }
  347. }
  348. $(".openParticipants").click(async(e)=>{
  349. e.preventDefault();
  350. var id = $(e.target.closest('a')).attr('value');
  351. $("#selMaterial").val(id);
  352. if(id){
  353. var getToken = await fetch(`/session/key?s=jwt`);
  354. if(getToken.ok){
  355. paginationParticipants(rowPage,1,id,await getToken.text());
  356. }
  357. else{
  358. showAlert('error','Gagal menarik data divisi. Harap login ulang!');
  359. }
  360. }
  361. else{
  362. showAlert("error","Terjadi kesalahan saat menarik data!");
  363. }
  364. $('#modal-participants').modal('show');
  365. });