//pragma solidity ^0.5.0; pragma solidity ^0.4.18; contract Destructor { address public owner; uint public projectCount = 0; //Constructor for version ^0.5.0 //constructor() public { // owner = msg.sender; //} //Constructor for version ^0.4.18 function Destructor() public { owner = msg.sender; } //Modifier for check whether the user is admin or not modifier isAdmin { if (owner != msg.sender) { revert(); }else { _; } } //Method for disable the deployed contract function destruct() public isAdmin { selfdestruct(owner); } } contract Project is Destructor { struct Projects { string projectNameDesc; //name~description~id uint estimatedBudget; uint receivedBudget; string startEndDate; //startDate~endDate format string image; uint status; uint likes; uint dislikes; } struct Milestone { string nameDesc; //name~description~id uint milestoneId; uint vendorId; uint estimatedTokens; uint approvedTokens; string startEndDate; //startDate~endDate format uint isCompleted; } struct VendorMilestone { uint milestoneId; uint projectId; } mapping(uint=>Projects) project; mapping(uint=>Milestone[]) milestone; mapping(uint=>VendorMilestone[]) vendor; function CreateProject(uint projectId, string projectNameDesc,uint estimatedBudget,uint receivedBudget, string startEndDate,uint status,string image,uint likes,uint dislikes) public returns( bool) { project[projectId] = Projects({ projectNameDesc : projectNameDesc, estimatedBudget: estimatedBudget, receivedBudget: receivedBudget, startEndDate:startEndDate, status: status, image:image, likes:likes, dislikes:dislikes }); projectCount++; return true; } function CreateMilestone(string nameDesc,uint milestoneId, uint projectId, uint vendorId,uint estimatedTokens,uint approvedTokens,uint isCompleted,string startEndDate) public returns( bool) { milestone[projectId].push( Milestone({ nameDesc:nameDesc, milestoneId:milestoneId, vendorId:vendorId, estimatedTokens:estimatedTokens, approvedTokens:approvedTokens, startEndDate:startEndDate, isCompleted:isCompleted })); return true; } function GetProjectCount() public constant returns (uint) { return projectCount; } //only for testing purpose function UpdateProjectCount(uint count) public returns (bool) { projectCount = count; return true; } function GetMilestoneCount(uint projectId) public constant returns (uint) { return milestone[projectId].length; } function GetProjectById(uint projectId) public constant returns(string,uint,uint,string,string,uint,uint,uint) { Projects memory projDetails = project[projectId]; return (projDetails.projectNameDesc,projDetails.estimatedBudget, projDetails.receivedBudget,projDetails.startEndDate,projDetails.image, projDetails.status,projDetails.likes,projDetails.dislikes); } function GetMilestoneById(uint milestoneId,uint projectId) public constant returns(string, uint, uint,uint,uint,string) { uint count = milestone[projectId].length; uint index; for (uint i = 0; i < count; i++) { if(milestone[projectId][i].milestoneId == milestoneId) { index = i; break; } } Milestone memory milestoneDetails = milestone[projectId][index]; return (milestoneDetails.nameDesc,milestoneDetails.vendorId, milestoneDetails.estimatedTokens,milestoneDetails.approvedTokens,milestoneDetails.isCompleted, milestoneDetails.startEndDate); } function GetMilestoneByIndex(uint index,uint projectId) public constant returns(uint, string, uint, uint,uint,uint,string) { Milestone memory milestoneDetails = milestone[projectId][index]; return (milestoneDetails.milestoneId,milestoneDetails.nameDesc,milestoneDetails.vendorId, milestoneDetails.estimatedTokens,milestoneDetails.approvedTokens,milestoneDetails.isCompleted, milestoneDetails.startEndDate); } function UpdateProjectStatus( uint projectId,uint status) public returns( bool) { project[projectId].status = status; return true; } function UpdateProjectBudget( uint projectId,uint receivedBudget) public returns( bool) { project[projectId].receivedBudget += receivedBudget; return true; } function UpdateProjectVote(uint projectId,uint likes,uint dislikes) public returns( bool) { project[projectId].likes += likes; project[projectId].dislikes += dislikes; return true; } function UpdateMilestoneCompletion(uint milestoneId, uint projectId, uint isCompleted) public returns( bool) { uint count = milestone[projectId].length; uint index; for (uint i = 0; i < count; i++) { if(milestone[projectId][i].milestoneId==milestoneId) { index = i; break; } } milestone[projectId][index].isCompleted = isCompleted; return true; } function UpdateMilestoneAmount(uint milestoneId, uint projectId, uint tokens) public returns( bool) { uint count = milestone[projectId].length; uint index; for (uint i = 0; i < count; i++) { if(milestone[projectId][i].milestoneId == milestoneId) { index = i; break; } } milestone[projectId][index].approvedTokens = tokens; return true; } function AssignMilestoneVendor(uint milestoneId, uint projectId,uint vendorId) public returns( bool) { uint count = milestone[projectId].length; uint index; for (uint i = 0; i < count; i++) { if(milestone[projectId][i].milestoneId == milestoneId) { index = i; break; } } milestone[projectId][index].vendorId = vendorId; vendor[vendorId].push(VendorMilestone({ milestoneId:milestoneId, projectId:projectId })); return true; } function GetMilestoneCountByVendor(uint vendorId) public constant returns (uint) { return vendor[vendorId].length; } function GetMilestoneByVendor(uint vendorId,uint index) public constant returns(string,uint, uint,uint,string,string) { VendorMilestone memory vendorDetails = vendor[vendorId][index]; Projects memory projDetails = project[vendorDetails.projectId]; uint count = milestone[vendorDetails.projectId].length; uint milestoneIndex; for (uint i = 0; i < count; i++) { if(milestone[vendorDetails.projectId][i].milestoneId == vendorDetails.milestoneId) { milestoneIndex = i; break; } } Milestone memory milestoneDetails = milestone[vendorDetails.projectId][milestoneIndex]; return (milestoneDetails.nameDesc,milestoneDetails.estimatedTokens, milestoneDetails.approvedTokens,milestoneDetails.isCompleted,milestoneDetails.startEndDate,projDetails.projectNameDesc); } function GetMilestoneProjectByVendor(uint vendorId,uint index) public constant returns(uint,string) { VendorMilestone memory vendorDetails = vendor[vendorId][index]; Projects memory projDetails = project[vendorDetails.projectId]; return (vendorDetails.projectId,projDetails.projectNameDesc); } }
0.4.18