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
################################################################################
Profiles:
projectLedgerOrdererGenesis:
ProjectLedgerOrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
......@@ -350,13 +350,13 @@ Profiles:
Capabilities:
<<: *OrdererCapabilities
Consortiums:
projectLedgerConsortium:
ProjectLedgerConsortium:
Organizations:
- *Org1
- *Org2
- *Org3
projectLedgerChannel:
Consortium:projectLedgerConsortium
ProjectLedgerChannel:
Consortium: ProjectLedgerConsortium
<<: *ChannelDefaults
Application:
<<: *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
#
# -
#
# 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
......@@ -17,7 +13,7 @@ function printHelp() {
echo " - 'up' - bring up fabric orderer and peer nodes. No channel is created"
echo " - 'up createChannel' - bring up fabric network with one channel"
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 " - 'restart' - restart the network"
echo
......@@ -196,7 +192,7 @@ function createConsortium() {
# 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!
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=$?
set +x
if [ $res -ne 0 ]; then
......@@ -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
# remove channel and script artifacts
rm -rf channel-artifacts log.txt pharmaledgernetwork.tar.gz
rm -rf channel-artifacts log.txt projectledgernetwork.tar.gz
fi
}
......
......@@ -26,12 +26,16 @@ app.use(bodyParser.json());
app.use(fileUpload());
var cache = require('memory-cache');
const ProjectService = require('./services/ProjectService.js');
const TaskService = require('./services/TaskService.js');
const QueryService = require( "./services/queryService.js" );
const QueryHistoryService = require( "./services/queryHistoryService.js" );
const WalletService = require( "./services/walletsService.js" );
const ClientService = require( "./services/ClientService.js" );
const EmployeeService = require( "./services/EmployeeService.js" );
const ProjectSvcInstance = new ProjectService();
const TaskSvcInstance = new TaskService();
const querySvcInstance = new QueryService();
const queryHistorySvcInstance = new QueryHistoryService();
const walletSvcInstance = new WalletService();
......@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) {
res.render('projects.html');
})
app.get('/tasks', function (req, res) {
res.render('tasks.html');
})
app.get('/clients', function (req, res) {
res.render('clients.html');
......@@ -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) => {
const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget);
//console.log("after acsess to block");
return res.status(200).json(result);
res.render('projects.html');
}
} catch (error) {
......@@ -420,22 +434,184 @@ app.post('/addNewTask', async (req, res, next) => {
} else {
// console.log("befor acsess to block");
const result = await ProjectSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
// console.log("after acsess to block");
const result = await TaskSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
console.log("after acsess to block");
return res.status(200).json(result);
res.render('');
}
} catch (error) {
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);
}
})
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) => {
console.log(req.body);
var userName = cache.get('userName')
......
......@@ -3512,11 +3512,7 @@
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
}
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"node_modules/object-inspect": {
"version": "1.12.2",
......
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
......@@ -30,11 +37,6 @@ $(document).ready(function(){
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
\ No newline at end of file
$(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
var urlBase = "http://0.0.0.0:30000";
......
$(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
var urlBase = "http://0.0.0.0:30000";
......
$(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://10.0.2.2:30000";
......@@ -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 ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'});
......
$(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
urlDrop="/dist/js/select2.min.js";
var urlBase = "http://0.0.0.0:30000";
......@@ -84,6 +90,7 @@ $.ajax({
$("#addNewProject").click(function(){
event.preventDefault();
var addNewProjectUrl = urlBase+"/addNewProject";
var formData = {
......@@ -108,7 +115,8 @@ $.ajax({
if(status==='success'){
console.log("successfully add project in blockchain");
alert("successfully add project in blockchain");
}
window.location.reload();
}
showTab("query");
},
error: function(xhr, textStatus, error){
......@@ -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");
});
\ No newline at end of file
$(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 = new URL(url_string);
var searchKey = url.searchParams.get("id");
......
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
......@@ -117,5 +122,5 @@ $.getScript( urlrender, 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 = new URL(url_string);
......@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
$("#addNewTask").click(function(){
event.preventDefault();
console.log("in modal")
var addNewTaskUrl = urlBase+"/addNewTask";
var formData = {
......@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
console.log("successfully add user in blockchain");
alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
},
error: function(xhr, textStatus, error){
......@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
alert("Error while adding task: "+ xhr.responseText);
}
});
})
});
$("#modal-edit").on('shown.bs.modal', function () {
console.log($("#taskhelper").val())
......@@ -138,76 +147,50 @@ $("#modal-edit").on('shown.bs.modal', function () {
}
});
$("#editTask").click(function(){
event.preventDefault();
console.log("in modal")
var editTaskUrl = urlBase+"/editTask";
var formData = {
taskId:$('#taskIDEdit').val(),
taskName: $('#taskNameEdit').val(),
taskdescreption: $('#taskdescreptionEdit').val(),
taskStatus:$('#taskStatusEdit').val(),
defecaltDegree: $('#defecaltDegreeEdit').val(),
taskWage: $('#taskWageEdit').val(),
estematedTaskDuration: $('#estematedTaskDurationEdit').val(),
taskDeadline: $('#taskDeadlineEdit').val(),
}
// console.log("formData========================================== ");
// console.log(formData);
$.ajax({
type: 'GET',
url: queryEmployeeUrl,
type: 'POST',
url: editTaskUrl,
data: formData,
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;
});
$("#taskEmployeeID").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
if(status==='success'){
console.log("successfully add user in blockchain");
alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
},
error: function(xhr, textStatus, error){
console.log("error add project in blockchain");
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
alert("Error while adding task: "+ xhr.responseText);
}
});
$.ajax({
type: 'GET',
url: querytask,
data: { key: searchKey },
crossDomain:true,
success: function(data, status, jqXHR){
let record = data.Record;
//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);
ajaxCall3(data.projectLeaderID);
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
});
});
......@@ -301,10 +284,18 @@ $.ajax({
' <script>'+
' $("#'+data.taskId+'").click(function(){'+
//'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>'
)
)
// return ('<td class="project-actions text-right">' +
// '<a class="btn btn-primary btn-sm" id=viewTask value='+data+'" >' +
// ' <i class="fas fa-folder">' +
......@@ -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, {
});
$(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 @@
const fs = require('fs');
const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js');
const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class ClientService {
......@@ -32,10 +32,10 @@ class ClientService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject
console.log('Submit pharmaledger addNewProject transaction.');
console.log('Submit Adminledger addNewProject transaction.');
let ID="ClientID"+ (new Date()).getTime();
const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email);
console.log('addNewProject Transaction complete.');
......@@ -77,10 +77,10 @@ async queryAllClient(userName) {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit Adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllClient');
//console.log(response);
// console.log("response");
......@@ -124,10 +124,10 @@ async queryAllClient(userName) {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit Adminledger querybyKey request.');
const response = await contract.submitTransaction('queryClient' , key);
//console.log(response);
// console.log("response");
......
......@@ -6,7 +6,7 @@
const fs = require('fs');
const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js');
const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class EmployeeService {
async addNewEmployee(userName, firstName,lastName, phoneNumber,email) {
......@@ -30,10 +30,10 @@ class EmployeeService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// adduser
console.log('Submit pharmaledger addNewProject transaction.');
console.log('Submit adminledger addNewProject transaction.');
let ID="EmployyID"+ (new Date()).getTime();
const response = await contract.submitTransaction('addNewEmployee', ID,firstName,lastName, phoneNumber,email);
console.log('add Transaction complete.');
......@@ -77,10 +77,10 @@ class EmployeeService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllEmployee');
//console.log(response);
// console.log("response");
......@@ -123,10 +123,10 @@ class EmployeeService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryEmployee' , key);
//console.log(response);
// console.log("response");
......
......@@ -6,7 +6,7 @@
const fs = require('fs');
const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js');
const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
class ProjectService {
async addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget) {
......@@ -30,10 +30,10 @@ class ProjectService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject
console.log('Submit pharmaledger addNewProject transaction.');
console.log('Submit adminledger addNewProject transaction.');
let ID="ProjectID"+ (new Date()).getTime();
let projectProgress=0;
const response = await contract.submitTransaction('addNewProject', ID,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget,projectProgress);
......@@ -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';
// Bring key classes into scope, most importantly Fabric SDK network class
const fs = require('fs');
const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js');
const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
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) {
// A wallet stores a collection of identities for use
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet');
......@@ -35,10 +47,10 @@ class QueryHistoryService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryHistoryByKey', key);
//console.log(response);
return response?JSON.parse(response):response;
......
......@@ -5,9 +5,16 @@
const fs = require('fs');
const yaml = require('js-yaml');
const { Wallets, Gateway } = require('fabric-network');
const PharmaLedgerContract = require('../../contract/lib/pharmaledgercontract.js');
const AdminLedgerContract = require('../../contract/lib/adminledgercontract.js');
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) {
// A wallet stores a collection of identities for use
const wallet = await Wallets.newFileSystemWallet('../identity/user/'+userName+'/wallet');
......@@ -35,10 +42,10 @@ class QueryService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryProject', key);
// console.log("response");
//console.log(JSON.parse(response));
......@@ -82,10 +89,10 @@ class QueryService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllProjects');
//console.log(response);
// console.log("response");
......@@ -130,10 +137,10 @@ class QueryService {
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');
console.log('Use org.pln.AdminLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit adminledger querybyKey request.');
const response = await contract.submitTransaction('queryAllTasksForAProject' , key);
//console.log(response);
// console.log("response");
......
......@@ -124,17 +124,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<a class="nav-link" href="/">
<i class="nav-icon fas fa-house-user" ></i>
<p>home</p>
</a>
</li>
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -143,9 +140,6 @@
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item" >
<a href="/projects" class="nav-link">
<i class="far fa-circle nav-icon"></i>
......@@ -154,30 +148,72 @@
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -327,6 +363,7 @@
<!-- /.control-sidebar -->
</div>
<!-- ./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 -->
<script src="/plugins/jquery/jquery.min.js"></script>
......
......@@ -120,12 +120,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -134,41 +136,80 @@
</p>
</a>
<ul class="nav nav-treeview">
<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>
<p>Projects</p>
</a>
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -263,6 +304,7 @@
<!-- /.control-sidebar -->
</div>
<!-- ./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 -->
<script src="/plugins/jquery/jquery.min.js"></script>
......
......@@ -4,7 +4,7 @@
<head>
<meta charset="utf-8"/>
<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-->
<link rel="stylesheet" href="/css/bootstrap.css">
<link rel="stylesheet" href="/css/fontawesome.css">
......@@ -152,6 +152,14 @@
</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">
<a href="#" class="nav-link">
<i class="nav-icon fas fa-users"></i>
......@@ -192,7 +200,7 @@
<p>add Client</p>
</a>
</li>
<li class="nav-item">
<li class="nav-item">
<a class="nav-link" id="addUser">
<i class="nav-icon far fa-circle text-info"></i>
<p>add</p>
......
......@@ -132,12 +132,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -146,41 +148,80 @@
</p>
</a>
<ul class="nav nav-treeview">
<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>
<p>Projects</p>
</a>
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -337,6 +378,7 @@
<!-- /.control-sidebar -->
</div>
<!-- ./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 -->
<script src="/plugins/jquery/jquery.min.js"></script>
......
......@@ -129,12 +129,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -143,41 +145,80 @@
</p>
</a>
<ul class="nav nav-treeview">
<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>
<p>Projects</p>
</a>
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -337,7 +378,11 @@
<th style="width: 15%" >
Status
</th>
<th style="width: 15%">
<th style="width: 10%">
</th>
<th style="width: 10%">
</th>
<th style="width: 10%">
</th>
</tr>
</thead>
......@@ -403,7 +448,7 @@
</div>
<div class="form-group">
<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>
</select>
</div>
......@@ -501,12 +546,12 @@
</select>
</div>
<div class="form-group">
<!-- <div class="form-group">
<label for="taskEmployeeEdit">Employee</label>
<select id="taskEmployeeEdit" class="form-control custom-select" required>
<option></option>
</select>
</div>
</div> -->
<div class="form-group">
<label for="defecaltDegreeEdit">Defecalt Degree</label>
<select id="defecaltDegreeEdit" class="form-control" required>
......@@ -577,6 +622,7 @@
<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>
</html>
......
......@@ -1020,6 +1020,7 @@
<!-- /.control-sidebar -->
</div>
<!-- ./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 -->
<script src="../../plugins/jquery/jquery.min.js"></script>
......
......@@ -129,12 +129,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -143,41 +145,80 @@
</p>
</a>
<ul class="nav nav-treeview">
<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>
<p>Projects</p>
</a>
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -545,6 +586,7 @@
</div>
</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 -->
<script src="/plugins/jquery/jquery.min.js"></script>
......
......@@ -120,12 +120,14 @@
<!-- Sidebar Menu -->
<nav class="mt-2">
<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">
<i class="nav-icon fas fa-book"></i>
<p>
......@@ -134,41 +136,80 @@
</p>
</a>
<ul class="nav nav-treeview">
<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>
<p>Projects</p>
</a>
</li>
<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>
<p>Project Add</p>
</a>
</li>
</li>
</ul>
</li>
<li class="nav-item">
<a href="project-edit.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Edit</p>
</a>
</li>
<li class="nav-item">
<a href="project-detail.html" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Project Detail</p>
</a>
<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">
<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>
<p>Clients</p>
</a>
</li>
<li class="nav-item">
<a href="/employees" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Employees</p>
</a>
</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 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>
</nav>
<!-- /.sidebar-menu -->
</div>
......@@ -255,6 +296,7 @@
<!-- /.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 -->
<aside class="control-sidebar control-sidebar-dark">
......
This diff is collapsed.
This diff is collapsed.
'use strict';
const ProjectLedgerContract = require('./lib/Projectledgercontract.js');
const AdminLedgerContract = require('./lib/adminledgercontract.js');
module.exports.ProjectLedgerContract = ProjectLedgerContract;
module.exports.contracts = [ ProjectLedgerContract ];
module.exports.AdminLedgerContract = AdminLedgerContract;
module.exports.contracts = [ AdminLedgerContract ];
{
"name": "pharmaledger-js",
"name": "ledger-js",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "pharmaledger-js",
"name": "ledger-js",
"version": "1.0.0",
"license": "Apache-2.0",
"dependencies": {
......
{
"name": "pharmaledger-js",
"name": "ledger-js",
"version": "1.0.0",
"description": "PharmaLedger contract implemented in JavaScript",
"main": "index.js",
......@@ -14,7 +14,7 @@
"start": "fabric-chaincode-node start"
},
"engineStrict": true,
"author": "brian",
"author": "monther",
"license": "Apache-2.0",
"dependencies": {
"fabric-contract-api": "^2.1.2",
......
......@@ -26,12 +26,16 @@ app.use(bodyParser.json());
app.use(fileUpload());
var cache = require('memory-cache');
const ProjectService = require('./services/ProjectService.js');
const TaskService = require('./services/TaskService.js');
const QueryService = require( "./services/queryService.js" );
const QueryHistoryService = require( "./services/queryHistoryService.js" );
const WalletService = require( "./services/walletsService.js" );
const ClientService = require( "./services/ClientService.js" );
const EmployeeService = require( "./services/EmployeeService.js" );
const ProjectSvcInstance = new ProjectService();
const TaskSvcInstance = new TaskService();
const querySvcInstance = new QueryService();
const queryHistorySvcInstance = new QueryHistoryService();
const walletSvcInstance = new WalletService();
......@@ -63,6 +67,11 @@ app.get('/projects', function (req, res) {
res.render('projects.html');
})
app.get('/tasks', function (req, res) {
res.render('tasks.html');
})
app.get('/clients', function (req, res) {
res.render('clients.html');
......@@ -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) => {
const result = await ProjectSvcInstance.addNewProject(userName,projectName, clientID, descreption ,deadline,projectStatus,projectLeaderID,estimatedDuration,estimatedBudget);
//console.log("after acsess to block");
return res.status(200).json(result);
res.render('projects.html');
}
} catch (error) {
......@@ -420,22 +434,184 @@ app.post('/addNewTask', async (req, res, next) => {
} else {
// console.log("befor acsess to block");
const result = await ProjectSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
// console.log("after acsess to block");
const result = await TaskSvcInstance.addNewTask(userName, projectID, taskName, taskdescreption,taskStatus, defecaltDegree,taskEmployeeID,estematedTaskDuration,taskDeadline,taskWage);
console.log("after acsess to block");
return res.status(200).json(result);
res.render('');
}
} catch (error) {
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);
}
})
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) => {
console.log(req.body);
var userName = cache.get('userName')
......@@ -548,11 +724,7 @@ res.render('',{fileHash})
var port = process.env.PORT || 30000;
var port = process.env.PORT || 30002;
var server = app.listen(port, function () {
var host = server.address().address
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",
"version": "1.0.0",
"description": "O'Reilly - Accelerated Hands-on Smart Contract Development with Hyperledger Fabric V2",
"description": "Hyperledger",
"main": "app.js",
"scripts": {
"test": "rm -rf _idwallet && node addToWallet.js"
......
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
$("#addUser").click(function(){
......@@ -30,11 +37,6 @@ $(document).ready(function(){
});
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
\ No newline at end of file
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
......
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
......
$(document).ready(function(){
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
$(document).ajaxStart(function(){
$("#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(){
console.log("10");
......@@ -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 ipfs = ipfsClient.create({host:'172.29.3.95' , port:'5001', protocol:'http'});
......
$(document).ready(function(){
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
$("#homePage").click(function(){
$.ajax({
......
$(document).ready(function(){
//make sure change to your own machine ip or dmain url
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
// $("#addUser").click(function(){
// var addUserUrl = urlBase+"/addUser";
......
$(document).ready(function(){
$(document).ajaxStart(function(){
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function(){
$("#wait").css("display", "none");
});
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 queryEmployeeUrl = urlBase+"/queryAllEmployee";
......@@ -84,6 +90,7 @@ $.ajax({
$("#addNewProject").click(function(){
event.preventDefault();
var addNewProjectUrl = urlBase+"/addNewProject";
var formData = {
......@@ -108,7 +115,8 @@ $.ajax({
if(status==='success'){
console.log("successfully add project in blockchain");
alert("successfully add project in blockchain");
}
window.location.reload();
}
showTab("query");
},
error: function(xhr, textStatus, error){
......@@ -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");
});
\ No newline at end of file
$(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 = new URL(url_string);
var searchKey = url.searchParams.get("id");
//console.log("1")
//console.log(searchKey);
var urlBase = "http://0.0.0.0:30000";
var urlBase = "http://0.0.0.0:30002";
if(!searchKey)
{
......
$(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
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
......@@ -117,5 +122,5 @@ $.getScript( urlrender, 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 = new URL(url_string);
......@@ -9,8 +13,8 @@ var searchKey = url.searchParams.get("id");
urlDrop="/dist/js/select2.min.js";
var urltable ="/js/dataTable.js"
var urlrender="/js/renderTable.js"
var urlBase = "http://0.0.0.0:30000";
// var urlBase = "http://10.0.2.2:30000";
var urlBase = "http://0.0.0.0:30002";
// var urlBase = "http://10.0.2.2:30002";
var queryEmployeeUrl = urlBase+"/queryAllEmployee";
var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
......@@ -72,7 +76,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
$("#addNewTask").click(function(){
event.preventDefault();
console.log("in modal")
var addNewTaskUrl = urlBase+"/addNewTask";
var formData = {
......@@ -100,6 +104,7 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
console.log("successfully add user in blockchain");
alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
},
error: function(xhr, textStatus, error){
......@@ -111,10 +116,14 @@ var queryAllTasksForAProject = urlBase+"/queryAllTasksForAProject";
alert("Error while adding task: "+ xhr.responseText);
}
});
})
});
$("#modal-edit").on('shown.bs.modal', function () {
console.log($("#taskhelper").val())
......@@ -138,76 +147,50 @@ $("#modal-edit").on('shown.bs.modal', function () {
}
});
$("#editTask").click(function(){
event.preventDefault();
console.log("in modal")
var editTaskUrl = urlBase+"/editTask";
var formData = {
taskId:$('#taskIDEdit').val(),
taskName: $('#taskNameEdit').val(),
taskdescreption: $('#taskdescreptionEdit').val(),
taskStatus:$('#taskStatusEdit').val(),
defecaltDegree: $('#defecaltDegreeEdit').val(),
taskWage: $('#taskWageEdit').val(),
estematedTaskDuration: $('#estematedTaskDurationEdit').val(),
taskDeadline: $('#taskDeadlineEdit').val(),
}
// console.log("formData========================================== ");
// console.log(formData);
$.ajax({
type: 'GET',
url: queryEmployeeUrl,
type: 'POST',
url: editTaskUrl,
data: formData,
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;
});
$("#taskEmployeeID").select2({
placeholder: 'Select a Employee...',
theme: "dark",
data: r,
})
});
if(status==='success'){
console.log("successfully add user in blockchain");
alert("successfully add task in blockchain");
//window.location.replace("/projectDetail?id"+searchKey+'"');
window.location.reload();
}
},
error: function(xhr, textStatus, error){
console.log("error add project in blockchain");
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: "+ xhr.responseText);
alert("Error while adding task: "+ xhr.responseText);
}
});
$.ajax({
type: 'GET',
url: querytask,
data: { key: searchKey },
crossDomain:true,
success: function(data, status, jqXHR){
let record = data.Record;
//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);
ajaxCall3(data.projectLeaderID);
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
alert("Error: llllllllllllllllllllll"+ xhr.responseText);
}
});
});
});
......@@ -301,10 +284,18 @@ $.ajax({
' <script>'+
' $("#'+data.taskId+'").click(function(){'+
//'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>'
)
)
// return ('<td class="project-actions text-right">' +
// '<a class="btn btn-primary btn-sm" id=viewTask value='+data+'" >' +
// ' <i class="fas fa-folder">' +
......@@ -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, {
});
$(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 @@
const fs = require('fs');
const yaml = require('js-yaml');
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 {
......@@ -18,7 +20,7 @@ class ClientService {
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'));
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
// Set connection options; identity and wallet
let connectionOptions = {
identity: userName,
......@@ -32,11 +34,12 @@ class ClientService {
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');
console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// addNewProject
console.log('Submit pharmaledger addNewProject transaction.');
console.log('Submit clientledger addNewProject transaction.');
let ID="ClientID"+ (new Date()).getTime();
await walletSvcInstance.addToWallet(ID);
const response = await contract.submitTransaction('addNewClient', ID,firstName,lastName, phoneNumber,email);
console.log('addNewProject Transaction complete.');
return response;
......@@ -64,7 +67,7 @@ async queryAllClient(userName) {
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'));
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = {
identity: userName,
wallet: wallet,
......@@ -77,10 +80,10 @@ async queryAllClient(userName) {
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');
console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryAllClient');
//console.log(response);
// console.log("response");
......@@ -111,7 +114,7 @@ async queryAllClient(userName) {
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'));
let connectionProfile = yaml.safeLoad(fs.readFileSync('../../../organizations/peerOrganizations/org3.example.com/connection-org3.json', 'utf8'));
let connectionOptions = {
identity: userName,
wallet: wallet,
......@@ -124,10 +127,10 @@ async queryAllClient(userName) {
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');
console.log('Use org.pln.ClientLedgerContract smart contract.');
const contract = await network.getContract('adminLedgerContract', 'org.pln.AdminLedgerContract');
// query ledger data by key
console.log('Submit pharmaledger querybyKey request.');
console.log('Submit clientledger querybyKey request.');
const response = await contract.submitTransaction('queryClient' , key);
//console.log(response);
// console.log("response");
......
This diff is collapsed.
This diff is collapsed.
......@@ -1020,6 +1020,7 @@
<!-- /.control-sidebar -->
</div>
<!-- ./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 -->
<script src="../../plugins/jquery/jquery.min.js"></script>
......
This diff is collapsed.
This diff is collapsed.
'use strict';
const ProjectLedgerContract = require('./lib/Projectledgercontract.js');
const ClientLedgerContract = require('./lib/clientledgercontract.js');
module.exports.ProjectLedgerContract = ProjectLedgerContract;
module.exports.contracts = [ ProjectLedgerContract ];
module.exports.ClientLedgerContract = ClientLedgerContract;
module.exports.contracts = [ ClientLedgerContract ];
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.
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