martinms

capaian.js

Jun 3rd, 2024
482
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.11 KB | None | 0 0
  1. window.onload = function () {
  2.     content();
  3. }
  4. $(document).ready(pptkrenjaNav());
  5.  
  6. async function tableList(data) {
  7.     var session = await getSession();
  8.     var periode = session.periode;
  9.     if (data.success === true) {
  10.         var tbody = document.getElementById('table-wrapper');
  11.         tbody.innerHTML = '';
  12.         var capaians = data.data
  13.         capaians.forEach(capaian => {
  14.             const subsRows = document.createElement('tr');
  15.  
  16.             const kodeCol = document.createElement('td');
  17.             kodeCol.scope = 'col';
  18.             kodeCol.className = 'text-start text-nowrap align-top';
  19.             kodeCol.rowSpan = capaian.dataUraian.length + 1;
  20.             kodeCol.innerHTML = capaian.kode;
  21.             subsRows.appendChild(kodeCol);
  22.  
  23.             const subsCol = document.createElement('td');
  24.             subsCol.scope = 'col';
  25.             subsCol.className = 'text-start text-nowrap align-top';
  26.             subsCol.rowSpan = capaian.dataUraian.length + 1;
  27.             subsCol.innerHTML = enterKata(capaian.namaSubKegiatan, 4);
  28.             subsRows.appendChild(subsCol);
  29.             tbody.appendChild(subsRows.cloneNode(true));
  30.  
  31.             capaian.dataUraian.forEach(uraian => {
  32.                 const uraianRows = document.createElement('tr');
  33.  
  34.                 var namaCell = document.createElement('td');
  35.                 namaCell.className = "text-start align-top";
  36.                 // namaCell.innerHTML = enterKata(uraian.namaUraian, 4);
  37.                 namaCell.textContent = uraian.namaUraian;
  38.                 uraianRows.appendChild(namaCell);
  39.  
  40.                 var volumeCell = document.createElement('td');
  41.                 volumeCell.className = "align-middle";
  42.                 volumeCell.textContent = uraian.targetTotalVolume;
  43.                 uraianRows.appendChild(volumeCell);
  44.  
  45.                 var satuanCell = document.createElement('td');
  46.                 satuanCell.className = "align-middle";
  47.                 satuanCell.textContent = uraian.satuan;
  48.                 uraianRows.appendChild(satuanCell);
  49.  
  50.                 for (let i = 1; i <= 4; i++) {
  51.                     uraian.dataTriwulan.forEach(triwulan => {
  52.                         if (triwulan.triwulan === i) {
  53.  
  54.                             var targetCell = document.createElement('td');
  55.                             targetCell.className = 'align-middle';
  56.                             targetCell.textContent = triwulan.targetTriwulanVolume;
  57.                             uraianRows.appendChild(targetCell);
  58.  
  59.                             var capaianCell = document.createElement('td');
  60.                             capaianCell.id = `trtw${i}${uraian.idUraian}`;
  61.                             if (periode.status === 1) {
  62.                                 capaianCell.setAttribute('onclick', `getInput(${uraian.idUraian})`)
  63.                                 capaianCell.className = 'align-middle bg-light';
  64.                             } else {
  65.                                 capaianCell.setAttribute('onclick', `toastr.warning('input tidak bisa dilakukan untuk saat ini.', 'Perhatian!!')`);
  66.                                 capaianCell.className = 'align-middle';
  67.                             }
  68.                             capaianCell.textContent = triwulan.capaianTriwulanVolume;
  69.                             uraianRows.appendChild(capaianCell);
  70.  
  71.                             var persenCell = document.createElement('td');
  72.                             persenCell.className = 'align-middle';
  73.                             persenCell.textContent = triwulan.capaianTriwulanPersen === null ? 0 : bulatinKoma(triwulan.capaianTriwulanPersen);
  74.                             uraianRows.appendChild(persenCell);
  75.                         }
  76.                     });
  77.                 }
  78.                 uraianRows.insertAdjacentHTML('beforeend', `<td class="align-middle">${uraian.capaianTotalPersentw1untiltw4 === null ? 0 : uraian.capaianTotalPersentw1untiltw4}</td>`);
  79.                 tbody.appendChild(uraianRows);
  80.             })
  81.  
  82.             const result = document.createElement('tr');
  83.             const titleResult = document.createElement('td');
  84.             titleResult.scope = 'col';
  85.             titleResult.className = 'text-center fw-bolder';
  86.             titleResult.colSpan = '4';
  87.             titleResult.textContent = 'Rata-rata capaian kinerja (%)';
  88.             result.appendChild(titleResult);
  89.             tbody.appendChild(result);
  90.  
  91.             const tw1Result = document.createElement('td');
  92.             tw1Result.scope = 'col';
  93.             tw1Result.className = 'text-center fw-bolder';
  94.             tw1Result.colSpan = '3';
  95.             var isiCapianPersen = capaian.capaianPersenSub[0].triwulanSatu
  96.             tw1Result.textContent = bulatinKoma(isiCapianPersen);
  97.             result.appendChild(tw1Result);
  98.  
  99.             const tw2Result = document.createElement('td');
  100.             tw2Result.scope = 'col';
  101.             tw2Result.className = 'text-center fw-bolder';
  102.             tw2Result.colSpan = '3';
  103.             tw2Result.textContent = bulatinKoma(capaian.capaianPersenSub[1].triwulanDua);
  104.             result.appendChild(tw2Result);
  105.  
  106.             const tw3Result = document.createElement('td');
  107.             tw3Result.scope = 'col';
  108.             tw3Result.className = 'text-center fw-bolder';
  109.             tw3Result.colSpan = '3';
  110.             tw3Result.textContent = bulatinKoma(capaian.capaianPersenSub[2].triwulanTiga);
  111.             result.appendChild(tw3Result);
  112.  
  113.             const tw4Result = document.createElement('td');
  114.             tw4Result.scope = 'col';
  115.             tw4Result.className = 'text-center fw-bolder';
  116.             tw4Result.colSpan = '3';
  117.             tw4Result.textContent = bulatinKoma(capaian.capaianPersenSub[3].triwulanEmplat);
  118.  
  119.             result.appendChild(tw4Result);
  120.             const twTResult = document.createElement('td');
  121.             twTResult.scope = 'col';
  122.             twTResult.className = 'text-center fw-bolder';
  123.             twTResult.colSpan = '3';
  124.             twTResult.textContent = bulatinKoma(capaian.capaianPersenSub[4].totalAkhir);
  125.             result.appendChild(twTResult);
  126.  
  127.             tbody.appendChild(result);
  128.         })
  129.     } else {
  130.         const card = document.createElement('div');
  131.         card.className = 'card text-center';
  132.         card.innerHTML = `<p class=""text-center">Gagal memuat Data</p>`;
  133.        document.getElementById('content-wrapper').innerHTML = '';
  134.    }
  135. }
  136.  
  137. function instrumenKosong() {
  138.    const card = document.createElement('div');
  139.    card.className = 'card text-center';
  140.    const cardBody = document.createElement('div');
  141.    cardBody.className = 'card-body';
  142.    cardBody.innerHTML = `<p class='text-center py-5 fw-bolder'>Data belum tersedia, silahkan hubungi admin untuk informasi lebih lengkap</p>`
  143.    card.appendChild(cardBody);
  144.  
  145.    document.getElementById('content-wrapper').innerHTML = '';
  146.    document.getElementById('content-wrapper').appendChild(card);
  147. }
  148.  
  149. function getInput(id) {
  150.    for (let i = 1; i <= 4; i++) {
  151.        var tr = document.getElementById(`trtw${i}${id}`);
  152.        var input = document.createElement('input');
  153.        input.className = 'form-control text-center';
  154.        input.value = tr.textContent;
  155.        input.type = "text";
  156.        input.id = `tw${i}${id}`;
  157.        input.setAttribute('onchange', `simpan(${id})`);
  158.  
  159.        tr.removeAttribute('onclick');
  160.        tr.innerHTML = '';
  161.        tr.appendChild(input);
  162.    }
  163. }
  164.  
  165. async function content() {
  166.    var session = await getSession();
  167.    const data = await getData(`opdpptk_renja/capaian/list`);
  168.    if (!data.success) {
  169.        cekLogin(data.data);
  170.    }
  171.    if (data.data.length == 0) {
  172.        instrumenKosong();
  173.        return;
  174.    }
  175.    const card = document.createElement('div');
  176.    card.className = 'card text-center';
  177.  
  178.    const cardHeader = document.createElement('div');
  179.    cardHeader.className = 'card-header bg-dark-subtle';
  180.    const cardTitle = document.createElement('h4');
  181.    cardTitle.className = 'fw-bolder text-white';
  182.    cardTitle.textContent = 'Capaian Kinerja';
  183.    cardHeader.appendChild(cardTitle);
  184.  
  185.    const cardBody = document.createElement('div');
  186.    cardBody.className = 'card-body';
  187.    if (session.periode.status === 1) {
  188.        cardBody.innerHTML += `<div class="alert mb-3 alert-secondary bg-warning-subtle text-start text-dark border-0 fade show" role="alert">
  189.                                    <table>
  190.                                        <tr>
  191.                                            <td rowspan='3' class="align-top">
  192.                                                <span class="fw-bolder col-3 me-2">Petunjuk pengisian</span>
  193.                                            </td>
  194.                                        </tr>
  195.                                        <tr>
  196.                                            <td class="ms-2">
  197.                                                - Untuk melakukan input Capaian silahkan klik sel yang berwarna <span class="badge text-bg-light">cerah</span>
  198.                                            </td>
  199.                                        </tr>
  200.                                    </table>
  201.                                </div>`;
  202.    }
  203.  
  204.    const tableResponsive = document.createElement('div');
  205.    tableResponsive.className = 'table-responsive';
  206.  
  207.    const table = document.createElement('table');
  208.    table.id = 'table-content';
  209.    table.className = 'table table-bordered mb-0';
  210.  
  211.    const tableHeader = document.createElement('thead');
  212.    const headerRows = [
  213.        '<tr><th scope="col" rowspan="3" class="align-middle">Kode</th><th scope="col" rowspan="3" class="align-middle">Sub Kegiatan</th><th scope="col" rowspan="3" class="align-middle">Uraian</th><th scope="col" colspan="19" class="bg-primary-subtle text-dark">Kinerja Triwulan</th></tr>',
  214.        '<tr><th rowspan="2" class="align-middle">Target</th><th rowspan="2" class="align-middle">Satuan</th><th colspan="3">Triwulan I</th><th colspan="3">Triwulan II</th><th colspan="3">Triwulan III</th><th colspan="3">Triwulan IV</th><th rowspan="2" class="text-nowrap">Total Capaian (%)</th></tr>',
  215.        '<tr>'
  216.    ];
  217.  
  218.    for (let i = 0; i < 4; i++) {
  219.        headerRows.push('<th>Target</th><th class="text-nowrap">&nbsp;&nbsp; Capaian &nbsp;&nbsp;</th><th>(%)</th>');
  220.    }
  221.  
  222.    headerRows.push('</tr>');
  223.  
  224.    tableHeader.innerHTML = headerRows.join('');
  225.  
  226.    const tableBody = document.createElement('tbody');
  227.    tableBody.id = 'table-wrapper';
  228.  
  229.    const tbodyRows = [
  230.        `<tr><td class="text-center" colspan="21">
  231.            <div class="spinner-border text-center" role="status">
  232.                <span class="visually-hidden">Loading...</span>
  233.            </div>
  234.        </td></tr>`
  235.    ]
  236.    tableBody.innerHTML = tbodyRows.join('');
  237.    table.appendChild(tableHeader);
  238.    table.appendChild(tableBody);
  239.    tableResponsive.appendChild(table);
  240.    cardBody.appendChild(tableResponsive);
  241.    card.appendChild(cardHeader);
  242.    card.appendChild(cardBody);
  243.    document.getElementById('content-wrapper').innerHTML = '';
  244.    document.getElementById('content-wrapper').appendChild(card);
  245.    tableList(data);
  246. }
  247.  
  248. async function simpan(id) {
  249.    for (i = 1; i <= 4; i++) {
  250.        var twVal = document.getElementById(`tw${i}${id}`);
  251.        if (twVal.value == "") {
  252.            twVal.focus();
  253.            return;
  254.        }
  255.    }
  256.    var body = {
  257.        id: id,
  258.        triwulan1: $(`#tw1${id}`).val(),
  259.        triwulan2: $(`#tw2${id}`).val(),
  260.        triwulan3: $(`#tw3${id}`).val(),
  261.        triwulan4: $(`#tw4${id}`).val(),
  262.    }
  263.  
  264.    for (let j = 1; j <= 4; j++) {
  265.        document.getElementById(`trtw${j}${id}`).innerHTML = LoadingCircle;
  266.    }
  267.    $.ajax({
  268.        url: `${base_url}opdpptk_renja/capaian/update`,
  269.        type: "POST",
  270.        data: body
  271.    }).done(response => {
  272.        var data = JSON.parse(response);
  273.        if (data.success == true) {
  274.            content();
  275.            pptkrenjaNav();
  276.            toastr.success('Capaian berhasil diperbarui', 'Berhasil');
  277.        } else {
  278.            cekLogin(data.data);
  279.            toastr.error('Capaian gagal diperbarui', 'Gagal');
  280.        }
  281.    })
  282.  
  283. }
  284.  
Advertisement
Add Comment
Please, Sign In to add comment