Commit a792d02b authored by monther.albainy's avatar monther.albainy

withipfs

parent 9a2a9e5e
Pipeline #67 failed with stages
# hyperledgerproject
hello
...@@ -341,7 +341,7 @@ Channel: &ChannelDefaults ...@@ -341,7 +341,7 @@ Channel: &ChannelDefaults
################################################################################ ################################################################################
Profiles: Profiles:
projectLedgerOrdererGenesis: ProjectLedgerOrdererGenesis:
<<: *ChannelDefaults <<: *ChannelDefaults
Orderer: Orderer:
<<: *OrdererDefaults <<: *OrdererDefaults
...@@ -350,13 +350,13 @@ Profiles: ...@@ -350,13 +350,13 @@ Profiles:
Capabilities: Capabilities:
<<: *OrdererCapabilities <<: *OrdererCapabilities
Consortiums: Consortiums:
projectLedgerConsortium: ProjectLedgerConsortium:
Organizations: Organizations:
- *Org1 - *Org1
- *Org2 - *Org2
- *Org3 - *Org3
projectLedgerChannel: ProjectLedgerChannel:
Consortium:projectLedgerConsortium Consortium: ProjectLedgerConsortium
<<: *ChannelDefaults <<: *ChannelDefaults
Application: Application:
<<: *ApplicationDefaults <<: *ApplicationDefaults
......
Usage: docker compose [OPTIONS] COMMAND
Docker Compose
Options:
--ansi string Control when to print ANSI control
characters ("never"|"always"|"auto")
(default "auto")
--compatibility Run compose in backward compatibility mode
--env-file string Specify an alternate environment file.
-f, --file stringArray Compose configuration files
--profile stringArray Specify a profile to enable
--project-directory string Specify an alternate working directory
(default: the path of the, first
specified, Compose file)
-p, --project-name string Project name
Commands:
build Build or rebuild services
convert Converts the compose file to platform's canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service.
down Stop and remove containers, networks
events Receive real time events from containers.
exec Execute a command in a running container.
images List images used by the created containers
kill Force stop service containers.
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding.
ps List containers
pull Pull service images
push Push service images
restart Restart containers
rm Removes stopped service containers
run Run a one-off command on a service.
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
Run 'docker compose COMMAND --help' for more information on a command.
Committed chaincode definition for chaincode 'adminLedgerContract' on channel 'plnchannel':
Version: 1, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true, Org3MSP: true]
#!/bin/bash #!/bin/bash
#
# -
#
# network script to run end to end network setup, channel creation, smart contract deployment, invoke chain code and monitoring docker logs
export PATH=${PWD}/../bin:${PWD}:$PATH export PATH=${PWD}/../bin:${PWD}:$PATH
...@@ -17,7 +13,7 @@ function printHelp() { ...@@ -17,7 +13,7 @@ function printHelp() {
echo " - 'up' - bring up fabric orderer and peer nodes. No channel is created" echo " - 'up' - bring up fabric orderer and peer nodes. No channel is created"
echo " - 'up createChannel' - bring up fabric network with one channel" echo " - 'up createChannel' - bring up fabric network with one channel"
echo " - 'createChannel' - create and join a channel after the network is created" echo " - 'createChannel' - create and join a channel after the network is created"
echo " - 'deploySmartContract' - deploy the pharmaledger chaincode on the channel" echo " - 'deploySmartContract' - deploy the projectledger chaincode on the channel"
echo " - 'down' - clear the network with docker-compose down" echo " - 'down' - clear the network with docker-compose down"
echo " - 'restart' - restart the network" echo " - 'restart' - restart the network"
echo echo
...@@ -196,7 +192,7 @@ function createConsortium() { ...@@ -196,7 +192,7 @@ function createConsortium() {
# Note: For some unknown reason (at least for now) the block file can't be # Note: For some unknown reason (at least for now) the block file can't be
# named orderer.genesis.block or the orderer will fail to launch! # named orderer.genesis.block or the orderer will fail to launch!
set -x set -x
configtxgen -profile PharmaLedgerOrdererGenesis -channelID system-channel -outputBlock ./system-genesis-block/genesis.block configtxgen -profile ProjectLedgerOrdererGenesis -channelID system-channel -outputBlock ./system-genesis-block/genesis.block
res=$? res=$?
set +x set +x
if [ $res -ne 0 ]; then if [ $res -ne 0 ]; then
...@@ -288,7 +284,7 @@ function networkDown() { ...@@ -288,7 +284,7 @@ function networkDown() {
rm -rf organizations/fabric-ca/ordererOrg/msp organizations/fabric-ca/ordererOrg/tls-cert.pem organizations/fabric-ca/ordererOrg/ca-cert.pem organizations/fabric-ca/ordererOrg/IssuerPublicKey organizations/fabric-ca/ordererOrg/IssuerRevocationPublicKey organizations/fabric-ca/ordererOrg/fabric-ca-server.db rm -rf organizations/fabric-ca/ordererOrg/msp organizations/fabric-ca/ordererOrg/tls-cert.pem organizations/fabric-ca/ordererOrg/ca-cert.pem organizations/fabric-ca/ordererOrg/IssuerPublicKey organizations/fabric-ca/ordererOrg/IssuerRevocationPublicKey organizations/fabric-ca/ordererOrg/fabric-ca-server.db
# remove channel and script artifacts # remove channel and script artifacts
rm -rf channel-artifacts log.txt pharmaledgernetwork.tar.gz rm -rf channel-artifacts log.txt projectledgernetwork.tar.gz
fi fi
} }
......
...@@ -26,12 +26,16 @@ app.use(bodyParser.json()); ...@@ -26,12 +26,16 @@ app.use(bodyParser.json());
app.use(fileUpload()); app.use(fileUpload());
var cache = require('memory-cache'); var cache = require('memory-cache');
const ProjectService = require('./services/ProjectService.js'); const ProjectService = require('./services/ProjectService.js');
const TaskService = require('./services/TaskService.js');
const QueryService = require( "./services/queryService.js" ); const QueryService = require( "./services/queryService.js" );
const QueryHistoryService = require( "./services/queryHistoryService.js" ); const QueryHistoryService = require( "./services/queryHistoryService.js" );
const WalletService = require( "./services/walletsService.js" ); const WalletService = require( "./services/walletsService.js" );
const ClientService = require( "./services/ClientService.js" ); const ClientService = require( "./services/ClientService.js" );
const EmployeeService = require( "./services/EmployeeService.js" ); const EmployeeService = require( "./services/EmployeeService.js" );
const ProjectSvcInstance = new ProjectService(); const ProjectSvcInstance = new ProjectService();
const TaskSvcInstance = new TaskService();
const querySvcInstance = new QueryService(); const querySvcInstance = new QueryService();
const queryHistorySvcInstance = new QueryHistoryService(); const queryHistorySvcInstance = new QueryHistoryService();
const walletSvcInstance = new WalletService(); const walletSvcInstance = new WalletService();
...@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) { ...@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) {
res.render('projects.html'); res.render('projects.html');
}) })
app.get('/tasks', function (req, res) {
res.render('tasks.html');
})
app.get('/clients', function (req, res) { app.get('/clients', function (req, res) {
res.render('clients.html'); res.render('clients.html');
...@@ -83,6 +92,11 @@ app.get('/projectDetail', function (req, res) { ...@@ -83,6 +92,11 @@ app.get('/projectDetail', function (req, res) {
}) })
app.get('/taskDetail', function (req, res) {
res.render('task-detail.html');
})
...@@ -304,7 +318,7 @@ app.post('/addNewProject', async (req, res, next) => { ...@@ -304,7 +318,7 @@ app.post('/addNewProject', async (req, res, next) => {
const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget); const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget);
//console.log("after acsess to block"); //console.log("after acsess to block");
return res.status(200).json(result); res.render('projects.html');
} }
} catch (error) { } catch (error) {
...@@ -420,21 +434,183 @@ app.post('/addNewTask', async (req, res, next) => { ...@@ -420,21 +434,183 @@ app.post('/addNewTask', async (req, res, next) => {
} else { } else {
// console.log("befor acsess to block"); // console.log("befor acsess to block");
const result = await ProjectSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage); const result = await TaskSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
// console.log("after acsess to block"); console.log("after acsess to block");
return res.status(200).json(result); res.render('');
} }
} catch (error) { } catch (error) {
console.log("catch"); console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.post('/editTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskId = req.body.taskId;
var taskName = req.body.taskName;
var taskdescreption = req.body.taskdescreption;
var taskStatus=req.body.taskStatus;
var defecaltDegree=req.body.defecaltDegree;
var estematedTaskDuration=req.body.estematedTaskDuration;
var taskDeadline=req.body.taskDeadline;
var taskWage = req.body.taskWage;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskId || !taskName || !taskdescreption || !taskStatus ||!defecaltDegree||!estematedTaskDuration||!taskDeadline||!taskWage) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.editTask(userName, taskId, taskName, taskdescreption,taskStatus, defecaltDegree,estematedTaskDuration,taskDeadline,taskWage);
console.log("after acsess to block");
res.render('');
}
} catch (error) {
console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.get('/queryTask', async (req, res, next) => {
var userName = cache.get('userName')
let key = req.query.key;
try {
if(!userName || userName.lenth<1) {
//console.log("if in app");
return res.status(500).json("User is missing");
} else {
//console.log("else in app");
// console.log("1");
const result = await TaskSvcInstance.queryTask(userName,key);
// console.log(result);
//console.log("2");
//console.log(result)
return res.status(200).json(result);
}
} catch (error) {
console.log("Erorr in app");
// console.log("3");
return res.status(500).json(error); return res.status(500).json(error);
} }
}) })
app.get('/queryEmployeeTask', async (req, res, next) => {
var userName = cache.get('userName')
let key = req.query.key;
try {
if(!userName || userName.lenth<1) {
//console.log("if in app");
return res.status(500).json("User is missing");
} else {
//console.log("else in app");
// console.log("1");
const result = await TaskSvcInstance.queryEmployeeTask(userName,key);
// console.log(result);
//console.log("2");
//console.log(result)
return res.status(200).json(result);
}
} catch (error) {
console.log("Erorr in app");
// console.log("3");
return res.status(500).json(error);
}
})
app.post('/addNewEmployeeToTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskEmployeeID = req.body.taskEmployeeID;
var taskId = req.body.taskId;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskEmployeeID) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.addNewEmployeeToTask(userName, taskId,taskEmployeeID);
//console.log("after acsess to block");
return res.status(200).json(result);
}
} catch (error) {
console.log("catch");
res.render('"task-detail.html/'+taskId+'"'); }
})
app.post('/deleteEmployeeFromTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskEmployeeID = req.body.taskEmployeeID;
var taskId = req.body.taskId;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskEmployeeID) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.deleteEmployeeFromTask(userName, taskId,taskEmployeeID);
//console.log("after acsess to block");
return res.status(200).json(result);
}
} catch (error) {
console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.get('/queryHistoryByKey', async (req, res, next) => { app.get('/queryHistoryByKey', async (req, res, next) => {
console.log(req.body); console.log(req.body);
......
...@@ -3512,11 +3512,7 @@ ...@@ -3512,11 +3512,7 @@
"name": "@achingbrain/node-fetch", "name": "@achingbrain/node-fetch",
"version": "2.6.7", "version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", "resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==", "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
}
}, },
"node_modules/object-inspect": { "node_modules/object-inspect": {
"version": "1.12.2", "version": "1.12.2",
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30000";
...@@ -31,10 +38,5 @@ $(document).ready(function(){ ...@@ -31,10 +38,5 @@ $(document).ready(function(){
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30000";
...@@ -137,14 +144,8 @@ $("#add-employee").on('shown.bs.modal', function () { ...@@ -137,14 +144,8 @@ $("#add-employee").on('shown.bs.modal', function () {
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
// const ipfsClient = require('ipfs-http-client') // const ipfsClient = require('ipfs-http-client')
// const ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'}); // const ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'});
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
urlDrop="/dist/js/select2.min.js"; urlDrop="/dist/js/select2.min.js";
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
...@@ -84,6 +90,7 @@ $.ajax({ ...@@ -84,6 +90,7 @@ $.ajax({
$("#addNewProject").click(function(){ $("#addNewProject").click(function(){
event.preventDefault();
var addNewProjectUrl = urlBase+"/addNewProject"; var addNewProjectUrl = urlBase+"/addNewProject";
var formData = { var formData = {
...@@ -108,6 +115,7 @@ $.ajax({ ...@@ -108,6 +115,7 @@ $.ajax({
if(status==='success'){ if(status==='success'){
console.log("successfully add project in blockchain"); console.log("successfully add project in blockchain");
alert("successfully add project in blockchain"); alert("successfully add project in blockchain");
window.location.reload();
} }
showTab("query"); showTab("query");
}, },
...@@ -153,10 +161,9 @@ if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { ...@@ -153,10 +161,9 @@ if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
} }
}); });
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var url_string = window.location.href; var url_string = window.location.href;
var url = new URL(url_string); var url = new URL(url_string);
var searchKey = url.searchParams.get("id"); var searchKey = url.searchParams.get("id");
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30000";
......
$(document).ready(function(){ $(document).ready(function(){
//make sure change to your own machine ip or dmain url $(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var url_string = window.location.href; var url_string = window.location.href;
var url = new URL(url_string); var url = new URL(url_string);
...@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
$("#addNewTask").click(function(){ $("#addNewTask").click(function(){
event.preventDefault();
console.log("in modal") console.log("in modal")
var addNewTaskUrl = urlBase+"/addNewTask"; var addNewTaskUrl = urlBase+"/addNewTask";
var formData = { var formData = {
...@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
console.log("successfully add user in blockchain"); console.log("successfully add user in blockchain");
alert("successfully add task in blockchain"); alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"'); //window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
} }
}, },
error: function(xhr, textStatus, error){ error: function(xhr, textStatus, error){
...@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
alert("Error while adding task: "+ xhr.responseText); alert("Error while adding task: "+ xhr.responseText);
} }
}); });
}) })
}); });
$("#modal-edit").on('shown.bs.modal', function () { $("#modal-edit").on('shown.bs.modal', function () {
console.log($("#taskhelper").val()) console.log($("#taskhelper").val())
...@@ -138,78 +147,52 @@ $("#modal-edit").on('shown.bs.modal', function () { ...@@ -138,78 +147,52 @@ $("#modal-edit").on('shown.bs.modal', function () {
} }
}); });
$("#editTask").click(function(){
$.ajax({ event.preventDefault();
type: 'GET', console.log("in modal")
url: queryEmployeeUrl, var editTaskUrl = urlBase+"/editTask";
var formData = {
success: function(data, status, jqXHR){ taskId:$('#taskIDEdit').val(),
taskName: $('#taskNameEdit').val(),
$.getScript( urlDrop, function() { taskdescreption: $('#taskdescreptionEdit').val(),
taskStatus:$('#taskStatusEdit').val(),
let r = $.map(data, function (obj) { defecaltDegree: $('#defecaltDegreeEdit').val(),
obj.id = obj.Record.employeeId; taskWage: $('#taskWageEdit').val(),
obj.text = obj.Record.firstName+ " "+obj.Record.lastName; estematedTaskDuration: $('#estematedTaskDurationEdit').val(),
return obj; taskDeadline: $('#taskDeadlineEdit').val(),
});
$("#taskEmployeeID").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
} }
}); // console.log("formData========================================== ");
// console.log(formData);
$.ajax({ $.ajax({
type: 'GET', type: 'POST',
url: querytask, url: editTaskUrl,
data: { key: searchKey }, data: formData,
crossDomain:true,
success: function(data, status, jqXHR){ success: function(data, status, jqXHR){
let record = data.Record; if(status==='success'){
//console.log(data);
$("#projectID").text(data.projectID);
$("#projectName").text(data.projectName);
$("#descreption").text(data.descreption);
$("#projectStatus").text(data.projectStatus);
// $("#projectLeaderID").text(data.projectLeaderID);
//$("#clientID").text(data.clientID);
$("#estimatedBudget").text(data.estimatedBudget);
$("#estimatedDuration").text(data.estimatedDuration);
$("#deadline").text(data.deadline);
$("#createDateTime").text(data.createDateTime);
ajaxCall2(data.clientID); console.log("successfully add user in blockchain");
ajaxCall3(data.projectLeaderID); alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
}, },
error: function(xhr, textStatus, error){ error: function(xhr, textStatus, error){
console.log("error add project in blockchain");
console.log(xhr.statusText); console.log(xhr.statusText);
console.log(textStatus); console.log(textStatus);
console.log(error); console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText); alert("Error while adding task: "+ xhr.responseText);
} }
}); });
});
}); });
//////////////////////////////////////////////////////////////////////task table //////////////////////////////////////////////////////////////////////task table
...@@ -301,7 +284,15 @@ $.ajax({ ...@@ -301,7 +284,15 @@ $.ajax({
' <script>'+ ' <script>'+
' $("#'+data.taskId+'").click(function(){'+ ' $("#'+data.taskId+'").click(function(){'+
//'editTask(data)'+ //'editTask(data)'+
'$("#taskhelper").val("'+data+'"); '+ // '$("#taskIDEdit").val("'+data+'"); '+
'$("#taskIDEdit").val("'+data.taskId+'"); '+
'$("#taskNameEdit").val("'+data.taskName+'"); '+
'$("#taskdescreptionEdit").val("'+data.taskdescreption+'"); '+
'$("#taskStatusEdit").val("'+data.taskStatus+'"); '+
'$("#defecaltDegreeEdit").val("'+data.defecaltDegree+'"); '+
'$("#taskWageEdit").val("'+data.taskWage+'"); '+
'$("#estematedTaskDurationEdit").val("'+data.estematedTaskDuration+'"); '+
'$("#taskDeadlineEdit").val("'+data.taskDeadline+'"); '+
'});'+ '});'+
' </script>' ' </script>'
) )
...@@ -324,6 +315,58 @@ $.ajax({ ...@@ -324,6 +315,58 @@ $.ajax({
}, },
{
data: 'Record.taskId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<a class="btn btn-primary btn-sm" href="/taskDetail?id='+data+'" >' +
' <i class="fas fa-folder">' +
' </i>'+
' View' +
' </a>' +
' </td>'+
'</tr>'
)
},
},
{
data: 'Record.taskId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<a class="btn btn-info btn-sm" href="?id='+data+'" >'+
'<i class="fas fa-book">' +
' </i>' +
' history'+
' </a>' +
' </td>'+
'</tr>'
)
},
},
], ],
}); });
...@@ -417,26 +460,5 @@ new Chart(donutChartCanvas, { ...@@ -417,26 +460,5 @@ new Chart(donutChartCanvas, {
}); });
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
function editTask(data)
{
console.log(data)
// setTimeout(function(){ alert("After 5 seconds!"); }, 5000);
// $("#taskIDEdit").text(data.taskId);
// $("#taskNameEdit").val(data.taskName);
// $("#taskdescreptionEdit").val(data.taskdescreption);
// $("#taskStatusEdit").val(data.taskStatus);
// $("#taskEmployeeEdit").val(data.taskEmployeeID).trigger('change');
// $("#defecaltDegreeEdit").val(data.defecaltDegree);
// $("#taskWageEdit").val(data.taskWage);
// $("#estematedTaskDurationEdit").val(data.estematedTaskDuration);
// $("#taskDeadlineEdit").val(data.taskDeadline);
}
\ No newline at end of file
$(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
urlDrop="/dist/js/select2.min.js";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
var url_string = window.location.href;
var url = new URL(url_string);
var searchKey = url.searchParams.get("id");
//console.log("1")
//console.log(searchKey);
var urlBase = "http://0.0.0.0:30000";
if(!searchKey)
{
// console.log("2")
// window.location.replace("href="/projectDetail?id='+data+'"");
return;
}
//console.log("3")
var queryUrl = urlBase+"/queryTask";
var queryClient = urlBase+"/queryClient";
var queryEmployee = urlBase+"/queryEmployee";
var queryEmployeeUrl = urlBase+"/queryAllEmployee";
$.ajax({
type: 'GET',
url: queryUrl,
data: { key: searchKey },
crossDomain:true,
success: function(data, status, jqXHR){
let record = data.Record;
//console.log(data);
$("#projectID").text(data.projectID);
$("#taskName").text(data.taskName);
$("#taskdescreption").text(data.taskdescreption);
$("#taskStatus").text(data.taskStatus);
// $("#projectLeaderID").text(data.projectLeaderID);
//$("#clientID").text(data.clientID);
$("#defecaltDegree").text(data.defecaltDegree);
$("#estematedTaskDuration").text(data.estematedTaskDuration);
$("#taskDeadline").text(data.taskDeadline);
$("#createDateTime").text(data.createDateTime);
$("#lastUpdated").text(data.lastUpdated);
$("#taskWage").text(data.taskWage);
$("#ipfsCid").text(data.ipfsCid);
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
////////////////////////////////
var queryEmployeeTask=urlBase+"/queryEmployeeTask";
$.ajax({
type: 'GET',
url: queryEmployeeTask,
//crossDomain:true,
data: { key: searchKey },
success: function(data, status, jqXHR){
let record = data.Record;
$.getScript( urlrender, function() {
$.getScript( urltable, function() {
// console.log("before data table===== "+data);
$('#queryAllTasksTable').DataTable({
data: data,
columns: [
{
data: 'Record.employeeId',
render: function (data, type, row, meta) {
return ('<tr>' +'<th scope="col">'+'</th>');
},
},
{
data: 'Record.firstName',
render: function (data, type, row, meta) {
return (' <td >' +data + ' </td>')
},
},
{
data: 'Record.lastName' ,
render: function (data, type, row, meta) {
return '<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>'
},
},
{
data: 'Record.phoneNumber' ,
render: function (data, type, row, meta) {
return '<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>'
},
},
{
data: 'Record.email' ,
render: function (data, type, row, meta) {
return (
'<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>')
},
},
{
data: 'Record.employeeId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#modal-edit" id="'+data+'">'+
'<i class="far fa-trash-alt">' +
' </i>' +
' Delete'+
' </button>' +
' </td>'+
'</tr>' +
'<script>'+
' $("#'+data+'").click(function(){'+
'alert("'+data+'");'+
'deleteEmployee("'+data+'")'+
'});'+
// ' $("'+data+'").click(function(){'+
// 'console.log("11")'+
// 'deleteEmployee('+data+')'+
// '});'+
'</script>'
)
},
},
],
});
});
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
//////////////////////////////////////////////////////////////////
$.ajax({
type: 'GET',
url: queryEmployeeUrl,
success: function(data, status, jqXHR){
$.getScript( urlDrop, function() {
let r = $.map(data, function (obj) {
obj.id = obj.Record.employeeId;
obj.text = obj.Record.firstName+ " "+obj.Record.lastName;
return obj;
});
$("#addtaskEmployee").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
}
});
///////////////////////////////////////////////////////////////////
$("#showIpfsCid").click(function(){
cid=$("#ipfsCid").val()
//cid='http://172.29.3.95:8080/ipfs/QmTpk4R498PuUrmNfwFxSTyfotUDy3T5h19qMJTe2hmbZT'
if(cid=="")
alert("No files have been uploaded yet")
else{
window.location.replace(cid);
}
})
var addNewEmployeeToTask=urlBase+"/addNewEmployeeToTask"
$("#addNewEmployeeToTask").click(function(){
event.preventDefault();
var formData = {
taskId: searchKey,
taskEmployeeID: $('#addtaskEmployee').val(),
}
$.ajax({
type: 'POST',
url: addNewEmployeeToTask,
data:formData,
success: function(data, status, jqXHR){
alert("successfully add employee");
window.location.reload();
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: Employee alreadr exist");
}
});
});
});
var urlBase = "http://0.0.0.0:30000";
var url_string = window.location.href;
var url = new URL(url_string);
var searchKey = url.searchParams.get("id");
var deleteEmployeeFromTask=urlBase+"/deleteEmployeeFromTask"
function deleteEmployee(EmployeeID)
{ event.preventDefault();
console.log("22")
var formData = {
taskId: searchKey,
taskEmployeeID: EmployeeID,
}
$.ajax({
type: 'POST',
url: deleteEmployeeFromTask,
data:formData,
success: function(data, status, jqXHR){
alert("successfully delete employee");
window.location.reload();
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
}
});
}
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class ClientService { class ClientService {
...@@ -32,10 +32,10 @@ class ClientService { ...@@ -32,10 +32,10 @@ class ClientService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject // addNewProject
console.log('Submit pharmaledger addNewProject transaction.'); console.log('Submit Adminledger addNewProject transaction.');
let ID="ClientID"+ (new Date()).getTime(); let ID="ClientID"+ (new Date()).getTime();
const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email); const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email);
console.log('addNewProject Transaction complete.'); console.log('addNewProject Transaction complete.');
...@@ -77,10 +77,10 @@ async queryAllClient(userName) { ...@@ -77,10 +77,10 @@ async queryAllClient(userName) {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit Adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllClient'); const response = await contract.submitTransaction('queryAllClient');
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
...@@ -124,10 +124,10 @@ async queryAllClient(userName) { ...@@ -124,10 +124,10 @@ async queryAllClient(userName) {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit Adminledger querybyKey request.');
const response = await contract.submitTransaction('queryClient' , key); const response = await contract.submitTransaction('queryClient' , key);
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class EmployeeService { class EmployeeService {
async addNewEmployee(userName, firstName,lastName, phoneNumber,email) { async addNewEmployee(userName, firstName,lastName, phoneNumber,email) {
...@@ -30,10 +30,10 @@ class EmployeeService { ...@@ -30,10 +30,10 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// adduser // adduser
console.log('Submit pharmaledger addNewProject transaction.'); console.log('Submit adminledger addNewProject transaction.');
let ID="EmployyID"+ (new Date()).getTime(); let ID="EmployyID"+ (new Date()).getTime();
const response = await contract.submitTransaction('addNewEmployee', ID,firstName,lastName, phoneNumber,email); const response = await contract.submitTransaction('addNewEmployee', ID,firstName,lastName, phoneNumber,email);
console.log('add Transaction complete.'); console.log('add Transaction complete.');
...@@ -77,10 +77,10 @@ class EmployeeService { ...@@ -77,10 +77,10 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllEmployee'); const response = await contract.submitTransaction('queryAllEmployee');
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
...@@ -123,10 +123,10 @@ class EmployeeService { ...@@ -123,10 +123,10 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryEmployee' , key); const response = await contract.submitTransaction('queryEmployee' , key);
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class ProjectService { class ProjectService {
async addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget) { async addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget) {
...@@ -30,10 +30,10 @@ class ProjectService { ...@@ -30,10 +30,10 @@ class ProjectService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject // addNewProject
console.log('Submit pharmaledger addNewProject transaction.'); console.log('Submit adminledger addNewProject transaction.');
let ID="ProjectID"+ (new Date()).getTime(); let ID="ProjectID"+ (new Date()).getTime();
let projectProgress=0; let projectProgress=0;
const response = await contract.submitTransaction('addNewProject', ID,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget,projectProgress); const response = await contract.submitTransaction('addNewProject', ID,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget,projectProgress);
...@@ -51,45 +51,6 @@ class ProjectService { ...@@ -51,45 +51,6 @@ class ProjectService {
} }
async addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage) {
// A wallet stores a collection of identities for use
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet');
// A gateway defines the peers used to access Fabric networks
const gateway = new Gateway();
try {
// Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8'));
// Set connection options; identity and wallet
let connectionOptions = {
identity: userName,
wallet: wallet,
discovery: { enabled:true, asLocalhost: true }
};
// Connect to gateway using application specified parameters
console.log('Connect to Fabric gateway.');
await gateway.connect(connectionProfile, connectionOptions);
// Access farma ledger supply chain network
console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract');
// addNewProject
console.log('Submit pharmaledger addNewProject transaction.');
let ID="TaskID"+ (new Date()).getTime();
const response = await contract.submitTransaction('addNewTask',ID, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
console.log('addNewProject Transaction complete.');
return response;
} catch (error) {
console.log(`Error processing transaction. ${error}`);
console.log(error.stack);
throw ({ status: 500, message: `Error adding to wallet. ${error}` });
} finally {
// Disconnect from the gateway
console.log('Disconnect from Fabric gateway.')
gateway.disconnect();
}
}
......
This diff is collapsed.
/*
# O'Reilly - Accelerated Hands-on Smart Contract Development with Hyperledger Fabric V2
# farma ledger supply chain network
# Author: Brian Wu
# QueryHistoryService -queryByKey:
*/
'use strict'; 'use strict';
// Bring key classes into scope, most importantly Fabric SDK network class // Bring key classes into scope, most importantly Fabric SDK network class
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class QueryHistoryService { class QueryHistoryService {
/**
* 1. Select an identity from a wallet
* 2. Connect to network gateway
* 3. Access farma ledger supply chain network
* 4. Construct request to issue commercial paper
* 5. Submit invoke queryByKey transaction
* 6. Process response
**/
async queryHistoryByKey(userName, key) { async queryHistoryByKey(userName, key) {
// A wallet stores a collection of identities for use // A wallet stores a collection of identities for use
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet'); const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet');
...@@ -35,10 +47,10 @@ class QueryHistoryService { ...@@ -35,10 +47,10 @@ class QueryHistoryService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryHistoryByKey', key); const response = await contract.submitTransaction('queryHistoryByKey', key);
//console.log(response); //console.log(response);
return response?JSON.parse(response):response; return response?JSON.parse(response):response;
......
...@@ -5,9 +5,16 @@ ...@@ -5,9 +5,16 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class QueryService { class QueryService {
/**
* 1. Select an identity from a wallet
* 2. Connect to network gateway
* 3. Access ledger supply chain network
* 4. Construct request to issue commercial paper
* 5. Submit invoke queryByKey transaction
* 6. Process response
**/
async queryProject(userName, key) { async queryProject(userName, key) {
// A wallet stores a collection of identities for use // A wallet stores a collection of identities for use
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet'); const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet');
...@@ -35,10 +42,10 @@ class QueryService { ...@@ -35,10 +42,10 @@ class QueryService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryProject', key); const response = await contract.submitTransaction('queryProject', key);
// console.log("response"); // console.log("response");
//console.log(JSON.parse(response)); //console.log(JSON.parse(response));
...@@ -82,10 +89,10 @@ class QueryService { ...@@ -82,10 +89,10 @@ class QueryService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllProjects'); const response = await contract.submitTransaction('queryAllProjects');
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
...@@ -130,10 +137,10 @@ class QueryService { ...@@ -130,10 +137,10 @@ class QueryService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllTasksForAProject' , key); const response = await contract.submitTransaction('queryAllTasksForAProject' , key);
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
......
...@@ -124,17 +124,14 @@ ...@@ -124,17 +124,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/"> <a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i> <i class="nav-icon fas fa-house-user" ></i>
<p>home</p> <p>home</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -143,9 +140,6 @@ ...@@ -143,9 +140,6 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="/projects" class="nav-link"> <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
...@@ -154,30 +148,72 @@ ...@@ -154,30 +148,72 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -327,6 +363,7 @@ ...@@ -327,6 +363,7 @@
<!-- /.control-sidebar --> <!-- /.control-sidebar -->
</div> </div>
<!-- ./wrapper --> <!-- ./wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="/plugins/jquery/jquery.min.js"></script> <script src="/plugins/jquery/jquery.min.js"></script>
......
...@@ -120,12 +120,14 @@ ...@@ -120,12 +120,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -134,41 +136,80 @@ ...@@ -134,41 +136,80 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="projects.html" class="nav-link"> <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Projects</p> <p>Projects</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -263,6 +304,7 @@ ...@@ -263,6 +304,7 @@
<!-- /.control-sidebar --> <!-- /.control-sidebar -->
</div> </div>
<!-- ./wrapper --> <!-- ./wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="/plugins/jquery/jquery.min.js"></script> <script src="/plugins/jquery/jquery.min.js"></script>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>O'Reilly - Accelerated Hands-on Smart Contract Development with Hyperledger Fabric V2</title> <title>Project Manager</title>
<!--Import Google Icon Font--> <!--Import Google Icon Font-->
<link rel="stylesheet" href="/css/bootstrap.css"> <link rel="stylesheet" href="/css/bootstrap.css">
<link rel="stylesheet" href="/css/fontawesome.css"> <link rel="stylesheet" href="/css/fontawesome.css">
...@@ -152,6 +152,14 @@ ...@@ -152,6 +152,14 @@
</ul> </ul>
</li> </li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i> <i class="nav-icon fas fa-users"></i>
......
...@@ -132,12 +132,14 @@ ...@@ -132,12 +132,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -146,41 +148,80 @@ ...@@ -146,41 +148,80 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="projects.html" class="nav-link" > <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Projects</p> <p>Projects</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -337,6 +378,7 @@ ...@@ -337,6 +378,7 @@
<!-- /.control-sidebar --> <!-- /.control-sidebar -->
</div> </div>
<!-- ./wrapper --> <!-- ./wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="/plugins/jquery/jquery.min.js"></script> <script src="/plugins/jquery/jquery.min.js"></script>
......
...@@ -129,12 +129,14 @@ ...@@ -129,12 +129,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -143,41 +145,80 @@ ...@@ -143,41 +145,80 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="projects.html" class="nav-link"> <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Projects</p> <p>Projects</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -337,7 +378,11 @@ ...@@ -337,7 +378,11 @@
<th style="width: 15%" > <th style="width: 15%" >
Status Status
</th> </th>
<th style="width: 15%"> <th style="width: 10%">
</th>
<th style="width: 10%">
</th>
<th style="width: 10%">
</th> </th>
</tr> </tr>
</thead> </thead>
...@@ -403,7 +448,7 @@ ...@@ -403,7 +448,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="taskEmployeeID">Employee</label> <label for="taskEmployeeID">Employee</label>
<select id="taskEmployeeID" class="form-control custom-select" required> <select id="taskEmployeeID" class="form-control custom-select" required><!--multiple="multiple"-->
<option></option> <option></option>
</select> </select>
</div> </div>
...@@ -501,12 +546,12 @@ ...@@ -501,12 +546,12 @@
</select> </select>
</div> </div>
<div class="form-group"> <!-- <div class="form-group">
<label for="taskEmployeeEdit">Employee</label> <label for="taskEmployeeEdit">Employee</label>
<select id="taskEmployeeEdit" class="form-control custom-select" required> <select id="taskEmployeeEdit" class="form-control custom-select" required>
<option></option> <option></option>
</select> </select>
</div> </div> -->
<div class="form-group"> <div class="form-group">
<label for="defecaltDegreeEdit">Defecalt Degree</label> <label for="defecaltDegreeEdit">Defecalt Degree</label>
<select id="defecaltDegreeEdit" class="form-control" required> <select id="defecaltDegreeEdit" class="form-control" required>
...@@ -577,6 +622,7 @@ ...@@ -577,6 +622,7 @@
<script src="/plugins/chart.js/Chart.min.js"></script> <script src="/plugins/chart.js/Chart.min.js"></script>
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
</body> </body>
</html> </html>
......
...@@ -1020,6 +1020,7 @@ ...@@ -1020,6 +1020,7 @@
<!-- /.control-sidebar --> <!-- /.control-sidebar -->
</div> </div>
<!-- ./wrapper --> <!-- ./wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="../../plugins/jquery/jquery.min.js"></script> <script src="../../plugins/jquery/jquery.min.js"></script>
......
...@@ -129,12 +129,14 @@ ...@@ -129,12 +129,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -143,41 +145,80 @@ ...@@ -143,41 +145,80 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="projects.html" class="nav-link"> <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Projects</p> <p>Projects</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -545,6 +586,7 @@ ...@@ -545,6 +586,7 @@
</div> </div>
</form> </form>
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="/plugins/jquery/jquery.min.js"></script> <script src="/plugins/jquery/jquery.min.js"></script>
......
...@@ -120,12 +120,14 @@ ...@@ -120,12 +120,14 @@
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/" >
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-book"></i> <i class="nav-icon fas fa-book"></i>
<p> <p>
...@@ -134,41 +136,80 @@ ...@@ -134,41 +136,80 @@
</p> </p>
</a> </a>
<ul class="nav nav-treeview"> <ul class="nav nav-treeview">
<li class="nav-item" > <li class="nav-item" >
<a href="projects.html" class="nav-link"> <a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Projects</p> <p>Projects</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-add.html" class="nav-link"> <a href="/addProject" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Add</p> <p>Project Add</p>
</a> </a>
</li> </li>
</ul>
</li>
<li class="nav-item">
<a href="/tasks" class="nav-link">
<i class="nav-icon fas fa-tasks"></i>
<p>All Tasks</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="project-edit.html" class="nav-link"> <a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Participants
<i class="fas fa-angle-left right"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/clients" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Edit</p> <p>Clients</p>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="project-detail.html" class="nav-link"> <a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>Project Detail</p> <p>Employees</p>
</a> </a>
</li> </li>
</ul>
</li>
<!-- <li class="nav-header">Add Participants</li>
</ul> <li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-employee">
<i class="nav-icon far fa-circle text-warning"></i>
<p>add Employee</p>
</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="modal" data-target="#add-client">
<i class="nav-icon far fa-circle text-info"></i>
<p>add Client</p>
</a>
</li> -->
<!-- <li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
</a>
</li> -->
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
</div> </div>
...@@ -255,6 +296,7 @@ ...@@ -255,6 +296,7 @@
<!-- /.content-wrapper --> <!-- /.content-wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- Control Sidebar --> <!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark"> <aside class="control-sidebar control-sidebar-dark">
......
This diff is collapsed.
This diff is collapsed.
'use strict'; 'use strict';
const ProjectLedgerContract = require('./lib/Projectledgercontract.js'); const AdminLedgerContract = require('./lib/adminledgercontract.js');
module.exports.ProjectLedgerContract = ProjectLedgerContract; module.exports.AdminLedgerContract = AdminLedgerContract;
module.exports.contracts = [ ProjectLedgerContract ]; module.exports.contracts = [ AdminLedgerContract ];
{ {
"name": "pharmaledger-js", "name": "ledger-js",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pharmaledger-js", "name": "ledger-js",
"version": "1.0.0", "version": "1.0.0",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
......
{ {
"name": "pharmaledger-js", "name": "ledger-js",
"version": "1.0.0", "version": "1.0.0",
"description": "PharmaLedger contract implemented in JavaScript", "description": "PharmaLedger contract implemented in JavaScript",
"main": "index.js", "main": "index.js",
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
"start": "fabric-chaincode-node start" "start": "fabric-chaincode-node start"
}, },
"engineStrict": true, "engineStrict": true,
"author": "brian", "author": "monther",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"fabric-contract-api": "^2.1.2", "fabric-contract-api": "^2.1.2",
......
...@@ -26,12 +26,16 @@ app.use(bodyParser.json()); ...@@ -26,12 +26,16 @@ app.use(bodyParser.json());
app.use(fileUpload()); app.use(fileUpload());
var cache = require('memory-cache'); var cache = require('memory-cache');
const ProjectService = require('./services/ProjectService.js'); const ProjectService = require('./services/ProjectService.js');
const TaskService = require('./services/TaskService.js');
const QueryService = require( "./services/queryService.js" ); const QueryService = require( "./services/queryService.js" );
const QueryHistoryService = require( "./services/queryHistoryService.js" ); const QueryHistoryService = require( "./services/queryHistoryService.js" );
const WalletService = require( "./services/walletsService.js" ); const WalletService = require( "./services/walletsService.js" );
const ClientService = require( "./services/ClientService.js" ); const ClientService = require( "./services/ClientService.js" );
const EmployeeService = require( "./services/EmployeeService.js" ); const EmployeeService = require( "./services/EmployeeService.js" );
const ProjectSvcInstance = new ProjectService(); const ProjectSvcInstance = new ProjectService();
const TaskSvcInstance = new TaskService();
const querySvcInstance = new QueryService(); const querySvcInstance = new QueryService();
const queryHistorySvcInstance = new QueryHistoryService(); const queryHistorySvcInstance = new QueryHistoryService();
const walletSvcInstance = new WalletService(); const walletSvcInstance = new WalletService();
...@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) { ...@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) {
res.render('projects.html'); res.render('projects.html');
}) })
app.get('/tasks', function (req, res) {
res.render('tasks.html');
})
app.get('/clients', function (req, res) { app.get('/clients', function (req, res) {
res.render('clients.html'); res.render('clients.html');
...@@ -83,6 +92,11 @@ app.get('/projectDetail', function (req, res) { ...@@ -83,6 +92,11 @@ app.get('/projectDetail', function (req, res) {
}) })
app.get('/taskDetail', function (req, res) {
res.render('task-detail.html');
})
...@@ -304,7 +318,7 @@ app.post('/addNewProject', async (req, res, next) => { ...@@ -304,7 +318,7 @@ app.post('/addNewProject', async (req, res, next) => {
const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget); const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget);
//console.log("after acsess to block"); //console.log("after acsess to block");
return res.status(200).json(result); res.render('projects.html');
} }
} catch (error) { } catch (error) {
...@@ -420,21 +434,183 @@ app.post('/addNewTask', async (req, res, next) => { ...@@ -420,21 +434,183 @@ app.post('/addNewTask', async (req, res, next) => {
} else { } else {
// console.log("befor acsess to block"); // console.log("befor acsess to block");
const result = await ProjectSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage); const result = await TaskSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
// console.log("after acsess to block"); console.log("after acsess to block");
return res.status(200).json(result); res.render('');
} }
} catch (error) { } catch (error) {
console.log("catch"); console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.post('/editTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskId = req.body.taskId;
var taskName = req.body.taskName;
var taskdescreption = req.body.taskdescreption;
var taskStatus=req.body.taskStatus;
var defecaltDegree=req.body.defecaltDegree;
var estematedTaskDuration=req.body.estematedTaskDuration;
var taskDeadline=req.body.taskDeadline;
var taskWage = req.body.taskWage;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskId || !taskName || !taskdescreption || !taskStatus ||!defecaltDegree||!estematedTaskDuration||!taskDeadline||!taskWage) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.editTask(userName, taskId, taskName, taskdescreption,taskStatus, defecaltDegree,estematedTaskDuration,taskDeadline,taskWage);
console.log("after acsess to block");
res.render('');
}
} catch (error) {
console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.get('/queryTask', async (req, res, next) => {
var userName = cache.get('userName')
let key = req.query.key;
try {
if(!userName || userName.lenth<1) {
//console.log("if in app");
return res.status(500).json("User is missing");
} else {
//console.log("else in app");
// console.log("1");
const result = await TaskSvcInstance.queryTask(userName,key);
// console.log(result);
//console.log("2");
//console.log(result)
return res.status(200).json(result);
}
} catch (error) {
console.log("Erorr in app");
// console.log("3");
return res.status(500).json(error); return res.status(500).json(error);
} }
}) })
app.get('/queryEmployeeTask', async (req, res, next) => {
var userName = cache.get('userName')
let key = req.query.key;
try {
if(!userName || userName.lenth<1) {
//console.log("if in app");
return res.status(500).json("User is missing");
} else {
//console.log("else in app");
// console.log("1");
const result = await TaskSvcInstance.queryEmployeeTask(userName,key);
// console.log(result);
//console.log("2");
//console.log(result)
return res.status(200).json(result);
}
} catch (error) {
console.log("Erorr in app");
// console.log("3");
return res.status(500).json(error);
}
})
app.post('/addNewEmployeeToTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskEmployeeID = req.body.taskEmployeeID;
var taskId = req.body.taskId;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskEmployeeID) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.addNewEmployeeToTask(userName, taskId,taskEmployeeID);
//console.log("after acsess to block");
return res.status(200).json(result);
}
} catch (error) {
console.log("catch");
res.render('"task-detail.html/'+taskId+'"'); }
})
app.post('/deleteEmployeeFromTask', async (req, res, next) => {
console.log("in app");
console.log(req.body);
var taskEmployeeID = req.body.taskEmployeeID;
var taskId = req.body.taskId;
// console.log("in app");
var userName = cache.get('userName')
//console.log("in app");
try {
if(!userName || userName.lenth<1) {
console.log("User is missing");
return res.status(500).json("User is missing");
} else if (!taskEmployeeID) {console.log("EEEEEEEEEEEEEEEEEEEE");
console.log("Missing requied fields");
return res.status(500).json("Missing requied fields");
} else {
// console.log("befor acsess to block");
const result = await TaskSvcInstance.deleteEmployeeFromTask(userName, taskId,taskEmployeeID);
//console.log("after acsess to block");
return res.status(200).json(result);
}
} catch (error) {
console.log("catch");
res.render('"projects.html/'+projectID+'"'); }
})
app.get('/queryHistoryByKey', async (req, res, next) => { app.get('/queryHistoryByKey', async (req, res, next) => {
console.log(req.body); console.log(req.body);
...@@ -548,11 +724,7 @@ res.render('',{fileHash}) ...@@ -548,11 +724,7 @@ res.render('',{fileHash})
var port = process.env.PORT || 30002;
var port = process.env.PORT || 30000;
var server = app.listen(port, function () { var server = app.listen(port, function () {
var host = server.address().address var host = server.address().address
var port = server.address().port var port = server.address().port
......
peer lifecycle chaincode package fabcar.tar.gz \--path ../chaincode/fabcar/javascript/ \--lang node \--label fabcar_1
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile /home/monther/Desktop/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"function":"initLedger","Args":[]}'
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile /home/monther/Desktop/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["queryAllCars"]}'
peer chaincode invoke -o localhost:7050 -- ordererTLSHostnameOverride orderer.example.com --tls--cafile /home/monther/Desktop/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /home/monther/Desktop/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["queryAllCars"]}'
///////////////////////////////////////////////////////////////////////////////testing
cd /home/monther/Desktop/fabric-samples/fabcar-debug/fabric
export PATH=$(pwd)/build/bin:$PATH
export FABRIC_CFG_PATH=$(pwd)/sampleconfig
///1
configtxgen -profile SampleDevModeSolo -channelID syschannel -outputBlock genesisblock -configPath $FABRIC_CFG_PATH -outputBlock $(pwd)/sampleconfig/genesisblock
ORDERER_GENERAL_GENESISPROFILE=SampleDevModeSolo orderer
///2
FABRIC_LOGGING_SPEC=chaincode=debug CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 peer node start --peer-chaincodedev=true
///3
configtxgen -channelID ch1 -outputCreateChannelTx ch1.tx -profile SampleSingleMSPChannel -configPath $FABRIC_CFG_PATH
peer channel create -o 127.0.0.1:7050 -c ch1 -f ch1.tx
peer channel join -b ch1.block
///
go build -o simpleChaincode ./integration/chaincode/simple/cmd
CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=mycc:1.0 ./simpleChaincode -peer.address 127.0.0.1:7052
///4
peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --package-id mycc:1.0
peer lifecycle chaincode checkcommitreadiness -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')"
peer lifecycle chaincode commit -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --peerAddresses 127.0.0.1:7051
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["init","a","100","b","200"]}' --isInit
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["invoke","a","b","10"]}'
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["query","a"]}'
///5
cd
cd Desktop/fabric-samples/chaincode/fabcar/javascript/
npm run start
"start": "fabric-chaincode-node start --peer.address localhost:7052 --chaincode-id-name \"mycc:1.0\""
///
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["initLedger"]}'
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["queryAllProjects"]}'
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["getAllUser "]}'
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":[ "addNewUser","123","firstName","lastName", "phoneNumber"]}'
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":[ "queryUser", "123"]}'
peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["initLedger"]}'
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C plnchannel -n pharmaLedgerContract $PEER_CONN_PARMS -c '{"function":"instantiate","Args":[]}'
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n ${CHINCODE_NAME} $PEER_CONN_PARMS -c '{"function":"makeEquipment","Args":["'$manufacturer'","'$equipmentNumber'", "'$equipmentName'", "'$ownerName'"]}'
{ {
"name": "nodejs", "name": "nodejs",
"version": "1.0.0", "version": "1.0.0",
"description": "O'Reilly - Accelerated Hands-on Smart Contract Development with Hyperledger Fabric V2", "description": "Hyperledger",
"main": "app.js", "main": "app.js",
"scripts": { "scripts": {
"test": "rm -rf _idwallet && node addToWallet.js" "test": "rm -rf _idwallet && node addToWallet.js"
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
$("#addUser").click(function(){ $("#addUser").click(function(){
...@@ -31,10 +38,5 @@ $(document).ready(function(){ ...@@ -31,10 +38,5 @@ $(document).ready(function(){
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js" var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js" var urlrender="/js/renderTable.js"
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js" var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js" var urlrender="/js/renderTable.js"
......
$(document).ready(function(){ $(document).ready(function(){
var urlBase = "http://0.0.0.0:30000"; $(document).ajaxStart(function(){
// var urlBase = "http://10.0.2.2:30000"; $("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
$("#uploooooad").click(function(){ $("#uploooooad").click(function(){
console.log("10"); console.log("10");
...@@ -137,14 +144,8 @@ $("#add-employee").on('shown.bs.modal', function () { ...@@ -137,14 +144,8 @@ $("#add-employee").on('shown.bs.modal', function () {
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
// const ipfsClient = require('ipfs-http-client') // const ipfsClient = require('ipfs-http-client')
// const ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'}); // const ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'});
......
$(document).ready(function(){ $(document).ready(function(){
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
$("#homePage").click(function(){ $("#homePage").click(function(){
$.ajax({ $.ajax({
......
$(document).ready(function(){ $(document).ready(function(){
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
// $("#addUser").click(function(){ // $("#addUser").click(function(){
// var addUserUrl = urlBase+"/addUser"; // var addUserUrl = urlBase+"/addUser";
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
urlDrop="/dist/js/select2.min.js"; urlDrop="/dist/js/select2.min.js";
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
var queryClientUrl = urlBase+"/queryAllClient"; var queryClientUrl = urlBase+"/queryAllClient";
var queryEmployeeUrl = urlBase+"/queryAllEmployee"; var queryEmployeeUrl = urlBase+"/queryAllEmployee";
...@@ -84,6 +90,7 @@ $.ajax({ ...@@ -84,6 +90,7 @@ $.ajax({
$("#addNewProject").click(function(){ $("#addNewProject").click(function(){
event.preventDefault();
var addNewProjectUrl = urlBase+"/addNewProject"; var addNewProjectUrl = urlBase+"/addNewProject";
var formData = { var formData = {
...@@ -108,6 +115,7 @@ $.ajax({ ...@@ -108,6 +115,7 @@ $.ajax({
if(status==='success'){ if(status==='success'){
console.log("successfully add project in blockchain"); console.log("successfully add project in blockchain");
alert("successfully add project in blockchain"); alert("successfully add project in blockchain");
window.location.reload();
} }
showTab("query"); showTab("query");
}, },
...@@ -153,10 +161,9 @@ if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { ...@@ -153,10 +161,9 @@ if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
} }
}); });
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
}); });
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var url_string = window.location.href; var url_string = window.location.href;
var url = new URL(url_string); var url = new URL(url_string);
var searchKey = url.searchParams.get("id"); var searchKey = url.searchParams.get("id");
//console.log("1") //console.log("1")
//console.log(searchKey); //console.log(searchKey);
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
if(!searchKey) if(!searchKey)
{ {
......
$(document).ready(function(){ $(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
//make sure change to your own machine ip or dmain url //make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js" var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js" var urlrender="/js/renderTable.js"
......
$(document).ready(function(){ $(document).ready(function(){
//make sure change to your own machine ip or dmain url $(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
var url_string = window.location.href; var url_string = window.location.href;
var url = new URL(url_string); var url = new URL(url_string);
...@@ -9,8 +13,8 @@ var searchKey = url.searchParams.get("id"); ...@@ -9,8 +13,8 @@ var searchKey = url.searchParams.get("id");
urlDrop="/dist/js/select2.min.js"; urlDrop="/dist/js/select2.min.js";
var urltable ="/js/dataTable.js" var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js" var urlrender="/js/renderTable.js"
var urlBase = "http://0.0.0.0:30000"; var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30000"; // var urlBase = "http://10.0.2.2:30002";
var queryEmployeeUrl = urlBase+"/queryAllEmployee"; var queryEmployeeUrl = urlBase+"/queryAllEmployee";
var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
...@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
$("#addNewTask").click(function(){ $("#addNewTask").click(function(){
event.preventDefault();
console.log("in modal") console.log("in modal")
var addNewTaskUrl = urlBase+"/addNewTask"; var addNewTaskUrl = urlBase+"/addNewTask";
var formData = { var formData = {
...@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
console.log("successfully add user in blockchain"); console.log("successfully add user in blockchain");
alert("successfully add task in blockchain"); alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"'); //window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
} }
}, },
error: function(xhr, textStatus, error){ error: function(xhr, textStatus, error){
...@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject"; ...@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
alert("Error while adding task: "+ xhr.responseText); alert("Error while adding task: "+ xhr.responseText);
} }
}); });
}) })
}); });
$("#modal-edit").on('shown.bs.modal', function () { $("#modal-edit").on('shown.bs.modal', function () {
console.log($("#taskhelper").val()) console.log($("#taskhelper").val())
...@@ -138,78 +147,52 @@ $("#modal-edit").on('shown.bs.modal', function () { ...@@ -138,78 +147,52 @@ $("#modal-edit").on('shown.bs.modal', function () {
} }
}); });
$("#editTask").click(function(){
$.ajax({ event.preventDefault();
type: 'GET', console.log("in modal")
url: queryEmployeeUrl, var editTaskUrl = urlBase+"/editTask";
var formData = {
success: function(data, status, jqXHR){ taskId:$('#taskIDEdit').val(),
taskName: $('#taskNameEdit').val(),
$.getScript( urlDrop, function() { taskdescreption: $('#taskdescreptionEdit').val(),
taskStatus:$('#taskStatusEdit').val(),
let r = $.map(data, function (obj) { defecaltDegree: $('#defecaltDegreeEdit').val(),
obj.id = obj.Record.employeeId; taskWage: $('#taskWageEdit').val(),
obj.text = obj.Record.firstName+ " "+obj.Record.lastName; estematedTaskDuration: $('#estematedTaskDurationEdit').val(),
return obj; taskDeadline: $('#taskDeadlineEdit').val(),
});
$("#taskEmployeeID").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
} }
}); // console.log("formData========================================== ");
// console.log(formData);
$.ajax({ $.ajax({
type: 'GET', type: 'POST',
url: querytask, url: editTaskUrl,
data: { key: searchKey }, data: formData,
crossDomain:true,
success: function(data, status, jqXHR){ success: function(data, status, jqXHR){
let record = data.Record; if(status==='success'){
//console.log(data);
$("#projectID").text(data.projectID);
$("#projectName").text(data.projectName);
$("#descreption").text(data.descreption);
$("#projectStatus").text(data.projectStatus);
// $("#projectLeaderID").text(data.projectLeaderID);
//$("#clientID").text(data.clientID);
$("#estimatedBudget").text(data.estimatedBudget);
$("#estimatedDuration").text(data.estimatedDuration);
$("#deadline").text(data.deadline);
$("#createDateTime").text(data.createDateTime);
ajaxCall2(data.clientID); console.log("successfully add user in blockchain");
ajaxCall3(data.projectLeaderID); alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
}, },
error: function(xhr, textStatus, error){ error: function(xhr, textStatus, error){
console.log("error add project in blockchain");
console.log(xhr.statusText); console.log(xhr.statusText);
console.log(textStatus); console.log(textStatus);
console.log(error); console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText); alert("Error while adding task: "+ xhr.responseText);
} }
}); });
});
}); });
//////////////////////////////////////////////////////////////////////task table //////////////////////////////////////////////////////////////////////task table
...@@ -301,7 +284,15 @@ $.ajax({ ...@@ -301,7 +284,15 @@ $.ajax({
' <script>'+ ' <script>'+
' $("#'+data.taskId+'").click(function(){'+ ' $("#'+data.taskId+'").click(function(){'+
//'editTask(data)'+ //'editTask(data)'+
'$("#taskhelper").val("'+data+'"); '+ // '$("#taskIDEdit").val("'+data+'"); '+
'$("#taskIDEdit").val("'+data.taskId+'"); '+
'$("#taskNameEdit").val("'+data.taskName+'"); '+
'$("#taskdescreptionEdit").val("'+data.taskdescreption+'"); '+
'$("#taskStatusEdit").val("'+data.taskStatus+'"); '+
'$("#defecaltDegreeEdit").val("'+data.defecaltDegree+'"); '+
'$("#taskWageEdit").val("'+data.taskWage+'"); '+
'$("#estematedTaskDurationEdit").val("'+data.estematedTaskDuration+'"); '+
'$("#taskDeadlineEdit").val("'+data.taskDeadline+'"); '+
'});'+ '});'+
' </script>' ' </script>'
) )
...@@ -324,6 +315,58 @@ $.ajax({ ...@@ -324,6 +315,58 @@ $.ajax({
}, },
{
data: 'Record.taskId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<a class="btn btn-primary btn-sm" href="/taskDetail?id='+data+'" >' +
' <i class="fas fa-folder">' +
' </i>'+
' View' +
' </a>' +
' </td>'+
'</tr>'
)
},
},
{
data: 'Record.taskId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<a class="btn btn-info btn-sm" href="?id='+data+'" >'+
'<i class="fas fa-book">' +
' </i>' +
' history'+
' </a>' +
' </td>'+
'</tr>'
)
},
},
], ],
}); });
...@@ -417,26 +460,5 @@ new Chart(donutChartCanvas, { ...@@ -417,26 +460,5 @@ new Chart(donutChartCanvas, {
}); });
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
function editTask(data)
{
console.log(data)
// setTimeout(function(){ alert("After 5 seconds!"); }, 5000);
// $("#taskIDEdit").text(data.taskId);
// $("#taskNameEdit").val(data.taskName);
// $("#taskdescreptionEdit").val(data.taskdescreption);
// $("#taskStatusEdit").val(data.taskStatus);
// $("#taskEmployeeEdit").val(data.taskEmployeeID).trigger('change');
// $("#defecaltDegreeEdit").val(data.defecaltDegree);
// $("#taskWageEdit").val(data.taskWage);
// $("#estematedTaskDurationEdit").val(data.estematedTaskDuration);
// $("#taskDeadlineEdit").val(data.taskDeadline);
}
\ No newline at end of file
$(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
urlDrop="/dist/js/select2.min.js";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
var url_string = window.location.href;
var url = new URL(url_string);
var searchKey = url.searchParams.get("id");
//console.log("1")
//console.log(searchKey);
var urlBase = "http://0.0.0.0:30002";
if(!searchKey)
{
// console.log("2")
// window.location.replace("href="/projectDetail?id='+data+'"");
return;
}
//console.log("3")
var queryUrl = urlBase+"/queryTask";
var queryClient = urlBase+"/queryClient";
var queryEmployee = urlBase+"/queryEmployee";
var queryEmployeeUrl = urlBase+"/queryAllEmployee";
$.ajax({
type: 'GET',
url: queryUrl,
data: { key: searchKey },
crossDomain:true,
success: function(data, status, jqXHR){
let record = data.Record;
//console.log(data);
$("#projectID").text(data.projectID);
$("#taskName").text(data.taskName);
$("#taskdescreption").text(data.taskdescreption);
$("#taskStatus").text(data.taskStatus);
// $("#projectLeaderID").text(data.projectLeaderID);
//$("#clientID").text(data.clientID);
$("#defecaltDegree").text(data.defecaltDegree);
$("#estematedTaskDuration").text(data.estematedTaskDuration);
$("#taskDeadline").text(data.taskDeadline);
$("#createDateTime").text(data.createDateTime);
$("#lastUpdated").text(data.lastUpdated);
$("#taskWage").text(data.taskWage);
$("#ipfsCid").text(data.ipfsCid);
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
////////////////////////////////
var queryEmployeeTask=urlBase+"/queryEmployeeTask";
$.ajax({
type: 'GET',
url: queryEmployeeTask,
//crossDomain:true,
data: { key: searchKey },
success: function(data, status, jqXHR){
let record = data.Record;
$.getScript( urlrender, function() {
$.getScript( urltable, function() {
// console.log("before data table===== "+data);
$('#queryAllTasksTable').DataTable({
data: data,
columns: [
{
data: 'Record.employeeId',
render: function (data, type, row, meta) {
return ('<tr>' +'<th scope="col">'+'</th>');
},
},
{
data: 'Record.firstName',
render: function (data, type, row, meta) {
return (' <td >' +data + ' </td>')
},
},
{
data: 'Record.lastName' ,
render: function (data, type, row, meta) {
return '<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>'
},
},
{
data: 'Record.phoneNumber' ,
render: function (data, type, row, meta) {
return '<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>'
},
},
{
data: 'Record.email' ,
render: function (data, type, row, meta) {
return (
'<tr>'+'<th scope="col">'+ '</th>'+' <td >'+data +' </td>')
},
},
{
data: 'Record.employeeId' ,
render: function (data, type, row, meta) {
return (
'<td class="project-actions text-right">' +
'<button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#modal-edit" id="'+data+'">'+
'<i class="far fa-trash-alt">' +
' </i>' +
' Delete'+
' </button>' +
' </td>'+
'</tr>' +
'<script>'+
' $("#'+data+'").click(function(){'+
'alert("'+data+'");'+
'deleteEmployee("'+data+'")'+
'});'+
// ' $("'+data+'").click(function(){'+
// 'console.log("11")'+
// 'deleteEmployee('+data+')'+
// '});'+
'</script>'
)
},
},
],
});
});
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
//////////////////////////////////////////////////////////////////
$.ajax({
type: 'GET',
url: queryEmployeeUrl,
success: function(data, status, jqXHR){
$.getScript( urlDrop, function() {
let r = $.map(data, function (obj) {
obj.id = obj.Record.employeeId;
obj.text = obj.Record.firstName+ " "+obj.Record.lastName;
return obj;
});
$("#addtaskEmployee").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
}
});
///////////////////////////////////////////////////////////////////
$("#showIpfsCid").click(function(){
cid=$("#ipfsCid").val()
//cid='http://172.29.3.95:8080/ipfs/QmTpk4R498PuUrmNfwFxSTyfotUDy3T5h19qMJTe2hmbZT'
if(cid=="")
alert("No files have been uploaded yet")
else{
window.location.replace(cid);
}
})
var addNewEmployeeToTask=urlBase+"/addNewEmployeeToTask"
$("#addNewEmployeeToTask").click(function(){
event.preventDefault();
var formData = {
taskId: searchKey,
taskEmployeeID: $('#addtaskEmployee').val(),
}
$.ajax({
type: 'POST',
url: addNewEmployeeToTask,
data:formData,
success: function(data, status, jqXHR){
alert("successfully add employee");
window.location.reload();
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: Employee alreadr exist");
}
});
});
});
var urlBase = "http://0.0.0.0:30002";
var url_string = window.location.href;
var url = new URL(url_string);
var searchKey = url.searchParams.get("id");
var deleteEmployeeFromTask=urlBase+"/deleteEmployeeFromTask"
function deleteEmployee(EmployeeID)
{ event.preventDefault();
console.log("22")
var formData = {
taskId: searchKey,
taskEmployeeID: EmployeeID,
}
$.ajax({
type: 'POST',
url: deleteEmployeeFromTask,
data:formData,
success: function(data, status, jqXHR){
alert("successfully delete employee");
window.location.reload();
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
}
});
}
\ No newline at end of file
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const WalletService = require( "./walletsService.js" );
const walletSvcInstance = new WalletService();
const ClientLedgerContract = require('../../contract/lib/clientledgercontract.js');
class ClientService { class ClientService {
...@@ -18,7 +20,7 @@ class ClientService { ...@@ -18,7 +20,7 @@ class ClientService {
const gateway = new Gateway(); const gateway = new Gateway();
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
// Set connection options; identity and wallet // Set connection options; identity and wallet
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
...@@ -32,11 +34,12 @@ class ClientService { ...@@ -32,11 +34,12 @@ class ClientService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject // addNewProject
console.log('Submit pharmaledger addNewProject transaction.'); console.log('Submit clientledger addNewProject transaction.');
let ID="ClientID"+ (new Date()).getTime(); let ID="ClientID"+ (new Date()).getTime();
await walletSvcInstance.addToWallet(ID);
const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email); const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email);
console.log('addNewProject Transaction complete.'); console.log('addNewProject Transaction complete.');
return response; return response;
...@@ -64,7 +67,7 @@ async queryAllClient(userName) { ...@@ -64,7 +67,7 @@ async queryAllClient(userName) {
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
wallet: wallet, wallet: wallet,
...@@ -77,10 +80,10 @@ async queryAllClient(userName) { ...@@ -77,10 +80,10 @@ async queryAllClient(userName) {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryAllClient'); const response = await contract.submitTransaction('queryAllClient');
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
...@@ -111,7 +114,7 @@ async queryAllClient(userName) { ...@@ -111,7 +114,7 @@ async queryAllClient(userName) {
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
wallet: wallet, wallet: wallet,
...@@ -124,10 +127,10 @@ async queryAllClient(userName) { ...@@ -124,10 +127,10 @@ async queryAllClient(userName) {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryClient' , key); const response = await contract.submitTransaction('queryClient' , key);
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
......
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
const fs = require('fs'); const fs = require('fs');
const yaml = require('js-yaml'); const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network'); const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js'); const ClientLedgerContract = require('../../contract/lib/clientledgercontract.js');
const WalletService = require( "./walletsService.js" );
const walletSvcInstance = new WalletService();
class EmployeeService { class EmployeeService {
async addNewEmployee(userName, firstName,lastName, phoneNumber,email) { async addNewEmployee(userName, firstName,lastName, phoneNumber,email) {
...@@ -16,7 +18,7 @@ class EmployeeService { ...@@ -16,7 +18,7 @@ class EmployeeService {
const gateway = new Gateway(); const gateway = new Gateway();
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
// Set connection options; identity and wallet // Set connection options; identity and wallet
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
...@@ -30,11 +32,13 @@ class EmployeeService { ...@@ -30,11 +32,13 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('clientLedgerContract', 'org.pln.ClientLedgerContract');
// adduser // adduser
console.log('Submit pharmaledger addNewProject transaction.'); console.log('Submit clientledger addNewProject transaction.');
let ID="EmployyID"+ (new Date()).getTime(); let ID="EmployyID"+ (new Date()).getTime();
await walletSvcInstance.addToWallet(ID);
const response = await contract.submitTransaction('addNewEmployee', ID,firstName,lastName, phoneNumber,email); const response = await contract.submitTransaction('addNewEmployee', ID,firstName,lastName, phoneNumber,email);
console.log('add Transaction complete.'); console.log('add Transaction complete.');
return response; return response;
...@@ -64,7 +68,7 @@ class EmployeeService { ...@@ -64,7 +68,7 @@ class EmployeeService {
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
wallet: wallet, wallet: wallet,
...@@ -77,10 +81,10 @@ class EmployeeService { ...@@ -77,10 +81,10 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('clientLedgerContract', 'org.pln.ClientLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryAllEmployee'); const response = await contract.submitTransaction('queryAllEmployee');
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
...@@ -110,7 +114,7 @@ class EmployeeService { ...@@ -110,7 +114,7 @@ class EmployeeService {
try { try {
// Load connection profile; will be used to locate a gateway // Load connection profile; will be used to locate a gateway
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org1.example.com/connection-org1.json', 'utf8')); let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = { let connectionOptions = {
identity: userName, identity: userName,
wallet: wallet, wallet: wallet,
...@@ -123,10 +127,10 @@ class EmployeeService { ...@@ -123,10 +127,10 @@ class EmployeeService {
console.log('Use network channel: plnchannel.'); console.log('Use network channel: plnchannel.');
const network = await gateway.getNetwork('plnchannel'); const network = await gateway.getNetwork('plnchannel');
// Get addressability to farma ledger supply chain network contract // Get addressability to farma ledger supply chain network contract
console.log('Use org.pln.PharmaLedgerContract smart contract.'); console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('pharmaLedgerContract', 'org.pln.PharmaLedgerContract'); const contract = await network.getContract('clientLedgerContract', 'org.pln.ClientLedgerContract');
// query ledger data by key // query ledger data by key
console.log('Submit pharmaledger querybyKey request.'); console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryEmployee' , key); const response = await contract.submitTransaction('queryEmployee' , key);
//console.log(response); //console.log(response);
// console.log("response"); // console.log("response");
......
This diff is collapsed.
'use strict'; 'use strict';
// Bring key classes into scope, most importantly Fabric SDK network class // Bring key classes into scope, most importantly Fabric SDK network class
...@@ -15,8 +16,8 @@ class WalletService { ...@@ -15,8 +16,8 @@ class WalletService {
// A wallet stores a collection of identities // A wallet stores a collection of identities
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+user+'/wallet'); const wallet = await Wallets.newFileSystemWallet('../identity/user/'+user+'/wallet');
// Identity to credentials to be stored in the wallet // Identity to credentials to be stored in the wallet
const credPath = path.join(fixtures, '/peerOrganizations/org1.example.com/users/User1@org1.example.com'); const credPath = path.join(fixtures, '/peerOrganizations/org3.example.com/users/User1@org3.example.com');
const certificate = fs.readFileSync(path.join(credPath, '/msp/signcerts/User1@org1.example.com-cert.pem')).toString(); const certificate = fs.readFileSync(path.join(credPath, '/msp/signcerts/User1@org3.example.com-cert.pem')).toString();
const privateKey = fs.readFileSync(path.join(credPath, '/msp/keystore/priv_sk')).toString(); const privateKey = fs.readFileSync(path.join(credPath, '/msp/keystore/priv_sk')).toString();
// Load credentials into wallet // Load credentials into wallet
const identityLabel = user; const identityLabel = user;
...@@ -25,11 +26,11 @@ class WalletService { ...@@ -25,11 +26,11 @@ class WalletService {
certificate, certificate,
privateKey privateKey
}, },
mspId: 'Org1MSP', mspId: 'Org3MSP',
type: 'X.509' type: 'X.509'
} }
const response = await wallet.put(identityLabel, identity); const response = await wallet.put(identityLabel, identity);
console.log(`addToWallet mspId:Org1MSP response: ${response}`); console.log(`addToWallet mspId:Org3MSP response: ${response}`);
return response?JSON.parse(response):response; return response?JSON.parse(response):response;
} catch (error) { } catch (error) {
console.log(`Error adding to wallet. ${error}`); console.log(`Error adding to wallet. ${error}`);
......
This diff is collapsed.
...@@ -1020,6 +1020,7 @@ ...@@ -1020,6 +1020,7 @@
<!-- /.control-sidebar --> <!-- /.control-sidebar -->
</div> </div>
<!-- ./wrapper --> <!-- ./wrapper -->
<div id="wait" style="display:none;width:69px;height:89px;border:1px solid black;position:absolute;top:50%;left:50%;padding:2px;"><img src='/images/wait.gif' width="64" height="64" /><br>Loading..</div>
<!-- jQuery --> <!-- jQuery -->
<script src="../../plugins/jquery/jquery.min.js"></script> <script src="../../plugins/jquery/jquery.min.js"></script>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
# O'Reilly - Accelerated Hands-on Smart Contract Development with Hyperledger Fabric V2
# farma ledger supply chain network
# Author: Brian Wu
#
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# "OrdererOrgs" -define ordering node and Create an organization definition # "OrdererOrgs" -define ordering node and Create an organization definition
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment