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

perhitungan cuti buat aplikasi cuti online

All master, 

Saya lagi buat aplikasi cuti online, dengan deskripsi sbg berikut : 

Karyawan < 1 Tahun  ditahun 2014  
Contoh : misal karyawan masuk bulan Agustus 2013 maka ditahun 2014 cutinya 12 hari + 5 hari tahun 2013 kebelakang (agustus,september,oktober,november,desember)  = 17 Hari


Karyawan > 1 Tahun ditahun 2014  dapat cuti = 12 Hari 


Mohon gambaran script untuk perhitungan cuti seperti diatas atau ada solusi dari teman2 yang pernah buat aplikasi cuti online 

Terima kasih 
Yan

 
Tagged:

Comments

  • itu pan gampang mas'e ...

    table karyawan pan bisa elo buat field tanggal menjadi pegawai / tanggal mulai bekerja

    bandingkan saja tanggal+bulan nya dengan tanggal+bulan saat ini / saat perhitungan
    dapet dah < 1 tahun atau > 1 tahun
  • Nanti apa seperti ini mas boo, pas awal tahun 2014 semua karywan di tambahkan 12 hari dan jika kurang 1 tahun ditambahkan bulan terakhir 2013 gt mas boo ?


  • edited December 2013
    maksud elo gimana sih ?

    coba posting struktur table elo
    lalu posting juga perkiraan query yg bakal elo pake
  • edited December 2013
    SQL query untuk menghitung selisih tahun dan bulan masuk nya di tanggal sekarang gimna ya query sqlnya mas boo ?


    Untuk menampilkan data karyawan yang kurang dari 1 tahun dan lebih dari 1 tahun
  • edited December 2013
    DATE_ADD() tanggal mulai bekerja dengan penambahan 1 tahun
    lalu bandingkan dengan NOW(), atau bandingkan dengan tanggal tertentu

    kalo hasil DATE_ADD() lebih kecil, berarti lebih dari setahun
    kalo hasil lebih besar, berarti kurang dari setahun
  • edited December 2013
    Ok mas boo sdh , bisa tampil, nanti klo ada yang sy tanyain , tanya lagi mas di Threat ini .
  • Saya ingin menambahkan karyawan yang lama bekerjanya < 1 tahun 
    dengan foreach , gimana biar data yang masuk benar jumlah bulan, ditambahkan dengan 12 hari

    NIK               TAHUN      BULAN
    21308737           0              5
    28372363           0              7
    23746494           0              2
    23232323           0              4

    <?
      foreach($chk as $nikku)

    $masuk=mysql_query("INSERT INTO tb_cuti_pusat(tahun,nik,jml_hari,periode)
    VALUES('$thn','$nikku','$hak','$periode')");
    ?>
  • deteksi kurang dari setahunnya dari mana ?
  • pake ini mas boo.

    <?
    $date_join = "$data[tgl_masuk]";

    $diff = abs(strtotime($date_today)-strtotime($date_join));

    $years = floor($diff / (365*60*60*24)) ; 

    $tampil = $years < 1 ;
    $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
    ?>
  • edited December 2013
    ruwet yo ...
    catatan aja buat elo kalo hitung manual : jumlah hari dalam setahun tidak selalu 365 hari

    perintah SELECT elo kaya apa ?
  • <?
    SELECT * FROM tb_master_karyawan a, tb_master_divisi b, tb_master_jabatan c 
    WHERE  a.kd_lokasi in('JKT1','JKT2')  AND b.kd_divisi=a.kd_divisi AND kd_status NOT LIKE 'R' 
    AND c.kd_jabatan=a.kd_jabatan  AND 
    NOT EXISTS (SELECT 1 FROM tb_cuti_pusat d WHERE a.nik=d.nik  AND  d.tahun=year(current_date) AND d.periode=YEAR(CURDATE())+1)

    ?>
  • edited December 2013
    posting DDL struktur table dan sample data yg berkaitan masing-masing 10
    table :
    tb_master_karyawan
    tb_master_divisi
    tb_master_jabatan
    tb_cuti_pusat

    catatan : jangan posting image atau deskripsi table, gw ogah kalo mesti bikin manual

  • CREATE TABLE `tb_cuti_pusat` (
      `id_cuti_pusat` int(4) NOT NULL auto_increment,
      `tahun` varchar(4) NOT NULL,
      `nik` varchar(9) NOT NULL,
      `jml_hari` int(3) NOT NULL,
      `sisa` int(3) NOT NULL,
      `periode` varchar(4) NOT NULL,
      KEY `tahun` (`tahun`),
      KEY `id_cuti_pusat` (`id_cuti_pusat`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    -- Table structure for table `tb_master_divisi`
    -- 
    CREATE TABLE `tb_master_divisi` (
      `kd_divisi` varchar(4) NOT NULL,
      `nama_divisi` varchar(40) NOT NULL,
      PRIMARY KEY  (`kd_divisi`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


    INSERT INTO `tb_master_divisi` VALUES ('DOP', 'OPERASI');
    INSERT INTO `tb_master_divisi` VALUES ('DPL', 'PEMBELIAN & LOGISTIK');
    INSERT INTO `tb_master_divisi` VALUES ('DKU', 'KEUANGAN');
    INSERT INTO `tb_master_divisi` VALUES ('DAP', 'AKUNTANSI & PAJAK');


    CREATE TABLE `tb_master_jabatan` (
      `kd_divisi` varchar(4) NOT NULL,
      `kd_jabatan` varchar(7) NOT NULL,
      `nama_jabatan` varchar(40) NOT NULL,
      PRIMARY KEY  (`kd_jabatan`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    -- Dumping data for table `tb_master_jabatan`
    -- 

    INSERT INTO `tb_master_jabatan` VALUES ('DOP', 'OP16', 'SAFETY ');
    INSERT INTO `tb_master_jabatan` VALUES ('DOP', 'OP17', 'ASSISTANT ');
    INSERT INTO `tb_master_jabatan` VALUES ('DPL', 'PL4', 'LOGISTIK');
    INSERT INTO `tb_master_jabatan` VALUES ('DKU', 'KU1', 'KEPALA BAGIAN KEUANGAN');

    CREATE TABLE `tb_master_karyawan` (
      `id_karyawan` int(4) NOT NULL auto_increment,
      `tipe_k` varchar(1) NOT NULL,
      `kd_jaker` varchar(2) NOT NULL,
      `nik` varchar(9) NOT NULL,
      `nama_lengkap` varchar(30) NOT NULL,
      `nama_panggilan` varchar(7) NOT NULL,
      `kd_perusahaan` varchar(1) NOT NULL,
      `kd_penempatan` varchar(2) NOT NULL,
      `kd_lokasi` varchar(7) NOT NULL,
      `kd_divisi` varchar(5) NOT NULL,
      `kd_jabatan` varchar(7) NOT NULL,
      `identitas` varchar(3) NOT NULL,
      `no_id` varchar(20) NOT NULL,
      `no_npwp` varchar(30) NOT NULL,
      `kd_asuransi1` varchar(3) NOT NULL,
      `no_jamsostek` varchar(15) NOT NULL,
      `reg_jamsostek` date NOT NULL,
      `kd_asuransi2` varchar(3) NOT NULL,
      `no_asuransi2` varchar(15) NOT NULL,
      `reg_asuransi2` date NOT NULL,
      `tempat_lahir` varchar(25) NOT NULL,
      `tgl_lahir` date NOT NULL,
      `kd_status` varchar(1) NOT NULL,
      `kd_kontrak` varchar(4) NOT NULL,
      `tgl_masuk` date NOT NULL,
     
      PRIMARY KEY  (`nik`),
      UNIQUE KEY `id_karyawan` (`id_karyawan`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=318 ;


    INSERT INTO `tb_master_karyawan` VALUES (314, '', '', '21308737', 'uDIN', '', '', '', '', 'DOP', 'OP17', '', '', '', '', '', '0000-00-00', '', '', '0000-00-00', '', '0000-00-00', '', '', '2013-02-05');
    INSERT INTO `tb_master_karyawan` VALUES (315, '', '', '28372363 ', 'Ajat', '', '', '', '', 'DKU', 'KU1', '', '', '', '', '', '0000-00-00', '', '', '0000-00-00', '', '0000-00-00', '', '', '2012-02-08');
    INSERT INTO `tb_master_karyawan` VALUES (316, '', '', '23746494', 'Indra', '', '', '', '', 'DAP', 'DOP', '', '', '', '', '', '0000-00-00', '', '', '0000-00-00', '', '0000-00-00', '', '', '2013-06-11');
    INSERT INTO `tb_master_karyawan` VALUES (317, '', '', '23232323', 'Wina', '', '', '', '', 'DPL', 'PL4', '', '', '', '', '', '0000-00-00', '', '', '0000-00-00', '', '0000-00-00', '', '', '2012-07-11');

  • edited December 2013
    gw kagak paham maksud field "tahun" dan "periode" di tb_cuti_pusat ...

    tapi, kalo gw asumsikan field "tahun" adalah lama berkerja pegawai
    1 kalo lebih dari 1 tahun
    0 kalo kurang

    query ini cukup :

    INSERT INTO tb_cuti_pusat (tahun,nik,jml_hari,sisa,periode)
    SELECT IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1), a.nik, 0, 0, ""
    FROM tb_master_karyawan a
    LEFT JOIN tb_master_divisi b ON b.kd_divisi=a.kd_divisi
    LEFT JOIN tb_master_jabatan c ON c.kd_jabatan=a.kd_jabatan
    LEFT JOIN tb_cuti_pusat d ON a.nik=d.nik
    WHERE
    a.kd_lokasi IN('JKT1','JKT2')
    AND kd_status NOT LIKE 'R'
    AND d.id_cuti_pusat IS NULL

    berhubung gw kagak paham maksud "tahun" dan "periode", kondisinya gw hapus

    kagak ribet ngitung di script
    dan kagak pake sub query
    kagak perlu insert manual lewat script

    yg gw bold, atur sendiri value nya
    kalo "jml_hari" juga bersyarat, tiru saja cara buat isi "tahun"
  • Tahun sama Periode untuk lihat jumlah cuti pertahun jadi bisa tau informasinya sisa cuti per periode 


    NIK               TAHUN      BULAN
    21308737           0              5
    28372363           0              7
    23746494           0              2
    23232323           0              4


    dengan script : gimna ya 
    <?
      foreach($chk as $nikku)

    $masuk=mysql_query("INSERT INTO tb_cuti_pusat(tahun,nik,jml_hari,periode)
    VALUES('$thn','$nikku','$hak','$periode')");
    ?>

    jadi NIk tersebut dengan jumlah bulan tidak tertukar untuk ditambahnkan 
  • query yg gw tunjukin pan sekali eksekusi
    kagak perlu ribet insert pake foreach
  • Untuk yang kurang dari 1 tahun dengan jumlah bulan kebelakangnya gimna ?

    NIK               TAHUN      BULAN
    21308737           0                  5
    28372363           0                  7
    23746494           0                  2
    23232323           0                  4

    Penambahan hari 12 plus bulan kebelakangnya 
  • edited December 2013
    gini aja dah gw jawab : tergantung query yg elo pake

    lha wong dari awal gw bilang pake DATE_ADD(), elo pake cara dihitung di script
    gw bilang insert langsung dari select, ntah beneran elo pake atau kagak

    tapi mysql menyediakan fungsi : PERIOD_DIFF()

    SELECT PERIOD_DIFF("201401","201203")
    hasil : 22
  • sya excute query dari mas boo,

    NSERT INTO tb_cuti_pusat (tahun,nik,jml_hari,sisa,periode)
    SELECT IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1), a.nik, 0, 0, ""
    FROM tb_master_karyawan a
    LEFT JOIN tb_master_divisi b ON b.kd_divisi=a.kd_divisi
    LEFT JOIN tb_master_jabatan c ON c.kd_jabatan=a.kd_jabatan
    LEFT JOIN tb_cuti_pusat d ON a.nik=d.nik 
    WHERE
    a.kd_lokasi IN('JKT1','JKT2')
    AND kd_status NOT LIKE 'R'
    AND d.id_cuti_pusat IS NULL


    jumlah hari 12 hari semua masuk ke tabel cuti_pusatnya, ga di jumlah sisa bulan kebelakangnya yang kurang dari  1 tahun 
  • itu jumlah bulan mau elo insert ke table atau cuma ditampilkan ?
    kalo di insert, ke table apa ? field nya yg mana ?
  • Karyawan < 1 Tahun  ditahun 2014  
    Contoh : misal karyawan masuk bulan Agustus 2013 maka ditahun 2014 cutinya 12 hari + 4 hari tahun 2013 kebelakang (september,oktober,november,desember)  = 17 Hari

    Total hari cuti masuk ke tabel cuti_pusat dengan jumlah 17 Hari bukan 12 hari (pake hitungan cuti tahun takwim)

    Karyawan > 1 Tahun ditahun 2014  dapat cuti = 12 Hari 



  • edited December 2013
    itu pan tinggal penyesuaian bagian ini nya doang ...

    SELECT IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1), a.nik, 0, 0, ""

    elo define aja yg bener :

    tb_cuti_pusat (tahun,nik,jml_hari,sisa,periode)

    SELECT
    IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1), --> ini bakal masuk field "tahun"
    a.nik, --> ini masuk field "nik"
    IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12), --> ini bakal masuk field "jml_hari"
    0, --> ini masuk field "sisa"
    "" --> ini masuk field "periode"

    "tahun" isinya apa ?
    "periode" isinya apa ?


    "jml_hari" penentuan agustus berdasar apa ?
    kalo dasar perhitungan tahun 2014
    sebelum agustus 2013 = 12
    agustus 2013 = 16
    sesudah agustus 2013 = 17
    apa PERIOD_DIFF() mau dipake utk menentukan ini ?
    bagaimana kalo dasar perhitungan 2015 ?

    lalu, perhitungan jumlah bulan mau dimasukan kemana ?
  • he..he makin ga ngerti mas boo, 

    Kalo pake script yang saya buat ajah diatas gimna mas boo pake foreach.INSERTNYA


  • edited December 2013
    elo pan tinggal jawab yg gw tanyain to mas ...

    kagak ngerti gimana ?

    itu pan cuma perintah select biasa
    cuma, jika biasanya perintah select buat di tampilkan hasilnya
    yg ini langsung di insert

    kalo perintah insert, jumlah field yg disebut harus sama dengan jumlah value yg di insert

    pan persis sama dengan yg gw contohin

    elo bikin begini :
    INSERT INTO tb_cuti_pusat( [1] tahun, [2] nik, [3] jml_hari, [4] periode)
    VALUES(
    [1] '$thn',
    [2] '$nikku',
    [3] '$hak',
    [4] '$periode'
    )

    kalo langsung insert dari select :
    INSERT INTO tb_cuti_pusat ( [1] tahun, [2] nik, [3] jml_hari, [4] sisa, [5] periode)
    SELECT
    [1] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1),
    [2] a.nik,
    [3] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12),
    [4] 0,
    [5] ""

    sama saja kan ?

    elo samain begini juga boleh kok ...
    INSERT INTO tb_cuti_pusat( [1] tahun, [2] nik, [3] jml_hari, [4] periode)
    SELECT
    [1] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1),
    [2] a.nik,
    [3] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12),
    [4] ""

    kalo elo pake script
    buntutnya semua tetep mesti elo hitung satu-satu sebelum elo insert
    elo juga mesti ngitung "tahun"
    ngitung "jml_hari"
    ngitung "periode"

    lha tinggal perhitungannya itu saja yg elo posting kemari
    pan gw bisa baca
  • edited December 2013
    perhitungan bulan dari script ini :
    $date_today = date("Y-m-d");

    $date_join = "$data[tgl_masuk]";
    $diff = abs(strtotime($date_today)-strtotime($date_join));
    $years = floor($diff / (365*60*60*24)) ; 

    $tampil = $years < 1 ;
    $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
    $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

    $total_hari = 12 + $months;


    INSERT INTO tb_cuti_pusat( [1] tahun, [2] nik, [3] jml_hari, [4] periode)
    SELECT
    [1] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1), // Nanti kalo pergantian tahun mesti ganti 2015-01-01 ?..
    [2] a.nik,
    [3] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12), //  16 sama 12 ini apa ya mas boo ?
    [4] ""
    untuk karywan yang lebih dari 1 tahun sih sudah bisa mas boo, karena tinggal di add 12 hari ajah semua,
    Tapi yang belum itu yang kurang dari 1 tahun karena berbeda2 jumlah bulannya tergantung masuknya . 

      $chk=$_POST['chk'];  $bulan=$_POST['bulan'];
      $hak=$_POST['hak'];   $thn=$_POST['thn'];   $periode=$_POST['periode'];

    foreach($chk as $nikku)

    $masuk=mysql_query("INSERT INTO tb_cuti_pusat(tahun,nik,jml_hari,sisa,periode)
    VALUES('$thn','$nikku','$hak','$bulan','$periode')");
  • edited December 2013
    [1]
    lalu $total_hari dipake dimana ?

    di insert elo yg gw baca :

    $masuk=mysql_query("INSERT INTO tb_cuti_pusat(tahun,nik,jml_hari,sisa,periode)
    VALUES('$thn','$nikku','$hak','$bulan','$periode')");

    dengan :

    $chk=$_POST['chk'];
    $bulan=$_POST['bulan'];
    $hak=$_POST['hak'];
    $thn=$_POST['thn'];
    $periode=$_POST['periode'];

    dari POST ?
    emang alur elo itu kaya apa to ?
    data pegawai ditampilkan di form, lalu diisi manual, lalu submit, begitukah ?



    [2]
    "...
    Tapi yang belum itu yang kurang dari 1 tahun karena berbeda2 jumlah bulannya tergantung masuknya
    ..."

    lha iya, pan tetep bisa dikondisikan pake IF()
    atau pake hitungan suatu rumus

    itu ditulis kaya gini
    IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12)
    pan cuma ngasih elo contoh
    bahwa mau di insert value 16 (hari) atau 12 (hari) itu bisa dikondisikan pake IF()

    kalo gw liat, itu dari POST ? kiriman form ?
    berarti manual ?
    emang kagak bisa dihitung pake rumus atau kondisi IF() atau CASE() ?



    [3]
    masalah "2014-01-01"
    emang gak bisa diganti pake :
    IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>NOW(),16,12) ?
    atau IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>CONCAT((YEAR(NOW())+1),"-01-01"),16,12) ?

    itu pan terserah elo
    pengisian jumlah cuti mau jalan tiap apa ?
    apa mau dijalankan manual ?
    atau mau otomatis jalan sendiri tiap akhir tahun ?

    kalo pake script, mau kagak mau ya jalan manual,
    lupa dijalankan ya table nya kagak ada isinya
    kalo pun mau di otomatis kan, mesti numpang di scheduler

    kalo pake query,
    mysql punya event
    elo kagak usah perintah pun, kalo event nya mysql elo jadwalkan jalan tiap akhir tahun pasti jalan sendiri
  • Saya tampilkan data list karyawan yg kurng dri 1thn. Tampil data nik, nama,tahun,bulan.

    Kolom bulan brrisi jmlh bln(textfield).dan kolom nik (textfield). Semua data terseleksi semua .dan ada tombol tambh. Langsung submit.eksekusi dsimpan k tabel dengan itugan jumlh cutinya. seprti itu mas kura2..

    Penambhan ini akn dlkukan pada awal tahun bru.
  • edited December 2013
    hanya yg kurang dari setahun ?
    lha yg lebih dari setahun berarti kagak masuk ke tabel cuti ?

    gw juga liat kondisi ini :
    a.kd_lokasi IN('JKT1','JKT2')
    kd_status NOT LIKE 'R'

    apa itu berarti hanya lokasi tertentu yg masuk ke table cuti ?
    dan dengan kondisi status tertentu ?

    atau niat elo sebenernya semua pegawai masuk ke tabel cuti ?
    tapi elo pisah2 prosesnya ?
    jadi mesti lewat form-form tertentu utk entri ke tabel cuti ?

    kok gw liat kagak efektif banget ...

    napa kagak pake alur :
    - pake event mysql, schedule jalan awal tahun (1/1/YYYY) atau akhir tahun (31/12/YYYY)
    - otomatis yg jalan pasti query, bukan script
    - query langsung insert seluruh pegawai ke tabel cuti, tanpa melihat wilayah atau status atau kapan mulai kerja
    - jml_hari langsung dihitung otomatis berdasar waktu mulai kerja

    tanpa ribet mesti lewat form-form dan submit

    kalo elo pake alur ini, form elo jauh lebih mudah ...
    isinya cuma :
    - form isian pegawai baru masuk
    - view pegawai dan jatah cuti yg tersisa, pencarian berdasar nik / nama
    - form isian ijin cuti : nik, jumlah cuti yg akan diambil, alert kalo sisa cuti tidak mencukupi
    - rekap laporan cuti tahunan, buat hitung bonus pegawai yg kagak ambil cuti
  • Yg kurang dr 1thn blm bisa mas. Untk mnjumlhkan buln sm hak cuti12hri. Klo yg 1thun sdh bisa krena hny dtmbhkn 12hri smua
  • edited December 2013
    asli gw binun :))
    reply elo kagak nyambung ...

    "karyawan masuk bulan Agustus 2013 maka ditahun 2014 cutinya 12 hari + 4 hari"
    "Yg kurang dr 1thn blm bisa"

    yg masuk bulan agustus 2013 pan berarti kurang dari 1 tahun



    coba elo isi titik-titik ini dah, value nya apa saja :

    semisal saat ini tanggal 31/Des/2013
    mau insert jatah cuti utk tahun 2014


    pegawai yg masuk Jan/2010, jatah cuti : ... hari
    pegawai yg masuk Des/2010, jatah cuti : ... hari
    pegawai yg masuk Feb/2011, jatah cuti : ... hari
    pegawai yg masuk Des/2011, jatah cuti : ... hari
    pegawai yg masuk Mar/2012, jatah cuti : ... hari
    pegawai yg masuk Des/2012, jatah cuti : ... hari

    pegawai yg masuk Jan/2013, jatah cuti : ... hari
    pegawai yg masuk Feb/2013, jatah cuti : ... hari
    pegawai yg masuk Mar/2013, jatah cuti : ... hari
    pegawai yg masuk Apr/2013, jatah cuti : ... hari
    pegawai yg masuk Mei/2013, jatah cuti : ... hari
    pegawai yg masuk Jun/2013, jatah cuti : ... hari
    pegawai yg masuk Jul/2013, jatah cuti : ... hari
    pegawai yg masuk Agt/2013, jatah cuti : ... hari
    pegawai yg masuk Sep/2013, jatah cuti : ... hari
    pegawai yg masuk Okt/2013, jatah cuti : ... hari
    pegawai yg masuk Nov/2013, jatah cuti : ... hari
    pegawai yg masuk Des/2013, jatah cuti : ... hari

    apakah jatah cuti itu berlaku utk semua wilayah (ya/tidak) ? ...
    apakah jatah cuti itu berlaku utk semua status (ya/tidak) ? ...
    apakah semua data cuti tsb masuk ke tb_cuti_pusat (ya/tidak) ? ...

    field "tahun" tb_cuti_pusat isinya : ...
    field "periode" tb_cuti_pusat isinya : ...
  • ga bisa tulis lagi nih, ada warning character too long ,
    saya attach Image ajah 

    image
  • edited December 2013
    ini query kalo dijalankan sebelum / pas tanggal 31/Des/2013

    INSERT INTO tb_cuti_pusat (tahun,nik,jml_hari,sisa)
    SELECT
      YEAR(NOW())+1,
      a.nik,
      IF(
        DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>CONCAT((YEAR(NOW())+1),"-01-01"),
        12+PERIOD_DIFF(DATE_FORMAT(NOW(),"%Y12"),DATE_FORMAT(a.tgl_masuk,"%Y%m")),
        12
      ),
      0
    FROM tb_master_karyawan a
    LEFT JOIN tb_master_divisi b ON b.kd_divisi=a.kd_divisi
    LEFT JOIN tb_master_jabatan c ON c.kd_jabatan=a.kd_jabatan
    LEFT JOIN tb_cuti_pusat d ON a.nik=d.nik AND d.tahun=YEAR(NOW())+1
    WHERE d.id_cuti_pusat IS NULL

    sekali dijalankan, seluruh pegawai langsung terdefinisi jumlah hari cutinya utk tahun 2014
    dan masuk ke tb_cuti_pusat

    kalo dijalankan tgl 1/Jan/2014 atau sesudahnya, yg terisi tahun 2015

  • mas kura2 sya excute query diatas sdh bisa, berarti. proses penambahan dilakukan diakhir tahun ya mas ?
    field sisa ga terisi mas ? 
    harusnya terisi sama dengan field jumlah_hari, field sisa sya buat untuk yang dikurangin jika cuti diambil dan jumlah_hari sebagai informasi sja bahwa cuti karywan sekian gt.
  • edited December 2013
    masukin aja di event nya mysql,
    jalankan tiap akhir tahun
    jadi langsung jalan otomatis

    masalah sisa, elo ubah aja semau elo
    pan sudah ada contohnya utk bikin jml_hari
  • edited December 2013
    Thx mas kura2..
    Btw SQL ini ,bagian mana ya yang ditambahkan buat insert sisanya sama dengan jml_hari, awam nih query sqlnya bisa jelasin per Line mas  :

    INSERT INTO tb_cuti_pusat (tahun,nik,jml_hari,sisa)
    SELECT
      YEAR(NOW())+1,
      a.nik,
      IF(
        DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>CONCAT((YEAR(NOW())+1),"-01-01"),
        12+PERIOD_DIFF(DATE_FORMAT(NOW(),"%Y12"),DATE_FORMAT(a.tgl_masuk,"%Y%m")),
        12),0
    FROM tb_master_karyawan a
    LEFT JOIN tb_master_divisi b ON b.kd_divisi=a.kd_divisi  // bagian ini saya ilangin ajah ga maslh ya
    LEFT JOIN tb_master_jabatan c ON c.kd_jabatan=a.kd_jabatan   // bagian ini saya ilangin ajah  ga maslh ya
    LEFT JOIN tb_cuti_pusat d ON a.nik=d.nik AND d.tahun=YEAR(NOW())+1
    WHERE d.id_cuti_pusat IS NULL
  • edited December 2013
    lha pan sudah gw jelasin contoh relasi antara insert dan select di posting sebelumnya :

    INSERT INTO tb_cuti_pusat ( [1] tahun, [2] nik, [3] jml_hari, [4] sisa, [5] periode)
    SELECT
    [1] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",0,1),
    [2] a.nik,
    [3] IF(DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>"2014-01-01",16,12),
    [4] 0,
    [5] ""

    sama saja :

    INSERT INTO tb_cuti_pusat ( [1] tahun, [2] nik, [3] jml_hari, [4] sisa )
    SELECT
      [1] YEAR(NOW())+1,
      [2] a.nik,
      [3] IF(
        DATE_ADD(a.tgl_masuk, INTERVAL 1 YEAR)>CONCAT((YEAR(NOW())+1),"-01-01"),
        12+PERIOD_DIFF(DATE_FORMAT(NOW(),"%Y12"),DATE_FORMAT(a.tgl_masuk,"%Y%m")),
        12
      ),
      [4] 0

    ya elo ubah yg merujuk ke "sisa"
    tinggal elo copas aja yg buat "jml_hari", pan isinya mau elo sama



    JOIN yg mau elo hilangkan ...
    YA, kagak masalah,
    gw tulis karena merujuk ke JOIN elo sebelumnya
  • edited December 2013
    Ok, makasih  mas kura2, dan semuanya .. sdh SOLVE !


    Thx 
  • Boleh dong mas yanscobain dibagi script nya
Sign In or Register to comment.