diff --git a/src/Components/Request/VisibleElements.vue b/src/Components/Request/VisibleElements.vue index 7dac0cc7e..bb8075d95 100644 --- a/src/Components/Request/VisibleElements.vue +++ b/src/Components/Request/VisibleElements.vue @@ -313,7 +313,7 @@ export default { const visibleElements = this.buildVisibleElements() try { - const response = await this.filesStore.requestSignaturesWithVisibleElements({ visibleElements }) + const response = await this.filesStore.updateSignatureRequest({ visibleElements, status: 1 }) this.filesStore.addFile(response.data) this.showConfirm = false showSuccess(t('libresign', response.message)) diff --git a/src/Components/RightSidebar/RequestSignatureTab.vue b/src/Components/RightSidebar/RequestSignatureTab.vue index 4dccfb081..582f5e9f4 100644 --- a/src/Components/RightSidebar/RequestSignatureTab.vue +++ b/src/Components/RightSidebar/RequestSignatureTab.vue @@ -12,7 +12,7 @@ - @@ -32,7 +32,15 @@ {{ t('libresign', 'Delete') }} - + + {{ t('libresign', 'Request signature') }} + + @@ -240,6 +248,37 @@ export default { isOrderedNumeric() { return this.signatureFlow === 'ordered_numeric' }, + canEditSigningOrder() { + return (signer) => { + return this.isOrderedNumeric + && this.totalSigners > 1 + && this.filesStore.canSave() + && !signer.signed + } + }, + canDelete() { + return (signer) => { + return this.filesStore.canSave() && !signer.signed + } + }, + canRequestSignature() { + return (signer) => { + return this.filesStore.canRequestSign + && !signer.signed + && signer.signRequestId + && !signer.me + && signer.status === 0 + } + }, + canSendReminder() { + return (signer) => { + return this.filesStore.canRequestSign + && !signer.signed + && signer.signRequestId + && !signer.me + && signer.status === 1 + } + }, showSaveButton() { if (!this.filesStore.canSave()) { return false @@ -415,6 +454,31 @@ export default { }) }, + async requestSignatureForSigner(signer) { + this.hasLoading = true + try { + const file = this.filesStore.getFile() + const signers = file.signers.map(s => { + if (s.signRequestId === signer.signRequestId) { + return { ...s, status: 1 } + } + return s + }) + await this.filesStore.updateSignatureRequest({ + visibleElements: [], + signers, + status: 1, + }) + showSuccess(t('libresign', 'Signature requested')) + } catch (error) { + if (error.response?.data?.ocs?.data?.message) { + showError(error.response.data.ocs.data.message) + } else if (error.response?.data?.ocs?.data?.errors) { + error.response.data.ocs.data.errors.forEach(error => showError(error.message)) + } + } + this.hasLoading = false + }, async sign() { const uuid = this.filesStore.getFile().signers .reduce((accumulator, signer) => { @@ -448,7 +512,7 @@ export default { async request() { this.hasLoading = true try { - const response = await this.filesStore.requestSignaturesWithVisibleElements({ visibleElements: [] }) + const response = await this.filesStore.updateSignatureRequest({ visibleElements: [], status: 1 }) showSuccess(t('libresign', response.message)) } catch (error) { if (error.response?.data?.ocs?.data?.message) { diff --git a/src/store/files.js b/src/store/files.js index 71fb93b98..990d576f0 100644 --- a/src/store/files.js +++ b/src/store/files.js @@ -399,7 +399,7 @@ export const useFilesStore = function(...args) { this.addFile(data.ocs.data.data) return data.ocs.data }, - async requestSignaturesWithVisibleElements({ visibleElements = [], signers = null, uuid = null, nodeId = null }) { + async updateSignatureRequest({ visibleElements = [], signers = null, uuid = null, nodeId = null, status = 1 }) { const file = this.getFile() const config = { url: generateOcsUrl('/apps/libresign/api/v1/request-signature'), @@ -408,7 +408,7 @@ export const useFilesStore = function(...args) { name: file?.name, users: signers || file.signers, visibleElements, - status: 1, + status, }, }