View | Details | Raw Unified | Return to bug 41178
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/SIP2/SIP2InstitutionResource.vue (+20 lines)
Lines 44-49 export default { Link Here
44
                resourceTableUrl:
44
                resourceTableUrl:
45
                    APIClient.sip2.httpClient._baseURL + "institutions",
45
                    APIClient.sip2.httpClient._baseURL + "institutions",
46
            },
46
            },
47
            beforeDoResourceDelete: resource =>
48
                beforeDoResourceDelete(resource),
47
            resourceAttrs: [
49
            resourceAttrs: [
48
                {
50
                {
49
                    name: "name",
51
                    name: "name",
Lines 154-159 export default { Link Here
154
            props: props,
156
            props: props,
155
        });
157
        });
156
158
159
        const beforeDoResourceDelete = async resource => {
160
            const accounts = await APIClient.sip2.accounts.getAll({
161
                sip_institution_id: resource.sip_institution_id,
162
            });
163
164
            if (accounts.length > 0) {
165
                baseResource.i18n.deleteConfirmationMessage = $__(
166
                    "You're removing institution %s. <br> It has %s associated accounts (%s), which will also be removed. Are you sure?"
167
                ).format(
168
                    resource.name,
169
                    accounts.length,
170
                    accounts.map(a => a.login_id).join(", ")
171
                );
172
            } else {
173
                baseResource.i18n.deleteConfirmationMessage = null;
174
            }
175
        };
176
157
        const tableOptions = {
177
        const tableOptions = {
158
            url: () => baseResource.getResourceTableUrl(),
178
            url: () => baseResource.getResourceTableUrl(),
159
            table_settings: institutions_table_settings,
179
            table_settings: institutions_table_settings,
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-resource.js (-34 / +51 lines)
Lines 240-280 export function useBaseResource(resourceConfig) { Link Here
240
     * @return {void}
240
     * @return {void}
241
     */
241
     */
242
    const doResourceDelete = (resource, callback) => {
242
    const doResourceDelete = (resource, callback) => {
243
        let resourceId = resource
243
        const runBeforeDelete = () => {
244
            ? resource[resourceConfig.idAttr]
244
            if (
245
            : resourceConfig.newResource[resourceConfig.idAttr];
245
                resourceConfig &&
246
        let resourceName = resource
246
                typeof resourceConfig.beforeDoResourceDelete === "function"
247
            ? resource[resourceConfig.nameAttr]
247
            ) {
248
            : resourceConfig.newResource[resourceConfig.nameAttr];
248
                const result = resourceConfig.beforeDoResourceDelete(resource);
249
249
                if (result && typeof result.then === "function") {
250
        setConfirmationDialog(
250
                    return result;
251
            {
251
                }
252
                title: i18n.deleteConfirmationMessage,
252
            }
253
                message: resourceName,
253
            return Promise.resolve();
254
                accept_label: $__("Yes, delete"),
254
        };
255
                cancel_label: $__("No, do not delete"),
255
256
            },
256
        runBeforeDelete().then(() => {
257
            () => {
257
            let resourceId = resource
258
                resourceConfig.apiClient.delete(resourceId).then(
258
                ? resource[resourceConfig.idAttr]
259
                    success => {
259
                : resourceConfig.newResource[resourceConfig.idAttr];
260
                        setMessage(
260
            let resourceName = resource
261
                            i18n.deleteSuccessMessage.format(resourceName),
261
                ? resource[resourceConfig.nameAttr]
262
                            true
262
                : resourceConfig.newResource[resourceConfig.nameAttr];
263
                        );
263
264
                        if (typeof callback === "function") {
264
            setConfirmationDialog(
265
                            callback();
265
                {
266
                        } else {
266
                    title: i18n.deleteConfirmationMessage,
267
                            if (resourceConfig.props.routeAction === "list") {
267
                    message: resourceName,
268
                                callback.ajax.reload();
268
                    accept_label: $__("Yes, delete"),
269
                    cancel_label: $__("No, do not delete"),
270
                },
271
                () => {
272
                    resourceConfig.apiClient.delete(resourceId).then(
273
                        success => {
274
                            setMessage(
275
                                i18n.deleteSuccessMessage.format(resourceName),
276
                                true
277
                            );
278
279
                            if (typeof after_delete_callback === "function") {
280
                                after_delete_callback();
269
                            } else {
281
                            } else {
270
                                goToResourceList();
282
                                if (
283
                                    resourceConfig.props.routeAction === "list"
284
                                ) {
285
                                    callback.ajax.reload();
286
                                } else {
287
                                    goToResourceList();
288
                                }
271
                            }
289
                            }
272
                        }
290
                        },
273
                    },
291
                        error => {}
274
                    error => {}
292
                    );
275
                );
293
                }
276
            }
294
            );
277
        );
295
        });
278
    };
296
    };
279
297
280
    /**
298
    /**
281
- 

Return to bug 41178