1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| pragma solidity >=0.4.22 <0.7.0; pragma experimental ABIEncoderV2; import "./FoodInfoItem.sol"; import "./Distributor.sol"; import "./Producer.sol"; import "./Retailer.sol";
contract Trace is Producer, Distributor, Retailer{
mapping (uint256 => address) foods; uint[] foodList;
constructor(address producer, address distributor, address retailer) public Producer(producer) Distributor(distributor) Retailer(retailer){
} function newFood(string name, uint256 traceNumber, string traceName, uint8 quality) public onlyProducer returns(address) { require(foods[traceNumber] == address(0), "traceNumber already exist"); FoodInfoItem food = new FoodInfoItem(name, traceName, quality, msg.sender); foods[traceNumber] = food; foodList.push(traceNumber); return food; }
function addTraceInfoByDistributor(uint256 traceNumber, string traceName, uint8 quality) public onlyDistributor returns(bool) { require(foods[traceNumber] != address(0), "traceNumber does not exist"); return FoodInfoItem(foods[traceNumber]).addTraceInfoByDistributor(traceName, msg.sender, quality); }
function addTraceInfoByRetailer(uint256 traceNumber, string traceName, uint8 quality) public onlyRetailer returns(bool) { require(foods[traceNumber] != address(0), "traceNumber does not exist"); return FoodInfoItem(foods[traceNumber]).addTraceInfoByRetailer(traceName, msg.sender, quality); }
function getTraceInfo(uint256 traceNumber) public constant returns(uint[], string[], address[], uint8[]) { require(foods[traceNumber] != address(0), "traceNumber does not exist"); return FoodInfoItem(foods[traceNumber]).getTraceInfo(); }
function getFood(uint256 traceNumber) public constant returns(uint, string, string, string, address, uint8) { require(foods[traceNumber] != address(0), "traceNumber does not exist"); return FoodInfoItem(foods[traceNumber]).getFood(); }
function getAllFood() public constant returns (uint[]) { return foodList; } }
|