Browse Source

master

master
jefry 4 years ago
parent
commit
64aeae1248
26 changed files with 6979 additions and 0 deletions
  1. +3
    -0
      .gitignore
  2. +46
    -0
      config/config.js
  3. +12
    -0
      config/oracle.js
  4. +32
    -0
      ecosystem.config.js
  5. +481
    -0
      model/oracleModel.js
  6. +348
    -0
      model/sqliteModel.js
  7. +535
    -0
      oracle_API/InconNew.cre
  8. +300
    -0
      oracle_API/StockTakingUnit.api
  9. +1515
    -0
      oracle_API/StockTakingUnit.apy
  10. +132
    -0
      oracle_API/StockTakingUnitDet.api
  11. +781
    -0
      oracle_API/StockTakingUnitDet.apy
  12. +159
    -0
      oracle_API/StockTakingUnitPic.api
  13. +885
    -0
      oracle_API/StockTakingUnitPic.apy
  14. +60
    -0
      oracle_API/StockTakingUnitUtils.api
  15. +143
    -0
      oracle_API/StockTakingUnitUtils.apy
  16. +1013
    -0
      package-lock.json
  17. +22
    -0
      package.json
  18. +11
    -0
      process.json
  19. +22
    -0
      routes/dataget.js
  20. +79
    -0
      routes/datapost.js
  21. +9
    -0
      routes/users.js
  22. +104
    -0
      server.js
  23. +177
    -0
      util/db_oracle.js
  24. +29
    -0
      util/db_sqlite.js
  25. +7
    -0
      util/handlebars_helper.js
  26. +74
    -0
      views/error.hbs

+ 3
- 0
.gitignore View File

@@ -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


+ 46
- 0
config/config.js View File

@@ -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;

+ 12
- 0
config/oracle.js View File

@@ -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}`
}

+ 32
- 0
ecosystem.config.js View File

@@ -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'
}
}
};

+ 481
- 0
model/oracleModel.js View File

@@ -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
}


+ 348
- 0
model/sqliteModel.js View File

@@ -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
};

+ 535
- 0
oracle_API/InconNew.cre View File

@@ -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))
/

+ 300
- 0
oracle_API/StockTakingUnit.api View File

@@ -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

-----------------------------------------------------------------------------

+ 1515
- 0
oracle_API/StockTakingUnit.apy
File diff suppressed because it is too large
View File


+ 132
- 0
oracle_API/StockTakingUnitDet.api View File

@@ -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

-----------------------------------------------------------------------------

+ 781
- 0
oracle_API/StockTakingUnitDet.apy View File

@@ -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

-----------------------------------------------------------------------------

+ 159
- 0
oracle_API/StockTakingUnitPic.api View File

@@ -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

-----------------------------------------------------------------------------

+ 885
- 0
oracle_API/StockTakingUnitPic.apy View File

@@ -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

-----------------------------------------------------------------------------

+ 60
- 0
oracle_API/StockTakingUnitUtils.api View File

@@ -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

-----------------------------------------------------------------------------

+ 143
- 0
oracle_API/StockTakingUnitUtils.apy View File

@@ -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

-----------------------------------------------------------------------------

+ 1013
- 0
package-lock.json
File diff suppressed because it is too large
View File


+ 22
- 0
package.json View File

@@ -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"
}
}

+ 11
- 0
process.json View File

@@ -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
}
}

+ 22
- 0
routes/dataget.js View File

@@ -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;

+ 79
- 0
routes/datapost.js View File

@@ -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;

+ 9
- 0
routes/users.js View File

@@ -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;

+ 104
- 0
server.js View File

@@ -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);
}

+ 177
- 0
util/db_oracle.js View File

@@ -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
}

+ 29
- 0
util/db_sqlite.js View File

@@ -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})
}
})
})
}

+ 7
- 0
util/handlebars_helper.js View File

@@ -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'`;
}
});

+ 74
- 0
views/error.hbs View File

@@ -0,0 +1,74 @@
<!-- purple x moss 2020 -->

<head>
<link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@600;900&display=swap" rel="stylesheet">
<script src="https://kit.fontawesome.com/4b9ba14b0f.js" crossorigin="anonymous"></script>
</head>

<style type="text/css">
body {
background-color: #95c2de;
}

.mainbox {
background-color: #95c2de;
margin: auto;
height: 600px;
width: 600px;
position: relative;
}

.err {
color: #ffffff;
font-family: 'Nunito Sans', sans-serif;
font-size: 11rem;
position:absolute;
left: 20%;
top: 8%;
}

.far {
position: absolute;
font-size: 8.5rem;
left: 42%;
top: 15%;
color: #ffffff;
}

.err2 {
color: #ffffff;
font-family: 'Nunito Sans', sans-serif;
font-size: 11rem;
position:absolute;
left: 68%;
top: 8%;
}

.msg {
text-align: center;
font-family: 'Nunito Sans', sans-serif;
font-size: 1.6rem;
position:absolute;
left: 16%;
top: 45%;
width: 75%;
}

a {
text-decoration: none;
color: white;
}

a:hover {
text-decoration: underline;
}

</style>
<body>
<div class="mainbox">
<div class="err">4</div>
<i class="far fa-question-circle fa-spin"></i>
<div class="err2">4</div>
<div class="msg">Maybe this page moved? Got deleted? Is hiding out in quarantine? Never existed in the first place?</div>
</div>

Loading…
Cancel
Save