您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

361 行
13 KiB

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