pragma solidity 0.7.1; contract CCRequest { address public Owner; address public BankAgent; string public LockerFriendlyName; string public LockerIdentifier; address public CurrentAuthorizedUser; string public ExpirationDate; string public Image; address public ThirdPartyRequestor; string public IntendedPurpose; string public LockerStatus; string public RejectionReason; enum StateType { Requested, UnderReview, Approved, Rejected } StateType public State; constructor(string memory lockerFriendlyName, address bankAgent) public { Owner = msg.sender; LockerFriendlyName = lockerFriendlyName; State = StateType.Requested; BankAgent = bankAgent; } function BeginReviewProcess() public { if (Owner == msg.sender) { revert(); } BankAgent = msg.sender; LockerStatus = "Pending"; State = StateType.DocumentReview; } function RejectApplication(string memory rejectionReason) public { if (BankAgent != msg.sender) { revert(); } RejectionReason = rejectionReason; LockerStatus = "Rejected"; State = StateType.DocumentReview; } function UploadDocuments(string memory lockerIdentifier, string memory image) public { if (BankAgent != msg.sender) { revert(); } LockerStatus = "Approved"; Image = image; LockerIdentifier = lockerIdentifier; State = StateType.AvailableToShare; } function ShareWithThirdParty(address thirdPartyRequestor, string memory expirationDate, string memory intendedPurpose) public { if (Owner != msg.sender) { revert(); } ThirdPartyRequestor = thirdPartyRequestor; CurrentAuthorizedUser = ThirdPartyRequestor; LockerStatus = "Shared"; IntendedPurpose = intendedPurpose; ExpirationDate = expirationDate; State = StateType.SharingWithThirdParty; } function AcceptSharingRequest() public { if (Owner != msg.sender) { revert(); } CurrentAuthorizedUser = ThirdPartyRequestor; State = StateType.SharingWithThirdParty; } function RejectSharingRequest() public { if (Owner != msg.sender) { revert(); } LockerStatus = "Available"; CurrentAuthorizedUser = 0x0000000000000000000000000000000000000000; State = StateType.AvailableToShare; } function RequestLockerAccess(string memory intendedPurpose) public { if (Owner == msg.sender) { revert(); } ThirdPartyRequestor = msg.sender; IntendedPurpose = intendedPurpose; State = StateType.SharingRequestPending; } function ReleaseLockerAccess() public { if (CurrentAuthorizedUser != msg.sender) { revert(); } LockerStatus = "Available"; ThirdPartyRequestor = 0x0000000000000000000000000000000000000000; CurrentAuthorizedUser = 0x0000000000000000000000000000000000000000; IntendedPurpose = ""; State = StateType.AvailableToShare; } function RevokeAccessFromThirdParty() public { if (Owner != msg.sender) { revert(); } LockerStatus = "Available"; CurrentAuthorizedUser = 0x0000000000000000000000000000000000000000; State = StateType.AvailableToShare; } function Terminate() public { if (Owner != msg.sender) { revert(); } CurrentAuthorizedUser = 0x0000000000000000000000000000000000000000; State = StateType.Terminated; } }
0.7.1