def _application_cancel(self, state, originator, data): txn_data = ApplicationCancelPayload() txn_data.ParseFromString(data) application_addr = Addressing.application_address( txn_data.record_identifier) state_items = self._get(state, [application_addr]) # check that the application exists applications = state_items.get(application_addr, None) application = self._find_application(applications, txn_data.applicant, txn_data.record_identifier, txn_data.type) if application is None: raise InvalidTransaction("Application does not exists.") # verify the txn signer is qualified to accept the application if application.applicant != originator: raise InvalidTransaction("Only Applicant can cancel Application.") # update the application application.status = Application.CANCELED # send back the updated application list self._set(state, [(application_addr, applications)])
def create_application_cancel_tp_process_request(self, record_id, applicant_id, application_type): record_addr = Addressing.record_address(record_id) agent_pub_key = self.public_key agent_addr = Addressing.agent_address(agent_pub_key) application_addr = Addressing.application_address(record_id) inputs = [agent_addr, application_addr, record_addr] outputs = [application_addr] return self.create_tp_process_request( SupplyChainPayload.APPLICATION_CANCEL, ApplicationCancelPayload(record_identifier=record_id, applicant=applicant_id, type=application_type), inputs, outputs)
def application_cancel(self, record_identifier, application_type, wait=None): outputs = [ Addressing.application_address(record_identifier), Addressing.record_address(record_identifier) ] inputs = outputs + [ Addressing.agent_address(self.public_key), Addressing.record_address(record_identifier) ] return self._send_txn(SupplyChainPayload.APPLICATION_CANCEL, ApplicationCancelPayload( record_identifier=record_identifier, applicant=self._public_key, type=application_type), inputs=inputs, outputs=outputs, wait=wait)