Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Mereset Saldo Cuti Setiap Tahun

Asslamualaikum wr.wb

ini saya ada masalah dalam pembuatan pengajuan cuti, kira2 gimana ya cara mereset saldo cuti tiap tahun dan saat mereset tidak menghapus data cuti. saldo cuti tiap tahun diberi 12 hari, dan saya sudah membuat codenya tetapi belum bisa reset saldo tiap tahun dan saya menggunakan framework codeigniter. Tolong bantuanyya karena ini tugas akhir saya...




<?php
$totalCuti = 0;
$pcuti = $this->Model_cuti->view_pengaturan()->row_array();
$sisaCuti = $pcuti['beri']; //saldo cuti ambil dari database
$tahun = getdate();
$jumlah = 0;
foreach ($pengajuan as $rows) {
$mulai = new DateTime($rows['tgl_mulai']);
$selesai = new DateTime($rows['tgl_selesai']);
$distance = $selesai->diff($mulai)->format("%a");
$totalCuti = $totalCuti + $distance + 1;
$jumlah++;
$status = $rows['status'];

//melakukan resset saldo
if ($pcuti['tahun'] != $tahun['year']) {
$sisaCuti = $pcuti['beri'];
}else{
$sisaCuti = ($sisaCuti - $totalCuti);
}



}
?>

Comments

  • "reset" ini maksudnya apa ?

    2 table elo itu sudah ada data "tahun" yg pasti bisa saling direlasikan.
    jadi ya emang ndak perlu hapus data "cuti".

    btw, query di model "Model_cuti" elo, posting kemari.
    lalu model apa pun yg elo buat utk data "cuti", posting juga kemari.
  • edited December 2017
    Reset yang dimaksud mengembalikan nilai saldo seperti semula

    Ini semua model yang berkaitan dengan cuti
    <?php 
    class Model_cuti extends CI_model{

    function cuti(){
    $this->db->select('*');
    $this->db->from('cuti');
    $this->db->join('pegawai','pegawai.id_pegawai = cuti.id_pegawai');
    $query = $this->db->get()->result_array();
    return $query;
    }
    function listcuti($id){
    $this->db->select('*');
    $this->db->from('cuti');
    $this->db->join('pegawai','pegawai.id_pegawai = cuti.id_pegawai');
    $this->db->where('pegawai.id_pegawai', $id);
    $query = $this->db->get()->result_array();
    return $query;
    }

    function cutilist($id){
    $this->db->select('*');
    $this->db->from('cuti');
    $this->db->join('pegawai','pegawai.id_pegawai = cuti.id_pegawai');
    $this->db->where('cuti.id_cuti', $id);
    $query = $this->db->get()->result_array();
    return $query;
    }

    function tambahcuti($data){
    $this->db->insert('cuti',$data);
    return $this->db->insert_id();
    }

    function persetujuan($data, $id){
    $this->db->where('id_cuti', $id);
    $this->db->update('cuti', $data);
    }

    function hitung($id){
    $this->db->query("SELECT id_pegawai, tgl_mulai, tgl_selesai, DATEDIFF(tgl_selesai,tgl_mulai) AS hari FROM cuti WHERE id_pegawai ='$id'");
    }

    function no_cuti(){
    $this->db->select('RIGHT(cuti.id_cuti,3) as kode', FALSE);
    $this->db->order_by('id_cuti','DESC');
    $this->db->limit(1);
    $query = $this->db->get('cuti'); //cek dulu apakah ada sudah ada kode di tabel.
    if($query->num_rows() <> 0){
    //jika kode ternyata sudah ada.
    $data = $query->row();
    $kode = intval($data->kode) + 1;
    }
    else{
    //jika kode belum ada
    $kode = 1;
    }

    $array_bulan = array('','01','02','03','04','05','06','07','08','09','10','11','12');
    $bulan = $array_bulan[date('n')];
    $tahun = date('Y');
    $kodemax = str_pad($kode, 3, "0", STR_PAD_LEFT);
    $kodejadi = $kodemax."/CUTI/RSSP/".$bulan."/".$tahun;
    return $kodejadi;
    }

    function view_pengaturan(){
    return $this->db->get('pengaturan_cuti');
    }

    function pengaturan($data, $id){
    $this->db->where('id_set_cuti', $id);
    $this->db->update('pengaturan_cuti', $data);
    }
    }
  • edited December 2017
    ya where elo kurang tahun to mas ...

    kalo elo mau tau cuti yg diambil tahun 2016 : where tahun=2016
    tahun 2017 : where tahun=2017
    dst ...

    semisal tahun 2018 belum ambil cuti sama sekali ...
    otomatis kalo elo pake where tahun=2018 ...
    ndak akan ada data yg ter select
    artinya jumlah cuti yg diambil masih = 0

    gw ndak tau elo paham query database sejauh apa ...
    tapi coba buka manual mysql (kalo elo pake mysql)

    baca ttg
    - fungsi COUNT, SUM, IF, IFNULL
    - GROUP BY

    dan WHERE ndak cuma bisa 1 kondisi,
    elo bisa pake AND, OR, dsb

    ... WHERE kondisi1 AND kondisi2 AND kondisi3 ... dst

    dan elo masih juga bisa pake (...) buat menentukan operasi mana yg mesti dijalankan terlebih dulu.

    kalo JOIN mestinya elo sudah tau,
    elo sudah pake di atas.



    satu lagi yg terakhir ...
    jujur gw ndak suka pake framework, muter-muter ndak karuan,
    perintah sederhana : mysqli_query($conn, 'SELECT ...');
    diputer jadi berbaris-baris perintah,
    masih juga di internal CI nya disusun pake concatenate string HANYA buat menyusun string query
    dan buntutnya tetep aja yg dieksekusi : mysqli_query($conn, 'SELECT ...');

    jadi, kalo saran gw sih, meding elo pake model yg sejenis :
    $this->db->query("SELECT id_pegawai, tgl_mulai, tgl_selesai, DATEDIFF(tgl_selesai,tgl_mulai) AS hari FROM cuti WHERE id_pegawai ='$id'");

    itu query string elo sendiri yg menulis. bener-bener bebas.
    dan elo beneran bisa langsung menulis query string apa adanya yg sama dengan query string yg bisa elo coba di db gui (misal phpmyadmin, sqlyog, navicat, dll) yg elo pake.

    elo langsung bisa liat query yg akan di eksekusi.
    elo bisa langsung copas ke db gui buat di testing, di koreksi kalo salah.
    lalu bisa langsung pula elo copas balik ke coding kalo query nya sudah bener.
  • edited December 2017
    sekalian gw lanjutin, soalnya gw juga lagi sibuk ngurusin kerjaan ...

    ini cuma bbrp query yg mungkin bisa elo manfaatin.

    elo coba dulu di db gui, lihat hasilnya.
    jadi elo bener-bener paham query seperti apa akan menghasilkan hasil seperti apa.


    mendapatkan semua pengajuan cuti pegawai dgn id "x"
    SELECT *
    FROM `cuti`
    WHERE `id_pegawai`="x"
    ORDER BY `tahun`, `tgl_mulai`


    mendapatkan semua pengajuan cuti pegawai dgn id "x" yg disetujui
    SELECT *
    FROM `cuti`
    WHERE `id_pegawai`="x" AND `status`="Setuju"
    ORDER BY `tahun`, `tgl_mulai`


    mendapatkan semua pengajuan cuti pegawai dgn id "x" yg disetujui dan dihitung jumlah hari cutinya
    SELECT *, DATEDIFF(`tgl_selesai`, `tgl_mulai`) AS `jmlharicuti`
    FROM `cuti`
    WHERE `id_pegawai`="x" AND `status`="Setuju"
    ORDER BY `tahun`, `tgl_mulai`


    mendapatkan semua pengajuan cuti pegawai dgn id "x" yg disetujui, dihitung jumlah hari cutinya per tahun
    SELECT *, SUM(DATEDIFF(`tgl_selesai`, `tgl_mulai`)) AS `jmlcutipertahun`
    FROM `cuti`
    WHERE `id_pegawai`="x" AND `status`="Setuju"
    GROUP BY `tahun`
    ORDER BY `tahun`, `tgl_mulai`


    mendapatkan semua pengajuan cuti pegawai dgn id "x" yg disetujui, dihitung jumlah hari cutinya per tahun dan sisanya
    SELECT
    c.*,
    SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `jmlcutipertahun`,
    p.beri-SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `sisacutipertahun`

    FROM `cuti` c
    LEFT JOIN `pengaturan_cuti` p ON p.tahun=c.tahun
    WHERE c.id_pegawai="x" AND c.status="Setuju"
    GROUP BY c.tahun
    ORDER BY c.tahun, c.tgl_mulai


    mendapatkan pengajuan cuti pegawai dgn id "x" pada tahun "yyyy" yg disetujui, dihitung jumlah hari cutinya selama tahun tsb dan sisanya
    SELECT
    c.*,
    SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `jmlcutipertahun`,
    p.beri-SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `sisacutipertahun`

    FROM `cuti` c
    LEFT JOIN `pengaturan_cuti` p ON p.tahun=c.tahun
    WHERE c.id_pegawai="x" AND c.status="Setuju" AND c.tahun="yyyy"
    GROUP BY c.tahun
    ORDER BY c.tahun, c.tgl_mulai


    mendapatkan pengajuan cuti pegawai dgn id "x" pada tahun "yyyy" yg disetujui, dihitung jumlah hari cutinya selama tahun tsb dan sisanya, dengan sudut pandang dibalik antara tabel utama dan referensinya
    SELECT
    p.tahun,
    c.*,
    SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `jmlcutipertahun`,
    p.beri-SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)) AS `sisacutipertahun`

    FROM `pengaturan_cuti` p
    LEFT JOIN `cuti` c ON p.tahun=c.tahun AND c.id_pegawai="x" AND c.status="Setuju"
    WHERE p.tahun="yyyy"
    GROUP BY c.tahun
    ORDER BY c.tahun, c.tgl_mulai


    mendapatkan pengajuan cuti pegawai dgn id "x" pada tahun "yyyy" yg disetujui, dihitung jumlah hari cutinya selama tahun tsb dan sisanya, dengan sudut pandang dibalik antara tabel utama dan referensinya dan penggantian nilai NULL dengan 0
    SELECT
    p.tahun,
    c.*,
    IFNULL(SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)),0) AS `jmlcutipertahun`,
    p.beri-IFNULL(SUM(DATEDIFF(c.tgl_selesai, c.tgl_mulai)),0) AS `sisacutipertahun`

    FROM `pengaturan_cuti` p
    LEFT JOIN `cuti` c ON p.tahun=c.tahun AND c.id_pegawai="x" AND c.status="Setuju"
    WHERE p.tahun="yyyy"
    GROUP BY c.tahun
    ORDER BY c.tahun, c.tgl_mulai



    sengaja gw tulis bertahap biar elo paham tambahan perintah apa menghasilkan apa.

    apa masih perlu "reset" yg ada dipemikiran elo ?
  • kalo dari Query di atas untuk perhitungan cuti berdasarkan tanggal mulai dan tanggal selesai bagaimana kalau dari rentang tanggal tersebut bertemu dengan hari minggu atau libur. apakah akan terhitung juga?
  • ini "mereset saldo cuti tiap tahun" maksudnya kalau tiap tanggal 1 Januari saldonya di reset ke 0 lagi ? Kalo ia bisa pake event.
Sign In or Register to comment.