//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 { event Vote(uint indexed projectId,uint publicId,uint isVoted); struct Projects { string projectName; string description; uint estimatedBudget; uint receivedBudget; string startDate; string endDate; string image; uint ActualTokens; uint status; //string createdBy; //string timestamp; //uint ngoId; } struct Milestone { string name; string description; uint milestoneId; uint vendorId; uint estimatedTokens; uint approvedTokens; string startDate; string endDate; uint isCompleted; //string createdBy; //string timestamp; } struct VendorMilestone { uint milestoneId; uint projectId; } mapping(uint=>Projects) project; mapping(uint=>Milestone[]) milestone; mapping(uint=>VendorMilestone[]) vendor; function CreateProject(uint projectId, string projectName, string description,uint estimatedBudget,uint receivedBudget, string startDate,string endDate,uint ActualTokens,uint status,string image) public returns( bool) { project[projectId] = Projects({ projectName : projectName, description: description, estimatedBudget: estimatedBudget, receivedBudget: receivedBudget, startDate:startDate, endDate: endDate, //ngoId:ngoId, //createdBy: createdBy, //timestamp: timestamp, ActualTokens: ActualTokens, status: status, image:image }); projectCount++; return true; } function CreateMilestone(string name,string description,uint milestoneId, uint projectId, uint vendorId,uint estimatedTokens,uint approvedTokens,uint isCompleted,string startDate,string endDate) public returns( bool) { milestone[projectId].push( Milestone({ name:name, description:description, milestoneId:milestoneId, vendorId:vendorId, estimatedTokens:estimatedTokens, approvedTokens:approvedTokens, startDate:startDate, endDate:endDate, isCompleted:isCompleted })); return true; } function GetProjectCount() public view returns (uint) { return projectCount; } function GetMilestoneCount(uint projectId) public view returns (uint) { return milestone[projectId].length; } function GetProjectById(uint projectId) public view returns(string, string, uint, uint,string,string,string,uint,uint) { Projects memory projDetails = project[projectId]; return (projDetails.projectName,projDetails.description,projDetails.estimatedBudget, projDetails.receivedBudget,projDetails.startDate,projDetails.endDate,projDetails.image, projDetails.ActualTokens,projDetails.status); } function GetMilestoneById(uint milestoneId,uint projectId) public view returns(string, string, uint, uint,uint,uint,string,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.name,milestoneDetails.description,milestoneDetails.vendorId, milestoneDetails.estimatedTokens,milestoneDetails.approvedTokens,milestoneDetails.isCompleted, milestoneDetails.startDate,milestoneDetails.endDate); } function UpdateProjectStatus( uint projectId,uint status) public returns( bool) { //project[projectId].receivedBudget = receivedBudget; project[projectId].status = status; 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,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; milestone[projectId][index].approvedTokens = tokens; vendor[vendorId].push(VendorMilestone({ milestoneId:milestoneId, projectId:projectId })); return true; } function GetMilestoneCountByVendor(uint vendorId) public view returns (uint) { return vendor[vendorId].length; } function GetMilestoneByVendor(uint vendorId,uint index) public view returns(string,string,uint, uint,uint,uint,string,string) { VendorMilestone memory vendorDetails = vendor[vendorId][index]; Milestone memory milestoneDetails = milestone[vendorDetails.projectId][vendorDetails.milestoneId]; return (milestoneDetails.name,milestoneDetails.description,milestoneDetails.vendorId, milestoneDetails.estimatedTokens,milestoneDetails.approvedTokens,milestoneDetails.isCompleted, milestoneDetails.startDate,milestoneDetails.endDate); } function GetMilestoneProjectByVendor(uint vendorId,uint index) public view returns(uint,string) { VendorMilestone memory vendorDetails = vendor[vendorId][index]; Projects memory projDetails = project[vendorDetails.projectId]; return (vendorDetails.projectId,projDetails.projectName); } }
0.4.18