Tuesday, 29 August 2023
Saturday, 26 August 2023
Monday, 21 August 2023
Thursday, 17 August 2023
Wednesday, 16 August 2023
Sistem Manajemen Aset
FITUR-FITUR AMTS (Asset Management and Tracking System)
• ROLE MANAGEMENT
Setiap user memiliki akses fitur-fitur tertentu, dan memberikan hak approval seperti sudah diatur di role management ini (misalakan untuk : opname, maintenance, upload master aset).
• LEVEL PELACAKAN
Filter pertanggung jawaban sebuah aset dapat ditentukan berdasarkan Holding Company, Perusahaan, branch, sub-branch, divisi, department, bahkan bisa untuk informasi Level informasi area, gedung, lantai, dan ruangan.
• REGISTRASI
Semua data aset yang masuk ke AMTS harus dipastikan terregistrasi dengan melakukan proses registrasi via mobile atau automatic register via proses upload data master aset.
• COST CENTER
Setiap aset di AMTS dapat ditentukan department “pemilik”nya, sehingga alokasi pertanggung jawaban jelas.
• LAMPIRAN ASET
Aset info dapat ditambahkan dengan lampiran file dokumen pdf, termasuk foto atau gambar aset yang dapat ditambahkan atau diperbarui saat asset opname dilakukan
• ASSET COMPONENT
Transaksi Aset Component digunakan untuk mendefinisikan aset-aset yang menjadi ‘child’/anak dari aset utama yang tidak dapat dipisahkan dari suatu aset utama.
• TEMPLATE DUPLIKASI ASET
Transaksi Template Duplikasi Aset dapat mempercepat proses registrasi aset dengan jenis dan info yang sama, sebagai contohnya: 25 unit PC dengan spesifikasi teknis yang sama dengan satu kali transaksi dan kemudian dapat menambahkan informasi tambahan lainnya.
• ASSET MOVEMENT & MUTASI ASET
Dengan adanya aplikasi transaksi movement di aplikasi mobile, maka perpindahan aset anda ke lokasi lain akan terus terlacak dan tidak akan kehilangan informasi keberadaannya.
• BORROW-RETURN
Transaksi Borrow-Return (Peminjaman Asset) akan mengingatkan peminjam aset dan yang menyetujui peminjaman tersebut dengan mengirimkan notifikasi via email ketika tanggal sudah mendekati/melewati overdue.
• SERVICE MONITORING
Berbagai aset biasanya memerlukan perawatan berkala dan perpanjangan dokumen penting, contohnya penggantian accu pada mobil operasional, service kendaraan, service AC, perpanjangan STNK, Perpanjangan polis asuransi kendaraan. Dengan fitur Notifikasi/Reminder, user yang sudah ditentukan akan mendapatkan email pengingat agar menjaga ketepatan waktu proses services yang harus di lakukan untuk asset tersebut.
• OPNAME REPORT
Untuk mempermudah stock opname dan identifikasi pertanggung jawaban aset di lokasi dapat dilakukakn dengan handheld aplikasi Android, atau akses web-version AMTS dengan browser apapun. Laporan dapat dieksport ke excel atau pdf sesuai dengan kebutuhan anda.
• INQUIRY
Dalam menu Inquiry, setiap user dapat memilih data report/inquiry data yang ingin ditampilkan berdasarkan sub-branch, lokasi, asset class, penanggungjawab, tanggal pembelian, dan lain-lain
• ASSET DISPOSAL
Jika suatu aset sudah tidak digunakan atau masa pemanfaatannya sudah habis atau tidak perlu dilacak lagi, maka dapat dieksekusi dengan transaksi Asset Disposal.
Referensi :
Tuesday, 15 August 2023
Entry form google sheet
Drive digital skill public app
https://www.bpwebs.com/crud-operations-on-google-sheets-with-online-forms/
Edit Response Form Google Sheet
/** * @license MIT * * © 2019-2020 xfanatical.com. All Rights Reserved. * * @since 1.1.2 interface fix * @since 1.1.1 Optimize performance (continued) * @since 1.1.0 Optimize performance * @since 1.0.0 Add all edit response urls and update new urls for new submissions */ function registerNewEditResponseURLTrigger() { // check if an existing trigger is set var existingTriggerId = PropertiesService.getUserProperties().getProperty('onFormSubmitTriggerID') if (existingTriggerId) { var foundExistingTrigger = false ScriptApp.getProjectTriggers().forEach(function (trigger) { if (trigger.getUniqueId() === existingTriggerId) { foundExistingTrigger = true } }) if (foundExistingTrigger) { return } } var trigger = ScriptApp.newTrigger('onFormSubmitEvent') .forSpreadsheet(SpreadsheetApp.getActive()) .onFormSubmit() .create() PropertiesService.getUserProperties().setProperty('onFormSubmitTriggerID', trigger.getUniqueId()) } function getTimestampColumn(sheet) { for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Timestamp') { return i } } return 1 } function getFormResponseEditUrlColumn(sheet) { var form = FormApp.openByUrl(sheet.getFormUrl()) for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Form Response Edit URL') { return i } } // get the last column at which the url can be placed. return Math.max(sheet.getLastColumn() + 1, form.getItems().length + 2) } /** * params: { sheet, form, formResponse, row } */ function addEditResponseURLToSheet(params) { if (!params.col) { params.col = getFormResponseEditUrlColumn(params.sheet) } var formResponseEditUrlRange = params.sheet.getRange(params.row, params.col) formResponseEditUrlRange.setValue(params.formResponse.getEditResponseUrl()) } function onOpen() { var menu = [{ name: 'Add Form Edit Response URLs', functionName: 'setupFormEditResponseURLs' }] SpreadsheetApp.getActive().addMenu('Forms', menu) } function setupFormEditResponseURLs() { var sheet = SpreadsheetApp.getActiveSheet() var spreadsheet = SpreadsheetApp.getActive() var formURL = sheet.getFormUrl() if (!formURL) { SpreadsheetApp.getUi().alert('No Google Form associated with this sheet. Please connect it from your Form.') return } var form = FormApp.openByUrl(formURL) // setup the header if not existed var headerFormEditResponse = sheet.getRange(1, getFormResponseEditUrlColumn(sheet)) var title = headerFormEditResponse.getValue() if (!title) { headerFormEditResponse.setValue('Form Response Edit URL') } var timestampColumn = getTimestampColumn(sheet) var editResponseUrlColumn = getFormResponseEditUrlColumn(sheet) var timestampRange = sheet.getRange(2, timestampColumn, sheet.getLastRow() - 1, 1) var editResponseUrlRange = sheet.getRange(2, editResponseUrlColumn, sheet.getLastRow() - 1, 1) if (editResponseUrlRange) { var editResponseUrlValues = editResponseUrlRange.getValues() var timestampValues = timestampRange.getValues() for (var i = 0; i < editResponseUrlValues.length; i += 1) { var editResponseUrlValue = editResponseUrlValues[i][0] var timestampValue = timestampValues[i][0] if (editResponseUrlValue === '') { var timestamp = new Date(timestampValue) if (timestamp) { var formResponse = form.getResponses(timestamp)[0] editResponseUrlValues[i][0] = formResponse.getEditResponseUrl() var row = i + 2 if (row % 10 === 0) { spreadsheet.toast('processing rows ' + row + ' to ' + (row + 10)) editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } } } } editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } registerNewEditResponseURLTrigger() SpreadsheetApp.getUi().alert('You are all set! Please check the Form Response Edit URL column in this sheet. Future responses will automatically sync the form response edit url.') } function onFormSubmitEvent(e) { var sheet = e.range.getSheet() var form = FormApp.openByUrl(sheet.getFormUrl()) var formResponse = form.getResponses().pop() addEditResponseURLToSheet({ sheet: sheet, form: form, formResponse: formResponse, row: e.range.getRow(), }) }
/** * @license MIT * * © 2019-2020 xfanatical.com. All Rights Reserved. * * @since 1.1.2 interface fix * @since 1.1.1 Optimize performance (continued) * @since 1.1.0 Optimize performance * @since 1.0.0 Add all edit response urls and update new urls for new submissions */ function registerNewEditResponseURLTrigger() { // check if an existing trigger is set var existingTriggerId = PropertiesService.getUserProperties().getProperty('onFormSubmitTriggerID') if (existingTriggerId) { var foundExistingTrigger = false ScriptApp.getProjectTriggers().forEach(function (trigger) { if (trigger.getUniqueId() === existingTriggerId) { foundExistingTrigger = true } }) if (foundExistingTrigger) { return } } var trigger = ScriptApp.newTrigger('onFormSubmitEvent') .forSpreadsheet(SpreadsheetApp.getActive()) .onFormSubmit() .create() PropertiesService.getUserProperties().setProperty('onFormSubmitTriggerID', trigger.getUniqueId()) } function getTimestampColumn(sheet) { for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Timestamp') { return i } } return 1 } function getFormResponseEditUrlColumn(sheet) { var form = FormApp.openByUrl(sheet.getFormUrl()) for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Form Response Edit URL') { return i } } // get the last column at which the url can be placed. return Math.max(sheet.getLastColumn() + 1, form.getItems().length + 2) } /** * params: { sheet, form, formResponse, row } */ function addEditResponseURLToSheet(params) { if (!params.col) { params.col = getFormResponseEditUrlColumn(params.sheet) } var formResponseEditUrlRange = params.sheet.getRange(params.row, params.col) formResponseEditUrlRange.setValue(params.formResponse.getEditResponseUrl()) } function onOpen() { var menu = [{ name: 'Add Form Edit Response URLs', functionName: 'setupFormEditResponseURLs' }] SpreadsheetApp.getActive().addMenu('Forms', menu) } function setupFormEditResponseURLs() { var sheet = SpreadsheetApp.getActiveSheet() var spreadsheet = SpreadsheetApp.getActive() var formURL = sheet.getFormUrl() if (!formURL) { SpreadsheetApp.getUi().alert('No Google Form associated with this sheet. Please connect it from your Form.') return } var form = FormApp.openByUrl(formURL) // setup the header if not existed var headerFormEditResponse = sheet.getRange(1, getFormResponseEditUrlColumn(sheet)) var title = headerFormEditResponse.getValue() if (!title) { headerFormEditResponse.setValue('Form Response Edit URL') } var timestampColumn = getTimestampColumn(sheet) var editResponseUrlColumn = getFormResponseEditUrlColumn(sheet) var timestampRange = sheet.getRange(2, timestampColumn, sheet.getLastRow() - 1, 1) var editResponseUrlRange = sheet.getRange(2, editResponseUrlColumn, sheet.getLastRow() - 1, 1) if (editResponseUrlRange) { var editResponseUrlValues = editResponseUrlRange.getValues() var timestampValues = timestampRange.getValues() for (var i = 0; i < editResponseUrlValues.length; i += 1) { var editResponseUrlValue = editResponseUrlValues[i][0] var timestampValue = timestampValues[i][0] if (editResponseUrlValue === '') { var timestamp = new Date(timestampValue) if (timestamp) { var formResponse = form.getResponses(timestamp)[0] editResponseUrlValues[i][0] = formResponse.getEditResponseUrl() var row = i + 2 if (row % 10 === 0) { spreadsheet.toast('processing rows ' + row + ' to ' + (row + 10)) editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } } } } editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } registerNewEditResponseURLTrigger() SpreadsheetApp.getUi().alert('You are all set! Please check the Form Response Edit URL column in this sheet. Future responses will automatically sync the form response edit url.') } function onFormSubmitEvent(e) { var sheet = e.range.getSheet() var form = FormApp.openByUrl(sheet.getFormUrl()) var formResponse = form.getResponses().pop() addEditResponseURLToSheet({ sheet: sheet, form: form, formResponse: formResponse, row: e.range.getRow(), }) }
Ref :
https://xfanatical.com/blog/how-to-edit-google-forms-responses-in-the-spreadsheet/
Isian Drop Down dari Google Sheet
Sunday, 13 August 2023
Saturday, 12 August 2023
Friday, 11 August 2023
Monday, 7 August 2023
Saturday, 5 August 2023
DT PLUSK 1
https://okursus.com/kursus-bisnis-baju-seragaman/ https://www.youtube.com/watch?v=dlRF12cruA8
-
https://www.youtube.com/live/lVwObJjblAU?si=T-Yk1_yuGxaGWD9Y https://docs.google.com/document/d/1plxfFnzE97cei98UhZjAUdztqICthKilAoMoy-1kG...
-
Tutorial kali ini, kita akan mencoba setup Virtual Private Server (VPS) di DigitalOcean. VPS sendiri adalah layanan virtual machine (VM) yan...