• Tidak ada hasil yang ditemukan

Source Code Sistem Informasi Penggajia

N/A
N/A
Protected

Academic year: 2018

Membagikan "Source Code Sistem Informasi Penggajia"

Copied!
68
0
0

Teks penuh

(1)

LAMPIRAN

1. index.html

<!doctype html>

<html ng-app="jayaMekarApp" ng-csp ng-controller="RootCtrl"> <head>

<meta charset="utf-8"> <title>Jaya Mekar</title>

<!-- build:css styles/vendor.css --> <link rel="stylesheet"

href="bower_components/bootstrap/dist/css/bootstrap.css" /> <!-- bower:css -->

<!-- endbower --> <!-- endbuild -->

<!-- build:css styles/main.css -->

<link rel="stylesheet" href="bower_components/angular/angular-csp.css" />

<link rel="stylesheet" href="styles/main.css"> <link rel="stylesheet" href="styles/main.css">

<link rel="stylesheet" href="styles/yk-sidebar.css"> <link rel="stylesheet" href="styles/box.css" /> <link rel="stylesheet" href="styles/tabs.css" />

<link rel="stylesheet" href="styles/hack-bootstrap.css"> <!-- endbuild -->

</head>

<body ng-window>

<yk-navbar brand="RootCtrl.brand" toggle-sidebar="RootCtrl.toggleSidebar()" with-sidebar="RootCtrl.withSidebar" fixed-top>

<yk-menu-list menu="RootCtrl.menuNavRight" nav right></yk-menu-list>

</yk-navbar>

<!-- S:Sidebar -->

<yk-wrapper yk-toggle-sidebar="RootCtrl.withSidebar" window-width="{{windowWidth}}">

<yk-sidebar filter="RootCtrl.filter"> <li ui-sref-active="active">

<a ui-sref="jabatan"><i class="glyphicon glyphicon-star"></i> Jabatan</a>

</li>

<li ui-sref-active="active">

<a ui-sref="karyawan"><i class="glyphicon glyphicon-user"></i> Karyawan</a>

</li>

<li ui-sref-active="active">

<a ui-sref="rumus-gaji"><i class="glyphicon glyphicon-list-alt"></i> Rumus Gaji</a>

</li>

(2)

<a ui-sref="penggajian"><i class="glyphicon glyphicon-list-alt"></i> Penggajian</a>

</li>

</yk-sidebar>

<yk-wrapper-content> <!-- S:Content --> <ui-view></ui-view> <!-- E:Content --> </yk-wrapper-content> </yk-wrapper>

<!-- E:Sidebar -->

<!-- build:js scripts/vendor.js --> <!-- bower:js -->

<script src="bower_components/angular/angular.js"></script> <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>

<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>

<script src="bower_components/angular-messages/angular-messages.js"></script>

<!-- endbower --> <!-- endbuild -->

<!-- build:js scripts/index.js -->

<script src="bower_components/node-uuid/uuid.js"></script> <script src="scripts/app.js"></script>

<script src="scripts/config/app.config.js"></script> <script src="scripts/directives/yk-navbar.js"></script> <script src="scripts/directives/yk-sidebar.js"></script> <script src="scripts/directives/yk-wrapper.js"></script> <script src="scripts/directives/ng-window.js"></script> <script src="scripts/directives/ng-box.js"></script> <script src="scripts/directives/ng-tabs.js"></script> <script src="scripts/controllers/root.js"></script> <script src="scripts/controllers/jabatan.js"></script> <script src="scripts/controllers/karyawan.js"></script> <script src="scripts/controllers/rumus-gaji.js"></script> <script src="scripts/controllers/penggajian.js"></script> <script src="scripts/controllers/contoh-data.js"></script> <script src="scripts/filters/waktu-filter.js"></script>

<script src="scripts/filters/kelompok-kerja-filter.js"></script> <script src="scripts/filters/startarray-filter.js"></script> <script src="scripts/filters/length-filter.js"></script>

<script src="scripts/filters/numberformat-filter.js"></script> <script src="scripts/filters/sumbykey-filter.js"></script> <script src="scripts/services/id-factory.js"></script> <script src="scripts/services/jabatan-factory.js"></script> <script src="scripts/services/karyawan-factory.js"></script> <script src="scripts/services/rumusgaji-factory.js"></script> <script

src="scripts/services/penggajiankaryawanharian-factory.js"></script>

<script src="scripts/services/kalkulasipenggajian-factory.js"></script>

<script src="scripts/services/indexeddb-provider.js"></script> <script src="scripts/services/layanan-data-factory.js"></script> <!-- endbuild -->

(3)

2. manifest.json

{

"name": "__MSG_appName__",

"description": "__MSG_appDescription__", "version": "11",

"manifest_version": 2, "default_locale": "en", "permissions": [

"unlimitedStorage" ],

"icons": {

"16": "images/icon-16.png", "128": "images/icon-128.png" },

"app": {

"background": { "scripts": [

"scripts/main.js",

"scripts/chromereload.js" ]

} } }

3. _locales/en/messages.json

{

"appName": {

"message": "Jaya Mekar",

"description": "The name of the application" },

"appDescription": {

"message": "Sistem Informasi Penggajian",

"description": "The description of the application" }

}

4. scripts/main.js

'use strict';

chrome.app.runtime.onLaunched.addListener(function() { var width = 840;

var height = 600;

chrome.app.window.create('index.html', { minWidth: width,

minHeight: height,

left: Math.round((screen.availWidth - width) / 2), top: Math.round((screen.availHeight - height) / 2) });

(4)

5. views/jabatan/jabatan.html

<div class="header">

<div class="bs-page-header"> <h4>Mengelola Jabatan</h4> </div>

</div>

<div class="body">

<div class="row newline"> <div class="col-sm-12">

<button class="btn btn-sm btn-primary pull-right" ng-click="JabatanCtrl.add('sm')">

Tambah Jabatan </button>

</div> </div>

<div class="row newline">

<div class="col-sm-6" ng-repeat="i in JabatanCtrl.jabatan | filter:RootCtrl.filter track by i.idJabatan"

ng-dblclick="JabatanCtrl.edit('sm', i)"> <!-- S:directive ngBox --> <ng-box

render-box-fn="JabatanCtrl.render.jabatanDipakai(i)"> <ng-box-header title="{{i.jabatan}}"> <div class="box-tools pull-right"> <!-- S:ui-bootstrap dropdown --> <span class="dropdown">

<a href class="dropdown-toggle">

<span class="glyphicon glyphicon-chevron-down"></span>

</a>

<ul class="dropdown-menu"> <li>

<a href ng-click="JabatanCtrl.edit('sm', i)"> <span class="margin-span glyphicon glyphicon-edit"></span>

Sunting Data </a>

</li>

<li ng-if="JabatanCtrl.render.hapusData(i)" class="delete">

<a href ng-click="JabatanCtrl.delete(i)">

<span class="margin-span glyphicon glyphicon-trash"></span>

Hapus Data </a>

</li> </ul> </span>

<!-- E:ui-bootstrap dropdown --> </div>

</ng-box-header>

<div class="box-body"> <table class="table"> <thead>

<tr>

<th>Jenis</th>

(5)

<th>Jml Rumus Gaji</th> </tr>

</thead> <tbody> <tr>

<td>{{i.jenis}}</td>

<td title="{{i.karyawan}}">{{i.karyawan.length || 0}} orang</td>

<td title="{{i.rumusGaji}}">{{i.rumusGaji.length || 0}} data</td>

</tr> </tbody> </table> </div>

<div class="box-footer">

<div class="box-time pull-right">

<span class="glyphicon glyphicon-calendar"></span> {{i.waktu | waktu}}

</div> </div> </ng-box>

<!-- E:directive ngBox --> </div>

</div> </div>

6. views/jabatan/modal-jabatan.html

<form name="formJabatan"> <div class="modal-header">

<h3 class="modal-title">{{modalJabatanCtrl.obj.aksi}} Jabatan</h3>

</div>

<div class="modal-body">

<div class="form-group has-feedback" ng-class="{'has-success': formJabatan.namaJabatan.$valid, 'has-error':

formJabatan.namaJabatan.$invalid}">

<label class="control-label">Nama Jabatan</label> <input name="namaJabatan"

ng-model="modalJabatanCtrl.obj.jabatan" type="text" class="form-control input-sm" ng-minlength="5" ng-maxlength="30"

placeholder="Nama jabatan" required>

<span class="glyphicon form-control-feedback"

ng-class="{'glyphicon-remove': formJabatan.namaJabatan.$invalid, 'glyphicon-ok': formJabatan.namaJabatan.$valid}"></span>

<div class="help-block"

ng-messages="formJabatan.namaJabatan.$error">

<small class="help-block" ng-message="required">* Nama jabatan wajib di isi</small>

<small class="help-block" ng-message="minlength">* Nama jabatan kurang terperinci</small>

<small class="help-block" ng-message="maxlength">* Nama Jabatan terlalu panjang</small>

(6)

<div class="form-group has-feedback" ng-class="{'has-error': formJabatan.jenisJabatan.$invalid, 'has-success':

formJabatan.jenisJabatan.$valid}">

<label class="control-label">Jenis</label>

<select name="jenisJabatan" class="form-control input-sm" ng-model="modalJabatanCtrl.obj.jenis" ng-options="jenis for jenis in modalJabatanCtrl.jenis" required>

<option value="">-- Pilih Jenis Jabatan --</option> </select>

<div class="help-block"

ng-messages="formJabatan.jenisJabatan.$error">

<small class="help-block" ng-message="required">* Jenis jabatan wajib di isi</small>

</div> </div> </div>

<div class="modal-footer">

<button class="btn btn-sm" ng-class="{'btn-success':

formJabatan.$valid, 'btn-danger disabled': formJabatan.$invalid}" ng-click="modalJabatanCtrl.save()">Simpan</button>

<button class="btn btn-sm btn-warning" ng-click="modalJabatanCtrl.cancel()">Batal</button> </div>

</form>

7. views/karyawan/karyawan.html

<div class="header">

<div class="bs-page-header"> <h4>Mengelola Karyawan</h4> </div>

</div>

<div class="body" ng-show="KaryawanCtrl.jabatan.length > 0"> <div class="row newline">

<div class="col-md-6 pull-right">

<button ng-click="KaryawanCtrl.add()" class="btn sm btn-primary pull-right">Tambah Karyawan</button>

</div> </div>

<div class="row newline" ng-show="KaryawanCtrl.karyawan.length > 0">

<div class="col-md-12">

<table class="table bordered striped table-hover">

<thead> <tr>

<th class="text-center col-number">#</th> <th class="text-center">Nama</th>

<th class="text-center">Jabatan</th> <th class="text-center">Karyawan</th> <th class="text-center">

<span tooltip-popup-delay='500' tooltip='Kelompok Kerja'>Kel</span>

</th>

<th class="text-center">

(7)

</th>

<th class="text-center">

<span tooltip-popup-delay='500' tooltip='Status Karyawan'>Status</span>

</th> </tr> </thead> <tbody>

<tr ng-repeat="i in KaryawanCtrl.karyawan |

filter:RootCtrl.filter | orderBy:'+namaDepan':false | startArray: (KaryawanCtrl.numberPage - 1 )*KaryawanCtrl.limit |

limitTo:KaryawanCtrl.limit track by i.nip"> <td class="text-center"

title="{{i.nip}}">{{(KaryawanCtrl.numberPage-1)*KaryawanCtrl.limit+$index+1}}</td>

<td>{{i.namaDepan}} {{i.namaBelakang}}</td> <td class="text-center"

title="{{i.rincianJabatan}}">{{i.jabatan}}</td> <td

class="text-center">{{i.rincianJabatan.jenis}}</td>

<td class="text-center" title="{{i.kelompokKerja | kelompokKerja}}">{{i.kelompokKerja}}</td>

<td class="text-center">

<span class="glyphicon glyphicon glyphicon-time" tooltip-popup-delay='500' tooltip='Pertama kerja :

{{i.waktu.pertamaKerja | date:"d MMMM yyyy"}}'></span> </td>

<td class="text-center">{{i.statusKaryawan}}</td> <td class="text-center col-aksi">

<a href ng-click="KaryawanCtrl.edit(i)" tooltip-popup-delay='500' tooltip='Sunting data'>

<span class="glyphicon glyphicon-edit"></span> </a>

<a href ng-click="KaryawanCtrl.delete(i)" tooltip-popup-delay='500' tooltip='Hapus data'>

<span class="glyphicon glyphicon-trash"></span> </a>

</td> </tr> </tbody> </table>

<pagination total-items="KaryawanCtrl.karyawan | filter:RootCtrl.filter | length"

ng-model="KaryawanCtrl.numberPage" max-size="KaryawanCtrl.maxSize" class="pagination-sm pull-right" boundary-links="true" previous-text="Sebelumnya" next-text="Selanjutnya" first-text="Pertama" last-text="Terakhir" ng-hide="(KaryawanCtrl.karyawan |

filter:RootCtrl.filter | length) <= KaryawanCtrl.limit"></pagination> </div>

</div> </div>

8. views/karyawan/modal-karyawan.html

(8)

<h4 class="modal-title">

<span class="glyphicon glyphicon-user margin-span"></span>Karyawan

<small ng-if="modalKaryawanCtrl.obj.waktu.dibuat">· {{modalKaryawanCtrl.obj.waktu | waktu}} ·

<span tooltip-popup-delay="500"

tooltip="versi">#{{modalKaryawanCtrl.obj.versi}}</span> </small>

</h4> </div>

<div class="modal-body">

<div class="form-group form-group-sm" ng-class="{'has-success': formKaryawan.namaDepan.$valid, 'has-error': formKaryawan.namaDepan.$invalid}">

<label class="col-sm-3 control-label">Nama Lengkap</label> <div class="col-sm-4">

<input name="namaDepan"

ng-model="modalKaryawanCtrl.obj.namaDepan" class="form-control" type="text" placeholder="Nama Depan" minlength="2" ng-maxlength="15" required>

<div class="help-block"

ng-messages="formKaryawan.namaDepan.$error">

<small class="help-block" ng-message="required">* Nama depan wajib di isi</small>

<small class="help-block" ng-message="minlength">* Nama depan terlalu pendek</small>

<small class="help-block" ng-message="maxlength">* Nama depan terlalu panjang</small>

</div> </div>

<div class="col-sm-4">

<input ng-model="modalKaryawanCtrl.obj.namaBelakang" class="form-control" type="text" placeholder="Nama Belakang"> <div class="help-block"

ng-messages="formKaryawan.namaDepan.$error">

<small class="help-block" ng-message="required">* Tidak wajib di isi</small>

</div> </div> </div>

<div class="form-group form-group-sm" ng-class="{'has-error': formKaryawan.jenisJabatan.$invalid, 'has-success':

formKaryawan.jenisJabatan.$valid}">

<label class="col-sm-3 control-label">Jabatan</label> <div class="col-sm-5">

<select name="jenisJabatan" class="form-control input-sm" ng-model="modalKaryawanCtrl.objectJabatan" ng-options="

objectJabatan.jabatan group by objectJabatan.jenis for objectJabatan in modalKaryawanCtrl.arrayJabatan track by objectJabatan.idJabatan" required>

<option value="">-- Pilih Jenis Jabatan --</option> </select>

<div class="help-block"

ng-messages="formKaryawan.jenisJabatan.$error">

<small class="help-block" ng-message="required">* Jenis jabatan wajib di isi</small>

(9)

</div> </div>

<div class="form-group form-group-sm" ng-class="{'has-error': formKaryawan.kelompokKerja.$invalid, 'has-success':

formKaryawan.kelompokKerja.$valid}">

<label class="col-sm-3 control-label">Kelompok Kerja</label> <div class="col-sm-2">

<select name="kelompokKerja" tooltip-popup-delay='500' tooltip='{{modalKaryawanCtrl.objectKelompokKerja |

kelompokKerja}}' ng-model="modalKaryawanCtrl.objectKelompokKerja" ng-options="kelompokKerja for kelompokKerja in

modalKaryawanCtrl.kelompokKerja" class="form-control input-sm" required>

<option value="">--</option> </select>

</div>

<div class="col-sm-4">

<div class="help-block"

ng-messages="formKaryawan.kelompokKerja.$error">

<small class="help-block" ng-message="required">* Kelompok Kerja wajib di isi</small>

</div> </div> </div>

<div class="form-group form-group-sm" ng-class="{'has-error': formKaryawan.tanggal.$invalid, 'has-success':

formKaryawan.tanggal.$valid}">

<label class="col-sm-3 control-label">Pertama Kerja</label> <div class="col-sm-4">

<div class="input-group input-group-sm">

<input name="tanggal" type="text" class="form-control text-center" datepicker-popup="{{modalKaryawanCtrl.format}}" ng-model="modalKaryawanCtrl.pertamaKerja"

is-open="modalKaryawanCtrl.opened"

min-date="modalKaryawanCtrl.minDate" max-date="'2015-06-22'" datepicker-options="modalKaryawanCtrl.dateOptions" required="true" close-text="Tutup"

ng-click="modalKaryawanCtrl.open($event)" /> <span class="input-group-btn">

<button type="button btn-sm" class="btn btn-default" ng-click="modalKaryawanCtrl.open($event)"><i class="glyphicon glyphicon-calendar"></i>

</button> </span> </div>

</div>

<div class="col-sm-4">

<div class="help-block" ng-messages="formKaryawan.tanggal. $error">

<small class="help-block" ng-message="required">* Tanggal wajib di isi</small>

(10)

<div class="form-group form-group-sm" ng-class="{'has-error': formKaryawan.statusKaryawan.$invalid, 'has-success':

formKaryawan.statusKaryawan.$valid}">

<label class="col-sm-3 control-label">Status</label> <div class="col-sm-4">

<select name="statusKaryawan"

model="modalKaryawanCtrl.obj.statusKaryawan" ng-options="statusKaryawan for statusKaryawan in modalKaryawanCtrl.statusKaryawan"

ng-disabled="modalKaryawanCtrl.disabledStatusKaryawan" class="form-control input-sm"></select>

<div class="help-block"

ng-messages="formKaryawan.statusKaryawan.$error">

<small class="help-block" ng-message="required">* Tanggal wajib di isi</small>

</div> </div> </div>

</div>

<div class="modal-footer">

<button class="btn btn-primary" ng-class="{'btn-danger disabled': formKaryawan.$invalid, 'btn-success': formKaryawan. $valid}"

ng-click="modalKaryawanCtrl.save(modalKaryawanCtrl.objectJabatan.idJa batan, modalKaryawanCtrl.objectKelompokKerja,

modalKaryawanCtrl.pertamaKerja)">Simpan</button>

<button class="btn btn-warning"

ng-click="modalKaryawanCtrl.cancel()">Batal</button> </div>

</form>

9. views/rumus-gaji/rumus-gaji.html

<ng-tabs title-tabs="Mengelola Rumus Gaji" pull-body> <ng-tabs-content title-content="Harian">

<div class="body">

<div class="row newline">

<div class="col-md-6 pull-right">

<button ng-click="RumusGajiCtrl.add('Harian')" class="btn btn-sm btn-primary pull-right">Tambah Rumus Gaji Karyawan Harian</button>

</div> </div>

<div class="row new-line"> <div class="col-md-12">

<table class="table bordered striped table-hover">

<thead> <tr>

<th class="text-center">#</th>

(11)

<th class="text-center">

<span class="margin-span" tooltip-popup-delay='500' tooltip='Harga Perminggu'>H.Perminggu</span> </th>

<th class="text-center">

<span class="margin-span" tooltip-popup-delay='500' tooltip='Harga Perhari'>H.Perhari</span>

</th>

<th class="text-center" tooltip-popup-delay='500' tooltip='Uang Hadir'>U.Hadir</th>

<th class="text-center">

<span class="glyphicon glyphicon-calendar" tooltips-popup-delay='500' tooltip='Catatan waktu'></span> </th>

</tr> </thead> <tbody>

<tr ng-repeat="i in RumusGajiCtrl.rumusgaji | filter:'Harian' | filter:RootCtrl.filter |

orderBy:'+jabatan':false | startArray:(RumusGajiCtrl.numberPage - 1 )*RumusGajiCtrl.limit | limitTo:RumusGajiCtrl.limit track by i.idRumusGaji">

<td class="text-center"

title="{{i.idRumusGaji}}">{{(RumusGajiCtrl.numberPage-1)*RumusGajiCtrl.limit+$index+1}}</td>

<td class="text-center">{{i.jabatan}}</td> <td class="text-center">{{i.jenis}}</td> <td class="text-center">{{i.shift}}</td> <td class="text-center">{{i.harga | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.harga / 6 | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.uangHadir | numberFormat:"Rp ":0}}</td>

<td class="text-center">

<span class="glyphicon glyphicon glyphicon-time" tooltip-popup-delay='500' tooltip='{{i.waktu | waktu}}'></span> </td>

<td class="text-center col-aksi">

<a href ng-click="RumusGajiCtrl.edit('Harian', i)" tooltip-popup-delay='500' tooltip='Sunting data'>

<span class="glyphicon glyphicon-edit"></span> </a>

<a href ng-click="RumusGajiCtrl.delete(i)" tooltip-popup-delay='500' tooltip='Hapus data'>

<span class="glyphicon glyphicon-trash"></span>

</a> </td> </tr> </tbody> </table>

<pagination total-items="RumusGajiCtrl.rumusgaji | filter:'Harian'| filter:RootCtrl.filter | length"

(12)

filter:'Harian' | filter:RootCtrl.filter | length) <= RumusGajiCtrl.limit"></pagination>

</div> </div> </div>

</ng-tabs-content>

<ng-tabs-content title-content="Borongan"> <div class="body">

<div class="row newline">

<div class="col-md-6 pull-right">

<button ng-click="RumusGajiCtrl.add('Borongan')" class="btn btn-sm btn-primary pull-right">Tambah Rumus Gaji Karyawan Borongan</button>

</div> </div>

<div class="row new-line"> <div class="col-md-12">

<table class="table bordered striped table-hover">

<thead> <tr>

<th class="text-center">#</th>

<th class="text-center">Jabatan</th> <th class="text-center">Jenis</th> <th class="text-center">Shift</th> <th class="text-center">

<span tooltip-popup-delay='500' tooltip='Target Produksi'>T.Produksi</span>

</th>

<th class="text-center">

<span tooltip-popup-delay='500' tooltip='Target Jumlah Produksi'>T.J.Produksi</span>

</th>

<th class="text-center">

<span class="margin-span" tooltip-popup-delay='500' tooltip='Harga Normal'>H.Normal</span>

</th>

<th class="text-center">

<span class="margin-span" tooltip-popup-delay='500' tooltip='Harga Target'>H.Target</span>

</th>

<th class="text-center">

<span class="margin-span" tooltip-popup-delay='500' tooltip='Uang Hadir'>U.Hadir</span>

</th>

<th class="text-center">

<span class="glyphicon glyphicon-calendar" tooltips-popup-delay='500' tooltip='Catatan waktu'></span> </th>

</tr> </thead> <tbody>

<tr ng-repeat="i in RumusGajiCtrl.rumusgaji | filter:'Borongan' | filter:RootCtrl.filter |

(13)

<td class="text-center"

title="{{i.idRumusGaji}}">{{(RumusGajiCtrl.numberPage-1)*RumusGajiCtrl.limit+$index+1}}</td>

<td class="text-center">{{i.jabatan}}</td> <td class="text-center">{{i.jenis}}</td> <td class="text-center">{{i.shift}}</td> <td class="text-center">{{i.targetProduksi | numberFormat:""}} mtr</td>

<td class="text-center">{{i.targetJmlProduksi | numberFormat:""}} mtr</td>

<td class="text-center">{{i.harga | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.hargaTarget | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.uangHadir | numberFormat:"Rp ":0}}</td>

<td class="text-center">

<span class="glyphicon glyphicon glyphicon-time" tooltip-popup-delay='500' tooltip='{{i.waktu | waktu}}'></span> </td>

<td class="text-center col-aksi">

<a href ng-click="RumusGajiCtrl.edit('Borongan', i)" tooltip-popup-delay='500' tooltip='Sunting data'>

<span class="glyphicon glyphicon-edit"></span> </a>

<a href ng-click="RumusGajiCtrl.delete(i)" tooltip-popup-delay='500' tooltip='Hapus data'>

<span class="glyphicon glyphicon-trash"></span>

</a> </td> </tr> </tbody> </table>

<pagination total-items="RumusGajiCtrl.rumusgaji | filter:'Harian'| filter:RootCtrl.filter | length"

ng-model="RumusGajiCtrl.numberPage" max-size="RumusGajiCtrl.maxSize" class="pagination-sm pull-right" boundary-links="true" previous-text="Sebelumnya" next-text="Selanjutnya" first-text="Pertama" last-text="Terakhir" ng-hide="(RumusGajiCtrl.rumusgaji |

filter:'Harian' | filter:RootCtrl.filter | length) <= RumusGajiCtrl.limit"></pagination>

</div> </div> </div>

</ng-tabs-content> </ng-tabs>

10. views/rumus-gaji/modal-rumus-gaji.html

<form class="form-horizontal" name="formRumusGaji"> <div class="modal-header">

<h3 class="modal-title">Rumus Gaji - {{modalRumusGaji.jenis}}</h3>

</div>

(14)

<div class="form-group form-group-sm" ng-class="{'has-error': formRumusGaji.jenisJabatan.$invalid, 'has-success':

formRumusGaji.jenisJabatan.$valid}">

<label class="col-sm-4 control-label">Jabatan</label> <div class="col-sm-5">

<select name="jenisJabatan" class="form-control input-sm" ng-model="modalRumusGaji.objectJabatan" ng-options="

objectJabatan.jabatan group by objectJabatan.jenis for objectJabatan in modalRumusGaji.arrayJabatan |

filter:modalRumusGaji.jenis track by objectJabatan.idJabatan" required>

<option value="">-- Pilih Jenis Jabatan --</option> </select>

<div class="help-block"

ng-messages="formRumusGaji.jenisJabatan.$error">

<small class="help-block" ng-message="required">* Jenis jabatan wajib di isi</small>

</div>

</div> </div>

<div class="form-group form-group-sm" class="{'has-success': formRumusGaji.jenisJabatan.$valid}"

ng-if="modalRumusGaji.objectJabatan.jenis">

<label class="col-sm-4 control-label">Jenis</label> <div class="col-sm-4">

<input name="jenis"

ng-model="modalRumusGaji.objectJabatan.jenis" class="form-control" type="text" placeholder="Harga perminggu" disabled>

</div> </div>

<div class="form-group form-group-sm" ng-class="{'has-error': formRumusGaji.shift.$invalid, 'has-success': formRumusGaji.shift. $valid}">

<label class="col-sm-4 control-label">Shift</label> <div class="col-sm-3">

<select name="shift" ng-model="modalRumusGaji.obj.shift" ng-options="shift for shift in modalRumusGaji.shift" class="form-control input-sm" required>

<option value="">--</option> </select>

</div> </div>

<!-- S:input khusus untuk jenis karyawan harian -->

<div ng-if="modalRumusGaji.objectJabatan.jenis === 'Harian'" class="form-group form-group-sm" ng-class="{'has-success':

formRumusGaji.harga.$valid, 'has-error': formRumusGaji.harga. $invalid}">

<label class="col-sm-4 control-label">Harga perminggu</label>

<div class="col-sm-4">

(15)

<div class="help-block" ng-messages="formRumusGaji.harga. $error">

<small class="help-block" ng-message="required">* Harga perminggu wajib di isi</small>

</div> </div>

<div class="col-sm-4">

<div class="help-block" ng-if="formRumusGaji.harga.$valid" ng-show="modalRumusGaji.objectJabatan.jenis === 'Harian'">

<small class="help-block">

<span tooltip-popup-delay='500' tooltip='Harga perhari' class="glyphicon glyphicon-info-sign

margin-span"></span>{{modalRumusGaji.obj.harga / 6 | numberFormat:"Rp ":0}}</small>

</div> </div> </div>

<!-- E:input khusus untuk jenis karyawan harian -->

<!-- S:input khusus untuk jenis karyawan borongan -->

<div ng-if="modalRumusGaji.objectJabatan.jenis === 'Borongan'" class="form-group form-group-sm" ng-class="{'has-success':

formRumusGaji.harga.$valid, 'has-error': formRumusGaji.harga. $invalid}">

<label class="col-sm-4 control-label">Harga normal</label> <div class="col-sm-4">

<input name="harga" ng-model="modalRumusGaji.obj.harga" class="form-control" type="number" placeholder="Harga normal" required>

<div class="help-block" ng-messages="formRumusGaji.harga. $error">

<small class="help-block" ng-message="required">* Harga normal wajib di isi</small>

</div> </div> </div>

<div ng-if="modalRumusGaji.objectJabatan.jenis === 'Borongan'" class="form-group form-group-sm" ng-class="{'has-success':

formRumusGaji.hargaTarget.$valid, 'has-error': formRumusGaji.hargaTarget.$invalid}">

<label class="col-sm-4 control-label">Harga target</label> <div class="col-sm-4">

<input name="hargaTarget"

ng-model="modalRumusGaji.obj.hargaTarget" class="form-control" type="number" placeholder="Harga target" required>

<div class="help-block"

ng-messages="formRumusGaji.hargaTarget.$error">

<small class="help-block" ng-message="required">* Harga target wajib di isi</small>

</div> </div> </div>

<div ng-if="modalRumusGaji.objectJabatan.jenis === 'Borongan'" class="form-group form-group-sm" ng-class="{'has-success':

formRumusGaji.targetProduksi.$valid, 'has-error': formRumusGaji.targetProduksi.$invalid}">

<label class="col-sm-4 control-label">Target produksi</label>

(16)

<input name="targetProduksi"

ng-model="modalRumusGaji.obj.targetProduksi" class="form-control" type="number" placeholder="Target produksi" required>

<div class="help-block"

ng-messages="formRumusGaji.targetProduksi.$error">

<small class="help-block" ng-message="required">* Target produksi wajib di isi</small>

</div> </div> </div>

<div ng-if="modalRumusGaji.objectJabatan.jenis === 'Borongan'" class="form-group form-group-sm" ng-class="{'has-success':

formRumusGaji.targetJmlProduksi.$valid, 'has-error': formRumusGaji.targetJmlProduksi.$invalid}">

<label class="col-sm-4 control-label">T.Jml Produksi</label> <div class="col-sm-4">

<input name="targetJmlProduksi"

ng-model="modalRumusGaji.obj.targetJmlProduksi" class="form-control" type="number" placeholder="Target Jumlah Produksi" required>

<div class="help-block"

ng-messages="formRumusGaji.targetJmlProduksi.$error">

<small class="help-block" ng-message="required">* T.Jml produksi wajib di isi</small>

</div> </div> </div>

<!-- E:input khusus untuk jenis karyawan borongan -->

<div class="form-group form-group-sm" ng-class="{'has-success': formRumusGaji.uangHadir.$valid, 'has-error': formRumusGaji.uangHadir.$invalid}">

<label class="col-sm-4 control-label">Uang hadir</label> <div class="col-sm-4">

<input name="uangHadir"

ng-model="modalRumusGaji.obj.uangHadir" class="form-control" type="number" placeholder="Uang hadir" required>

<div class="help-block"

ng-messages="formRumusGaji.uangHadir.$error">

<small class="help-block" ng-message="required">* Harga Uang hadir wajib di isi</small>

</div> </div> </div>

</div>

<div class="modal-footer">

<button class="btn btn-primary" ng-class="{'btn-danger disabled': formRumusGaji.$invalid, 'btn-success': formRumusGaji. $valid}"

ng-click="modalRumusGaji.save(modalRumusGaji.objectJabatan)">Simpan</ button>

<button class="btn btn-warning"

ng-click="modalRumusGaji.cancel()">Batal</button> </div>

(17)

11. views/penggajian/penggajian.html

<ng-tabs title-tabs="Mengelola Penggajian Karyawan" pull-body> <ng-tabs-content title-content="Harian">

<div class="body">

<div class="row newline">

<div class="col-md-6 pull-right">

<button ng-click="PenggajianCtrl.add('Harian')" class="btn btn-sm btn-primary pull-right">Hitung penggajian karyawan harian</button>

</div> </div>

<div class="row new-line"> <div class="col-md-12">

<table class="table bordered striped table-hover">

<thead> <tr>

<th class="text-center">#</th>

<th class="text-center">Nama Lengkap</th> <th class="text-center">Jabatan</th> <th class="text-center">Tanggal</th> <th class="text-center">Shift</th> <th class="text-center">Khdr</th> <th class="text-center">Harga</th> <th class="text-center">Uang Hadir</th> <th class="text-center">Gapok</th> <th class="text-center">Bonus</th> <th class="text-center">Total Gaji</th> <th class="text-center">

<span class="glyphicon glyphicon-calendar"></span>

</th> </tr> </thead> <tbody>

<tr ng-repeat="i in

PenggajianCtrl.penggajianKaryawanHarian | filter:'Harian' | filter:RootCtrl.filter | orderBy:'+jabatan':false | startArray: (PenggajianCtrl.numberPage - 1 )*PenggajianCtrl.limit |

limitTo:PenggajianCtrl.limit track by i.idPenggajian"> <td class="text-center"

title="{{i.idPenggajian}}">{{(PenggajianCtrl.numberPage-1)*PenggajianCtrl.limit+$index+1}}</td>

<td class="text-center">{{i.namaLengkap}}</td> <td class="text-center">{{i.jabatan}}</td> <td class="text-center">{{i.waktu.penggajian | date:'d MMM yyyy'}}</td>

<td

class="text-center">{{i.rincianRumusGaji.shift}}</td>

<td class="text-center">{{i.kehadiran}}</td>

<td class="text-center">{{i.rincianRumusGaji.harga | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.uangHadir | numberFormat:"Rp ":0}}</td>

(18)

<td class="text-center">{{i.bonus | numberFormat:"Rp ":0}}</td>

<td class="text-center">{{i.totalGaji | numberFormat:"Rp ":0}}</td>

<td class="text-center">

<span class="glyphicon glyphicon glyphicon-time" tooltip-popup-delay='500' tooltip='{{i.waktu | waktu}}'></span> </td>

<td class="text-center col-aksi">

<a href ng-click="PenggajianCtrl.edit('Harian', i)" tooltip-popup-delay='500' tooltip='Sunting data'>

<span class="glyphicon glyphicon-edit"></span> </a>

<a href ng-click="PenggajianCtrl.delete(i)" tooltip-popup-delay='500' tooltip='Hapus data'>

<span class="glyphicon glyphicon-trash"></span>

</a> </td> </tr> </tbody> <tfoot

ng-hide="PenggajianCtrl.penggajianKaryawanHarian <= 0"> <tr>

<th colspan="7" class="text-center">Jumlah</th> <th

class="text-center">{{PenggajianCtrl.penggajianKaryawanHarian |

filter:'Harian' | filter:RootCtrl.filter | sumByKey:'uangHadir' | numberFormat:"Rp ":0}}</th>

<th

class="text-center">{{PenggajianCtrl.penggajianKaryawanHarian |

filter:'Harian' | filter:RootCtrl.filter | sumByKey:'gajipokok' | numberFormat:"Rp ":0}}</th>

<th

class="text-center">{{PenggajianCtrl.penggajianKaryawanHarian |

filter:'Harian' | filter:RootCtrl.filter | sumByKey:'bonus' | numberFormat:"Rp ":0}}</th>

<th

class="text-center">{{PenggajianCtrl.penggajianKaryawanHarian |

filter:'Harian' | filter:RootCtrl.filter | sumByKey:'totalGaji' | numberFormat:"Rp ":0}}</th>

</tr> </tfoot> </table>

<pagination

total-items="PenggajianCtrl.penggajianKaryawanHarian | filter:'Harian'| filter:RootCtrl.filter | length"

ng-model="PenggajianCtrl.numberPage"

max-size="PenggajianCtrl.maxSize" class="pagination-sm pull-right" boundary-links="true" previous-text="Sebelumnya"

next-text="Selanjutnya" first-text="Pertama" last-text="Terakhir" ng-hide="(PenggajianCtrl.penggajianKaryawanHarian | filter:'Harian' | filter:RootCtrl.filter | length) <=

PenggajianCtrl.limit"></pagination> </div>

</div> </div>

</ng-tabs-content>

(19)

</ng-tabs-content> </ng-tabs>

12. views/penggajian/modal-penggajian.html

<form class="form-horizontal" name="formPenggajian"> <div class="modal-header">

<h4 class="modal-title">

Proses {{modalPenggajianCtrl.aksi}} Penggajian - {{modalPenggajianCtrl.jenis}}

</h4> </div>

<div class="modal-body">

<!-- S:Pilih Karyawan -->

<div class="form-group form-group-sm" ng-class="{'has-error': formPenggajian.karyawan.$invalid, 'has-success':

formPenggajian.karyawan.$valid}">

<label class="col-sm-3 control-label">Nama Depan</label> <div class="col-sm-5">

<select name="karyawan" class="form-control input-sm" ng-model="modalPenggajianCtrl.objectKaryawan" ng-options="

objectKaryawan.namaDepan +' '+ objectKaryawan.namaBelakang group by objectKaryawan.rincianJabatan.jabatan for objectKaryawan in modalPenggajianCtrl.arrayKaryawan |

filter:modalPenggajianCtrl.jenis track by objectKaryawan.nip" ng-change="modalPenggajianCtrl.resetPenggajian()" required>

<option value="">-- Pilih Karyawan --</option> </select>

<div class="help-block"

ng-messages="formPenggajian.karyawan.$error">

<small class="help-block" ng-message="required">* Karyawan wajib di isi</small>

</div> </div> </div>

<!-- E:Pilih Karyawan -->

<div class="form-group form-group-sm" ng-class="{'has-error': formPenggajian.tanggal.$invalid, 'has-success':

formPenggajian.tanggal.$valid}">

<label class="col-sm-3 control-label">Tgl Penggajian</label> <div class="col-sm-4">

<div class="input-group input-group-sm">

<input name="tanggal" type="text" class="form-control text-center" datepicker-popup="{{modalPenggajianCtrl.format}}" ng-model="modalPenggajianCtrl.tanggalPenggajian"

is-open="modalPenggajianCtrl.opened"

min-date="modalPenggajianCtrl.minDate"

(20)

<button type="button btn-sm" class="btn btn-default" ng-click="modalPenggajianCtrl.open($event)"><i class="glyphicon glyphicon-calendar"></i>

</button> </span> </div>

</div>

<div class="col-sm-4">

<div class="help-block"

ng-messages="formPenggajian.tanggal.$error">

<small class="help-block" ng-message="required">* Tanggal wajib di isi</small>

</div> </div> </div>

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Jabatan</label> <div class="col-sm-4">

<input name="totalGaji"

ng-model="modalPenggajianCtrl.objectKaryawan.jabatan" class="form-control" type="text" disabled>

</div> </div>

<!-- S:Pilih Rumus Gaji -->

<div class="form-group form-group-sm" ng-class="{'has-error': formPenggajian.rumusgaji.$invalid, 'has-success':

formPenggajian.rumusgaji.$valid}">

<label class="col-sm-3 control-label">Shift</label> <div class="col-sm-5">

<select name="rumusgaji" class="form-control input-sm" ng-model="modalPenggajianCtrl.obj.rincianRumusGaji" ng-options=" objectRumusGaji.shift group by

objectRumusGaji.rincianJabatan.jenis for objectRumusGaji in modalPenggajianCtrl.arrayRumusGaji | filter:

{jenis:modalPenggajianCtrl.jenis,

jabatan:modalPenggajianCtrl.objectKaryawan.jabatan} track by objectRumusGaji.idRumusGaji" required>

<option value="">-- Pilih Shift --</option> </select>

<div class="help-block"

ng-messages="formPenggajian.rumusgaji.$error">

<small class="help-block" ng-message="required">* Shift wajib di isi</small>

</div> </div> </div>

<!-- E:Pilih Rumus Gaji -->

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Jenis</label> <div class="col-sm-4">

<input name="totalGaji"

ng-value="modalPenggajianCtrl.obj.rincianRumusGaji.jenis" class="form-control" type="text" disabled>

(21)

</div>

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Harga</label> <div class="col-sm-4">

<input name="totalGaji"

ng-value="modalPenggajianCtrl.obj.rincianRumusGaji.harga" class="form-control" type="text" disabled>

</div> </div>

<!-- S:input kehadiran -->

<div class="form-group form-group-sm" ng-class="{'has-success': formPenggajian.kehadiran.$valid, 'has-error': formPenggajian.kehadiran.$invalid}">

<label class="col-sm-3 control-label">Kehadiran</label> <div class="col-sm-2">

<input name="kehadiran"

ng-model="modalPenggajianCtrl.obj.kehadiran" class="form-control" type="number" placeholder="Nol" required>

</div>

<div class="col-sm-4">

<div class="help-block"

ng-messages="formPenggajian.kehadiran.$error">

<small class="help-block" ng-message="required">* Minimal angka nol</small>

<!-- <small class="help-block" ng-message="maxlength">* Tidak masuk akal</small> -->

</div> </div> </div>

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Uang Hadir</label> <div class="col-sm-4">

<input name="totalGaji"

ng-value="modalPenggajianCtrl.obj.uangHadir" class="form-control" type="text" disabled>

</div> </div>

<!-- E:input kehadiran -->

<!-- S:input gaji pokok -->

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Gaji pokok</label> <div class="col-sm-4">

<input name="gajiPokok"

ng-model="modalPenggajianCtrl.obj.gajiPokok" class="form-control" type="number" placeholder="Gaji pokok" disabled>

</div> </div>

<!-- S:input bonus -->

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Bonus</label> <div class="col-sm-4">

<input name="bonus"

ng-model="modalPenggajianCtrl.obj.bonus" class="form-control" type="number" placeholder="Bonus">

(22)

</div>

<!-- S:hitung total gaji -->

<div class="form-group form-group-sm">

<label class="col-sm-3 control-label">Total Gaji</label> <div class="col-sm-4">

<input name="totalGaji"

ng-model="modalPenggajianCtrl.obj.totalGaji" class="form-control" type="number" placeholder="Total Gaji" disabled="">

</div>

<!-- E:hitung total gaji -->

</div>

<div class="modal-footer">

<button class="btn btn-primary" ng-class="{'btn-danger disabled': formPenggajian.$invalid, 'btn-success': formPenggajian. $valid}"

ng-click="modalPenggajianCtrl.save(modalPenggajianCtrl.obj.idPenggaji an)">Simpan</button>

<button class="btn btn-warning"

ng-click="modalPenggajianCtrl.cancel()">Batal</button> </div>

</div> </form>

13. scripts/app.js

'use strict';

angular.module('jayaMekarApp', [ 'ui.router',

'ngMessages', 'ui.bootstrap' ])

.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/jabatan'); $stateProvider

.state('jabatan', { url: '/jabatan',

templateUrl: 'views/jabatan/jabatan.html', controller: 'JabatanCtrl'

})

.state('karyawan', { url: '/karyawan',

templateUrl: 'views/karyawan/karyawan.html', controller: 'KaryawanCtrl'

})

.state('rumus-gaji', { url: '/rumus-gaji',

templateUrl: 'views/rumus-gaji/rumus-gaji.html', controller: 'RumusGajiCtrl'

(23)

.state('penggajian', { url: '/penggajian',

templateUrl: 'views/penggajian/penggajian.html', controller: 'PenggajianCtrl'

}) } ]);

14. config/app.config.js

'use strict';

angular.module('jayaMekarApp') .constant('APP_CONFIG', { 'brandTop': {

nama: 'Nama Aplikasi', icon: 'Icon Aplikasi' }

})

.config(['APP_CONFIG', function(APP_CONFIG) { APP_CONFIG.brandTop = { nama: 'Jaya Mekar' };

APP_CONFIG.menuNavRightTop = [ {

href: '#', menu: 'DEMO', ngClassD: 'caret', dropdown: true, submenu: [{

href: 'contoh-data', submenu: 'Contoh Data',

ngClass: 'glyphicon glyphicon-file' }]

} ]; } ]);

15. controller/root.js

'use strict';

angular.module('jayaMekarApp')

.controller('RootCtrl', ['$scope', 'APP_CONFIG', function($scope, APP_CONFIG) {

var vm = $scope.RootCtrl = this; vm.brand = APP_CONFIG.brandTop;

(24)

vm.toggleSidebar = function() { vm.withSidebar = !vm.withSidebar; };

} ]);

16. controller/jabatan.js

'use strict';

angular.module('jayaMekarApp')

.controller('JabatanCtrl', ['$scope', 'jabatanFactory', function($scope, jabatanFactory) {

var that = $scope.JabatanCtrl = this; this.jabatan = jabatanFactory.jabatan; this.render = {

jabatanDipakai: function(object) { return object.karyawan.length > 0 || object.rumusGaji.length > 0 ? true : false; },

hapusData: function(object) {

return object.karyawan.length <= 0 && object.rumusGaji.length <= 0 ? true : false; }

};

jabatanFactory.get().then(function(result) { that.jabatan = result;

});

this.add = function(size) {

jabatanFactory.openModal(size); };

this.edit = function(size, obj) { jabatanFactory.openModal(size, obj); };

this.delete = function(obj) { jabatanFactory.del(obj); };

} ]);

17. controller/karyawan.js

'use strict';

(25)

.controller('KaryawanCtrl', ['$scope', 'karyawanFactory', '$indexedDB',

function($scope, karyawanFactory, $indexedDB) { var that = $scope.KaryawanCtrl = this;

this.karyawan = karyawanFactory.karyawan; this.jabatan = [];

this.maxSize = 7; this.numberPage = 1; this.limit = 10;

$indexedDB.getAll(['jabatan']).then(function(result) { that.jabatan = result;

});

karyawanFactory.get().then(function(result) { that.karyawan = result;

});

this.add = function() {

var jabatan = that.jabatan;

karyawanFactory.openModal(jabatan); };

this.edit = function(obj) { var jabatan = that.jabatan;

karyawanFactory.openModal(jabatan, obj); };

this.delete = function(obj) { karyawanFactory.del(obj); };

} ]);

18. controller/rumus-gaji.js

'use strict';

angular.module('jayaMekarApp')

.controller('RumusGajiCtrl', ['$scope', '$indexedDB', 'rumusGajiFactory',

function($scope, $indexedDB, rumusGajiFactory) { var that = $scope.RumusGajiCtrl = this;

this.rumusgaji = rumusGajiFactory.rumusgaji; this.jabatan = [];

this.maxSize = 7; this.numberPage = 1; this.limit = 10;

(26)

that.rumusgaji = result; });

$indexedDB.getAll(['jabatan']).then(function(result) { that.jabatan = result;

});

this.add = function(jenis) { var jabatan = that.jabatan;

rumusGajiFactory.openModal(jenis, jabatan); };

this.edit = function(jenis, obj) { var jabatan = that.jabatan;

rumusGajiFactory.openModal(jenis, jabatan, obj); };

this.delete = function(obj) { rumusGajiFactory.del(obj); };

} ]);

19. controller/penggajian.js

'use strict';

angular.module('jayaMekarApp')

.controller('PenggajianCtrl', ['$scope', 'karyawanFactory', 'rumusGajiFactory', 'penggajianKaryawanHarianFactory',

function($scope, karyawanFactory, rumusGajiFactory, penggajianKaryawanHarianFactory) {

var that = $scope.PenggajianCtrl = this; this.karyawan = karyawanFactory.karyawan; this.rumusgaji = rumusGajiFactory.rumusgaji; this.penggajianKaryawanHarian =

penggajianKaryawanHarianFactory.penggajian; this.maxSize = 7;

this.numberPage = 1; this.limit = 10;

karyawanFactory.get().then(function(result) { that.karyawan = result;

});

rumusGajiFactory.get().then(function(result) { that.rumusgaji = result;

});

penggajianKaryawanHarianFactory.getAll().then(function(result) {

(27)

});

this.add = function(jenis) { var karyawan = that.karyawan; var rumusgaji = that.rumusgaji; var aksi = 'Tambah data';

penggajianKaryawanHarianFactory.openModal(aksi, karyawan, rumusgaji, jenis);

};

this.edit = function(jenis, obj) { var karyawan = that.karyawan; var rumusgaji = that.rumusgaji; var aksi = 'Sunting data';

penggajianKaryawanHarianFactory.openModal(aksi, karyawan, rumusgaji, jenis, obj);

};

this.delete = function(obj) {

penggajianKaryawanHarianFactory.del(obj); };

} ]);

20. service/id-factory.js

'use strict';

angular.module('jayaMekarApp') .factory('$id', function() { var id = uuid.noConflict(); return function() {

return id.v4(); };

});

21. services/indexeddb-provider.js

'use strict';

angular.module('jayaMekarApp')

.provider('$indexedDB', function() {

var idb = {

namaIdb: 'Jaya Mekar', versiIdb: 1

};

(28)

var openRequest = window.indexedDB.open(idb.namaIdb, idb.versiIdb);

openRequest.onerror = function(event) { $log.error(event.target.errorCode); };

openRequest.onupgradeneeded = function(event) { db = event.target.result;

var objectStore;

// S:Pembuatan ObjectStore

// Jika objectStore belum ada maka objectStre akan dibuat

if (!db.objectStoreNames.contains('jabatan')) { objectStore = db.createObjectStore('jabatan', { keyPath: 'idJabatan',

unique: true

}); }

if (!db.objectStoreNames.contains('karyawan')) { objectStore = db.createObjectStore('karyawan', { keyPath: 'nip',

unique: true

});

// parameter 1 = nama_index

// parameter 2 = nama_properti_objek

objectStore.createIndex('idJabatan', 'idJabatan', { unique: false

}); }

if (!db.objectStoreNames.contains('rumusgaji')) { objectStore = db.createObjectStore('rumusgaji', { keyPath: 'idRumusGaji',

unique: true

});

objectStore.createIndex('idJabatan', 'idJabatan', { unique: false

}); }

if (!db.objectStoreNames.contains('penggajian')) { objectStore = db.createObjectStore('penggajian', { keyPath: 'idPenggajian',

unique: true

});

objectStore.createIndex('nip', 'nip', { unique: false

});

objectStore.createIndex('idJabatan', 'idJabatan', { unique: false

}); }

// E:Pembuatan ObjectStore };

/* fungsi di panggil jika success */ openRequest.onsuccess = function(event) { db = event.target.result;

db.onerror = function(event) {

(29)

};

defer.resolve(db); };

return defer.promise; }; // E:this.init()

this.getAll = function(arrayObjStore) { var result = [];

var defer = $q.defer();

this.init().then(function(db) {

var handleResult = function(event) { var cursor = event.target.result; if (cursor) {

result.push(cursor.value); cursor.continue();

} };

var transaction = db.transaction(arrayObjStore, 'readonly');

angular.forEach(arrayObjStore, function(value) { transaction.objectStore(value)

.openCursor()

.onsuccess = handleResult; });

transaction.oncomplete = function() { defer.resolve(result);

}; });

return defer.promise; }; // E:this.getAll()

this.getById = function(objStore, key) { var defer = $q.defer();

this.init().then(function(db) {

var transaction = db.transaction([objStore]);

var objectStore = transaction.objectStore(objStore); var request = objectStore.get(key);

request.onerror = function(event) { $log.error(event.target.errorCode); };

request.onsuccess = function() { var data = request.result; defer.resolve(data);

}; });

return defer.promise; }; // E:this.getById()

Referensi

Dokumen terkait

Kondisi SM Rimbang Baling sangat memprihatinkan saat ini, dan sangat disayangkan jika pada akhirnya, pemasalahan yang terjadi di kawasan konservasi menyebabkan

a) Untuk mengetahui kriteria atribut produk jamu tradisional yang diinginkan dan dibutuhkan oleh konsumen. b) Untuk mengetahui penilaian konsumen terhadap mutu

Naipamamalas ng mag-aaral ang pag-unawa sa ilang akdang pampanitikan tulad ng mga karunungang bayan, tula, dula at maikling kuwento na lumaganap sa Panahon ng Katutubo,

&#34;roses pengeluaran sputum dari paruparu, bronkus dan trakea yang dihasilkan oleh klien &#34;roses pengeluaran sputum dari paruparu, bronkus dan trakea yang dihasilkan oleh

- Taban Aritmetiği.. İki basamaklı bir sayının, rakamlarının yerleri değiştirilir - se, sayı 27 büyüyor. Üç basamaklı abc sayısının birler basamağı 4 tür. Her biri en

Pada saat Peraturan Daerah ini mulai berlaku, Peraturan Daerah Kabupaten Nomor 7 Tahun 2001 tentang Retribusi dan Sewa Pemakaian Kekayaan Daerah (Lembaran Daerah

Fungsi kemandirian pada lansia mengandung pengertian yaitu kemampuan yang dimiliki oleh lansia untuk tidak bergantung pada orang lain dalam melakukan aktivitasnya,

 Tetapi secara kuantitatif, pemikiran orang dewasa berbeda dengan pemikiran remaja, artinya orang dewasa memiliki pengetahuan yang lebih banyak dibandingkan remaja.. 