of 68
8/10/2019 Lampiran Source Code App
1/68
1
LAMPIRAN
1.
index.html
Jaya Mekar
Jabatan
Karyawan
Rumus Gaji
8/10/2019 Lampiran Source Code App
2/68
2
Penggajian
8/10/2019 Lampiran Source Code App
3/68
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(){varwidth =840;varheight =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)
});});
8/10/2019 Lampiran Source Code App
4/68
4
5. views/jabatan/jabatan.html
Mengelola Jabatan
Tambah Jabatan
Sunting Data
Hapus Data
Jenis
Jml Karyawan
8/10/2019 Lampiran Source Code App
5/68
5
Jml Rumus Gaji
{{i.jenis}}{{i.karyawan.length ||
0}} orang{{i.rumusGaji.length
|| 0}} data
{{i.waktu | waktu}}
6. views/jabatan/modal-jabatan.html
{{modalJabatanCtrl.obj.aksi}}Jabatan
Nama Jabatan
* Namajabatan wajib di isi
* Namajabatan kurang terperinci
* NamaJabatan terlalu panjang
8/10/2019 Lampiran Source Code App
6/68
6
Jenis
-- Pilih Jenis Jabatan --* Jenis
jabatan wajib di isi
SimpanBatal
7. views/karyawan/karyawan.html
Mengelola Karyawan
Tambah Karyawan
#NamaJabatanKaryawan
Kel
8/10/2019 Lampiran Source Code App
7/68
8/10/2019 Lampiran Source Code App
8/68
8
Karyawan
{{modalKaryawanCtrl.obj.waktu | waktu}}
#{{modalKaryawanCtrl.obj.versi}}
Nama Lengkap
* Namadepan wajib di isi
* Namadepan terlalu pendek
* Namadepan terlalu panjang
* Tidakwajib di isi
Jabatan
-- Pilih Jenis Jabatan --* Jenis
jabatan wajib di isi
8/10/2019 Lampiran Source Code App
9/68
9
Kelompok Kerja
--
*
Kelompok Kerja wajib di isi
Pertama Kerja
*Tanggal wajib di isi
8/10/2019 Lampiran Source Code App
10/68
10
Status
*Tanggal wajib di isi
Simpan
Batal
9. views/rumus-gaji/rumus-gaji.html
Tambah Rumus GajiKaryawan Harian
#JabatanJenis
Shift
8/10/2019 Lampiran Source Code App
11/68
11
H.Perminggu
H.Perhari
U.Hadir
{{(RumusGajiCtrl.numberPage-1)*RumusGajiCtrl.limit+$index+1}}
{{i.jabatan}}{{i.jenis}}{{i.shift}}{{i.harga |
numberFormat:"Rp ":0}}{{i.harga / 6 |
numberFormat:"Rp ":0}}{{i.uangHadir |numberFormat:"Rp ":0}}
8/10/2019 Lampiran Source Code App
12/68
12
filter:'Harian' | filter:RootCtrl.filter | length)
8/10/2019 Lampiran Source Code App
13/68
13
{{(RumusGajiCtrl.numberPage-1)*RumusGajiCtrl.limit+$index+1}}
{{i.jabatan}}{{i.jenis}}
{{i.shift}}{{i.targetProduksi |
numberFormat:""}} mtr{{i.targetJmlProduksi |
numberFormat:""}} mtr{{i.harga |
numberFormat:"Rp ":0}}{{i.hargaTarget |
numberFormat:"Rp ":0}}{{i.uangHadir |
numberFormat:"Rp ":0}}
10.views/rumus-gaji/modal-rumus-gaji.html
Rumus Gaji -{{modalRumusGaji.jenis}}
8/10/2019 Lampiran Source Code App
14/68
14
Jabatan
-- Pilih Jenis Jabatan --* Jenis
jabatan wajib di isi
Jenis
Shift
--
Hargaperminggu
8/10/2019 Lampiran Source Code App
15/68
15
* Hargaperminggu wajib di isi
{{modalRumusGaji.obj.harga / 6 | numberFormat:"Rp":0}}
Harga normal
* Harganormal wajib di isi
Harga target
* Hargatarget wajib di isi
Targetproduksi
8/10/2019 Lampiran Source Code App
16/68
16
* Targetproduksi wajib di isi
T.Jml Produksi
* T.Jmlproduksi wajib di isi
Uang hadir
* HargaUang hadir wajib di isi
Simpan
Batal
8/10/2019 Lampiran Source Code App
17/68
17
11.views/penggajian/penggajian.html
Hitung penggajiankaryawan harian
#Nama LengkapJabatanTanggalShiftKhdrHargaUang HadirGapokBonusTotal Gaji
{{(PenggajianCtrl.numberPage-1)*PenggajianCtrl.limit+$index+1}}
{{i.namaLengkap}}{{i.jabatan}}{{i.waktu.penggajian |
date:'d MMM yyyy'}}{{i.rincianRumusGaji.shift}}{{i.kehadiran}}{{i.rincianRumusGaji.harga
| numberFormat:"Rp ":0}}{{i.uangHadir |
numberFormat:"Rp ":0}}{{i.gajipokok |
numberFormat:"Rp ":0}}
8/10/2019 Lampiran Source Code App
18/68
8/10/2019 Lampiran Source Code App
19/68
19
12.
views/penggajian/modal-penggajian.html
Proses {{modalPenggajianCtrl.aksi}} Penggajian -
{{modalPenggajianCtrl.jenis}}
Nama Depan
-- Pilih Karyawan --
*
Karyawan wajib di isi
Tgl Penggajian
8/10/2019 Lampiran Source Code App
20/68
20
*Tanggal wajib di isi
Jabatan
Shift
-- Pilih Shift --* Shift
wajib di isi
Jenis
8/10/2019 Lampiran Source Code App
21/68
8/10/2019 Lampiran Source Code App
22/68
22
Total Gaji
Simpan
Batal
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'
})
8/10/2019 Lampiran Source Code App
23/68
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){
varvm =$scope.RootCtrl =this;
vm.brand =APP_CONFIG.brandTop;vm.menuNavRight =APP_CONFIG.menuNavRightTop;
vm.withSidebar =true;
8/10/2019 Lampiran Source Code App
24/68
24
vm.toggleSidebar =function(){vm.withSidebar =!vm.withSidebar;
};
}
]);
16.controller/jabatan.js
'use strict';
angular.module('jayaMekarApp')
.controller('JabatanCtrl',['$scope','jabatanFactory',function($scope,jabatanFactory){
varthat =$scope.JabatanCtrl =this;
this.jabatan =jabatanFactory.jabatan;
this.render ={jabatanDipakai:function(object){
returnobject.karyawan.length >0||object.rumusGaji.length >0?true:false;
},hapusData:function(object){
returnobject.karyawan.length
8/10/2019 Lampiran Source Code App
25/68
25
.controller('KaryawanCtrl',['$scope','karyawanFactory','$indexedDB',
function($scope,karyawanFactory,$indexedDB){
varthat =$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(){varjabatan =that.jabatan;karyawanFactory.openModal(jabatan);
};
this.edit =function(obj){varjabatan =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){
varthat =$scope.RumusGajiCtrl =this;
this.rumusgaji =rumusGajiFactory.rumusgaji;this.jabatan =[];this.maxSize =7;this.numberPage =1;this.limit =10;
rumusGajiFactory.get().then(function(result){
8/10/2019 Lampiran Source Code App
26/68
26
that.rumusgaji =result;});
$indexedDB.getAll(['jabatan']).then(function(result){that.jabatan =result;
});
this.add =function(jenis){varjabatan =that.jabatan;rumusGajiFactory.openModal(jenis,jabatan);
};
this.edit =function(jenis,obj){varjabatan =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 ){
varthat =$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){
that.penggajianKaryawanHarian =result;
8/10/2019 Lampiran Source Code App
27/68
27
});
this.add =function(jenis){varkaryawan =that.karyawan;varrumusgaji =that.rumusgaji;
varaksi ='Tambah data';penggajianKaryawanHarianFactory .openModal(aksi,karyawan,
rumusgaji,jenis);};
this.edit =function(jenis,obj){varkaryawan =that.karyawan;varrumusgaji =that.rumusgaji;varaksi ='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(){varid =uuid.noConflict();returnfunction(){returnid.v4();
};});
21.services/indexeddb-provider.js
'use strict';
angular.module('jayaMekarApp')
.provider('$indexedDB',function(){
varidb ={namaIdb:'Jaya Mekar',versiIdb:1
};
functionGetter($q,$log){
this.init =function(){vardefer =$q.defer();vardb;
8/10/2019 Lampiran Source Code App
28/68
28
varopenRequest =window.indexedDB.open(idb.namaIdb,idb.versiIdb);
openRequest.onerror =function(event){$log.error(event.target.errorCode);
};openRequest.onupgradeneeded =function(event){
db =event.target.result;varobjectStore;// S:Pembuatan ObjectStore// Jika objectStore belum ada maka objectStre akan
dibuatif(!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_objekobjectStore.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){defer.reject(event.target.errorCode);
8/10/2019 Lampiran Source Code App
29/68
29
};defer.resolve(db);
};
returndefer.promise;
};// E:this.init()
this.getAll =function(arrayObjStore){varresult =[];vardefer =$q.defer();
this.init().then(function(db){varhandleResult =function(event){
varcursor =event.target.result;if(cursor){
result.push(cursor.value);cursor.continue();
}
};
vartransaction =db.transaction(arrayObjStore,'readonly');
angular.forEach(arrayObjStore,function(value){transaction.objectStore(value)
.openCursor()
.onsuccess =handleResult;});
transaction.oncomplete =function(){defer.resolve(result);
};});
returndefer.promise;};// E:this.getAll()
this.getById =function(objStore,key){vardefer =$q.defer();
this.init().then(function(db){vartransaction =db.transaction([objStore]);varobjectStore =transaction.objectStore(objStore);varrequest =objectStore.get(key);
request.onerror =function(event){$log.error(event.target.errorCode);
};
request.onsuccess =function(){vardata =request.result;defer.resolve(data);
};});
returndefer.promise;};// E:this.getById()
this.getByIndex =function(objStore,nameIndex,key){
8/10/2019 Lampiran Source Code App
30/68
8/10/2019 Lampiran Source Code App
31/68
31
transaction.objectStore(value).put(obj);});
transaction.onerror =function(event){$log.error(event.target.errorCode);
};transaction.oncomplete =function(){
defer.resolve(obj);};
});
returndefer.promise;};// E:this.save()
this.delete=function(objStore,key){vardefer =$q.defer();
this.init().then(function(db){
vartransaction =db.transaction([objStore],'readwrite');varobjectStore =transaction.objectStore(objStore);varrequest =objectStore.delete(key);
request.onerror =function(event){$log.error(event.target.errorCode);
};
request.onsuccess =function(){defer.resolve(key);
};});
returndefer.promise;};// E:this.get()
}// getter()
this.$get =function($q,$log){returnnewGetter($q,$log);
};});
22.services/jabatan-factory.js
'use strict';
angular.module('jayaMekarApp').factory('jabatanFactory',['$q','$modal','$log',
'$indexedDB','$id',function($q,$modal,$log,$indexedDB,$id){
varjabatan =[];
varupdateSchema =function(obj){vardefer =$q.defer();
obj.waktu =obj.waktu ||{};
8/10/2019 Lampiran Source Code App
32/68
32
vardate =newDate().getTime();varidJabatan =obj.idJabatan ?obj.idJabatan :'Jabatan-'
+$id();vardibuat =obj.waktu.dibuat ?obj.waktu.dibuat :date;vardirubah =date;
varversi =obj.versi ?obj.versi +1:1;
varnewSchema ={'idJabatan':idJabatan,'jabatan':obj.jabatan,'waktu':{
'dibuat':dibuat,'dirubah':dirubah
},'jenis':obj.jenis,'versi':versi
};
defer.resolve(newSchema);returndefer.promise;};
varget =function(){varresult =[];vararrayObjStore =['jabatan'];vardefer =$q.defer();
$indexedDB.init().then(function(db){vartransaction =db.transaction(arrayObjStore,
'readonly');vartransactionJabatan =
transaction.objectStore('jabatan').openCursor();
transactionJabatan.onerror =function(event){$log.error(event.target.errorCode);
};
transactionJabatan.onsuccess =function(event){varcursorJabatan =event.target.result;
if(cursorJabatan){
vardata ={idJabatan:cursorJabatan.value.idJabatan,jabatan
:cursorJabatan
.value
.jabatan
,
waktu:cursorJabatan.value.waktu,jenis:cursorJabatan.value.jenis,versi:cursorJabatan.value.versi,karyawan:[],rumusGaji:[]
};
// Mengambil data karyawan sesuai idJabatan$indexedDB.getByIndex('karyawan','idJabatan',
cursorJabatan.value.idJabatan).then(function(result){
data.karyawan =result;});
8/10/2019 Lampiran Source Code App
33/68
8/10/2019 Lampiran Source Code App
34/68
34
$indexedDB.getByIndex('rumusgaji','idJabatan',cursorJabatan.idJabatan)
.then(function(result){data.rumusGaji =result;
});
result =data;};
transaction.oncomplete =function(){defer.resolve(result);
};});
returndefer.promise;};// E:getById()
varopenModal =function(paramSize,paramObj){
$modal.open({templateUrl:'views/jabatan/modal-jabatan.html' ,controller:function($scope,$modalInstance,obj){
varthat =$scope.modalJabatanCtrl =this;
this.obj =angular.copy(obj);this.jenis =['Harian','Borongan'];this.aksi ='add';
this.save =function(){if(that.obj.idJabatan){
edit(that.obj);
}else{add(that.obj);}$modalInstance.close();
};
this.cancel =function(){$modalInstance.dismiss();
};},size:paramSize,backdrop:false,resolve:{
obj:function()
{
returnparamObj;}
}});
};// E:openModal()
varadd =function(obj){vararrayObjStore =['jabatan'];updateSchema(obj).then(function(newObj){
$indexedDB.add(arrayObjStore,newObj).then(function(success){
getById(success.idJabatan).then(function(result){jabatan.push(result);
});
8/10/2019 Lampiran Source Code App
35/68
8/10/2019 Lampiran Source Code App
36/68
36
vardate =newDate().getTime();
obj.waktu =obj.waktu ||{};
varnip =obj.nip ?obj.nip :'Karyawan-'+$id();
vardibuat =obj.waktu.dibuat ?obj.waktu.dibuat :date;vardirubah =date;varpertamaKerja =obj.waktu ?obj.waktu.pertamaKerja :
date;varversi =obj.versi ?obj.versi +1:1;
varnewSchema ={'nip':nip,'namaDepan':obj.namaDepan,'namaBelakang':obj.namaBelakang,'idJabatan':obj.idJabatan,'kelompokKerja':obj.kelompokKerja,'waktu':{
'dibuat':dibuat,'dirubah':dirubah,'pertamaKerja':pertamaKerja
},'statusKaryawan':obj.statusKaryawan,'versi':versi
};
defer.resolve(newSchema);returndefer.promise;
};
varget =function(){
varresult =[];vararrayObjStore =['jabatan','karyawan'];vardefer =$q.defer();
$indexedDB.init().then(function(db){
vartransaction =db.transaction(arrayObjStore,'readonly');
vartransactionJabatan =transaction.objectStore('jabatan').openCursor();
transactionJabatan.onsuccess =function(event){varcursorJabatan =event.target.result;
if(cursorJabatan){
vartransactionKaryawan =transaction.objectStore('karyawan')
.index('idJabatan').openCursor(cursorJabatan.value.idJabatan);
transactionKaryawan.onerror =function(event){$log.error(event.target.errorCode);
};
transactionKaryawan.onsuccess =function(event){varcursorKaryawan =event.target.result;if(cursorKaryawan){
8/10/2019 Lampiran Source Code App
37/68
37
if(cursorKaryawan.value.idJabatan ===cursorJabatan.value.idJabatan){
vardata ={nip:cursorKaryawan.value.nip,
namaDepan:cursorKaryawan.value.namaDepan,namaBelakang:
cursorKaryawan.value.namaBelakang,idJabatan:cursorKaryawan.value.idJabatan,jabatan:cursorJabatan.value.jabatan,rincianJabatan:cursorJabatan.value,kelompokKerja:
cursorKaryawan.value.kelompokKerja,waktu:cursorKaryawan.value.waktu,statusKaryawan:
cursorKaryawan.value.statusKaryawan,versi:cursorKaryawan.value.versi
};
result.push(data);}else{
$log.warn('warning: id jabatan tidak sama');}
cursorKaryawan.continue();
}else{cursorJabatan.continue();
}};
}};
transaction.oncomplete =function(){karyawan =result;defer.resolve(result);
};});
returndefer.promise;};
vargetById =function(key){
varresult
={};
vararrayObjStore =['jabatan','karyawan'];vardefer =$q.defer();
$indexedDB.init().then(function(db){
vartransaction =db.transaction(arrayObjStore,'readonly');
vartransactionKaryawan =transaction.objectStore('karyawan');
vartransactionKaryawanById =transactionKaryawan.get(key);
transactionKaryawanById.onsuccess =function(event){
8/10/2019 Lampiran Source Code App
38/68
38
varcursorKaryawan =event.target.result;
if(cursorKaryawan){
vartransactionJabatan =
transaction.objectStore('jabatan');vartransactionJabatanById =
transactionJabatan.get(cursorKaryawan.idJabatan);
transactionJabatanById.onerror =function(event){$log.error(event.target.errorCode);
};
transactionJabatanById.onsuccess =function(event){varcursorJabatan =event.target.result;
vardata ={nip:cursorKaryawan.nip,
namaDepan:cursorKaryawan.namaDepan,namaBelakang:cursorKaryawan.namaBelakang,idJabatan:cursorKaryawan.idJabatan,jabatan:cursorJabatan.jabatan,rincianJabatan:cursorJabatan,kelompokKerja:cursorKaryawan.kelompokKerja,waktu:cursorKaryawan.waktu,statusKaryawan:cursorKaryawan.statusKaryawan,versi:cursorKaryawan.versi
};
result =data;};
}};
transaction.oncomplete =function(){defer.resolve(result);
};});
returndefer.promise;};
varopenModal =function(jabatan,obj){
$modal.open({templateUrl:'views/karyawan/modal-karyawan.html' ,controller:function($scope,$modalInstance,obj){
varthat =$scope.modalKaryawanCtrl =this;
// jika parameter objek undifined maka objek kosongdibuat
this.obj =angular.copy(obj)||{};this.obj.waktu =this.obj.waktu ||{};this.arrayJabatan =jabatan;this.disabledStatusKaryawan =false;this.objectJabatan =that.obj.rincianJabatan;this.objectKelompokKerja =that.obj.kelompokKerja;
8/10/2019 Lampiran Source Code App
39/68
39
this.kelompokKerja =['UM','UJ','NS'];this.statusKaryawan =['Kerja','Keluar'];
// jika obj.statusKaryawan undefined yang berartisedang
// melakukan penambahan data.if(angular.isUndefined(this.obj.statusKaryawan)){
this.obj.statusKaryawan ='Kerja';this.disabledStatusKaryawan =true;
}
this.save =function(idJabatan,kelompokKerja,pertamaKerja){
this.obj.idJabatan =idJabatan;this.obj.kelompokKerja =kelompokKerja;this.obj.waktu.pertamaKerja =
pertamaKerja.getTime();
if(that.obj.nip){edit(that.obj);}else{
add(that.obj);}
$modalInstance.close();};
this.cancel =function(){$modalInstance.dismiss('cancel');
};
// S: Config untuk datethis.today =function(){
this.pertamaKerja =newDate();};this.today();
this.open =function($event){$event.preventDefault();$event.stopPropagation();
this.opened =true;
};
this.dateOptions ={formatYear:'yy',startingDay:1
};
this.format ='dd MMMM yyyy';// E: Config untuk date
},backdrop:false,resolve:{
obj:function(){returnobj;
}
8/10/2019 Lampiran Source Code App
40/68
40
}});
};
varadd =function(obj){
vararrayObjStore =['karyawan'];updateSchema(obj).then(function(newObj){
$indexedDB.add(arrayObjStore,newObj).then(function(success){
getById(success.nip).then(function(result){karyawan.unshift(result);
});});
});};// E:add()
varedit =function(obj){vararrayObjStore =['karyawan'];
updateSchema(obj).then(function(newObj){$indexedDB.save(arrayObjStore,newObj).then(function(success){
getById(success.nip).then(function(result){angular.forEach(karyawan,function(value,key){
if(value.nip ===result.nip){karyawan[key]=result;
}});
});});
});};// E:edit()
vardel =function(obj){varobjStore ='karyawan';$indexedDB.delete(objStore,obj.nip).then(function(nip){
angular.forEach(karyawan,function(value,key){if(value !==undefined &&value.nip ===nip){
karyawan.splice(key,1);}
});});
};// E:del()
// Public API here
return{
karyawan:karyawan,get:get,openModal:openModal,add:add,edit:edit,del:del
};}
]);
8/10/2019 Lampiran Source Code App
41/68
41
24.services/rumusgaji-factory.js
'use strict';
angular.module('jayaMekarApp')
.factory('rumusGajiFactory',['$q','$indexedDB','$id','$log','$modal',
function($q,$indexedDB,$id,$log,$modal){
varrumusgaji =[];
varupdateSchema =function(obj){vardefer =$q.defer();vardate =newDate().getTime();varidRumusGaji =obj.idRumusGaji ?obj.idRumusGaji :
'RumusGaji-'+$id();vardibuat =obj.waktu.dibuat ?obj.waktu.dibuat :date;vardirubah =date;
varversi =obj.versi ?obj.versi +1:1;
varnewSchema ={'idRumusGaji':idRumusGaji,'idJabatan':obj.idJabatan,'jenis':obj.jenis,'shift':obj.shift,'harga':obj.harga,'uangHadir':obj.uangHadir,'waktu':{
'dibuat':dibuat,'dirubah':dirubah
},
'versi':versi};
if(obj.jenis ==='Borongan'){newSchema.hargaTarget =obj.hargaTarget;newSchema.targetProduksi =obj.targetProduksi;newSchema.targetJmlProduksi =obj.targetJmlProduksi;
}
defer.resolve(newSchema);returndefer.promise;
};
varget =function(){varresult =[];vararrayObjStore =['jabatan','rumusgaji'];vardefer =$q.defer();
$indexedDB.init().then(function(db){
vartransaction =db.transaction(arrayObjStore,'readonly');
vartransactionJabatan =transaction.objectStore('jabatan').openCursor();
transactionJabatan.onsuccess =function(event){
varcursorJabatan =event.target.result;
8/10/2019 Lampiran Source Code App
42/68
42
if(cursorJabatan){
vartransactionRumusgaji =transaction.objectStore('rumusgaji')
.index('idJabatan').openCursor(cursorJabatan.value.idJabatan);
transactionRumusgaji.onerror =function(event){$log.error('transactionRumusgaji.onerror' +
event.target.errorCode);};
transactionRumusgaji.onsuccess =function(){varcursorRumusGaji =transactionRumusgaji.result;if(cursorRumusGaji){
if(cursorRumusGaji.value.idJabatan ===cursorJabatan.value.idJabatan){
varschema ={idRumusGaji:
cursorRumusGaji.value.idRumusGaji,idJabatan:cursorRumusGaji.value.idJabatan,jabatan:cursorJabatan.value.jabatan,rincianJabatan:cursorJabatan.value,jenis:cursorRumusGaji.value.jenis,shift:cursorRumusGaji.value.shift,harga:cursorRumusGaji.value.harga,uangHadir:cursorRumusGaji.value.uangHadir,waktu:{
dibuat:
cursorRumusGaji.value.waktu.dibuat,dirubah:cursorRumusGaji.value.waktu.dirubah
},versi:cursorRumusGaji.value.versi
};
if(cursorRumusGaji.value.jenis ==='Borongan'){
schema.hargaTarget =cursorRumusGaji.value.hargaTarget;
schema.targetProduksi =cursorRumusGaji.value.targetProduksi;
schema.targetJmlProduksi
=
cursorRumusGaji.value.targetJmlProduksi;}
result.push(schema);}else{
$log.warn('warning: id jabatan tidak sama =>transactionRumusgaji.onsuccess' );
}cursorRumusGaji.continue();
}else{cursorJabatan.continue();
}};
}
8/10/2019 Lampiran Source Code App
43/68
8/10/2019 Lampiran Source Code App
44/68
44
if(cursorRumusGaji.jenis ==='Borongan'){data.hargaTarget =cursorRumusGaji.hargaTarget;data.targetProduksi =
cursorRumusGaji.targetProduksi;data.targetJmlProduksi =
cursorRumusGaji.targetJmlProduksi;}
result =data;
};}
};
transaction.oncomplete =function(){defer.resolve(result);
};});
returndefer.promise;};// E:this.getById()
varopenModal =function(jenis,jabatan,obj){
$modal.open({templateUrl:'views/rumus-gaji/modal-rumus-gaji.html' ,controller:function($scope,$modalInstance,obj){
varthat =$scope.modalRumusGaji =this;
// jika parameter objek undifined maka objek kosong
dibuat this.obj =angular.copy(obj)||{};this.obj.waktu =this.obj.waktu ||{};this.arrayJabatan =jabatan;this.objectJabatan =that.obj.rincianJabatan;this.shift =['Siang','Malam'];this.jenis =jenis;
this.save =function(objJabatan){this.obj.idJabatan =objJabatan.idJabatan;this.obj.jenis =objJabatan.jenis;
if(that.obj.idRumusGaji){edit
(that
.obj
);
}else{add(that.obj);
}
$modalInstance.close();};
this.cancel =function(){$modalInstance.dismiss();
};
},// size: size,backdrop:false,
8/10/2019 Lampiran Source Code App
45/68
45
resolve:{obj:function(){
returnobj;}
}
});
};// E:openModel()
varadd =function(obj){vararrayObjStore =['rumusgaji'];updateSchema(obj).then(function(newObj){
$indexedDB.add(arrayObjStore,newObj).then(function(success){
getById(success.idRumusGaji).then(function(result){rumusgaji.push(result);
});});
});};// E:add()
varedit =function(obj){vararrayObjStore =['rumusgaji'];updateSchema(obj).then(function(newObj){
$indexedDB.save(arrayObjStore,newObj).then(function(success){
getById(success.idRumusGaji).then(function(result){angular.forEach(rumusgaji,function(value,key){
if(value.idRumusGaji ===result.idRumusGaji){rumusgaji[key]=result;
}
});});});
});};// E:edit()
vardel =function(obj){varobjStore ='rumusgaji';$indexedDB.delete(objStore,
obj.idRumusGaji).then(function(idRumusGaji){angular.forEach(rumusgaji,function(value,key){
if(value !==undefined &&value.idRumusGaji ===idRumusGaji){
rumusgaji.splice
(key
,1
);
}});
});};// E:del()
// Public API herereturn{
rumusgaji:rumusgaji,get:get,openModal:openModal,add:add,edit:edit,del:del
};
8/10/2019 Lampiran Source Code App
46/68
46
}]);
25.services/penggajiankaryawanharian-factory.js
'use strict';
angular.module('jayaMekarApp').factory('penggajianKaryawanHarianFactory' ,['$q','$indexedDB',
'$id','$modal','kalkulasiPenggajianFactory',function($q,$indexedDB,$id,$modal,
kalkulasiPenggajianFactory){
varpenggajian =[];
varupdateSchema =function(obj){vardefer =$q.defer();
vardate =newDate().getTime();
obj.waktu =obj.waktu ||{};varidPenggajian =obj.idPenggajian ?obj.idPenggajian :
'Penggajian-'+$id();vardibuat =obj.waktu.dibuat ?obj.waktu.dibuat :date;vardirubah =date;varversi =obj.versi ?obj.versi +1:1;
// normal schema untuk penggajian jenis jabatan harianvarnewSchema ={
'idPenggajian':idPenggajian,'nip':obj.nip,
'namaLengkap':obj.namaLengkap,'jabatan':obj.rincianRumusGaji.jabatan,'idRumusGaji':obj.rincianRumusGaji.idRumusGaji,'rincianKaryawan':obj.rincianKaryawan,'rincianRumusGaji':obj.rincianRumusGaji,'kehadiran':obj.kehadiran,'uangHadir':obj.uangHadir,'bonus':obj.bonus,'gajipokok':obj.gajiPokok,'totalGaji':obj.totalGaji,'waktu':{
'dibuat':dibuat,'dirubah':dirubah,
'penggajian':obj.waktu.tanggalPenggajian},'versi':versi
};
defer.resolve(newSchema);returndefer.promise;
};
vargetAll =function(){vardefer =$q.defer();vararrayObjStore =['penggajian'];$indexedDB.getAll(arrayObjStore).then(function(result){
penggajian =result;
8/10/2019 Lampiran Source Code App
47/68
47
defer.resolve(result);});returndefer.promise;
};
vargetById =function(idPenggajian){vardefer =$q.defer();varobjStore ='penggajian';$indexedDB.getById(objStore,
idPenggajian).then(function(result){defer.resolve(result);
});returndefer.promise;
};
varopenModal =function(aksi,karyawan,rumusgaji,jenis,obj){
$modal.open({templateUrl:'views/penggajian/modal-penggajian.html' ,controller:function($scope,$modalInstance,obj){
varthat =$scope.modalPenggajianCtrl =this;// jika parameter objek undifined maka objek kosong
dibuat// kondisi saat penambahan data baruthis.obj =angular.copy(obj)||{};this.obj.waktu =this.obj.waktu ||{};
if(obj){this.objectKaryawan =obj.rincianKaryawan;
this.obj.rincianRumusGaji =obj.rincianRumusGaji;}
this.aksi =aksi;this.jenis =jenis;this.arrayKaryawan =karyawan;this.arrayRumusGaji =rumusgaji;
$scope.$watch(function(){that.obj.uangHadir =
kalkulasiPenggajianFactory.uangHadir(that.obj.kehadiran,that.obj.rincianRumusGaji);
that.obj.gajiPokok =kalkulasiPenggajianFactory
.gajiPokokHarian
(that
.obj
.kehadiran
,
that.obj.rincianRumusGaji);that.obj.totalGaji =
kalkulasiPenggajianFactory.totalGaji(that.obj);});
this.resetPenggajian =function(){that.obj.rincianRumusGaji ='';that.obj.uangHadir ='';
};
this.save =function(idPenggajian){this.obj.waktu.tanggalPenggajian =
this.tanggalPenggajian.getTime();this.obj.idPenggajian =idPenggajian;
8/10/2019 Lampiran Source Code App
48/68
48
this.obj.rincianKaryawan =this.objectKaryawan;this.obj.nip =this.objectKaryawan.nip;varnamaBelakang =
angular.isDefined(this.objectKaryawan.namaBelakang)?this.objectKaryawan.namaBelakang :'';
this.obj.namaLengkap =this.objectKaryawan.namaDepan+' '+namaBelakang;
this.obj.jabatan =this.obj.rincianRumusGaji.jabatan;
this.obj.idRumusGaji =this.obj.rincianRumusGaji.idRumusGaji;
if(that.obj.idPenggajian){edit(that.obj);
}else{add(that.obj);
}
$modalInstance.close();};
this.cancel =function(){$modalInstance.dismiss();
};
// S: Config untuk datethis.today =function(){
this.tanggalPenggajian =newDate();};this.today();
this.open =function($event){$event.preventDefault();$event.stopPropagation();
this.opened =true;};
this.dateOptions ={formatYear:'yy',startingDay:1
};
this.format
='dd MMMM yyyy'
;
// E: Config untuk date
},backdrop:false,resolve:{
obj:function(){returnobj;
}}
});
};
varadd =function(obj){
8/10/2019 Lampiran Source Code App
49/68
49
vardefer =$q.defer();vararrayObjStore =['penggajian'];updateSchema(obj).then(function(newObj){
$indexedDB.add(arrayObjStore,newObj).then(function(success){
getById(success.idPenggajian).then(function(result){penggajian.push(result);
});});
});returndefer.promise;
};// E:add()
varedit =function(obj){vararrayObjStore =['penggajian'];updateSchema(obj).then(function(newObj){
$indexedDB.save(arrayObjStore,newObj).then(function(success){
getById(success.idPenggajian).then(function(result){angular.forEach(penggajian,function(value,key){if(value.idPenggajian ===result.idPenggajian){
penggajian[key]=result;}
});});
});});
};// E:edit()
vardel =function(obj){varobjStore ='penggajian';
$indexedDB.delete(objStore,obj.idPenggajian).then(function(idPenggajian){angular.forEach(penggajian,function(value,key){
if(value !==undefined &&value.idPenggajian ===idPenggajian){
penggajian.splice(key,1);}
});});
};// E:del()
return{penggajian
:penggajian
,
getAll:getAll,openModal:openModal,add:add,edit:edit,del:del
};}
]);
26.services/kalkulasipenggajian-factory.js
'use strict';
8/10/2019 Lampiran Source Code App
50/68
8/10/2019 Lampiran Source Code App
51/68
51
}};
});
29.
filters/numberformat-filter.js
'use strict';
angular.module('jayaMekarApp')
/*** Number.prototype.format(n, x, s, c)** @paraminteger n: length of decimal* @paraminteger x: length of whole part* @parammixed s: sections delimiter* @parammixed c: decimal delimiter
* @link http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript**/
.filter('numberFormat',function(){// Contoh penggunaan filter// numberFormat:"Rp ":0// number yaitu data yang akan dirubah formatnya// key yaitu jenis mata uangnya// LD (Long Desimal) yaitu jumlah desimal yang diinginkanreturnfunction(number,key,LD){
// doc terlampir - Number.prototype.format(n, x, s, c)
Number.prototype.format =function(n,x,s,c){varre ='\\d(?=(\\d{'+(x ||3)+'})+'+(n >0?'\\D':
'$')+')',num =this.toFixed(Math.max(0,~~n));
return(c ?num.replace('.',c):num).replace(newRegExp(re,'g'),'$&'+(s ||','));
};returnkey +number.format(LD,3,'.',',');
};});
30.
filters/startarray-filter.js
'use strict';
angular.module('jayaMekarApp')// untuk menentukan no start array.filter('startArray',function(){
returnfunction(data,start){if(angular.isDefined(data)){returndata.slice(start);
}};
});
8/10/2019 Lampiran Source Code App
52/68
8/10/2019 Lampiran Source Code App
53/68
53
33.directive/yk-navbar.js
'use strict';
angular.module('jayaMekarApp')
/**** @ngdocdirective* @namaykNavbar & ykMenuList** @example* @html
** @ctrlatau service value untuk data menu{
'brandTop': {nama: 'Nama Aplikasi',icon: 'Icon Aplikasi'
},'menuNavLeftTop': [{
href: 'menu-1',menu: 'Menu 1',ngClass: 'fa fa-icon'
},{href: 'menu-2',
menu: 'Menu 2',ngClassD: 'caret',dropdown: true,submenu: [{
href: 'menu-2.menu-2-1',submenu: 'Menu 2.1',ngClass: 'glyphicon glyphicon-icon'
}]}],'menuNavRightTop': [{
href: 'menu-1',menu: 'Menu 1',ngClass: 'fa fa-icon'
},{href: 'menu-2',menu: 'Menu 2',ngClassD: 'caret',dropdown: true,submenu: [{
href: 'menu-2.menu-2-1',submenu: 'Menu 2.1',ngClass: 'glyphicon glyphicon-icon'
}]}]
})*
**/
8/10/2019 Lampiran Source Code App
54/68
54
.directive('ykNavbar',function(){
functionykNavbarLinkFn(scope,element,attrs){if(angular.isDefined(attrs.fixedTop)){
element.addClass('navbar-fixed-top');}if(angular.isDefined(attrs.fixedBottom)){element.addClass('navbar-fixed-bottom');
}}
return{templateUrl:'views/directive/navbar/yk-navbar.html' ,restrict:'E',scope:{brand:'=',withSidebar:'=',
toggleSidebar:'&'},replace:true,transclude:true,controller:function($scope){varlistMenu =$scope.listMenu =[];this.menu =function(menu){
listMenu.push(menu);};
},link:ykNavbarLinkFn
};})
.directive('ykMenuList',function(){
functionykMenuListLinkFn(scope,element,attrs){if(angular.isDefined(attrs.nav)){element.addClass('navbar-nav');
}if(angular.isDefined(attrs.right)){element.addClass('navbar-right');
}}
return{templateUrl
:'views/directive/menu/yk-menu-list.html'
,
restrict:'E',scope:{menu:'='
},replace:true,require:'^ykNavbar',link:ykMenuListLinkFn
};});
8/10/2019 Lampiran Source Code App
55/68
55
34.directive/yk-sidebar.js
'use strict';
angular.module('jayaMekarApp')
.directive('ykSidebar',function(){return{templateUrl:'views/directive/sidebar/yk-sidebar.html' ,restrict:'E',replace:true,transclude:true,scope:{
filter:'='}
};});
35.
directive/yk-wrapper.js
'use strict';
angular.module('jayaMekarApp')
.directive('ykWrapper',function(){
functionykWrapperLink(scope,element,attrs){
// binding perubahan ukuran windowattrs.$observe('windowWidth',function(newValue){if(newValue
8/10/2019 Lampiran Source Code App
56/68
56
})
.directive('ykWrapperContent',function(){return{
restrict:'E',
templateUrl:'views/directive/wrapper/yk-wrapper-content.html',
replace:true,transclude:true,scope:{}
};});
36.directive/ng-window.js
'use strict';
angular.module('jayaMekarApp').directive('ngWindow',['$window',
function($window){returnfunction($scope){
$scope.initializeWindowSize =function(){$scope.windowWidth =$window.innerWidth;$scope.windowHeight =$window.innerHeight;
};angular.element($window).bind('resize',function(){
$scope.initializeWindowSize();$scope.$apply();
});$scope.initializeWindowSize();
};}
]);
37.directive/ng-box.js
'use strict';
angular.module('jayaMekarApp').directive('ngBox',function(){
return{templateUrl:'views/directive/box/box.html',restrict:'E',replace:true,transclude:true,scope:{
renderBoxFn:'&'},controller:function($scope){
this.renderBoxFn =$scope.renderBoxFn();}
};}).directive('ngBoxHeader',function(){
return{templateUrl:'views/directive/box/box-header.html' ,
8/10/2019 Lampiran Source Code App
57/68
57
restrict:'E',replace:true,transclude:true,require:'^ngBox',link:function(scope,element,attrs,ngboxCtrl){
attrs.$observe('title',function(newValue){scope.title =newValue;
});scope.renderBoxFn =ngboxCtrl.renderBoxFn;
}};
});
38.directive/ng-tabs.js
'use strict';
/*** @ngdocmodul* @namematerial.component.ng.tabs** @descriptiom* arahan untuk membuat material desain untuk komponen web tabs*/
angular.module('jayaMekarApp')
/*** @ngdocdirective* @namengTabs
** @restrictE** @description** @attrs{titleTabs:@} digunakan untuk menentukan judul tabs** @example**/
.directive('ngTabs',function(){return{
restrict:'E',replace:false,transclude:true,scope:{titleTabs:'@'
},templateUrl:'views/directive/tabs/ng-tabs.html' ,controller:function($scope){varcontent =$scope.content =[];
this.addcontentTabs =function(nav){// tabs yang pertama akan diaktifkan jika array sama
dengan nol
nav.selected =content.length ===0?true:false;
8/10/2019 Lampiran Source Code App
58/68
58
content.unshift(nav);};
$scope.selected =function(nav){// menonaktifkan semua tab
angular.forEach(content,function(nav){nav.selected =false;
});// mengaktifkan tab yang dipilihnav.selected =true;
};
},link:function(scope,element,attrs){if(angular.isDefined(attrs.pullBody)){
element.addClass('pull-body');}if(angular.isUndefined(attrs.pullBody)){
element.addClass('normal');}
console.log();}
};})
/*** @ngdocdirective* @namengTabsContent** @restrictE
** @description** @attrs{titleContent:@} digunakan untuk menentukan judul navtabs** @example**/
.directive('ngTabsContent',function(){return{
restrict:'E',replace
:true,
transclude:true,require:'^ngTabs',scope:{titleContent:'@'
},templateUrl:'views/directive/tabs/ng-tabs-content.html' ,link:function(scope,elm,attrs,tabsCtrl){// menambahkan tabs ke array content direvtive ngTabstabsCtrl.addcontentTabs(scope);
}};
});
8/10/2019 Lampiran Source Code App
59/68
59
39.views/directive/box/box.html
40.views/directive/box/box-header.html
{{title}}
41.views/directive/menu/yk-menu-list.html
{{item.menu}}
{{item.menu}}
{{sm.submenu}}
42.views/directive/navbar/yk-navbar.html
Toggle navigation
{{brand.nama}}
8/10/2019 Lampiran Source Code App
60/68
60
43.views/directive/sidebar/yk-sidebar.html
44.views/directive/tabs/ng-tabs.html
{{titleTabs}}{{i.titleContent}}
45.views/directive/tabs/ng-tabs-content.html
{{titleContent}}
46.views/directive/wrapper/yk-wrapper.html
8/10/2019 Lampiran Source Code App
61/68
61
47.views/directive/wrapper/yk-wrapper-content.html
48.styles/main.css
html {overflow: hidden;
}
body {min-width: 670px;margin-top: 50px;
}.navbar-white{background: #ffffff;
}.row{margin-right: 0;margin-left: 0;
}.navbar-nav.navbar-right:last-child{margin-right: 0;
}
.margin-span{margin-right: 5px;
}.margin-icon-left {margin-left: 7px;
}
th.col-number{
width: 10px;}
th.col-aksi,td.col-aksi{width: 55px;
}
th.col-aksi{color: #fff;
}
.table>thead >tr >th.col-aksi,.table>tbody >tr >td.col-aksi{border-color: transparent;
}
8/10/2019 Lampiran Source Code App
62/68
62
.table{margin-bottom: 0;
}
49.
styles/yk-sidebar.css
.sidebar-defaultul li,.sidebar-search{border-bottom: 1px solid #e7e7e7;
}.sidebar-search{
z-index: 3;padding: 10px 15px;
}.arrow{
float: right;}.fa.arrow:before{
content: '\f104';}
.active>a >.fa.arrow:before{content: '\f107';
}
.nav-second-level li a {padding-left: 37px;
}
.nav-third-levelli a {padding-left: 52px;
}
.sidebar-default{border-width: 0 0 1px;border-color: #e7e7e7;border-right: #e7e7e7 solid 1px;background: #f7f7f7;
}
.sidebar-default>ul >li.active{background: #f9f9f9;
}
.sidebar-default>ul >li.active>a {z-index: 2;background: #f9f9f9;
}.sidebar-default>ul >li >a{
color: #777;}
.sidebar-default>ul >li >a:hover{
color: #333;background: #f9f9f9;
}
.sidebar-default>ul >li.active>a:before{display: block;width: 5px;
}
8/10/2019 Lampiran Source Code App
63/68
63
.sidebar-default>ul >li >a:before{position: absolute;top: 0;right: auto;
bottom: 0;left: 0;width: 0;content: '';-webkit-transition: all .5s ease;transition: all .5s ease;background: #333;
}
.wrapper.with-sidebar.wrapper-sidebar{left: 0;
}.wrapper.wrapper-sidebar{
position: absolute;z-index: 1;top: 50px;bottom: 0;left: -250px;width: 250px;-webkit-transition: all .5s ease;transition: all .5s ease;
}.wrapper.wrapper-body{
position: absolute;top: 50px;right: 0;
bottom: 0;left: 0;-webkit-transition: left .5s ease;transition: left .5s ease;background: #fdfdfd;
}.wrapper.wrapper-body.wrapper-inner{
position: absolute;top: 0;right: 0;bottom: 0;left: 0;overflow-y: auto;
}.wrapper.wrapper-body.wrapper-inner.page-wrapper{position: relative;outline: 0;
}.wrapper.wrapper-body.wrapper-inner.content,.wrapper.wrapper-body.wrapper-inner.content.body{
max-width: 100%;}.wrapper.wrapper-body.wrapper-inner.content.body{
padding-top: 20px;}
.wrapper.wrapper-sidebarul.sidebar-menu{
position: absolute;
8/10/2019 Lampiran Source Code App
64/68
64
top: 0;right: 0;bottom: 0;left: 0;overflow-y: auto;
margin: 0;padding: 0;list-style: none;-webkit-transition: top .5s ease;transition: top .5s ease;
}.wrapper.wrapper-sidebar.sidebar-search{
position: absolute;top: -50px;-webkit-transition: top .5s ease;transition: top .5s ease;
}.wrapper.with-search.wrapper-sidebar.sidebar-search{
top: 0;}
.wrapper.with-search.wrapper-sidebarul.sidebar-menu{top: 50px;
}@media (min-width: 925px) {
.wrapper.with-sidebar>.wrapper-body{left: 250px;
}}@media (max-width: 1240px) {
.wrapper.wrapper-body{overflow-y: auto;
}}@media (max-width: 1240px) {
.wrapper.wrapper-body.wrapper-inner{position: static;min-height: calc(100% - 57px);padding-bottom: 20px;
}}/*** note:* untuk menyembunyikan sidebar, maka harus menghapus class "with-sidebar" di html.
***/
50.styles/box.css
*,*:before,*:after{-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;
}
.box{
8/10/2019 Lampiran Source Code App
65/68
65
position: relative;background: #ffffff;border-top: 2px solid #c1c1c1;margin-bottom: 20px;width: 100%;
display: block;box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .26);
}
.box.box-header{position: relative;border-bottom: 0px solid #f4f4f4;color: #444;height: 42px;
}
.box.box-header:before,.box.box-header:after{display: table;
content: " ";}
.box.box-header>.fa,.box.box-header>.glyphicon{padding: 10px 10px 10px 10px;
}
.box.box-header.box-title{padding: 10px 10px 10px 0;
}
.box.box-header>.fa,.box.box-header>.glyphicon,.box.box-header.box-title{
display: inline-block;margin: 0;font-size: 18px;font-weight: 400;float: left;cursor: default;
}
.box.box-primary.box-header>.icon-status,.box.box-primary.box-header.box-title{
color: #3c8dbc;}
.box
.box-header
.box-tools
.dropdown
{padding: 5px 10px 5px 5px;}
.box.box-header.box-tools.dropdown{display: none;
}
.box.box-header.box-tools.dropdown.open,.box:hover.box-header
.box-tools.dropdown{display: inline-block;
}
.box.box-body{padding: 10px;
8/10/2019 Lampiran Source Code App
66/68
66
}
.box.box-footer{border-top: 1px solid #f4f4f4;padding: 10px;
background-color: #ffffff;height: 40px;
}
.box.box-header.box-tools.btn-custom{color: #333;background-color: #fff;
}
.box.box-header.box-tools.dropdown.dropdown-menu{left: -136px;top: 75%;
}
.box.box-header.box-tools.dropdowna.dropdown-toggle{color: #c1c1c1;
}
.box.box-header.box-tools.dropdowna:hover.dropdown-toggle,.box
.box-header.box-tools.dropdown.opena.dropdown-toggle{color: #adadad;
}
.box.box-primary{border-top-color: #3c8dbc;
}
.box.box-primary.box-header.box-tools.dropdowna.dropdown-toggle{
color: rgba(60, 141, 188, 0.8);}
.box.box-primary.box-header.box-tools.dropdowna:hover.dropdown-toggle,.box.box-primary.box-header.box-tools.dropdown.open
a.dropdown-toggle{color: #3c8dbc;
}
.box-tools.dropdown.open
.dropdown-menu
>
li:hover.delete
>
a{background: #d9534f;
color: #fff;}
51.styles/hack-boostrap.css
.bs-page-header{padding: 7px 20px 4px 20px;border-bottom: 1px solid #e7e7e7;background: #f7f7f7;
}
8/10/2019 Lampiran Source Code App
67/68
67
.row.newline{padding-bottom: 20px;
}
.blockquote-primary {
border-left: 5px solid #428bca;}
52.styles/tabs.css
ng-tabs {display: block;
}
ng-tabs.normal{background: #fff;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .26);margin-bottom: 20px;border-bottom-color: #f4f4f4;
}
ng-tabs.pull-body{background: #f7f7f7;
}
ng-tabs.normal>.nav-tabs{border-bottom-color: #f4f4f4;
}
ng-tabs.pull-body>.nav-tabs{border-bottom-color: #e7e7e7;
}
ng-tabs >.nav-tabs>li {margin-right: 5px;margin-bottom: -2px;-webkit-transition: border-top 1s;/* Safari 3.1 to 6.0 */transition: borde-top 1s;border-top: 3px solid transparent;
}
ng-tabs >.nav-tabs>li >a {-webkit-border-radius: 0 !important;-moz-border-radius: 0 !important;border-radius: 0 !important;
}
ng-tabs >.nav-tabs>li >a,ng-tabs >.nav-tabs>li >a:hover{margin: 0;background: transparent;
}
ng-tabs >.nav-tabs>li:not(.active)>a:hover,ng-tabs >.nav-tabs>
li:not(.active)>a:focus,ng-tabs >.nav-tabs>li:not(.active)>
a:active{border-color: transparent;
}
ng-tabs >.nav-tabs>li.active{border-top-color: #3c8dbc;
}
ng-tabs.pull-body>.nav-tabs>li.active{
8/10/2019 Lampiran Source Code App
68/68
border-top-color: #333;}
ng-tabs.pull-body>.nav-tabs>li >a {color: #777;
}
ng-tabs.pull-body>.nav-tabs>li >a:hover{color: #333;
}
ng-tabs.pull-body>.nav-tabs>li:active>a {color: #333;font-weight: 500;
}
ng-tabs >.nav-tabs>li.active>a,ng-tabs >.nav-tabs>li.active>
a:hover{border-top: 0;border-right-color: #f4f4f4;border-left-color: #f4f4f4;
}ng-tabs >.nav-tabs.pull-right{float: none!important;
}
ng-tabs >.nav-tabs.pull-right>li {float: right;
}
ng-tabs >.nav-tabs>li.header{font-size: 20px;font-weight: 400;line-height: 35px;padding: 0 10px;cursor: default;
color: #444;}
ng-tabs.pull-body>.nav-tabs>li.header{font-size: 18px;font-weight: 500;line-height: 35px;margin-top: 6px;margin-bottom: 6px;padding: 0 20px;/*cursor: default;color: #444;*/
}
ng-tabs >.tab-content>.tab-pane{
padding: 10px;background: #fff;
}
ng-tabs.pull-body>.nav>li >a {padding: 14px 15px;
}