diff --git a/.gitignore b/.gitignore index d333b23..cc3686e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json +#public db file +public/sqlite + # Runtime data pids *.pid diff --git a/config/config.js b/config/config.js new file mode 100644 index 0000000..f1f4a4c --- /dev/null +++ b/config/config.js @@ -0,0 +1,46 @@ +var createError = require('http-errors'); +var express = require('express'); +var path = require('path'); +var cookieParser = require('cookie-parser'); +var logger = require('morgan'); + +var dataGetRouter = require('../routes/dataget'); +var dataPostRouter = require('../routes/datapost'); +var hbsHelper = require('../util/handlebars_helper'); +//var usersRouter = require('../routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, '../views')); +app.set('view engine', 'hbs'); + + + +app.use(logger('dev')); +app.use(express.json({limit: '400mb'})); +app.use(express.urlencoded({limit: '400mb' ,parameterLimit: 4000000 , extended : false})); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, '../public'))); + +app.use('/', dataGetRouter); +app.use('/', dataPostRouter); +//app.use('/users', usersRouter); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/config/oracle.js b/config/oracle.js new file mode 100644 index 0000000..4dafd71 --- /dev/null +++ b/config/oracle.js @@ -0,0 +1,12 @@ +var user = 'MOBAPP_PUBLIC_USER'; +var password = 'VPyKPAqRrG36'; +var connectString = '172.16.0.2'; +//var connectString = 'r1.thamrin.co.id' +var dbName = 'tbslive'; + + +module.exports.oracleConfig = { + user : user, + password : password, // mypw contains the hr schema password + connectString : `${connectString}/${dbName}` +} \ No newline at end of file diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..0d17819 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,32 @@ +module.exports = { + apps : [{ + name: 'unit-stock', + script: 'server.js', + + // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/ + args: 'one two', + instances: 4, + autorestart: true, + watch: false, + max_memory_restart: '1G', + env: { + NODE_ENV: 'development', + PORT: 14002 + }, + env_production: { + NODE_ENV: 'production', + PORT: 14002 + } + }], + + deploy : { + production : { + user : 'node', + host : '212.83.163.1', + ref : 'origin/master', + repo : 'git@github.com:repo.git', + path : '/var/www/production', + 'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production' + } + } +}; diff --git a/model/oracleModel.js b/model/oracleModel.js new file mode 100644 index 0000000..5aa74c7 --- /dev/null +++ b/model/oracleModel.js @@ -0,0 +1,481 @@ +var oracleFunc = require('../util/db_oracle.js'); +const oracledb = require('oracledb'); +const fs = require('fs'); +var moment = require('moment'); + +var owner = 'TBS'; + + + + + +async function getDataCabangByUser(company,user){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var query = ` + SELECT NAMA_CABANG AS DISPLAY_VALUE, CABANG_ID AS RETURN_VALUE + FROM ${owner}.CABANG + WHERE COMPANY = :COMPANY + AND ${owner}.User_Per_Cabang_API.Is_User_Available(company, cabang_id, :USERNAME) = 1 + ORDER BY NAMA_CABANG + `; + + var params = {"COMPANY" : company , "USERNAME" : user}; + console.log(params); + var result = await oracleFunc.getQueryData(conn,query,params); + + await oracleFunc.doRelease(conn); + return {"STATUS" : 1 ,"DATA" : result}; + } + catch(e){ + await oracleFunc.doRelease(conn); + return {"STATUS" : 0 , "DATA" : e} + } +} + + +async function getDataUser(user='',pass=''){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + + var checkView2 = ` + select ${owner}.UTILS_API.Is_View_Available('STOCK_TAKING_UNIT_MOB_APP', :USERNAME) LOGIN_STATUS from dual + `; + var paramView = {"USERNAME" : user}; + var resultView = await oracleFunc.getQueryData(conn,checkView2,paramView); + if(resultView[0]["LOGIN_STATUS"] == 'FALSE') throw 'Username or password incorrect !' + + + var checkQuery = ` + select ${owner}.Mobile_APP_Utils_API.Sales_Mobile_Auth(:USERNAME, :PASSWORD) data from dual + ` + var params = {"USERNAME" : user , "PASSWORD" : pass}; + var result = await oracleFunc.getQueryData(conn,checkQuery,params); + var dataUser = JSON.parse(result[0]["DATA"]); + if(dataUser["status"] == "ERR") throw dataUser["info"]; + + await oracleFunc.doRelease(conn); + + return {"STATUS" : 1,"DATA": {'COMPANY' : dataUser["company"],'USER' : dataUser["login_db_user"]}}; + } + catch(e){ + await oracleFunc.doRelease(conn); + return {"STATUS" : 0 , "DATA" : e}; + } + +} + + + +async function getDataCabang(company = '%',cabangId = '%'){ + var query = `select + company, + cabang_id, + nama_cabang, + latitude, + longitude + from ${owner}.cabang + where company like :COMPANY + and cabang_id like :CABANG_ID`; + var params = {"COMPANY" : company , "CABANG_ID" : cabangId}; + var result = await oracleFunc.getData(query,params); + return result; +} + + +async function getStateStockTaking(company, stockTakingId){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var query = ` + select ${owner}.Stock_Taking_Unit_API.Get_Status_Stock_Taking( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID) state from dual + `; + var params = {"COMPANY" : company , "STOCK_TAKING_UNIT_ID" : stockTakingId}; + var result = await oracleFunc.getQueryData(conn,query,params); + + await oracleFunc.doRelease(conn); + return {"STATUS" : 1 , "DATA" : result[0]}; + } + catch(e){ + await oracleFunc.doRelease(conn); + return {"STATUS" : 0 , "DATA" : e}; + } + +} + + +async function getActiveStockTakingByCabang(company, cabangId){ + let conn; + try { + conn = await oracleFunc.getConnection(); + var query = ` + SELECT * + FROM ( + SELECT + stock_taking_unit_id, + state + from ${owner}.stock_taking_unit + where company = :COMPANY + and cabang_id = :CABANG_ID + and state IN ('Open','Submitted') + order by tgl_start desc + ) + WHERE rownum = 1 + `; + + var paramsQuery = {"COMPANY" : company , "CABANG_ID" : cabangId}; + var result = await oracleFunc.getQueryData(conn,query,paramsQuery); + var a = result[0]; + + await oracleFunc.doRelease(conn); + return a; + } + + catch(e){ + await oracleFunc.doRelease(conn); + throw e; + } +} + +async function getDataUnit(conn,company,cabangId){ + var query = `SELECT + company, + cabang_id, + mesin, + kode, + rangka, + tipe, + warna, + tahun, + state + FROM ${owner}.unit_baru + WHERE company = :COMPANY + AND cabang_id = :CABANG_ID + AND state IN ('Ready','OnChannel') + `; + + var params = {"COMPANY" : company,"CABANG_ID":cabangId}; + var result = await oracleFunc.getQueryData(conn,query,params); + return result; +} + +async function submitStockTaking(company,stockTakingId){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var query = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_API.Call_Submit( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID); + END; + `; + + var params = {"COMPANY" : company , "STOCK_TAKING_UNIT_ID" : stockTakingId}; + console.log(params); + await oracleFunc.runQueryData(conn,query,params); + await oracleFunc.doCommit(conn); + await oracleFunc.doRelease(conn); + + return {"STATUS" : 1 ,"DATA" : 'Stock Taking Submit Completed '}; + } + catch(e){ + await oracleFunc.doRelease(conn); + return {"STATUS" : 0 , "DATA" : e}; + } +} + + + +async function prepareStockCollection(company = '' , cabangId = ''){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var queryStockUnit = ` + BEGIN + ${owner}.Stock_Taking_Unit_API.Create_Update_Record( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID, + tgl_stock_taking_ => TO_DATE(:TGL_STOCK_TAKING,'DD-MM-YYYY'), + tgl_start_ => TO_DATE(:TGL_START,'DD-MM-YYYY HH24:MI:SS'), + tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'), + cabang_id_ => :CABANG_ID); + END;`; + + var paramStockUnit = { + "COMPANY" : company, + "STOCK_TAKING_UNIT_ID" : {dir: oracledb.BIND_OUT}, + "TGL_STOCK_TAKING" : moment().format('DD-MM-YYYY'), + "TGL_START" : moment().format('DD-MM-YYYY HH:mm:ss'), + "TGL_SELESAI" : null, + "CABANG_ID" : cabangId + }; + + var resultStockUnit = await oracleFunc.runQueryData(conn,queryStockUnit,paramStockUnit); + var stockTakingUnitId = resultStockUnit["outBinds"]["STOCK_TAKING_UNIT_ID"]; + var jenisFoto = [{"NO_URUT" : 1 , "JENIS" : "NOMOR RANGKA" }, + {"NO_URUT" : 2 , "JENIS" : "TAMPAK SAMPING"}]; + + + + var paramsUnitDet = []; + var paramsUnitDetPic = []; + var dataUnitCabang = await getDataUnit(conn,company,cabangId); + for(var i = 0 ; i < dataUnitCabang.length ; i ++){ + var temp = { + "COMPANY" : company, + "STOCK_TAKING_ID" : stockTakingUnitId, + "MESIN" : dataUnitCabang[i]["MESIN"], + "FLAG_REJECT" : "FALSE", + "KETERANGAN" : null + }; + paramsUnitDet.push(temp); + for ( var j = 0 ; j < jenisFoto.length ; j++){ + var tempPic = { + "COMPANY" : company, + "STOCK_TAKING_ID" : stockTakingUnitId, + "MESIN" : dataUnitCabang[i]["MESIN"], + "NO_URUT" : jenisFoto[j]["NO_URUT"], + "JENIS" : jenisFoto[j]["JENIS"], + "LATITUDE" : null, + "LONGITUDE" : null, + "LOB_ID" : null + } + paramsUnitDetPic.push(tempPic); + } + } + + var queryStockUnitDet = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_DET_API.Create_Update_Record( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_ID, + mesin_ => :MESIN, + flag_reject_ => :FLAG_REJECT, + keterangan_ => :KETERANGAN); + END; + `; + + await oracleFunc.runQueryMany(conn,queryStockUnitDet,paramsUnitDet); + + var queryStockUnitPic = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_DET_PIC_API.Create_Update_Record( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_ID, + mesin_ => :MESIN, + no_urut_ => :NO_URUT, + jenis_ => :JENIS, + latitude_ => :LATITUDE, + longitude_ => :LONGITUDE, + lob_id_ => :LOB_ID + ); + END; + `; + + + await oracleFunc.runQueryMany(conn,queryStockUnitPic,paramsUnitDetPic); + + await oracleFunc.doCommit(conn); + await oracleFunc.doRelease(conn); + return {"stockTakingUnitId" : stockTakingUnitId , dataUnitCabang : dataUnitCabang , + dataUnitPic : paramsUnitDetPic , jenisFoto : jenisFoto}; + } + catch(e){ + oracleFunc.doRollBack(conn); + throw e; + } +} + +async function getActiveStockCollection(company = '' , cabangId = '',stockTakingUnitId = ''){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var queryDataUnit = ` + select + a.company, + a.stock_taking_unit_id, + a.mesin, + b.kode, + b.rangka, + b.tipe, + b.warna, + b.tahun, + b.state + from ${owner}.stock_taking_unit_det a LEFT JOIN ${owner}.unit_baru b + ON a.company = b.company + and a.mesin = b.mesin + and b.cabang_id = :CABANG_ID + where a.company = :COMPANY + and a.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID + and a.mesin NOT IN (select mesin from ${owner}.stock_taking_unit_det_pic c + where c.COMPANY = :COMPANY + AND c.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID + AND lob_id IS NOT NULL + ) + `; + + var paramsDataUnit = { + "COMPANY" : company, + "CABANG_ID" : cabangId, + "STOCK_TAKING_UNIT_ID" : stockTakingUnitId + }; + var dataUnit = await oracleFunc.getQueryData(conn,queryDataUnit,paramsDataUnit); + + + var queryDataUnitPic = ` + SELECT + Company, + stock_taking_unit_id, + mesin, + no_urut, + jenis, + latitude, + longitude, + lob_id + from ${owner}.stock_taking_unit_det_pic + where company = :COMPANY + and stock_taking_unit_id = :STOCK_TAKING_UNIT_ID + and lob_id IS NULL + + `; + + var paramsDataUnitPic = { + "COMPANY" : company, + "STOCK_TAKING_UNIT_ID" : stockTakingUnitId + }; + + var dataUnitPic = await oracleFunc.getQueryData(conn,queryDataUnitPic,paramsDataUnitPic); + + var jenisFoto = [{"NO_URUT" : 1 , "JENIS" : "NOMOR RANGKA" }, + {"NO_URUT" : 2 , "JENIS" : "TAMPAK SAMPING"}]; + + + await oracleFunc.doRelease(conn); + + return {"stockTakingUnitId" : stockTakingUnitId , dataUnitCabang : dataUnit , + dataUnitPic : dataUnitPic , jenisFoto : jenisFoto}; + + + } + catch(e){ + await oracleFunc.doRelease(conn); + throw e; + } +} + + +async function insertStockUnitData(stockTakingData,dataUnit,dataFoto){ + let conn; + try{ + conn = await oracleFunc.getConnection(); + var queryUpdateTglSelesai = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_API.Update_Tgl_Selesai( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID, + tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS')); + END; + `; + var paramsUpdateTglSelesai = { + "COMPANY" : stockTakingData["company"], + "STOCK_TAKING_UNIT_ID" : stockTakingData["stockTakingUnitId"], + "TGL_SELESAI" : moment().format('DD-MM-YYYY HH:mm:ss') + } + + await oracleFunc.runQueryData(conn,queryUpdateTglSelesai,paramsUpdateTglSelesai); + + + if(dataUnit.length > 0){ + var queryUpdateKeteranganDet = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_DET_API.Update_Keterangan( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID, + mesin_ => :MESIN, + keterangan_ => :KETERANGAN); + END; + `; + var paramsUpdateKeteranganDet = []; + for(var i = 0 ; i < dataUnit.length ; i++){ + var temp = { + "COMPANY" : stockTakingData["company"], + "STOCK_TAKING_UNIT_ID" : stockTakingData["stockTakingUnitId"], + "MESIN" : dataUnit[i]["MESIN"], + "KETERANGAN" : dataUnit[i]["TIMESTAMP"] + } + paramsUpdateKeteranganDet.push(temp); + } + + await oracleFunc.runQueryMany(conn,queryUpdateKeteranganDet,paramsUpdateKeteranganDet); + } + + + if(dataFoto.length > 0){ + var queryStockUnitPic = ` + BEGIN + ${owner}.STOCK_TAKING_UNIT_UTILS_API.Create_Stock_Taking_Blob( + company_ => :COMPANY, + stock_taking_unit_id_ => :STOCK_TAKING_ID, + mesin_ => :MESIN, + no_urut_ => :NO_URUT, + jenis_ => :JENIS, + latitude_ => :LATITUDE, + longitude_ => :LONGITUDE, + blob_file_ => :BLOB_FILE + ); + END; + `; + var paramsUnitDetPic = []; + for(var j = 0 ; j < dataFoto.length ; j++){ + var temp = { + "COMPANY" : stockTakingData["company"], + "STOCK_TAKING_ID" : stockTakingData["stockTakingUnitId"], + "MESIN" : dataFoto[j]["MESIN"], + "NO_URUT" : dataFoto[j]["NO_URUT"], + "JENIS" : dataFoto[j]["JENIS"], + "LATITUDE" : dataFoto[j]["LATITUDE"], + "LONGITUDE" : dataFoto[j]["LONGITUDE"], + "BLOB_FILE" : dataFoto[j]["BLOB_FILE"] + } + paramsUnitDetPic.push(temp); + } + + + await oracleFunc.runQueryMany(conn,queryStockUnitPic,paramsUnitDetPic); + + } + + + await oracleFunc.doCommit(conn) + await oracleFunc.doRelease(conn); + + return 'Data has been processed'; + } + + catch(e){ + oracleFunc.doRollBack(conn); + throw e; + } +} + + + + +module.exports = { + getDataCabang : getDataCabang, + getDataUnit : getDataUnit, + getDataUser : getDataUser, + prepareStockCollection : prepareStockCollection, + insertStockUnitData : insertStockUnitData, + getActiveStockTakingByCabang : getActiveStockTakingByCabang, + getActiveStockCollection : getActiveStockCollection, + getDataCabangByUser : getDataCabangByUser, + submitStockTaking : submitStockTaking, + getStateStockTaking : getStateStockTaking +} + diff --git a/model/sqliteModel.js b/model/sqliteModel.js new file mode 100644 index 0000000..3c51633 --- /dev/null +++ b/model/sqliteModel.js @@ -0,0 +1,348 @@ +const sqlite3 = require('sqlite3').verbose(); +var sqliteFunc = require('../util/db_sqlite.js'); +var oracleModel = require('./oracleModel.js'); +const oracledb = require('oracledb'); +const path = require('path'); +const fs = require('fs'); + +async function insertRefTable(db,dataUnitCabang){ + try{ + var runQuery = 'insert into refTable(mesin,tipe,rangka,warna,kode,tahun,state) VALUES '; + for(var i = 0 ; i < dataUnitCabang.length ; i ++){ + if(i == dataUnitCabang.length -1){ + runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', + '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}')`); + } + else { + runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', + '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}'), `); + } + + } + var insertTable = await sqliteFunc.runQuery(db,runQuery); + if(insertTable["STATUS"] == 0) throw insertTable["DATA"] + } + catch(e){ + throw e; + } + +} + + +async function insertJenisFoto(db,jenisFoto){ + try{ + var valBlobTable = ''; + for(var i = 0 ; i < jenisFoto.length ; i++){ + if(i == jenisFoto.length -1) { + valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}')`); + } + else{ + valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}'),`); + } + + } + var insertJenisBlobQuery = ` + Insert Into jenisBlobTable Values ${valBlobTable} + + `; + + var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); + if(insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"] + } + catch(e){ + throw e; + } +} + + +async function insertUnitDetPic(db,dataUnitPic){ + try{ + var valDetPic = ''; + for(var i = 0 ; i < dataUnitPic.length ; i++){ + if(i == dataUnitPic.length -1) { + valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', + null,'${dataUnitPic[i]["JENIS"]}',null,null)`); + } + else{ + valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', + null,'${dataUnitPic[i]["JENIS"]}',null,null),`); + } + + } + var insertJenisBlobQuery = ` + Insert Into blobTable(MESIN,NO_URUT,BLOB_FILE,JENIS,LATITUDE,LONGITUDE) Values ${valDetPic}; + + `; + + var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); + if(insertBlobQuery["STATUS"] == 0 ) throw insertBlobQuery["DATA"] + } + catch(e){ + throw e; + } +} + +async function getValueTableByName(db,name){ + var query = ` + select VALUE from + valueTable + where name = '${name}' + LIMIT 1 + `; + + var selectInsertTable = await sqliteFunc.selectQuery(db,query); + if(selectInsertTable["STATUS"] == 0) throw Error(selectInsertTable["DATA"]); + var data = selectInsertTable["DATA"]; + var value = data[0]["VALUE"]; + return value; + +} +async function getInsertedData(db){ + try{ + var query = ` + select + MESIN, + TIMESTAMP + from refTable + where flag_insert = 'TRUE' + `; + + var selectTimestampInsert = await sqliteFunc.selectQuery(db,query); + if(selectTimestampInsert["STATUS"] == 0) throw selectTimestampInsert["DATA"]; + return selectTimestampInsert["DATA"]; + } + catch(e){ + throw e; + } +} + +async function getInsertedPic(db){ + try{ + var query = ` + select + BLOB_FILE, + jenis, + latitude, + LONGITUDE, + MESIN, + NO_URUT + from blobTable where + blob_file IS NOT NULL + `; + var selectBlobTable = await sqliteFunc.selectQuery(db,query); + if(selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"]; + return selectBlobTable["DATA"]; + } + catch(e){ + throw e; + } + +} + +async function unpackAndInsert(dbPath = null, company , cabangId){ + let db; + try{ + //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`); + db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); + var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID'); + var insertedData = await getInsertedData(db); + var insertedPic = await getInsertedPic(db); + var stockTakingData = {"company" : company , "cabangId" : cabangId, "stockTakingUnitId" : stockTakingUnitId}; + var result = await oracleModel.insertStockUnitData(stockTakingData,insertedData,insertedPic); + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + fs.unlinkSync(dbPath); + resolve({"STATUS" : 1 ,"DATA" : result}); + }) + }) + + } + else{ + fs.unlinkSync(dbPath); + return {"STATUS" : 1 ,"DATA" : result}; + } + + } + catch(e){ + console.log(e); + + if(db.open){ + + return new Promise(function(resolve,reject){ + db.close(function(data){ + + resolve({"STATUS" : 0 ,"DATA" : e}); + }) + }) + // db.close(function(data){ + // return {"STATUS" : 0 ,"DATA" : e}; + // }) + } + else{ + return {"STATUS" : 0 ,"DATA" : e}; + } + + } +} + + // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`); + // unpackAndInsert(dbPath,'TBS','02'); + + + +async function CreateDataCollection(company = '' , cabangId = ''){ + var dbPath; + let db; + try { + var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); + var oracleData; + if(checkStockTaking == undefined){ + oracleData = await oracleModel.prepareStockCollection(company,cabangId); + } + else { + let state = checkStockTaking["STATE"]; + if(state == 'Submitted'){ + throw 'Gagal dalam mengambil data, mohon menunggu review data yang disubmit sebelumnya.'; + } + oracleData = await oracleModel.getActiveStockCollection(company,cabangId,checkStockTaking["STOCK_TAKING_UNIT_ID"]); + } + + var stockTakingUnitId = oracleData["stockTakingUnitId"]; + var dataUnitCabang = oracleData["dataUnitCabang"]; + var dataUnitPic = oracleData["dataUnitPic"]; + var jenisFoto = oracleData["jenisFoto"]; + var dirPath = path.join(__dirname , `../public/sqlite/db/${company}/${cabangId}`); + var resultDirPath = fs.mkdirSync(dirPath, { recursive: true }); + + + var d = new Date(); + var n = d.getTime(); + var dbName = `${n}.db`; + + dbPath = path.join(dirPath ,dbName); + db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); + + // Create Table Reference + var refTableQuery = `CREATE TABLE refTable( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + MESIN TEXT, + TIPE TEXT, + RANGKA TEXT, + WARNA TEXT, + KODE TEXT, + TAHUN TEXT, + STATE TEXT, + TIMESTAMP TEXT DEFAULT NULL, + FLAG_INSERT TEXT DEFAULT 'FALSE' + )`; + var createRefTable = await sqliteFunc.runQuery(db,refTableQuery); + if(createRefTable["STATUS"] == 0) throw createRefTable; + + // var insertTableQuery = `CREATE TABLE insertTable( + // ID INTEGER PRIMARY KEY AUTOINCREMENT, + // MESIN TEXT, + // TIMESTAMP TEXT + // )`; + + // var createInsertTable = await sqliteFunc.runQuery(db,insertTableQuery); + // if(createInsertTable["STATUS"] == 0) throw createInsertTable; + + var insertTableBlob = `CREATE TABLE blobTable( + BLOB_ID INTEGER PRIMARY KEY AUTOINCREMENT, + MESIN TEXT, + NO_URUT TEXT, + BLOB_FILE BLOB, + JENIS TEXT, + LATITUDE TEXT, + LONGITUDE TEXT + )`; + + + var createBlobTable = await sqliteFunc.runQuery(db,insertTableBlob); + if(createBlobTable["STATUS"] == 0) throw createInsertTable; + + + var valueTableQuery = ` + CREATE TABLE valueTable( + NAME TEXT, + VALUE TEXT + ) + `; + + var createValueTable = await sqliteFunc.runQuery(db,valueTableQuery); + if(createValueTable["STATUS"] == 0) throw createValueTable; + + var queryValueTableInsert = `insert into valueTable(name,value) VALUES ('STOCK_TAKING_UNIT_ID',${stockTakingUnitId})`; + var insertValueTableInsert = await sqliteFunc.runQuery(db,queryValueTableInsert); + if(insertValueTableInsert["STATUS"] == 0) throw insertValueTableInsert; + + + var jenisBlobQuery = ` + CREATE TABLE jenisBlobTable( + NO_URUT TEXT, + VALUE TEXT + ) + `; + var createJenisBlobTable = await sqliteFunc.runQuery(db,jenisBlobQuery); + if(createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable; + + //----------- JENIS FOTO---------------------------------------------- + await insertJenisFoto(db,jenisFoto); + + if(dataUnitCabang.length > 0){ + //----------- REF TABLE---------------------------------------------- + await insertRefTable(db,dataUnitCabang); + + //----------- UNIT DET PIC---------------------------------------------- + await insertUnitDetPic(db,dataUnitPic); + } + + + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + resolve({"STATUS" : 1 ,"DATA" : dbPath}); + }) + }); + // db.close(function(data){ + // return {"STATUS" : 1, "DATA" : dbPath}; + // }) + } + else{ + return {"STATUS" : 1, "DATA" : dbPath}; + } + + } + catch(e){ + if(db){ + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + fs.unlinkSync(dbPath); + resolve({"STATUS" : 0 ,"DATA" : e}); + }) + }); + // db.close(function(data){ + // fs.unlinkSync(dbPath); + // return {"STATUS" : 0 , "DATA": e}; + // }); + } + } + + else{ + if(dbPath){ + fs.unlinkSync(dbPath); + } + console.log(e); + return {"STATUS" : 0 , "DATA": e}; + } + } +} +//CreateDataCollection("TBS",'02'); + + +module.exports = { + CreateDataCollection : CreateDataCollection, + unpackAndInsert : unpackAndInsert +}; \ No newline at end of file diff --git a/oracle_API/InconNew.cre b/oracle_API/InconNew.cre new file mode 100644 index 0000000..33e3d28 --- /dev/null +++ b/oracle_API/InconNew.cre @@ -0,0 +1,535 @@ + +CREATE TABLE hasil_kunjungan_tagihan_tab + ( company VARCHAR2(50) NOT NULL, + hasil_kunjungan_tagihan_id VARCHAR2(30) NOT NULL, + keterangan VARCHAR2(500) NULL, + jenis VARCHAR2(500) NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE hasil_kunjungan_tagihan_tab + ADD ( CONSTRAINT hasil_kunjungan_tagihan_pk PRIMARY KEY ( company, hasil_kunjungan_tagihan_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE jenis_slip_tab + ( company VARCHAR2(50) NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE jenis_slip_tab + ADD ( CONSTRAINT jenis_slip_pk PRIMARY KEY ( company, jenis_slip) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE kuitansi_auto_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + no_kuitansi VARCHAR2(50) NOT NULL, + tanggal DATE NOT NULL, + asal_transaksi VARCHAR2(50) NOT NULL, + jenis_kuitansi VARCHAR2(50) NOT NULL, + ref1 VARCHAR2(50) NULL, + ref2 VARCHAR2(50) NULL, + ref3 VARCHAR2(50) NULL, + ref4 VARCHAR2(50) NULL, + ref5 VARCHAR2(50) NULL, + create_date DATE NOT NULL, + create_by VARCHAR2(50) NOT NULL, + cancel_date DATE NULL, + cancel_by VARCHAR2(50) NULL, + keterangan VARCHAR2(200) NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE kuitansi_auto_tab + ADD ( CONSTRAINT kuitansi_auto_pk PRIMARY KEY ( company, cabang_id, no_kuitansi) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE kuitansi_auto_det_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + no_kuitansi VARCHAR2(50) NOT NULL, + no_urut NUMBER NOT NULL, + detail VARCHAR2(2000) NOT NULL, + nominal NUMBER NOT NULL, + jenis_transaksi VARCHAR2(50) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE kuitansi_auto_det_tab + ADD ( CONSTRAINT kuitansi_auto_det_pk PRIMARY KEY ( company, cabang_id, no_kuitansi, no_urut) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE kuitansi_auto_slip_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + no_kuitansi VARCHAR2(50) NOT NULL, + no NUMBER NOT NULL, + cabang_id_slip VARCHAR2(30) NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + no_slip VARCHAR2(30) NOT NULL, + flag_void VARCHAR2(5) NOT NULL, + keterangan VARCHAR2(200) NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE kuitansi_auto_slip_tab + ADD ( CONSTRAINT kuitansi_auto_slip_pk PRIMARY KEY ( company, cabang_id, no_kuitansi, no) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_slip_tab + ( company VARCHAR2(50) NOT NULL, + mgn_slip_id VARCHAR2(50) NOT NULL, + tgl_transaksi DATE NULL, + asal VARCHAR2(100) NULL, + tujuan VARCHAR2(100) NOT NULL, + mgn_slip_id_ref VARCHAR2(50) NULL, + created_by VARCHAR2(50) NULL, + created_date DATE NULL, + approved_by VARCHAR2(50) NULL, + approved_date DATE NULL, + jenis_mutasi_slip VARCHAR2(20) NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_slip_tab + ADD ( CONSTRAINT management_slip_pk PRIMARY KEY ( company, mgn_slip_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_slip_det_tab + ( company VARCHAR2(50) NOT NULL, + mgn_slip_id VARCHAR2(50) NOT NULL, + no_urut NUMBER NOT NULL, + no_awal VARCHAR2(30) NOT NULL, + no_akhir VARCHAR2(30) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_slip_det_tab + ADD ( CONSTRAINT management_slip_det_pk PRIMARY KEY ( company, mgn_slip_id, no_urut) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_stok_tts_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + mgn_stok_tts_id VARCHAR2(50) NOT NULL, + tanggal DATE NOT NULL, + no_slip_awal VARCHAR2(30) NULL, + jumlah_slip NUMBER NOT NULL, + created_by VARCHAR2(50) NULL, + created_date DATE NULL, + approved_by VARCHAR2(50) NULL, + approved_date DATE NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_stok_tts_tab + ADD ( CONSTRAINT management_stok_tts_pk PRIMARY KEY ( company, cabang_id, mgn_stok_tts_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_stok_tts_det_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + mgn_stok_tts_id VARCHAR2(50) NOT NULL, + no_tts NUMBER NOT NULL, + printed_by VARCHAR2(50) NULL, + printed_date DATE NULL, + void_by VARCHAR2(50) NULL, + void_date DATE NULL, + print_count NUMBER NOT NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_stok_tts_det_tab + ADD ( CONSTRAINT management_stok_tts_det_pk PRIMARY KEY ( company, cabang_id, mgn_stok_tts_id, no_tts) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_stok_tts_slip_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + mgn_stok_tts_id VARCHAR2(50) NOT NULL, + no_tts NUMBER NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + no_slip VARCHAR2(30) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_stok_tts_slip_tab + ADD ( CONSTRAINT management_stok_tts_slip_pk PRIMARY KEY ( company, cabang_id, mgn_stok_tts_id, no_tts, jenis_slip, no_slip) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_tagihan_tab + ( company VARCHAR2(50) NOT NULL, + management_tagihan_id VARCHAR2(50) NOT NULL, + tgl_tagihan DATE NOT NULL, + tgl_setor DATE NULL, + institusi_id VARCHAR2(30) NULL, + created_by VARCHAR2(50) NULL, + created_date DATE NULL, + approved_by VARCHAR2(50) NULL, + approved_date DATE NULL, + process_by VARCHAR2(50) NULL, + process_date DATE NULL, + closed_by VARCHAR2(50) NULL, + closed_date DATE NULL, + penagih VARCHAR2(200) NULL, + jenis_tagihan VARCHAR2(20) NOT NULL, + kolektor_id VARCHAR2(30) NULL, + cabang_id VARCHAR2(30) NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_tagihan_tab + ADD ( CONSTRAINT management_tagihan_pk PRIMARY KEY ( company, management_tagihan_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE management_tagihan_det_tab + ( company VARCHAR2(50) NOT NULL, + management_tagihan_id VARCHAR2(50) NOT NULL, + no_urut NUMBER NOT NULL, + ref1 VARCHAR2(50) NOT NULL, + ref2 VARCHAR2(50) NULL, + ref3 VARCHAR2(50) NULL, + nominal NUMBER NOT NULL, + denda NUMBER NOT NULL, + ongkos_tagih NUMBER NOT NULL, + nominal_tertagih NUMBER NOT NULL, + denda_tertagih NUMBER NOT NULL, + ongkos_tagih_tertagih NUMBER NOT NULL, + kas_keluar_masuk_id VARCHAR2(30) NULL, + tgl_janji_bayar DATE NULL, + keterangan VARCHAR2(250) NULL, + kas_keluar_masuk_id_batal VARCHAR2(30) NULL, + tgl_setor DATE NULL, + institusi_id VARCHAR2(30) NULL, + jenis_transaksi_penerimaan VARCHAR2(20) NOT NULL, + jenis_slip VARCHAR2(20) NULL, + no_slip VARCHAR2(30) NULL, + cabang_id VARCHAR2(30) NULL, + no_kuitansi VARCHAR2(50) NULL, + hasil_kunjungan_id_desc VARCHAR2(50) NULL, + hasil_kunjungan_tagihan_id VARCHAR2(30) NULL, + hasil_kunjungan_id_cust VARCHAR2(50) NULL, + hasil_kunjungan_id_cp VARCHAR2(50) NULL, + hasil_kunjungan_id_loc VARCHAR2(50) NULL, + cabang_id_payment VARCHAR2(50) NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE management_tagihan_det_tab + ADD ( CONSTRAINT management_tagihan_det_pk PRIMARY KEY ( company, management_tagihan_id, no_urut) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE no_po_show_room_tab + ( company VARCHAR2(50) NOT NULL, + no_po VARCHAR2(30) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE no_po_show_room_tab + ADD ( CONSTRAINT no_po_show_room_pk PRIMARY KEY ( company, no_po) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE penerimaan_kwitansi_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + penerimaan_kwitansi_id VARCHAR2(30) NOT NULL, + tgl_penerimaan DATE NOT NULL, + keterangan VARCHAR2(500) NULL, + jenis_kwitansi VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE penerimaan_kwitansi_tab + ADD ( CONSTRAINT penerimaan_kwitansi_pk PRIMARY KEY ( company, cabang_id, penerimaan_kwitansi_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE penerimaan_kwitansi_det_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + penerimaan_kwitansi_id VARCHAR2(30) NOT NULL, + no_urut NUMBER NOT NULL, + no_mulai NUMBER NOT NULL, + no_akhir NUMBER NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE penerimaan_kwitansi_det_tab + ADD ( CONSTRAINT penerimaan_kwitansi_det_pk PRIMARY KEY ( company, cabang_id, penerimaan_kwitansi_id, no_urut) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stock_taking_unit_tab + ( company VARCHAR2(50) NOT NULL, + stock_taking_unit_id VARCHAR2(50) NOT NULL, + tgl_stock_taking DATE NOT NULL, + tgl_start DATE NULL, + tgl_selesai DATE NULL, + created_by VARCHAR2(50) NULL, + created_date DATE NULL, + submit_by VARCHAR2(50) NULL, + submit_date DATE NULL, + approved_by VARCHAR2(50) NULL, + approved_date DATE NULL, + rejected_by VARCHAR2(50) NULL, + rejected_date DATE NULL, + cabang_id VARCHAR2(30) NULL, + rowversion DATE NOT NULL, + rowstate VARCHAR2(30) NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stock_taking_unit_tab + ADD ( CONSTRAINT stock_taking_unit_pk PRIMARY KEY ( company, stock_taking_unit_id) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stock_taking_unit_det_tab + ( company VARCHAR2(50) NOT NULL, + stock_taking_unit_id VARCHAR2(50) NOT NULL, + mesin VARCHAR2(30) NOT NULL, + flag_reject VARCHAR2(5) NOT NULL, + keterangan VARCHAR2(200) NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stock_taking_unit_det_tab + ADD ( CONSTRAINT stock_taking_unit_det_pk PRIMARY KEY ( company, stock_taking_unit_id, mesin) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stock_taking_unit_det_pic_tab + ( company VARCHAR2(50) NOT NULL, + stock_taking_unit_id VARCHAR2(50) NOT NULL, + mesin VARCHAR2(30) NOT NULL, + no_urut NUMBER NOT NULL, + jenis VARCHAR2(100) NULL, + latitude NUMBER NULL, + longitude NUMBER NULL, + lob_id NUMBER NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stock_taking_unit_det_pic_tab + ADD ( CONSTRAINT stock_taking_unit_det_pic_pk PRIMARY KEY ( company, stock_taking_unit_id, mesin, no_urut) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stok_kwitansi_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + no_kwitansi NUMBER NOT NULL, + penerimaan_kwitansi_id VARCHAR2(30) NULL, + jenis_transaksi VARCHAR2(100) NULL, + no_po VARCHAR2(30) NULL, + angsuran_id VARCHAR2(30) NULL, + nominal NUMBER NULL, + denda NUMBER NULL, + ongkos_tagih NUMBER NULL, + biaya_lain NUMBER NULL, + tgl_print DATE NULL, + tgl_validasi DATE NULL, + tgl_posting DATE NULL, + tgl_register DATE NULL, + user_print VARCHAR2(30) NULL, + user_validasi VARCHAR2(30) NULL, + user_posting VARCHAR2(30) NULL, + user_register VARCHAR2(30) NULL, + user_batal VARCHAR2(30) NULL, + tgl_batal DATE NULL, + keterangan VARCHAR2(500) NULL, + status_kwitansi VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stok_kwitansi_tab + ADD ( CONSTRAINT stok_kwitansi_pk PRIMARY KEY ( company, cabang_id, no_kwitansi) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stok_slip_tab + ( company VARCHAR2(50) NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + no_slip VARCHAR2(30) NOT NULL, + ref1 VARCHAR2(100) NULL, + ref2 VARCHAR2(100) NULL, + ref3 VARCHAR2(100) NULL, + ref4 VARCHAR2(100) NULL, + ref5 VARCHAR2(100) NULL, + jenis_transaksi VARCHAR2(100) NULL, + mgn_slip_id VARCHAR2(50) NULL, + cabang_id VARCHAR2(30) NOT NULL, + nominal1 NUMBER NOT NULL, + nominal2 NUMBER NOT NULL, + nominal3 NUMBER NOT NULL, + nominal4 NUMBER NOT NULL, + nominal5 NUMBER NOT NULL, + nominal6 NUMBER NOT NULL, + print_date DATE NULL, + print_by VARCHAR2(30) NULL, + void_date DATE NULL, + void_by VARCHAR2(30) NULL, + cabang_id_kuitansi VARCHAR2(30) NULL, + no_kuitansi VARCHAR2(50) NULL, + status_slip VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stok_slip_tab + ADD ( CONSTRAINT stok_slip_pk PRIMARY KEY ( company, jenis_slip, no_slip) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stok_slip_hist_tab + ( company VARCHAR2(50) NOT NULL, + jenis_slip VARCHAR2(20) NOT NULL, + no_slip VARCHAR2(30) NOT NULL, + no_urut_hist NUMBER NOT NULL, + event VARCHAR2(200) NOT NULL, + ref1 VARCHAR2(100) NULL, + ref2 VARCHAR2(100) NULL, + ref3 VARCHAR2(100) NULL, + ref4 VARCHAR2(100) NULL, + ref5 VARCHAR2(100) NULL, + jenis_transaksi VARCHAR2(100) NULL, + mgn_slip_id VARCHAR2(50) NULL, + cabang_id VARCHAR2(30) NOT NULL, + nominal1 NUMBER NOT NULL, + nominal2 NUMBER NOT NULL, + nominal3 NUMBER NOT NULL, + nominal4 NUMBER NOT NULL, + nominal5 NUMBER NOT NULL, + nominal6 NUMBER NOT NULL, + create_date DATE NULL, + create_by VARCHAR2(30) NULL, + cabang_id_kuitansi VARCHAR2(30) NULL, + no_kuitansi VARCHAR2(50) NULL, + flag_void VARCHAR2(5) NOT NULL, + status_slip VARCHAR2(20) NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stok_slip_hist_tab + ADD ( CONSTRAINT stok_slip_hist_pk PRIMARY KEY ( company, jenis_slip, no_slip, no_urut_hist) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ + +CREATE TABLE stok_tts_tab + ( company VARCHAR2(50) NOT NULL, + cabang_id VARCHAR2(30) NOT NULL, + no_tts NUMBER NOT NULL, + tanggal DATE NULL, + penerimaan_kwitansi_id VARCHAR2(30) NULL, + jenis_transaksi VARCHAR2(100) NULL, + ref1 VARCHAR2(30) NULL, + ref2 VARCHAR2(30) NULL, + nominal NUMBER NULL, + tgl_print DATE NULL, + tgl_validasi DATE NULL, + tgl_posting DATE NULL, + tgl_register DATE NULL, + tgl_kwitansi DATE NULL, + user_print VARCHAR2(30) NULL, + user_validasi VARCHAR2(30) NULL, + user_posting VARCHAR2(30) NULL, + user_register VARCHAR2(30) NULL, + user_kwitansi VARCHAR2(30) NULL, + user_batal VARCHAR2(30) NULL, + tgl_batal DATE NULL, + ref_kwitansi VARCHAR2(30) NULL, + keterangan VARCHAR2(500) NULL, + status_kwitansi VARCHAR2(20) NOT NULL, + rowversion DATE NOT NULL) +TABLESPACE &incon_data +STORAGE (&normal) +/ +ALTER TABLE stok_tts_tab + ADD ( CONSTRAINT stok_tts_pk PRIMARY KEY ( company, cabang_id, no_tts) + USING INDEX + TABLESPACE &incon_index + STORAGE (&normal)) +/ diff --git a/oracle_API/StockTakingUnit.api b/oracle_API/StockTakingUnit.api new file mode 100644 index 0000000..c0b1506 --- /dev/null +++ b/oracle_API/StockTakingUnit.api @@ -0,0 +1,300 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnit +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnit +DEFINE PKG = STOCK_TAKING_UNIT_API + + +PROMPT Creating &PKG specification + +CREATE OR REPLACE PACKAGE &PKG IS + +module_ CONSTANT VARCHAR2(25) := '&MODULE'; +lu_name_ CONSTANT VARCHAR2(25) := '&LU'; + +TYPE Public_Rec IS RECORD + (tgl_stock_taking stock_taking_unit_tab.tgl_stock_taking%TYPE, + tgl_start stock_taking_unit_tab.tgl_start%TYPE, + tgl_selesai stock_taking_unit_tab.tgl_selesai%TYPE, + created_by stock_taking_unit_tab.created_by%TYPE, + created_date stock_taking_unit_tab.created_date%TYPE, + submit_by stock_taking_unit_tab.submit_by%TYPE, + submit_date stock_taking_unit_tab.submit_date%TYPE, + approved_by stock_taking_unit_tab.approved_by%TYPE, + approved_date stock_taking_unit_tab.approved_date%TYPE, + rejected_by stock_taking_unit_tab.rejected_by%TYPE, + rejected_date stock_taking_unit_tab.rejected_date%TYPE, + cabang_id stock_taking_unit_tab.cabang_id%TYPE); + +----------------------------------------------------------------------------- +-------------------- PRIVATE FINITE STATE MACHINE --------------------------- +----------------------------------------------------------------------------- + +FUNCTION Finite_State_Decode__ ( + db_state_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Finite_State_Decode__, WNDS, WNPS); + +PROCEDURE Enumerate_States__ ( + client_values_ OUT VARCHAR2); + +FUNCTION Finite_State_Events__ ( + db_state_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Finite_State_Events__, WNDS, WNPS); + +PROCEDURE Enumerate_Events__ ( + db_events_ OUT VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ); + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- PUBLIC TRANSLATION METHODS ----------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Language_Refreshed; + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + +PROCEDURE Cancel_Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + +PROCEDURE Approve__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + +PROCEDURE Reject__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + +PROCEDURE Cancel_Approve__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + +PROCEDURE Re_Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Tgl_Stock_Taking ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Tgl_Stock_Taking, WNDS, WNPS); + + +FUNCTION Get_Tgl_Start ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Tgl_Start, WNDS, WNPS); + + +FUNCTION Get_Tgl_Selesai ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Tgl_Selesai, WNDS, WNPS); + + +FUNCTION Get_Created_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Created_By, WNDS, WNPS); + + +FUNCTION Get_Created_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Created_Date, WNDS, WNPS); + + +FUNCTION Get_Submit_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Submit_By, WNDS, WNPS); + + +FUNCTION Get_Submit_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Submit_Date, WNDS, WNPS); + + +FUNCTION Get_Approved_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Approved_By, WNDS, WNPS); + + +FUNCTION Get_Approved_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Approved_Date, WNDS, WNPS); + + +FUNCTION Get_Rejected_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Rejected_By, WNDS, WNPS); + + +FUNCTION Get_Rejected_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE; +PRAGMA restrict_references(Get_Rejected_Date, WNDS, WNPS); + + +FUNCTION Get_Cabang_Id ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Cabang_Id, WNDS, WNPS); + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN Public_Rec; +PRAGMA restrict_references(Get, WNDS, WNPS); + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN OUT VARCHAR2, + tgl_stock_taking_ IN DATE, + tgl_start_ IN DATE, + tgl_selesai_ IN DATE, + cabang_id_ IN VARCHAR2); + + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Call_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Call_Re_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Call_Cancel_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Call_Approve( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Call_Cancel_Approve( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2); + + +PROCEDURE Update_Tgl_Selesai( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + tgl_selesai_ IN DATE); + + +FUNCTION Get_Status_Stock_Taking( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) RETURN VARCHAR2; + + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnit.apy b/oracle_API/StockTakingUnit.apy new file mode 100644 index 0000000..8a51e38 --- /dev/null +++ b/oracle_API/StockTakingUnit.apy @@ -0,0 +1,1515 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnit +-- +-- Purpose: +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnit +DEFINE TABLE = STOCK_TAKING_UNIT_TAB +DEFINE VIEW = STOCK_TAKING_UNIT +DEFINE PKG = STOCK_TAKING_UNIT_API + +DEFINE OBJID = rowid +DEFINE OBJVERSION = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))" +DEFINE OBJSTATE = rowstate +DEFINE OBJEVENTS = substrb(&PKG..Finite_State_Events__(&OBJSTATE),1,253) +DEFINE STATE = substrb(&PKG..Finite_State_Decode__(&OBJSTATE),1,253) + +----------------------------------------------------------------------------- +-------------------- VIEWS FOR SELECTS -------------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &VIEW view + +CREATE OR REPLACE VIEW &VIEW AS +SELECT company company, + stock_taking_unit_id stock_taking_unit_id, + tgl_stock_taking tgl_stock_taking, + tgl_start tgl_start, + tgl_selesai tgl_selesai, + created_by created_by, + created_date created_date, + submit_by submit_by, + submit_date submit_date, + approved_by approved_by, + approved_date approved_date, + rejected_by rejected_by, + rejected_date rejected_date, + cabang_id cabang_id, + &OBJID objid, + &OBJVERSION objversion, + &OBJSTATE objstate, + &OBJEVENTS objevents, + &STATE state +FROM stock_taking_unit_tab +WITH read only; + +COMMENT ON TABLE &VIEW + IS 'LU=&LU^PROMPT=Stock Taking Unit^MODULE=&MODULE^'; + +COMMENT ON COLUMN &VIEW..company + IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Company^REF=Perusahaan^'; +COMMENT ON COLUMN &VIEW..stock_taking_unit_id + IS 'FLAGS=KMI-L^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Stock Taking Unit Id^'; +COMMENT ON COLUMN &VIEW..tgl_stock_taking + IS 'FLAGS=AMIUL^DATATYPE=DATE^PROMPT=Tgl Stock Taking^'; +COMMENT ON COLUMN &VIEW..tgl_start + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Tgl Start^'; +COMMENT ON COLUMN &VIEW..tgl_selesai + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Tgl Selesai^'; +COMMENT ON COLUMN &VIEW..created_by + IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Created By^'; +COMMENT ON COLUMN &VIEW..created_date + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Created Date^'; +COMMENT ON COLUMN &VIEW..submit_by + IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Submit By^'; +COMMENT ON COLUMN &VIEW..submit_date + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Submit Date^'; +COMMENT ON COLUMN &VIEW..approved_by + IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Approved By^'; +COMMENT ON COLUMN &VIEW..approved_date + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Approved Date^'; +COMMENT ON COLUMN &VIEW..rejected_by + IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Rejected By^'; +COMMENT ON COLUMN &VIEW..rejected_date + IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Rejected Date^'; +COMMENT ON COLUMN &VIEW..cabang_id + IS 'FLAGS=A-IU-^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Cabang Id^REF=Cabang(company)^'; + +----------------------------------------------------------------------------- +-------------------- PACKAGES FOR METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &PKG implementation + +CREATE OR REPLACE PACKAGE BODY &PKG IS + +----------------------------------------------------------------------------- +-------------------- FINITE STATE DECLARATIONS ------------------------------ +----------------------------------------------------------------------------- + +db_state_list_ CONSTANT VARCHAR2(33) := 'Open^Submitted^Approved^Rejected^'; +client_state_list_ CONSTANT VARCHAR2(33) := 'Open^Submitted^Approved^Rejected^'; +active_state_list_ VARCHAR2(132) := Language_SYS.Translate_State_(lu_name_, client_state_list_); +state_separator_ CONSTANT VARCHAR2(1) := Client_SYS.field_separator_; + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS --------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS ---------------------------- +----------------------------------------------------------------------------- +-- Lock_By_Id___ +-- Client-support to lock a specific instance of the logical unit. +-- +-- Lock_By_Keys___ +-- Server support to lock a specific instance of the logical unit. +-- +-- Get_Object_By_Id___ +-- Get LU-record from the database with a specified object identity. +-- +-- Get_Object_By_Keys___ +-- Get LU-record from the database with specified key columns. +-- +-- Check_Exist___ +-- Check if a specific LU-instance already exist in the database. +-- +-- Get_Id_Version_By_Keys___ +-- Get the current OBJID and OBJVERSION for a specific LU-instance. +----------------------------------------------------------------------------- + +FUNCTION Lock_By_Id___ ( + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + row_changed EXCEPTION; + row_deleted EXCEPTION; + row_locked EXCEPTION; + PRAGMA exception_init(row_locked, -0054); + rec_ &TABLE%ROWTYPE; + dummy_ NUMBER; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_ + AND &OBJVERSION = objversion_ + FOR UPDATE NOWAIT; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + END IF; + CLOSE lock_control; + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RAISE row_changed; + ELSE + CLOSE exist_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_locked THEN + Error_SYS.Record_Locked(lu_name_); + WHEN row_changed THEN + Error_SYS.Record_Modified(lu_name_); + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Id___; + +FUNCTION Lock_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + row_deleted EXCEPTION; + rec_ &TABLE%ROWTYPE; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + FOR UPDATE; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + ELSE + CLOSE lock_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Keys___; + +FUNCTION Get_Object_By_Id___ ( + objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + IF (getrec%NOTFOUND) THEN + CLOSE getrec; + Error_SYS.Record_Removed(lu_name_); + END IF; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Id___; + + +FUNCTION Get_Object_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Keys___; + +FUNCTION Check_Exist___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN BOOLEAN +IS + dummy_ NUMBER; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RETURN(TRUE); + END IF; + CLOSE exist_control; + RETURN(FALSE); +END Check_Exist___; + +PROCEDURE Get_Id_Version_By_Keys___ ( + objid_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) +IS + CURSOR get_version IS + SELECT &OBJID, &OBJVERSION + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_version; + FETCH get_version INTO objid_, objversion_; + CLOSE get_version; +END Get_Id_Version_By_Keys___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION FINITE STATE MACHINE -------------------- +----------------------------------------------------------------------------- +-- Finite_State_Set___ +-- Updates the finite state indicator for an existing LU-instance. +-- +-- Finite_State_Machine___ +-- Processes an event by: +-- 1. Fetching the current state +-- 2. Evaluating any conditions for given event at current state +-- 3. executing any exit code for the old state +-- 4. Performing any action associated with given event +-- 5. update the database to the new state +-- 6. execute any entry code for the new state +-- 7. Executing a state change to the new state +-- +-- Finite_State_Add_To_Attr___ +-- Adds the current state and allowed events to the attribute string. +-- +-- Finite_State_Init___ +-- Sets the initial finite state indicator for an existing LU-instance +-- and processes any automatic events. +----------------------------------------------------------------------------- + +PROCEDURE Finite_State_Set___ ( + rec_ IN OUT &TABLE%ROWTYPE, + state_ IN VARCHAR2 ) +IS +BEGIN + rec_.rowversion := sysdate; + UPDATE stock_taking_unit_tab + SET &OBJSTATE = state_, + rowversion = rec_.rowversion + WHERE company = rec_.company + AND stock_taking_unit_id = rec_.stock_taking_unit_id; + rec_.rowstate := state_; +END Finite_State_Set___; + + +PROCEDURE Finite_State_Machine___ ( + rec_ IN OUT &TABLE%ROWTYPE, + event_ IN VARCHAR2, + attr_ IN OUT VARCHAR2 ) +IS + state_ VARCHAR2(30); +BEGIN + state_ := rec_.rowstate; + IF (state_ IS NULL) THEN + IF (event_ IS NULL) THEN + rec_.rowstate := 'Open'; + ELSE + Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); + END IF; + ELSIF (state_ = 'Approved') THEN + IF (event_ = 'CancelApprove') THEN + Finite_State_Set___(rec_, 'Submitted'); + ELSE + Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); + END IF; + ELSIF (state_ = 'Open') THEN + IF (event_ = 'Submit') THEN + Finite_State_Set___(rec_, 'Submitted'); + ELSE + Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); + END IF; + ELSIF (state_ = 'Rejected') THEN + IF (event_ = 'ReSubmit') THEN + Finite_State_Set___(rec_, 'Submitted'); + ELSE + Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); + END IF; + ELSIF (state_ = 'Submitted') THEN + IF (event_ = 'Approve') THEN + Finite_State_Set___(rec_, 'Approved'); + ELSIF (event_ = 'CancelSubmit') THEN + Finite_State_Set___(rec_, 'Open'); + ELSIF (event_ = 'Reject') THEN + Finite_State_Set___(rec_, 'Rejected'); + ELSE + Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); + END IF; + ELSE + Error_SYS.State_Not_Exist(lu_name_, Finite_State_Decode__(state_)); + END IF; +END Finite_State_Machine___; + + +PROCEDURE Finite_State_Add_To_Attr___ ( + rec_ IN &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2 ) +IS + state_ VARCHAR2(30); +BEGIN + state_ := rec_.rowstate; + Client_SYS.Add_To_Attr('__OBJSTATE', state_, attr_); + Client_SYS.Add_To_Attr('__OBJEVENTS', Finite_State_Events__(state_), attr_); + Client_SYS.Add_To_Attr('STATE', Finite_State_Decode__(state_), attr_); +END Finite_State_Add_To_Attr___; + + +PROCEDURE Finite_State_Init___ ( + rec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2 ) +IS + state_ VARCHAR2(30); +BEGIN + Finite_State_Machine___(rec_, NULL, attr_); + Finite_State_Add_To_Attr___(rec_, attr_); +END Finite_State_Init___; + +----------------------------------------------------------------------------- +-------------------- PRIVATE FINITE STATE MACHINE --------------------------- +----------------------------------------------------------------------------- +-- Finite_State_Decode__ +-- Returns the client equivalent for any database representation of +-- a state name = objstate. +-- +-- Enumerate_States__ +-- Returns a list of all possible finite states in client terminology. +-- +-- Finite_State_Events__ +-- Returns a list of allowed events for a given state +-- NOTE! Regardless of conditions if not otherwize encoded +-- +-- Enumerate_Events__ +-- Returns a list of all possible events. +----------------------------------------------------------------------------- + +FUNCTION Finite_State_Decode__ ( + db_state_ IN VARCHAR2 ) RETURN VARCHAR2 +IS +BEGIN + RETURN(Domain_SYS.Decode_(active_state_list_, db_state_list_, db_state_)); +END Finite_State_Decode__; + + +PROCEDURE Enumerate_States__ ( + client_values_ OUT VARCHAR2) +IS +BEGIN + client_values_ := Domain_SYS.Enumerate_(active_state_list_); +END Enumerate_States__; + + +FUNCTION Finite_State_Events__ ( + db_state_ IN VARCHAR2 ) RETURN VARCHAR2 +IS +BEGIN + IF (db_state_ IS NULL) THEN + RETURN NULL; + ELSIF (db_state_ = 'Approved') THEN + RETURN 'CancelApprove^'; + ELSIF (db_state_ = 'Open') THEN + RETURN 'Submit^'; + ELSIF (db_state_ = 'Rejected') THEN + RETURN 'ReSubmit^'; + ELSIF (db_state_ = 'Submitted') THEN + RETURN 'CancelSubmit^Approve^Reject^'; + ELSE + RETURN NULL; + END IF; +END Finite_State_Events__; + + +PROCEDURE Enumerate_Events__ ( + db_events_ OUT VARCHAR2 ) +IS +BEGIN + db_events_ := 'Submit^CancelSubmit^Approve^Reject^CancelApprove^ReSubmit^'; +END Enumerate_Events__; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT ----------------- +----------------------------------------------------------------------------- +-- Prepare_Insert___ +-- Set all default values for a new instance (ON-NEW-RECORD) of this +-- logical unit by calling procedure Add_Attr. +-- +-- Unpack_Check_Insert___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before creation of the new object. +-- +-- Insert___ +-- Insert a new LU-instance into the database and return the values +-- for OBJID and OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Prepare_Insert___ ( + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + Client_SYS.Clear_Attr(attr_); +END Prepare_Insert___; + + +PROCEDURE Unpack_Check_Insert___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + newrec_.company := value_; + Perusahaan_API.Exist(newrec_.company); + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + newrec_.stock_taking_unit_id := value_; + ELSIF (name_ = 'TGL_STOCK_TAKING') THEN + newrec_.tgl_stock_taking := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'TGL_START') THEN + newrec_.tgl_start := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'TGL_SELESAI') THEN + newrec_.tgl_selesai := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'CREATED_BY') THEN + newrec_.created_by := value_; + ELSIF (name_ = 'CREATED_DATE') THEN + newrec_.created_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'SUBMIT_BY') THEN + newrec_.submit_by := value_; + ELSIF (name_ = 'SUBMIT_DATE') THEN + newrec_.submit_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'APPROVED_BY') THEN + newrec_.approved_by := value_; + ELSIF (name_ = 'APPROVED_DATE') THEN + newrec_.approved_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'REJECTED_BY') THEN + newrec_.rejected_by := value_; + ELSIF (name_ = 'REJECTED_DATE') THEN + newrec_.rejected_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'CABANG_ID') THEN + newrec_.cabang_id := value_; + IF (value_ IS NOT NULL) THEN + Cabang_API.Exist(newrec_.company, newrec_.cabang_id); + END IF; + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); + Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company); + Error_SYS.Check_Not_Null(lu_name_, 'STOCK_TAKING_UNIT_ID', newrec_.stock_taking_unit_id); + Error_SYS.Check_Not_Null(lu_name_, 'TGL_STOCK_TAKING', newrec_.tgl_stock_taking); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Insert___; + + +PROCEDURE Insert___ ( + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + INSERT + INTO stock_taking_unit_tab ( + company, + stock_taking_unit_id, + tgl_stock_taking, + tgl_start, + tgl_selesai, + created_by, + created_date, + submit_by, + submit_date, + approved_by, + approved_date, + rejected_by, + rejected_date, + cabang_id, + rowversion, + rowstate) + VALUES ( + newrec_.company, + newrec_.stock_taking_unit_id, + newrec_.tgl_stock_taking, + newrec_.tgl_start, + newrec_.tgl_selesai, + newrec_.created_by, + newrec_.created_date, + newrec_.submit_by, + newrec_.submit_date, + newrec_.approved_by, + newrec_.approved_date, + newrec_.rejected_by, + newrec_.rejected_date, + newrec_.cabang_id, + newrec_.rowversion, + 'Open'); + Finite_State_Init___(newrec_, attr_); + objid_ := DBMS_sql.last_row_id; +-- SELECT &OBJID +-- INTO objid_ +-- FROM &TABLE +-- WHERE company = newrec_.company +-- AND stock_taking_unit_id = newrec_.stock_taking_unit_id; + +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Insert___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE ----------------- +----------------------------------------------------------------------------- +-- Unpack_Check_Update___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before modifying the object. +-- +-- Update___ +-- Update an existing LU-instance in the database and return the +-- the new OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Unpack_Check_Update___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + objid_ IN VARCHAR2 ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + Error_SYS.Item_Update(lu_name_, 'COMPANY'); + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + Error_SYS.Item_Update(lu_name_, 'STOCK_TAKING_UNIT_ID'); + ELSIF (name_ = 'TGL_STOCK_TAKING') THEN + newrec_.tgl_stock_taking := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'TGL_START') THEN + newrec_.tgl_start := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'TGL_SELESAI') THEN + newrec_.tgl_selesai := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'CREATED_BY') THEN + newrec_.created_by := value_; + ELSIF (name_ = 'CREATED_DATE') THEN + newrec_.created_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'SUBMIT_BY') THEN + newrec_.submit_by := value_; + ELSIF (name_ = 'SUBMIT_DATE') THEN + newrec_.submit_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'APPROVED_BY') THEN + newrec_.approved_by := value_; + ELSIF (name_ = 'APPROVED_DATE') THEN + newrec_.approved_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'REJECTED_BY') THEN + newrec_.rejected_by := value_; + ELSIF (name_ = 'REJECTED_DATE') THEN + newrec_.rejected_date := Client_SYS.Attr_Value_To_Date(value_); + ELSIF (name_ = 'CABANG_ID') THEN + newrec_.cabang_id := value_; + IF (value_ IS NOT NULL) THEN + Cabang_API.Exist(newrec_.company, newrec_.cabang_id); + END IF; + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); + Error_SYS.Check_Not_Null(lu_name_, 'TGL_STOCK_TAKING', newrec_.tgl_stock_taking); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Update___; + + +PROCEDURE Update___ ( + objid_ IN VARCHAR2, + oldrec_ IN &TABLE%ROWTYPE, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + by_keys_ IN BOOLEAN DEFAULT FALSE ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + IF by_keys_ THEN + UPDATE stock_taking_unit_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + tgl_stock_taking = newrec_.tgl_stock_taking, + tgl_start = newrec_.tgl_start, + tgl_selesai = newrec_.tgl_selesai, + created_by = newrec_.created_by, + created_date = newrec_.created_date, + submit_by = newrec_.submit_by, + submit_date = newrec_.submit_date, + approved_by = newrec_.approved_by, + approved_date = newrec_.approved_date, + rejected_by = newrec_.rejected_by, + rejected_date = newrec_.rejected_date, + cabang_id = newrec_.cabang_id, + rowversion = newrec_.rowversion + WHERE company = newrec_.company + AND stock_taking_unit_id = newrec_.stock_taking_unit_id; + ELSE + UPDATE stock_taking_unit_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + tgl_stock_taking = newrec_.tgl_stock_taking, + tgl_start = newrec_.tgl_start, + tgl_selesai = newrec_.tgl_selesai, + created_by = newrec_.created_by, + created_date = newrec_.created_date, + submit_by = newrec_.submit_by, + submit_date = newrec_.submit_date, + approved_by = newrec_.approved_by, + approved_date = newrec_.approved_date, + rejected_by = newrec_.rejected_by, + rejected_date = newrec_.rejected_date, + cabang_id = newrec_.cabang_id, + rowversion = newrec_.rowversion + WHERE &OBJID = objid_; + END IF; +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Update___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE ----------------- +----------------------------------------------------------------------------- +-- Check_Delete___ +-- Checks whether a specific LU-record may be removed or not. +-- The procedure should check business rules like attribute values +-- as well as database constraints (defined or not). +-- +-- Delete___ +-- Deletion of the specific LU-object from the database. +----------------------------------------------------------------------------- + +PROCEDURE Check_Delete___ ( + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^'; + Reference_SYS.Check_Restricted_Delete(lu_name_, key_); +END Check_Delete___; + + +PROCEDURE Delete___ ( + objid_ IN VARCHAR2, + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^'; + Reference_SYS.Do_Cascade_Delete(lu_name_, key_); + DELETE + FROM stock_taking_unit_tab + WHERE &OBJID = objid_; +END Delete___; + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- +-- Lock__ +-- Client-support to lock a specific instance of the logical unit. +-- +-- New__ +-- Client-support interface to create LU instances. +-- action_ = 'PREPARE' +-- Default values and handle of information to client. +-- The default values are set in procedure Prepare_Insert___. +-- action_ = 'CHECK' +-- Check all attributes before creating new object and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___. +-- action_ = 'DO' +-- Creation of new instances of the logical unit and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___ +-- before calling procedure Insert___. +-- +-- Modify__ +-- Client-support interface to modify attributes for LU instances. +-- action_ = 'CHECK' +-- Check all attributes before modifying an existing object and +-- handle of information to client. The attribute list is unpacked, +-- checked and prepared(defaults) in procedure Unpack_Check_Update___. +-- action_ = 'DO' +-- Modification of an existing instance of the logical unit. The +-- procedure unpacks the attributes, checks all values before +-- procedure Update___ is called. +-- +-- Remove__ +-- Client-support interface to remove LU instances. +-- action_ = 'CHECK' +-- Check whether a specific LU-instance may be removed or not. +-- The procedure fetches the complete record by calling procedure +-- Get_Object_By_Id___. Then the check is made by calling procedure +-- Check_Delete___. +-- action_ = 'DO' +-- Remove an existing instance of the logical unit. The procedure +-- fetches the complete LU-record, checks for a delete and then +-- deletes the record by calling procedure Delete___. +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) +IS + dummy_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__'); + dummy_ := Lock_By_Id___(objid_, objversion_); + info_ := Client_SYS.Get_All_Info; +END Lock__; + + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'New__'); + IF (action_ = 'PREPARE') THEN + Prepare_Insert___(attr_); + ELSIF (action_ = 'CHECK') THEN + Unpack_Check_Insert___(attr_, newrec_); + ELSIF (action_ = 'DO') THEN + Unpack_Check_Insert___(attr_, newrec_); + Insert___(objid_, objversion_, newrec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END New__; + + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + oldrec_ &TABLE%ROWTYPE; + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__'); + IF (action_ = 'CHECK') THEN + newrec_ := Get_Object_By_Id___(objid_); + Unpack_Check_Update___(attr_, newrec_, objid_); + ELSIF (action_ = 'DO') THEN + oldrec_ := Lock_By_Id___(objid_, objversion_); + newrec_ := oldrec_; + Unpack_Check_Update___(attr_, newrec_, objid_); + Update___(objid_, oldrec_, newrec_, attr_, objversion_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Modify__; + + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ) +IS + remrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__'); + IF (action_ = 'CHECK') THEN + remrec_ := Get_Object_By_Id___(objid_); + Check_Delete___(remrec_); + ELSIF (action_ = 'DO') THEN + remrec_ := Lock_By_Id___(objid_, objversion_); + Check_Delete___(remrec_); + Delete___(objid_, remrec_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Remove__; + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Exist +-- Checks if given pointer (e.g. primary key) to an instance of this +-- logical unit exists. If not an exception will be raised. +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) +IS +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE); + IF (NOT Check_Exist___(company_, stock_taking_unit_id_)) THEN + Error_SYS.Record_Not_Exist(lu_name_); + END IF; +END Exist; + +----------------------------------------------------------------------------- +-------------------- PUBLIC TRANSLATION METHODS ----------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Language_Refreshed +IS +BEGIN + active_state_list_ := Language_SYS.Translate_State_(lu_name_, client_state_list_); +END Language_Refreshed; + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHODS --------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Submit__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'Submit', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Submit__; + + +PROCEDURE Cancel_Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Cancel_Submit__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'CancelSubmit', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Cancel_Submit__; + + +PROCEDURE Approve__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Approve__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'Approve', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Approve__; + + +PROCEDURE Reject__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Reject__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'Reject', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Reject__; + + +PROCEDURE Cancel_Approve__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Cancel_Approve__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'CancelApprove', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Cancel_Approve__; + + +PROCEDURE Re_Submit__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + rec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Re_Submit__'); + IF (action_ = 'CHECK') THEN + NULL; + ELSIF (action_ = 'DO') THEN + rec_ := Lock_By_Id___(objid_, objversion_); + Finite_State_Machine___(rec_, 'ReSubmit', attr_); + objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); + Finite_State_Add_To_Attr___(rec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Re_Submit__; + + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Tgl_Stock_Taking ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..tgl_stock_taking%TYPE; + CURSOR get_attr IS + SELECT tgl_stock_taking + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Tgl_Stock_Taking; + + +FUNCTION Get_Tgl_Start ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..tgl_start%TYPE; + CURSOR get_attr IS + SELECT tgl_start + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Tgl_Start; + + +FUNCTION Get_Tgl_Selesai ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..tgl_selesai%TYPE; + CURSOR get_attr IS + SELECT tgl_selesai + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Tgl_Selesai; + + +FUNCTION Get_Created_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..created_by%TYPE; + CURSOR get_attr IS + SELECT created_by + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Created_By; + + +FUNCTION Get_Created_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..created_date%TYPE; + CURSOR get_attr IS + SELECT created_date + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Created_Date; + + +FUNCTION Get_Submit_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..submit_by%TYPE; + CURSOR get_attr IS + SELECT submit_by + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Submit_By; + + +FUNCTION Get_Submit_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..submit_date%TYPE; + CURSOR get_attr IS + SELECT submit_date + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Submit_Date; + + +FUNCTION Get_Approved_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..approved_by%TYPE; + CURSOR get_attr IS + SELECT approved_by + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Approved_By; + + +FUNCTION Get_Approved_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..approved_date%TYPE; + CURSOR get_attr IS + SELECT approved_date + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Approved_Date; + + +FUNCTION Get_Rejected_By ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..rejected_by%TYPE; + CURSOR get_attr IS + SELECT rejected_by + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Rejected_By; + + +FUNCTION Get_Rejected_Date ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE +IS + temp_ &TABLE..rejected_date%TYPE; + CURSOR get_attr IS + SELECT rejected_date + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Rejected_Date; + + +FUNCTION Get_Cabang_Id ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..cabang_id%TYPE; + CURSOR get_attr IS + SELECT cabang_id + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Cabang_Id; + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2 ) RETURN Public_Rec +IS + temp_ Public_Rec; + CURSOR get_attr IS + SELECT tgl_stock_taking, tgl_start, tgl_selesai, created_by, created_date, submit_by, submit_date, approved_by, approved_date, rejected_by, rejected_date, cabang_id + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get; + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN OUT VARCHAR2, + tgl_stock_taking_ IN DATE, + tgl_start_ IN DATE, + tgl_selesai_ IN DATE, + cabang_id_ IN VARCHAR2) + +IS + attr_ VARCHAR2(2000); + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + + CURSOR get_id IS + select NVL(max(TO_NUMBER(stock_taking_unit_id)),0) + 1 + from &VIEW. + where company = company_; + + temp_ NUMBER; + +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Update_Record'); + Get_Id_Version_By_Keys___ (objid_, objversion_, company_,stock_taking_unit_id_); + + IF objid_ IS NULL THEN + OPEN get_id; + FETCH get_id into temp_; + CLOSE get_id; + stock_taking_unit_id_ := temp_; + + Client_SYS.Add_To_Attr('COMPANY', company_, attr_); + Client_SYS.Add_To_Attr('STOCK_TAKING_UNIT_ID', stock_taking_unit_id_, attr_); + END IF; + + Client_SYS.Add_To_Attr('TGL_STOCK_TAKING', tgl_stock_taking_, attr_); + Client_SYS.Add_To_Attr('TGL_START', tgl_start_, attr_); + Client_SYS.Add_To_Attr('TGL_SELESAI', tgl_selesai_, attr_); + Client_SYS.Add_To_Attr('CABANG_ID', cabang_id_, attr_); + + IF objid_ IS NULL THEN + Client_SYS.Add_To_Attr('CREATED_DATE', sysdate, attr_); + Client_SYS.Add_To_Attr('CREATED_BY', Utils_API.Get_Fnd_User, attr_); + New__(info_, objid_, objversion_, attr_, 'DO'); + ELSE + Modify__(info_,objid_,objversion_,attr_,'DO'); + END IF; + +END Create_Update_Record; + + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Remove__(info_, objid_, objversion_, 'DO'); + +END Remove_Record; + + +PROCEDURE Call_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + + state_ VARCHAR2(100) := Stock_Taking_Unit_API.Get_Status_Stock_Taking(company_,stock_taking_unit_id_); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + IF(state_ = 'Submitted') THEN + Error_SYS.Record_General(lu_name_,'This data already submitted'); + ELSE + Submit__(info_, objid_, objversion_,attr_, 'DO'); + END IF; + + + +END Call_Submit; + + +PROCEDURE Call_Re_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Re_Submit__(info_, objid_, objversion_,attr_, 'DO'); + +END Call_Re_Submit; + + +PROCEDURE Call_Cancel_Submit( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Cancel_Submit__(info_, objid_, objversion_,attr_, 'DO'); + +END Call_Cancel_Submit; + + +PROCEDURE Call_Approve( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Approve__(info_, objid_, objversion_,attr_, 'DO'); + +END Call_Approve; + + +PROCEDURE Call_Cancel_Approve( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Cancel_Approve__(info_, objid_, objversion_,attr_, 'DO'); + +END Call_Cancel_Approve; + + +PROCEDURE Call_Reject( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Approve__(info_, objid_, objversion_,attr_, 'DO'); + +END Call_Reject; + + +PROCEDURE Update_Tgl_Selesai( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + tgl_selesai_ IN DATE) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + attr_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); + Client_SYS.Add_To_Attr('TGL_SELESAI', tgl_selesai_, attr_); + Modify__(info_,objid_,objversion_,attr_,'DO'); + + +END Update_Tgl_Selesai; + + +FUNCTION Get_Status_Stock_Taking( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2) RETURN VARCHAR2 +IS + CURSOR get_state IS + select state from &VIEW. + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_; + + temp_ VARCHAR2(100); + +BEGIN + OPEN get_state; + FETCH get_state INTO temp_; + CLOSE get_state; + + RETURN temp_; +END Get_Status_Stock_Taking; + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Init +-- Dummy procedure that can be called at database startup to ensure that +-- this package is loaded into memory for performance reasons only. +----------------------------------------------------------------------------- + +PROCEDURE Init +IS +BEGIN + NULL; +END Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnitDet.api b/oracle_API/StockTakingUnitDet.api new file mode 100644 index 0000000..1fc466f --- /dev/null +++ b/oracle_API/StockTakingUnitDet.api @@ -0,0 +1,132 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnitDet +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnitDet +DEFINE PKG = STOCK_TAKING_UNIT_DET_API + + +PROMPT Creating &PKG specification + +CREATE OR REPLACE PACKAGE &PKG IS + +module_ CONSTANT VARCHAR2(25) := '&MODULE'; +lu_name_ CONSTANT VARCHAR2(25) := '&LU'; + +TYPE Public_Rec IS RECORD + (flag_reject stock_taking_unit_det_tab.flag_reject%TYPE, + keterangan stock_taking_unit_det_tab.keterangan%TYPE); + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ); + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Flag_Reject ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Flag_Reject, WNDS, WNPS); + + +FUNCTION Get_Keterangan ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Keterangan, WNDS, WNPS); + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN Public_Rec; +PRAGMA restrict_references(Get, WNDS, WNPS); + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + flag_reject_ IN VARCHAR2, + keterangan_ IN VARCHAR2); + + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2); + + +PROCEDURE Update_Keterangan( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + keterangan_ IN VARCHAR2); + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnitDet.apy b/oracle_API/StockTakingUnitDet.apy new file mode 100644 index 0000000..783f41a --- /dev/null +++ b/oracle_API/StockTakingUnitDet.apy @@ -0,0 +1,781 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnitDet +-- +-- Purpose: +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnitDet +DEFINE TABLE = STOCK_TAKING_UNIT_DET_TAB +DEFINE VIEW = STOCK_TAKING_UNIT_DET +DEFINE PKG = STOCK_TAKING_UNIT_DET_API + +DEFINE OBJID = rowid +DEFINE OBJVERSION = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))" + +----------------------------------------------------------------------------- +-------------------- VIEWS FOR SELECTS -------------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &VIEW view + +CREATE OR REPLACE VIEW &VIEW AS +SELECT company company, + stock_taking_unit_id stock_taking_unit_id, + mesin mesin, + flag_reject flag_reject, + keterangan keterangan, + &OBJID objid, + &OBJVERSION objversion +FROM stock_taking_unit_det_tab +WITH read only; + +COMMENT ON TABLE &VIEW + IS 'LU=&LU^PROMPT=Stock Taking Unit Det^MODULE=&MODULE^'; + +COMMENT ON COLUMN &VIEW..company + IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Company^'; +COMMENT ON COLUMN &VIEW..stock_taking_unit_id + IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Stock Taking Unit Id^REF=StockTakingUnit(company)^'; +COMMENT ON COLUMN &VIEW..mesin + IS 'FLAGS=KMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Mesin^REF=StokFaktur(company)^'; +COMMENT ON COLUMN &VIEW..flag_reject + IS 'FLAGS=AMIUL^DATATYPE=BOOLEAN^PROMPT=Flag Reject^'; +COMMENT ON COLUMN &VIEW..keterangan + IS 'FLAGS=A-IUL^DATATYPE=STRING(200)^PROMPT=Keterangan^'; + +----------------------------------------------------------------------------- +-------------------- PACKAGES FOR METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &PKG implementation + +CREATE OR REPLACE PACKAGE BODY &PKG IS + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS --------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS ---------------------------- +----------------------------------------------------------------------------- +-- Lock_By_Id___ +-- Client-support to lock a specific instance of the logical unit. +-- +-- Lock_By_Keys___ +-- Server support to lock a specific instance of the logical unit. +-- +-- Get_Object_By_Id___ +-- Get LU-record from the database with a specified object identity. +-- +-- Get_Object_By_Keys___ +-- Get LU-record from the database with specified key columns. +-- +-- Check_Exist___ +-- Check if a specific LU-instance already exist in the database. +-- +-- Get_Id_Version_By_Keys___ +-- Get the current OBJID and OBJVERSION for a specific LU-instance. +----------------------------------------------------------------------------- + +FUNCTION Lock_By_Id___ ( + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + row_changed EXCEPTION; + row_deleted EXCEPTION; + row_locked EXCEPTION; + PRAGMA exception_init(row_locked, -0054); + rec_ &TABLE%ROWTYPE; + dummy_ NUMBER; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_ + AND &OBJVERSION = objversion_ + FOR UPDATE NOWAIT; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + END IF; + CLOSE lock_control; + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RAISE row_changed; + ELSE + CLOSE exist_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_locked THEN + Error_SYS.Record_Locked(lu_name_); + WHEN row_changed THEN + Error_SYS.Record_Modified(lu_name_); + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Id___; + +FUNCTION Lock_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + row_deleted EXCEPTION; + rec_ &TABLE%ROWTYPE; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + FOR UPDATE; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + ELSE + CLOSE lock_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Keys___; + +FUNCTION Get_Object_By_Id___ ( + objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + IF (getrec%NOTFOUND) THEN + CLOSE getrec; + Error_SYS.Record_Removed(lu_name_); + END IF; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Id___; + + +FUNCTION Get_Object_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Keys___; + +FUNCTION Check_Exist___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN BOOLEAN +IS + dummy_ NUMBER; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RETURN(TRUE); + END IF; + CLOSE exist_control; + RETURN(FALSE); +END Check_Exist___; + +PROCEDURE Get_Id_Version_By_Keys___ ( + objid_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2) +IS + CURSOR get_version IS + SELECT &OBJID, &OBJVERSION + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN get_version; + FETCH get_version INTO objid_, objversion_; + CLOSE get_version; +END Get_Id_Version_By_Keys___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT ----------------- +----------------------------------------------------------------------------- +-- Prepare_Insert___ +-- Set all default values for a new instance (ON-NEW-RECORD) of this +-- logical unit by calling procedure Add_Attr. +-- +-- Unpack_Check_Insert___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before creation of the new object. +-- +-- Insert___ +-- Insert a new LU-instance into the database and return the values +-- for OBJID and OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Prepare_Insert___ ( + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + Client_SYS.Clear_Attr(attr_); +END Prepare_Insert___; + + +PROCEDURE Unpack_Check_Insert___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + newrec_.company := value_; + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + newrec_.stock_taking_unit_id := value_; + Stock_Taking_Unit_API.Exist(newrec_.company, newrec_.stock_taking_unit_id); + ELSIF (name_ = 'MESIN') THEN + newrec_.mesin := value_; + Stok_Faktur_API.Exist(newrec_.company, newrec_.mesin); + ELSIF (name_ = 'FLAG_REJECT') THEN + newrec_.flag_reject := value_; + ELSIF (name_ = 'KETERANGAN') THEN + newrec_.keterangan := value_; + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); + Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company); + Error_SYS.Check_Not_Null(lu_name_, 'STOCK_TAKING_UNIT_ID', newrec_.stock_taking_unit_id); + Error_SYS.Check_Not_Null(lu_name_, 'MESIN', newrec_.mesin); + Error_SYS.Check_Not_Null(lu_name_, 'FLAG_REJECT', newrec_.flag_reject); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Insert___; + + +PROCEDURE Insert___ ( + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + INSERT + INTO stock_taking_unit_det_tab ( + company, + stock_taking_unit_id, + mesin, + flag_reject, + keterangan, + rowversion) + VALUES ( + newrec_.company, + newrec_.stock_taking_unit_id, + newrec_.mesin, + newrec_.flag_reject, + newrec_.keterangan, + newrec_.rowversion); + objid_ := DBMS_sql.last_row_id; +-- SELECT &OBJID +-- INTO objid_ +-- FROM &TABLE +-- WHERE company = newrec_.company +-- AND stock_taking_unit_id = newrec_.stock_taking_unit_id +-- AND mesin = newrec_.mesin; + +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Insert___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE ----------------- +----------------------------------------------------------------------------- +-- Unpack_Check_Update___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before modifying the object. +-- +-- Update___ +-- Update an existing LU-instance in the database and return the +-- the new OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Unpack_Check_Update___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + objid_ IN VARCHAR2 ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + Error_SYS.Item_Update(lu_name_, 'COMPANY'); + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + Error_SYS.Item_Update(lu_name_, 'STOCK_TAKING_UNIT_ID'); + ELSIF (name_ = 'MESIN') THEN + Error_SYS.Item_Update(lu_name_, 'MESIN'); + ELSIF (name_ = 'FLAG_REJECT') THEN + newrec_.flag_reject := value_; + ELSIF (name_ = 'KETERANGAN') THEN + newrec_.keterangan := value_; + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); + Error_SYS.Check_Not_Null(lu_name_, 'FLAG_REJECT', newrec_.flag_reject); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Update___; + + +PROCEDURE Update___ ( + objid_ IN VARCHAR2, + oldrec_ IN &TABLE%ROWTYPE, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + by_keys_ IN BOOLEAN DEFAULT FALSE ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + IF by_keys_ THEN + UPDATE stock_taking_unit_det_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + mesin = newrec_.mesin, + flag_reject = newrec_.flag_reject, + keterangan = newrec_.keterangan, + rowversion = newrec_.rowversion + WHERE company = newrec_.company + AND stock_taking_unit_id = newrec_.stock_taking_unit_id + AND mesin = newrec_.mesin; + ELSE + UPDATE stock_taking_unit_det_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + mesin = newrec_.mesin, + flag_reject = newrec_.flag_reject, + keterangan = newrec_.keterangan, + rowversion = newrec_.rowversion + WHERE &OBJID = objid_; + END IF; +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Update___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE ----------------- +----------------------------------------------------------------------------- +-- Check_Delete___ +-- Checks whether a specific LU-record may be removed or not. +-- The procedure should check business rules like attribute values +-- as well as database constraints (defined or not). +-- +-- Delete___ +-- Deletion of the specific LU-object from the database. +----------------------------------------------------------------------------- + +PROCEDURE Check_Delete___ ( + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^' || remrec_.mesin || '^'; + Reference_SYS.Check_Restricted_Delete(lu_name_, key_); +END Check_Delete___; + + +PROCEDURE Delete___ ( + objid_ IN VARCHAR2, + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^' || remrec_.mesin || '^'; + Reference_SYS.Do_Cascade_Delete(lu_name_, key_); + DELETE + FROM stock_taking_unit_det_tab + WHERE &OBJID = objid_; +END Delete___; + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- +-- Lock__ +-- Client-support to lock a specific instance of the logical unit. +-- +-- New__ +-- Client-support interface to create LU instances. +-- action_ = 'PREPARE' +-- Default values and handle of information to client. +-- The default values are set in procedure Prepare_Insert___. +-- action_ = 'CHECK' +-- Check all attributes before creating new object and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___. +-- action_ = 'DO' +-- Creation of new instances of the logical unit and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___ +-- before calling procedure Insert___. +-- +-- Modify__ +-- Client-support interface to modify attributes for LU instances. +-- action_ = 'CHECK' +-- Check all attributes before modifying an existing object and +-- handle of information to client. The attribute list is unpacked, +-- checked and prepared(defaults) in procedure Unpack_Check_Update___. +-- action_ = 'DO' +-- Modification of an existing instance of the logical unit. The +-- procedure unpacks the attributes, checks all values before +-- procedure Update___ is called. +-- +-- Remove__ +-- Client-support interface to remove LU instances. +-- action_ = 'CHECK' +-- Check whether a specific LU-instance may be removed or not. +-- The procedure fetches the complete record by calling procedure +-- Get_Object_By_Id___. Then the check is made by calling procedure +-- Check_Delete___. +-- action_ = 'DO' +-- Remove an existing instance of the logical unit. The procedure +-- fetches the complete LU-record, checks for a delete and then +-- deletes the record by calling procedure Delete___. +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) +IS + dummy_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__'); + dummy_ := Lock_By_Id___(objid_, objversion_); + info_ := Client_SYS.Get_All_Info; +END Lock__; + + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'New__'); + IF (action_ = 'PREPARE') THEN + Prepare_Insert___(attr_); + ELSIF (action_ = 'CHECK') THEN + Unpack_Check_Insert___(attr_, newrec_); + ELSIF (action_ = 'DO') THEN + Unpack_Check_Insert___(attr_, newrec_); + Insert___(objid_, objversion_, newrec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END New__; + + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + oldrec_ &TABLE%ROWTYPE; + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__'); + IF (action_ = 'CHECK') THEN + newrec_ := Get_Object_By_Id___(objid_); + Unpack_Check_Update___(attr_, newrec_, objid_); + ELSIF (action_ = 'DO') THEN + oldrec_ := Lock_By_Id___(objid_, objversion_); + newrec_ := oldrec_; + Unpack_Check_Update___(attr_, newrec_, objid_); + Update___(objid_, oldrec_, newrec_, attr_, objversion_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Modify__; + + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ) +IS + remrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__'); + IF (action_ = 'CHECK') THEN + remrec_ := Get_Object_By_Id___(objid_); + Check_Delete___(remrec_); + ELSIF (action_ = 'DO') THEN + remrec_ := Lock_By_Id___(objid_, objversion_); + Check_Delete___(remrec_); + Delete___(objid_, remrec_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Remove__; + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Exist +-- Checks if given pointer (e.g. primary key) to an instance of this +-- logical unit exists. If not an exception will be raised. +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) +IS +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE); + IF (NOT Check_Exist___(company_, stock_taking_unit_id_, mesin_)) THEN + Error_SYS.Record_Not_Exist(lu_name_); + END IF; +END Exist; + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHODS --------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Flag_Reject ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..flag_reject%TYPE; + CURSOR get_attr IS + SELECT flag_reject + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Flag_Reject; + + +FUNCTION Get_Keterangan ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN VARCHAR2 +IS + temp_ &TABLE..keterangan%TYPE; + CURSOR get_attr IS + SELECT keterangan + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Keterangan; + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2 ) RETURN Public_Rec +IS + temp_ Public_Rec; + CURSOR get_attr IS + SELECT flag_reject, keterangan + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get; + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + flag_reject_ IN VARCHAR2, + keterangan_ IN VARCHAR2) +IS + attr_ VARCHAR2(2000); + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Update_Record'); + Get_Id_Version_By_Keys___ (objid_, objversion_, company_,stock_taking_unit_id_,mesin_); + + IF objid_ IS NULL THEN + Client_SYS.Add_To_Attr('COMPANY', company_, attr_); + Client_SYS.Add_To_Attr('STOCK_TAKING_UNIT_ID', stock_taking_unit_id_, attr_); + Client_SYS.Add_To_Attr('MESIN', mesin_, attr_); + END IF; + + Client_SYS.Add_To_Attr('FLAG_REJECT', flag_reject_, attr_); + Client_SYS.Add_To_Attr('KETERANGAN', keterangan_, attr_); + + IF objid_ IS NULL THEN + New__(info_, objid_, objversion_, attr_, 'DO'); + ELSE + Modify__(info_,objid_,objversion_,attr_,'DO'); + END IF; + +END Create_Update_Record; + + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_,mesin_); + Remove__(info_, objid_, objversion_, 'DO'); + +END Remove_Record; + + +PROCEDURE Update_Keterangan( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + keterangan_ IN VARCHAR2) + +IS + attr_ VARCHAR2(2000); + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_,mesin_); + Client_SYS.Add_To_Attr('KETERANGAN', keterangan_, attr_); + Modify__(info_,objid_,objversion_,attr_,'DO'); + +END Update_Keterangan; + + + + + + + + + + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Init +-- Dummy procedure that can be called at database startup to ensure that +-- this package is loaded into memory for performance reasons only. +----------------------------------------------------------------------------- + +PROCEDURE Init +IS +BEGIN + NULL; +END Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnitPic.api b/oracle_API/StockTakingUnitPic.api new file mode 100644 index 0000000..48190a8 --- /dev/null +++ b/oracle_API/StockTakingUnitPic.api @@ -0,0 +1,159 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnitDetPic +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnitDetPic +DEFINE PKG = STOCK_TAKING_UNIT_DET_PIC_API + + +PROMPT Creating &PKG specification + +CREATE OR REPLACE PACKAGE &PKG IS + +module_ CONSTANT VARCHAR2(25) := '&MODULE'; +lu_name_ CONSTANT VARCHAR2(25) := '&LU'; + +TYPE Public_Rec IS RECORD + (jenis stock_taking_unit_det_pic_tab.jenis%TYPE, + latitude stock_taking_unit_det_pic_tab.latitude%TYPE, + longitude stock_taking_unit_det_pic_tab.longitude%TYPE, + lob_id stock_taking_unit_det_pic_tab.lob_id%TYPE); + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ); + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ); + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ); + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ); + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Jenis ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN VARCHAR2; +PRAGMA restrict_references(Get_Jenis, WNDS, WNPS); + + +FUNCTION Get_Latitude ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER; +PRAGMA restrict_references(Get_Latitude, WNDS, WNPS); + + +FUNCTION Get_Longitude ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER; +PRAGMA restrict_references(Get_Longitude, WNDS, WNPS); + + +FUNCTION Get_Lob_Id ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER; +PRAGMA restrict_references(Get_Lob_Id, WNDS, WNPS); + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN Public_Rec; +PRAGMA restrict_references(Get, WNDS, WNPS); + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + jenis_ IN VARCHAR2, + latitude_ IN NUMBER, + longitude_ IN NUMBER, + lob_id_ IN NUMBER); + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER); + + +PROCEDURE Update_Lob_Id( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + lob_id_ IN NUMBER); + + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnitPic.apy b/oracle_API/StockTakingUnitPic.apy new file mode 100644 index 0000000..28ae68e --- /dev/null +++ b/oracle_API/StockTakingUnitPic.apy @@ -0,0 +1,885 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: StockTakingUnitDetPic +-- +-- Purpose: +-- +-- IFS/Design Template Version 2.2 +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = INCON +DEFINE LU = StockTakingUnitDetPic +DEFINE TABLE = STOCK_TAKING_UNIT_DET_PIC_TAB +DEFINE VIEW = STOCK_TAKING_UNIT_DET_PIC +DEFINE PKG = STOCK_TAKING_UNIT_DET_PIC_API + +DEFINE OBJID = rowid +DEFINE OBJVERSION = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))" + +----------------------------------------------------------------------------- +-------------------- VIEWS FOR SELECTS -------------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &VIEW view + +CREATE OR REPLACE VIEW &VIEW AS +SELECT company company, + stock_taking_unit_id stock_taking_unit_id, + mesin mesin, + no_urut no_urut, + jenis jenis, + latitude latitude, + longitude longitude, + lob_id lob_id, + &OBJID objid, + &OBJVERSION objversion +FROM stock_taking_unit_det_pic_tab +WITH read only; + +COMMENT ON TABLE &VIEW + IS 'LU=&LU^PROMPT=Stock Taking Unit Det Pic^MODULE=&MODULE^'; + +COMMENT ON COLUMN &VIEW..company + IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Company^'; +COMMENT ON COLUMN &VIEW..stock_taking_unit_id + IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Stock Taking Unit Id^'; +COMMENT ON COLUMN &VIEW..mesin + IS 'FLAGS=PMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Mesin^REF=StockTakingUnitDet(company,stock_taking_unit_id)^'; +COMMENT ON COLUMN &VIEW..no_urut + IS 'FLAGS=KMI-L^DATATYPE=NUMBER^PROMPT=No Urut^'; +COMMENT ON COLUMN &VIEW..jenis + IS 'FLAGS=A-IUL^DATATYPE=STRING(100)^PROMPT=Jenis^'; +COMMENT ON COLUMN &VIEW..latitude + IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Latitude^'; +COMMENT ON COLUMN &VIEW..longitude + IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Longitude^'; +COMMENT ON COLUMN &VIEW..lob_id + IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Lob Id^'; + +----------------------------------------------------------------------------- +-------------------- PACKAGES FOR METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &PKG implementation + +CREATE OR REPLACE PACKAGE BODY &PKG IS + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS --------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS ---------------------------- +----------------------------------------------------------------------------- +-- Lock_By_Id___ +-- Client-support to lock a specific instance of the logical unit. +-- +-- Lock_By_Keys___ +-- Server support to lock a specific instance of the logical unit. +-- +-- Get_Object_By_Id___ +-- Get LU-record from the database with a specified object identity. +-- +-- Get_Object_By_Keys___ +-- Get LU-record from the database with specified key columns. +-- +-- Check_Exist___ +-- Check if a specific LU-instance already exist in the database. +-- +-- Get_Id_Version_By_Keys___ +-- Get the current OBJID and OBJVERSION for a specific LU-instance. +----------------------------------------------------------------------------- + +FUNCTION Lock_By_Id___ ( + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + row_changed EXCEPTION; + row_deleted EXCEPTION; + row_locked EXCEPTION; + PRAGMA exception_init(row_locked, -0054); + rec_ &TABLE%ROWTYPE; + dummy_ NUMBER; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_ + AND &OBJVERSION = objversion_ + FOR UPDATE NOWAIT; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + END IF; + CLOSE lock_control; + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RAISE row_changed; + ELSE + CLOSE exist_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_locked THEN + Error_SYS.Record_Locked(lu_name_); + WHEN row_changed THEN + Error_SYS.Record_Modified(lu_name_); + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Id___; + +FUNCTION Lock_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN &TABLE%ROWTYPE +IS + row_deleted EXCEPTION; + rec_ &TABLE%ROWTYPE; + CURSOR lock_control IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_ + FOR UPDATE; +BEGIN + OPEN lock_control; + FETCH lock_control INTO rec_; + IF (lock_control%FOUND) THEN + CLOSE lock_control; + RETURN rec_; + ELSE + CLOSE lock_control; + RAISE row_deleted; + END IF; +EXCEPTION + WHEN row_deleted THEN + Error_SYS.Record_Removed(lu_name_); +END Lock_By_Keys___; + +FUNCTION Get_Object_By_Id___ ( + objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE &OBJID = objid_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + IF (getrec%NOTFOUND) THEN + CLOSE getrec; + Error_SYS.Record_Removed(lu_name_); + END IF; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Id___; + + +FUNCTION Get_Object_By_Keys___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN &TABLE%ROWTYPE +IS + lu_rec_ &TABLE%ROWTYPE; + CURSOR getrec IS + SELECT * + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN getrec; + FETCH getrec INTO lu_rec_; + CLOSE getrec; + RETURN(lu_rec_); +END Get_Object_By_Keys___; + +FUNCTION Check_Exist___ ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN BOOLEAN +IS + dummy_ NUMBER; + CURSOR exist_control IS + SELECT 1 + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN exist_control; + FETCH exist_control INTO dummy_; + IF (exist_control%FOUND) THEN + CLOSE exist_control; + RETURN(TRUE); + END IF; + CLOSE exist_control; + RETURN(FALSE); +END Check_Exist___; + +PROCEDURE Get_Id_Version_By_Keys___ ( + objid_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER) +IS + CURSOR get_version IS + SELECT &OBJID, &OBJVERSION + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_version; + FETCH get_version INTO objid_, objversion_; + CLOSE get_version; +END Get_Id_Version_By_Keys___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT ----------------- +----------------------------------------------------------------------------- +-- Prepare_Insert___ +-- Set all default values for a new instance (ON-NEW-RECORD) of this +-- logical unit by calling procedure Add_Attr. +-- +-- Unpack_Check_Insert___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before creation of the new object. +-- +-- Insert___ +-- Insert a new LU-instance into the database and return the values +-- for OBJID and OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Prepare_Insert___ ( + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + Client_SYS.Clear_Attr(attr_); +END Prepare_Insert___; + + +PROCEDURE Unpack_Check_Insert___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + newrec_.company := value_; + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + newrec_.stock_taking_unit_id := value_; + ELSIF (name_ = 'MESIN') THEN + newrec_.mesin := value_; + Stock_Taking_Unit_Det_API.Exist(newrec_.company, newrec_.stock_taking_unit_id, newrec_.mesin); + ELSIF (name_ = 'NO_URUT') THEN + newrec_.no_urut := Client_SYS.Attr_Value_To_Number(value_); + ELSIF (name_ = 'JENIS') THEN + newrec_.jenis := value_; + ELSIF (name_ = 'LATITUDE') THEN + newrec_.latitude := Client_SYS.Attr_Value_To_Number(value_); + ELSIF (name_ = 'LONGITUDE') THEN + newrec_.longitude := Client_SYS.Attr_Value_To_Number(value_); + ELSIF (name_ = 'LOB_ID') THEN + newrec_.lob_id := Client_SYS.Attr_Value_To_Number(value_); + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); + Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company); + Error_SYS.Check_Not_Null(lu_name_, 'STOCK_TAKING_UNIT_ID', newrec_.stock_taking_unit_id); + Error_SYS.Check_Not_Null(lu_name_, 'MESIN', newrec_.mesin); + Error_SYS.Check_Not_Null(lu_name_, 'NO_URUT', newrec_.no_urut); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Insert___; + + +PROCEDURE Insert___ ( + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2 ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + INSERT + INTO stock_taking_unit_det_pic_tab ( + company, + stock_taking_unit_id, + mesin, + no_urut, + jenis, + latitude, + longitude, + lob_id, + rowversion) + VALUES ( + newrec_.company, + newrec_.stock_taking_unit_id, + newrec_.mesin, + newrec_.no_urut, + newrec_.jenis, + newrec_.latitude, + newrec_.longitude, + newrec_.lob_id, + newrec_.rowversion); + objid_ := DBMS_sql.last_row_id; +-- SELECT &OBJID +-- INTO objid_ +-- FROM &TABLE +-- WHERE company = newrec_.company +-- AND stock_taking_unit_id = newrec_.stock_taking_unit_id +-- AND mesin = newrec_.mesin +-- AND no_urut = newrec_.no_urut; + +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Insert___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE ----------------- +----------------------------------------------------------------------------- +-- Unpack_Check_Update___ +-- Unpack the attribute list, check all attributes from the client +-- and generate all default values before modifying the object. +-- +-- Update___ +-- Update an existing LU-instance in the database and return the +-- the new OBJVERSION. +----------------------------------------------------------------------------- + +PROCEDURE Unpack_Check_Update___ ( + attr_ IN OUT VARCHAR2, + newrec_ IN OUT &TABLE%ROWTYPE, + objid_ IN VARCHAR2 ) +IS + ptr_ NUMBER; + name_ VARCHAR2(30); + value_ VARCHAR2(2000); +BEGIN + ptr_ := NULL; + WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP + IF (name_ = 'COMPANY') THEN + Error_SYS.Item_Update(lu_name_, 'COMPANY'); + ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN + Error_SYS.Item_Update(lu_name_, 'STOCK_TAKING_UNIT_ID'); + ELSIF (name_ = 'MESIN') THEN + Error_SYS.Item_Update(lu_name_, 'MESIN'); + ELSIF (name_ = 'NO_URUT') THEN + Error_SYS.Item_Update(lu_name_, 'NO_URUT'); + ELSIF (name_ = 'JENIS') THEN + newrec_.jenis := value_; + ELSIF (name_ = 'LATITUDE') THEN + newrec_.latitude := Client_SYS.Attr_Value_To_Number(value_); + ELSIF (name_ = 'LONGITUDE') THEN + newrec_.longitude := Client_SYS.Attr_Value_To_Number(value_); + ELSIF (name_ = 'LOB_ID') THEN + newrec_.lob_id := Client_SYS.Attr_Value_To_Number(value_); + ELSE + Error_SYS.Item_Not_Exist(lu_name_, name_, value_); + END IF; + END LOOP; + Client_SYS.Clear_Attr(attr_); +EXCEPTION + WHEN value_error THEN + Error_SYS.Item_Format(lu_name_, name_, value_); +END Unpack_Check_Update___; + + +PROCEDURE Update___ ( + objid_ IN VARCHAR2, + oldrec_ IN &TABLE%ROWTYPE, + newrec_ IN OUT &TABLE%ROWTYPE, + attr_ IN OUT VARCHAR2, + objversion_ IN OUT VARCHAR2, + by_keys_ IN BOOLEAN DEFAULT FALSE ) +IS +BEGIN + newrec_.rowversion := sysdate; + objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); + IF by_keys_ THEN + UPDATE stock_taking_unit_det_pic_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + mesin = newrec_.mesin, + no_urut = newrec_.no_urut, + jenis = newrec_.jenis, + latitude = newrec_.latitude, + longitude = newrec_.longitude, + lob_id = newrec_.lob_id, + rowversion = newrec_.rowversion + WHERE company = newrec_.company + AND stock_taking_unit_id = newrec_.stock_taking_unit_id + AND mesin = newrec_.mesin + AND no_urut = newrec_.no_urut; + ELSE + UPDATE stock_taking_unit_det_pic_tab + SET company = newrec_.company, + stock_taking_unit_id = newrec_.stock_taking_unit_id, + mesin = newrec_.mesin, + no_urut = newrec_.no_urut, + jenis = newrec_.jenis, + latitude = newrec_.latitude, + longitude = newrec_.longitude, + lob_id = newrec_.lob_id, + rowversion = newrec_.rowversion + WHERE &OBJID = objid_; + END IF; +EXCEPTION + WHEN dup_val_on_index THEN + Error_SYS.Record_Exist(lu_name_); +END Update___; + +----------------------------------------------------------------------------- +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE ----------------- +----------------------------------------------------------------------------- +-- Check_Delete___ +-- Checks whether a specific LU-record may be removed or not. +-- The procedure should check business rules like attribute values +-- as well as database constraints (defined or not). +-- +-- Delete___ +-- Deletion of the specific LU-object from the database. +----------------------------------------------------------------------------- + +PROCEDURE Check_Delete___ ( + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^' || remrec_.mesin || '^' || remrec_.no_urut || '^'; + Reference_SYS.Check_Restricted_Delete(lu_name_, key_); +END Check_Delete___; + + +PROCEDURE Delete___ ( + objid_ IN VARCHAR2, + remrec_ IN &TABLE%ROWTYPE ) +IS + key_ VARCHAR2(2000); +BEGIN + key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^' || remrec_.mesin || '^' || remrec_.no_urut || '^'; + Reference_SYS.Do_Cascade_Delete(lu_name_, key_); + DELETE + FROM stock_taking_unit_det_pic_tab + WHERE &OBJID = objid_; +END Delete___; + +----------------------------------------------------------------------------- +-------------------- PRIVATE BASE METHODS ----------------------------------- +----------------------------------------------------------------------------- +-- Lock__ +-- Client-support to lock a specific instance of the logical unit. +-- +-- New__ +-- Client-support interface to create LU instances. +-- action_ = 'PREPARE' +-- Default values and handle of information to client. +-- The default values are set in procedure Prepare_Insert___. +-- action_ = 'CHECK' +-- Check all attributes before creating new object and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___. +-- action_ = 'DO' +-- Creation of new instances of the logical unit and handle of +-- information to client. The attribute list is unpacked, checked +-- and prepared (defaults) in procedure Unpack_Check_Insert___ +-- before calling procedure Insert___. +-- +-- Modify__ +-- Client-support interface to modify attributes for LU instances. +-- action_ = 'CHECK' +-- Check all attributes before modifying an existing object and +-- handle of information to client. The attribute list is unpacked, +-- checked and prepared(defaults) in procedure Unpack_Check_Update___. +-- action_ = 'DO' +-- Modification of an existing instance of the logical unit. The +-- procedure unpacks the attributes, checks all values before +-- procedure Update___ is called. +-- +-- Remove__ +-- Client-support interface to remove LU instances. +-- action_ = 'CHECK' +-- Check whether a specific LU-instance may be removed or not. +-- The procedure fetches the complete record by calling procedure +-- Get_Object_By_Id___. Then the check is made by calling procedure +-- Check_Delete___. +-- action_ = 'DO' +-- Remove an existing instance of the logical unit. The procedure +-- fetches the complete LU-record, checks for a delete and then +-- deletes the record by calling procedure Delete___. +----------------------------------------------------------------------------- + +PROCEDURE Lock__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2 ) +IS + dummy_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__'); + dummy_ := Lock_By_Id___(objid_, objversion_); + info_ := Client_SYS.Get_All_Info; +END Lock__; + + +PROCEDURE New__ ( + info_ OUT VARCHAR2, + objid_ OUT VARCHAR2, + objversion_ OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'New__'); + IF (action_ = 'PREPARE') THEN + Prepare_Insert___(attr_); + ELSIF (action_ = 'CHECK') THEN + Unpack_Check_Insert___(attr_, newrec_); + ELSIF (action_ = 'DO') THEN + Unpack_Check_Insert___(attr_, newrec_); + Insert___(objid_, objversion_, newrec_, attr_); + END IF; + info_ := Client_SYS.Get_All_Info; +END New__; + + +PROCEDURE Modify__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN OUT VARCHAR2, + attr_ IN OUT VARCHAR2, + action_ IN VARCHAR2 ) +IS + oldrec_ &TABLE%ROWTYPE; + newrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__'); + IF (action_ = 'CHECK') THEN + newrec_ := Get_Object_By_Id___(objid_); + Unpack_Check_Update___(attr_, newrec_, objid_); + ELSIF (action_ = 'DO') THEN + oldrec_ := Lock_By_Id___(objid_, objversion_); + newrec_ := oldrec_; + Unpack_Check_Update___(attr_, newrec_, objid_); + Update___(objid_, oldrec_, newrec_, attr_, objversion_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Modify__; + + +PROCEDURE Remove__ ( + info_ OUT VARCHAR2, + objid_ IN VARCHAR2, + objversion_ IN VARCHAR2, + action_ IN VARCHAR2 ) +IS + remrec_ &TABLE%ROWTYPE; +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__'); + IF (action_ = 'CHECK') THEN + remrec_ := Get_Object_By_Id___(objid_); + Check_Delete___(remrec_); + ELSIF (action_ = 'DO') THEN + remrec_ := Lock_By_Id___(objid_, objversion_); + Check_Delete___(remrec_); + Delete___(objid_, remrec_); + END IF; + info_ := Client_SYS.Get_All_Info; +END Remove__; + +----------------------------------------------------------------------------- +-------------------- PUBLIC BASE METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Exist +-- Checks if given pointer (e.g. primary key) to an instance of this +-- logical unit exists. If not an exception will be raised. +----------------------------------------------------------------------------- + +PROCEDURE Exist ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) +IS +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE); + IF (NOT Check_Exist___(company_, stock_taking_unit_id_, mesin_, no_urut_)) THEN + Error_SYS.Record_Not_Exist(lu_name_); + END IF; +END Exist; + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHODS --------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +FUNCTION Get_Jenis ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN VARCHAR2 +IS + temp_ &TABLE..jenis%TYPE; + CURSOR get_attr IS + SELECT jenis + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Jenis; + + +FUNCTION Get_Latitude ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER +IS + temp_ &TABLE..latitude%TYPE; + CURSOR get_attr IS + SELECT latitude + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Latitude; + + +FUNCTION Get_Longitude ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER +IS + temp_ &TABLE..longitude%TYPE; + CURSOR get_attr IS + SELECT longitude + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Longitude; + + +FUNCTION Get_Lob_Id ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN NUMBER +IS + temp_ &TABLE..lob_id%TYPE; + CURSOR get_attr IS + SELECT lob_id + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get_Lob_Id; + + +FUNCTION Get ( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER ) RETURN Public_Rec +IS + temp_ Public_Rec; + CURSOR get_attr IS + SELECT jenis, latitude, longitude, lob_id + FROM &TABLE + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_ + AND no_urut = no_urut_; +BEGIN + OPEN get_attr; + FETCH get_attr INTO temp_; + CLOSE get_attr; + RETURN temp_; +END Get; + + +PROCEDURE Create_Update_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + jenis_ IN VARCHAR2, + latitude_ IN NUMBER, + longitude_ IN NUMBER, + lob_id_ IN NUMBER) +IS + + attr_ VARCHAR2(2000); + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + + CURSOR get_no_urut IS + select NVL(MAX(no_urut),0) + 1 from &VIEW. + WHERE company = company_ + AND stock_taking_unit_id = stock_taking_unit_id_ + AND mesin = mesin_; + + temp_ NUMBER; + +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Update_Record'); + Get_Id_Version_By_Keys___ (objid_, objversion_, company_,stock_taking_unit_id_,mesin_,no_urut_); + + IF objid_ IS NULL THEN + -- OPEN get_no_urut; + -- FETCH get_no_urut INTO temp_; + -- CLOSE get_no_urut; + + Client_SYS.Add_To_Attr('COMPANY', company_, attr_); + Client_SYS.Add_To_Attr('STOCK_TAKING_UNIT_ID', stock_taking_unit_id_, attr_); + Client_SYS.Add_To_Attr('MESIN', mesin_, attr_); + Client_SYS.Add_To_Attr('NO_URUT', no_urut_, attr_); + END IF; + + Client_SYS.Add_To_Attr('JENIS', jenis_, attr_); + Client_SYS.Add_To_Attr('LATITUDE', latitude_, attr_); + Client_SYS.Add_To_Attr('LONGITUDE', longitude_, attr_); + Client_SYS.Add_To_Attr('LOB_ID', lob_id_, attr_); + + IF objid_ IS NULL THEN + New__(info_, objid_, objversion_, attr_, 'DO'); + ELSE + Modify__(info_,objid_,objversion_,attr_,'DO'); + END IF; + +END Create_Update_Record; + + +PROCEDURE Remove_Record( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER) + +IS + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_,mesin_,no_urut_); + Remove__(info_, objid_, objversion_, 'DO'); + +END Remove_Record; + + +PROCEDURE Update_Lob_Id( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + lob_id_ IN NUMBER) +IS + attr_ VARCHAR2(2000); + objid_ VARCHAR2(200); + objversion_ VARCHAR2(2000); + info_ VARCHAR2(2000); + +BEGIN + General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Lob_Id'); + Get_Id_Version_By_Keys___ (objid_, objversion_, company_,stock_taking_unit_id_,mesin_,no_urut_); + Client_SYS.Add_To_Attr('LOB_ID', lob_id_, attr_); + Modify__(info_,objid_,objversion_,attr_,'DO'); + +END Update_Lob_Id; + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Init +-- Dummy procedure that can be called at database startup to ensure that +-- this package is loaded into memory for performance reasons only. +----------------------------------------------------------------------------- + +PROCEDURE Init +IS +BEGIN + NULL; +END Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- diff --git a/oracle_API/StockTakingUnitUtils.api b/oracle_API/StockTakingUnitUtils.api new file mode 100644 index 0000000..40dcccd --- /dev/null +++ b/oracle_API/StockTakingUnitUtils.api @@ -0,0 +1,60 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: KreditUtil +-- +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +----------------------------------------------------------------------------- + +DEFINE MODULE = UTILS +DEFINE LU = Stock_Taking_Unit_Utils +DEFINE PKG = STOCK_TAKING_UNIT_UTILS_API + +PROMPT Creating &PKG specification + +CREATE OR REPLACE PACKAGE &PKG IS + +module_ CONSTANT VARCHAR2(25) := '&MODULE'; +lu_name_ CONSTANT VARCHAR2(25) := '&LU'; + + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + + +PROCEDURE Create_Stock_Taking_Blob( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + jenis_ IN VARCHAR2, + latitude_ IN NUMBER, + longitude_ IN NUMBER, + blob_file_ IN BLOB + ); + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- + +PROCEDURE Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- \ No newline at end of file diff --git a/oracle_API/StockTakingUnitUtils.apy b/oracle_API/StockTakingUnitUtils.apy new file mode 100644 index 0000000..3cfbc9b --- /dev/null +++ b/oracle_API/StockTakingUnitUtils.apy @@ -0,0 +1,143 @@ +----------------------------------------------------------------------------- +-- +-- Logical unit: CabangUtil +-- +-- Purpose: +-- +-- +-- Date Sign History +-- ------ ---- ----------------------------------------------------------- +-- 211119 FRK- Create Push_Message +----------------------------------------------------------------------------- + +DEFINE MODULE = UTILS +DEFINE LU = Stock_Taking_Unit_Utils +DEFINE PKG = STOCK_TAKING_UNIT_UTILS_API + +DEFINE OBJID = rowid +DEFINE OBJVERSION = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))" + +----------------------------------------------------------------------------- +-------------------- PACKAGES FOR METHODS ----------------------------------- +----------------------------------------------------------------------------- + +PROMPT Creating &PKG implementation + +CREATE OR REPLACE PACKAGE BODY &PKG IS + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS --------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC IMPLEMENTATION METHODS --------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PROTECTED METHODS -------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- +----------------------------------------------------------------------------- + +PROCEDURE Create_Stock_Taking_Blob( + company_ IN VARCHAR2, + stock_taking_unit_id_ IN VARCHAR2, + mesin_ IN VARCHAR2, + no_urut_ IN NUMBER, + jenis_ IN VARCHAR2, + latitude_ IN NUMBER, + longitude_ IN NUMBER, + blob_file_ IN BLOB + ) + +IS + new_lob_id_ VARCHAR2(4000) := null; +BEGIN + + STOCK_TAKING_UNIT_DET_PIC_API.Create_Update_Record( + company_ => company_, + stock_taking_unit_id_ => stock_taking_unit_id_, + mesin_ => mesin_, + no_urut_ => no_urut_, + jenis_ => jenis_, + latitude_ => latitude_, + longitude_ => longitude_, + lob_id_ => new_lob_id_); + + + SELECT binary_object_temp_tab_seq.nextval INTO new_lob_id_ + FROM dual; + INSERT + INTO binary_object_apex_temp_tab( + blob_id, + file_blob, + file_name, + file_dir, + file_length, + mime_type, + ref_package, + ref1, + ref2, + ref3, + ref4, + ref5, + created_by, + created_date, + rowversion) + VALUES( + new_lob_id_, + EMPTY_BLOB(), + stock_taking_unit_id_|| '_' || mesin_|| '_' || no_urut_ || '.jpg', + 'F' || TO_CHAR(sysdate,'YYYY'), + dbms_lob.getlength(blob_file_), + 'image/jpeg', + 'STOCK_TAKING_UNIT_API', + company_, --ref1 <-- COMPANY + stock_taking_unit_id_, --ref2 <-- STOCK_TAKING_UNIT_ID + mesin_, --ref3 <-- mesin + no_urut_, --ref4 <--NO_URUT + null, + Utils_API.Get_Fnd_User, --created_by + sysdate, --created_date + sysdate); + UPDATE binary_object_apex_temp_tab + SET file_blob = blob_file_ + WHERE blob_id = new_lob_id_; + MY_BLOB_UTIL_API.Apex_Upload_File(new_lob_id_); + +END; + + + + +----------------------------------------------------------------------------- +-------------------- FOUNDATION1 METHODS ------------------------------------ +----------------------------------------------------------------------------- +-- Init +-- Dummy procedure that can be called at database startup to ensure that +-- this package is loaded into memory for performance reasons only. +----------------------------------------------------------------------------- + +PROCEDURE Init +IS +BEGIN + NULL; +END Init; + + +END &PKG; +/ +SHOW ERROR + +----------------------------------------------------------------------------- \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..034aeca --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1013 @@ +{ + "name": "unitcheck", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-parser": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", + "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hbs": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.1.1.tgz", + "integrity": "sha512-6QsbB4RwbpL4cb4DNyjEEPF+suwp+3yZqFVlhILEn92ScC0U4cDCR+FDX53jkfKJPhutcqhAvs+rOLZw5sQrDA==", + "requires": { + "handlebars": "4.7.6", + "walk": "2.3.14" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + }, + "needle": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", + "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "node-cron": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz", + "integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==", + "requires": { + "opencollective-postinstall": "^2.0.0", + "tz-offset": "0.0.1" + } + }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + }, + "oracledb": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-4.2.0.tgz", + "integrity": "sha512-07ZylNcUB9wknsiRa7dNqDWgGK3loP8eNWuoCjsiCOZ19PA1g8QLu+0gah7ty82VXl/MOQYFCMl5OpjD9Aqjcw==" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "sqlite3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "tz-offset": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz", + "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==" + }, + "uglify-js": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.2.tgz", + "integrity": "sha512-zGVwKslUAD/EeqOrD1nQaBmXIHl1Vw371we8cvS8I6mYK9rmgX5tv8AAeJdfsQ3Kk5mGax2SVV/AizxdNGhl7Q==", + "optional": true, + "requires": { + "commander": "~2.20.3" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "walk": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", + "requires": { + "foreachasync": "^3.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9abc070 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "unitcheck", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./server.js" + }, + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "~4.16.1", + "fs-extra": "^9.0.1", + "hbs": "^4.1.1", + "http-errors": "~1.6.3", + "moment": "^2.27.0", + "morgan": "~1.9.1", + "node-cron": "^2.0.3", + "oracledb": "^4.2.0", + "path": "^0.12.7", + "sqlite3": "^4.2.0" + } +} diff --git a/process.json b/process.json new file mode 100644 index 0000000..eb43031 --- /dev/null +++ b/process.json @@ -0,0 +1,11 @@ +{ + name: "unit-stock", + script: "./server.js", + exec_mode: "cluster", + instances: 4, + env: { + "PORT": 3535, + "NODE_ENV": "production", + "UV_THREADPOOL_SIZE": 10 + } +} \ No newline at end of file diff --git a/routes/dataget.js b/routes/dataget.js new file mode 100644 index 0000000..9c222e4 --- /dev/null +++ b/routes/dataget.js @@ -0,0 +1,22 @@ +var express = require('express'); +var router = express.Router(); +var sqliteModel = require('../model/sqliteModel.js'); + + +router.get('/getSqliteDb/:company/:cabangId', async function(req,res,next){ + var company = req.params.company; + var cabangId = req.params.cabangId; + var sqliteDb = await sqliteModel.CreateDataCollection(company,cabangId); + if(sqliteDb["STATUS"] == 0){ + return res.status(500).send(sqliteDb["DATA"]); + } + else{ + var dbPath = sqliteDb["DATA"]; + res.download(dbPath); + } +}); + + + + +module.exports = router; diff --git a/routes/datapost.js b/routes/datapost.js new file mode 100644 index 0000000..8976f3d --- /dev/null +++ b/routes/datapost.js @@ -0,0 +1,79 @@ +var express = require('express'); +var router = express.Router(); +var fs = require('fs'); +const path = require('path'); + +var sqliteModel = require('../model/sqliteModel.js'); +var oracleModel = require('../model/oracleModel.js'); + + +router.post('/uploadSqlitedb',async function(req,res,next){ + try{ + var dbBytes = req.body.byte; + + var company = req.body.company; + var cabangId = req.body.cabangId; + var activeStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); + + if(activeStockTaking == undefined) return res.json({"STATUS" : 0, "DATA" : 'Data Stock Taking dalam status tidak Open !'}); + + var dirPath = path.join(__dirname , `../public/sqlite/upload/${company}/${cabangId}`); + + fs.mkdir(dirPath, { recursive: true }, (err) => { + // console.log('2',err); + var d = new Date(); + var n = d.getTime(); + var dbName = `${n}.db` + var dbPath = path.join(dirPath , dbName); + var a = fs.writeFileSync(dbPath,Buffer.from(dbBytes)); + return res.json({"STATUS" : 1, "DATA" : 'Data send successfully' , "dbPath" : dbPath}); + }); + } + catch(e){ + return res.json({"STATUS" : 0, "DATA" : e}); + } +}); + + +router.post('/unpackDb', async function(req,res,next){ + var dbPath = req.body.dbPath; + var company = req.body.company; + var cabangId = req.body.cabangId; + var data = await sqliteModel.unpackAndInsert(dbPath,company,cabangId); + + return res.json(data); +}) + +router.post('/login',async function(req,res,next){ + var username = req.body.User; + var password = req.body.Pass; + var data = await oracleModel.getDataUser(username,password); + return res.send(data); +}) + +router.post('/getCabangByUser',async function(req,res,next){ + var company = req.body.company; + var username = req.body.User; + var data = await oracleModel.getDataCabangByUser(company,username); + return res.send(data); +}) + +router.post('/submitStock', async function(req,res,next){ + console.log(req.body); + var company = req.body.company; + var stockTakingId = req.body.stockTakingId; + var data = await oracleModel.submitStockTaking(company,stockTakingId); + return res.send(data); + +}); + +router.post('/getStateStockUnit', async function(req,res){ + var company = req.body.company; + var stockTakingId = req.body.stockTakingId; + var stateStockTaking = await oracleModel.getStateStockTaking(company,stockTakingId); + return res.send(stateStockTaking); +}) + + + +module.exports = router; \ No newline at end of file diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..623e430 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/server.js b/server.js new file mode 100644 index 0000000..2c71c01 --- /dev/null +++ b/server.js @@ -0,0 +1,104 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('./config/config'); +var debug = require('debug')('unitcheck:server'); +var http = require('http'); +const cron = require('node-cron'); +const path = require('path'); +const fs = require('fs-extra'); + + + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3451'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); +server.setTimeout(600000); + +cron.schedule('59 23 * * * *', function() { + + var dirPath = path.join(__dirname , `/public/sqlite/db/`); + fs.emptyDirSync(dirPath); + +}); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + console.log('Listening on ' + bind); + debug('Listening on ' + bind); +} diff --git a/util/db_oracle.js b/util/db_oracle.js new file mode 100644 index 0000000..249a008 --- /dev/null +++ b/util/db_oracle.js @@ -0,0 +1,177 @@ +const oracledb = require('oracledb'); +var oracleConfig = require('../config/oracle.js').oracleConfig; + +oracledb.fetchAsString = [ oracledb.CLOB ]; +oracledb.fetchAsBuffer = [ oracledb.BLOB ]; + + +function editError(err){ + var newError = err; + var newErrorString = ''; + if(newError.indexOf("\n")!=-1){ + var indexColon = newError.indexOf(":")+1; + var indexNewLine = newError.indexOf("\n"); + var newErrorSubString = newError.substring(0, indexNewLine); + newErrorSubString = newErrorSubString.substring(indexColon, newErrorSubString.length); + newErrorString = newErrorSubString; + }else{ + var indexColon = newError.indexOf(":")+1; + newError = newError.substring(indexColon, newError.length); + newErrorString = newError; + } + + return newErrorString.substring(newErrorString.indexOf('.','start')+1); +} + +async function getData(query,params = {},options = {}){ + let conn; + let error = []; + var result; + + var queryOptions = { + outFormat:oracledb.OBJECT + } + for(key in options){ + queryOptions[key] = options[key]; + } + + try{ + conn = await oracledb.getConnection(oracleConfig); + var data = await conn.execute(query,params,queryOptions); + result = {"STATUS" : 1 , "DATA" : data.rows}; + return result; + + + } + catch(e){ + result = {"STATUS" : 0 , "DATA" : e.message}; + return result; + } + finally{ + if(conn){ + try{ + await conn.close(); + } + catch(e){ + result = {"STATUS" : 0 , "DATA" : e.message}; + return result; + + } + } + } +} + +async function runQuery(query, params,user_id = null,owner = null) { + let conn; + var result; + try{ + conn = await oracledb.getConnection(oracleConfig); + // var query = `BEGIN ${owner}.General_SYS.Init_Fnd_Session__(UPPER(:user_login)); END;`; + // var par = {user_login:user_id}; + // console.log('Inserted'); + + // await conn.execute(query,par); + data = await conn.execute(query,params,{ outFormat: oracledb.OBJECT }); + + await conn.commit(); + result = {"STATUS":1,"DATA":data}; + } + catch(e){ + await conn.rollback(); + result = {"STATUS":0,"DATA":e.message}; + + } + finally{ + if(conn){await conn.close()}; + return result; + } + +}; + + +async function getConnection(){ + try{ + let conn; + conn = await oracledb.getConnection(oracleConfig); + return conn; + } + catch(e){ + console.log(e.message); + throw editError(e.message); + } +} + + +async function getQueryData(conn,query, params,user_id = null,owner = null){ + try{ + var data = await conn.execute(query,params,{ outFormat: oracledb.OBJECT }); + return data.rows; + } + catch(e){ + throw editError(e.message); + } +} + +async function runQueryData(conn,query, params,user_id = null,owner = null){ + try{ + var data = await conn.execute(query,params,{ outFormat: oracledb.OBJECT }); + return data; + } + catch(e){ + throw editError(e.message); + } +} + +async function runQueryMany(conn,query, params,user_id = null,owner = null){ + try{ + var data = await conn.executeMany(query,params,{ outFormat: oracledb.OBJECT }); + return data; + } + catch(e){ + throw editError(e.message); + } +} + +async function doCommit(conn){ + try{ + var connection = conn; + await connection.commit(); + } + catch(e){ + throw editError(e.message); + } +}; + +async function doRelease(conn){ + try{ + var connection = conn; + await connection.close(); + } + catch(e){ + throw editError(e.message); + } +} + +async function doRollBack(conn){ + try{ + var connection = conn; + await connection.rollback(); + await conn.close(); + } + catch(e){ + throw e; + } +} + + +module.exports = { + getData : getData, + runQuery : runQuery, + getConnection : getConnection, + getQueryData : getQueryData, + runQueryData : runQueryData, + runQueryMany : runQueryMany, + doCommit : doCommit, + doRelease : doRelease, + doRollBack : doRollBack +} \ No newline at end of file diff --git a/util/db_sqlite.js b/util/db_sqlite.js new file mode 100644 index 0000000..57bae18 --- /dev/null +++ b/util/db_sqlite.js @@ -0,0 +1,29 @@ +var sqlite3 = require('sqlite3').verbose(); + + +module.exports.runQuery = function runQuery(db,query){ + return new Promise(function(resolve,reject){ + db.run(query,[],function(err){ + if(err){ + resolve({"STATUS":0,"DATA":err.message}) + } + else{ + resolve({"STATUS":1,"DATA":"Query Success Running"}) + } + }) + }) + +} + +module.exports.selectQuery = function selectQuery(db,query){ + return new Promise(function(resolve,reject){ + db.all(query,[],function(err,rows){ + if(err){ + resolve({"STATUS":0,"DATA":err.message}) + } + else{ + resolve({"STATUS":1,"DATA":rows}) + } + }) + }) +} \ No newline at end of file diff --git a/util/handlebars_helper.js b/util/handlebars_helper.js new file mode 100644 index 0000000..43c6a21 --- /dev/null +++ b/util/handlebars_helper.js @@ -0,0 +1,7 @@ +var hbs = require('hbs'); + +hbs.registerHelper('check_selected', function (value, options) { + if(options.fn(this).indexOf(value) >= 1){ + return `selected='selected'`; + } +}); \ No newline at end of file diff --git a/views/error.hbs b/views/error.hbs new file mode 100644 index 0000000..8263ada --- /dev/null +++ b/views/error.hbs @@ -0,0 +1,74 @@ + + + + + + + + + +
+
4
+ +
4
+
Maybe this page moved? Got deleted? Is hiding out in quarantine? Never existed in the first place?
+
\ No newline at end of file