def complete(metadata = {}, options = {})
      unless completable? || options.fetch(:force, false)
        raise NotCompletable.new(not_completable_error_message)
      end
      with_hooks(:update, metadata, options) do
        with_hooks(:complete, metadata, options) do
          proceed_workitem
          log(:complete, metadata)
        end
      end
    end
def complete(metadata = {}, options = {})
      unless completable? || options.fetch(:force, false)
        raise NotCompletable.new(not_completable_error_message)
      end
      with_hooks(:update, metadata, options) do
        with_hooks(:complete, metadata, options) do
          proceed_workitem
          log(:complete, metadata)
        end
      end
    end
proceed workitem (saving changes to fields)