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.
 
 
 

320 rivejä
12 KiB

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