This commit is contained in:
a.bouhuolia
2021-01-02 15:49:13 +02:00
7 changed files with 90 additions and 23 deletions

View File

@@ -146,6 +146,20 @@ function CustomersList({
setBulkDelete(false); setBulkDelete(false);
}, []); }, []);
const transformApiErrors = (errors) => {
if (
errors.find(
(error) => error.type === 'SOME.CUSTOMERS.HAVE.SALES_INVOICES',
)
) {
AppToaster.show({
message: formatMessage({
id: 'some_customers_have_sales_invoices',
}),
intent: Intent.DANGER,
});
}
};
// Handle confirm customers bulk delete. // Handle confirm customers bulk delete.
const handleConfirmBulkDelete = useCallback(() => { const handleConfirmBulkDelete = useCallback(() => {
requestDeleteBulkCustomers(bulkDelete) requestDeleteBulkCustomers(bulkDelete)
@@ -158,7 +172,8 @@ function CustomersList({
intent: Intent.SUCCESS, intent: Intent.SUCCESS,
}); });
}) })
.catch((error) => { .catch((errors) => {
transformApiErrors(errors);
setBulkDelete(false); setBulkDelete(false);
}); });
}, [requestDeleteBulkCustomers, bulkDelete, formatMessage]); }, [requestDeleteBulkCustomers, bulkDelete, formatMessage]);

View File

@@ -80,8 +80,16 @@ function ItemCategoryFormDialogContent({
[], [],
); );
const transformErrors = (errors, { setErrors }) => {
if (errors.find((error) => error.type === 'CATEGORY_NAME_EXISTS')) {
setErrors({
name: formatMessage({ id: 'category_name_exists' }),
});
}
};
// Handles the form submit. // Handles the form submit.
const handleFormSubmit = (values, { setSubmitting }) => { const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
setSubmitting(true); setSubmitting(true);
const form = { ...values }; const form = { ...values };
const afterSubmit = () => { const afterSubmit = () => {
@@ -100,7 +108,9 @@ function ItemCategoryFormDialogContent({
}); });
afterSubmit(response); afterSubmit(response);
}; };
const onError = ({ response }) => {
const onError = (errors) => {
transformErrors(errors, { setErrors });
setSubmitting(false); setSubmitting(false);
}; };
if (isNewMode) { if (isNewMode) {

View File

@@ -163,11 +163,10 @@ function ItemForm({
history.push('/items'); history.push('/items');
} }
}; };
const onError = ({ response }) => { const onError = (errors) => {
setSubmitting(false); setSubmitting(false);
if (errors) {
if (response.data.errors) { const _errors = transformApiErrors(errors);
const _errors = transformApiErrors(response.data.errors);
setErrors({ ..._errors }); setErrors({ ..._errors });
} }
}; };

View File

@@ -78,15 +78,34 @@ function InvoiceList({
setDeleteInvoice(false); setDeleteInvoice(false);
}, [setDeleteInvoice]); }, [setDeleteInvoice]);
const handleDeleteErrors = (errors) => {
if (
errors.find(
(error) => error.type === 'INVOICE_HAS_ASSOCIATED_PAYMENT_ENTRIES',
)
) {
AppToaster.show({
message: formatMessage({
id: 'the_invoice_cannot_be_deleted',
}),
intent: Intent.DANGER,
});
}
};
// handleConfirm delete invoice // handleConfirm delete invoice
const handleConfirmInvoiceDelete = useCallback(() => { const handleConfirmInvoiceDelete = useCallback(() => {
requestDeleteInvoice(deleteInvoice.id).then(() => { requestDeleteInvoice(deleteInvoice.id)
.then(() => {
AppToaster.show({ AppToaster.show({
message: formatMessage({ message: formatMessage({
id: 'the_invocie_has_been_successfully_deleted', id: 'the_invocie_has_been_successfully_deleted',
}), }),
intent: Intent.SUCCESS, intent: Intent.SUCCESS,
}); });
})
.catch((errors) => {
handleDeleteErrors(errors);
setDeleteInvoice(false); setDeleteInvoice(false);
}); });
}, [deleteInvoice, requestDeleteInvoice, formatMessage]); }, [deleteInvoice, requestDeleteInvoice, formatMessage]);

View File

@@ -935,5 +935,9 @@ export default {
opening_average_cost: 'Opening average cost', opening_average_cost: 'Opening average cost',
opening_cost_: 'Opening cost ', opening_cost_: 'Opening cost ',
opening_date_: 'Opening date ', opening_date_: 'Opening date ',
no_results:'No results.' no_results: 'No results.',
the_invoice_cannot_be_deleted:
'The invoice cannot be deleted cause has associated payment transactions',
category_name_exists: 'Category name exists',
some_customers_have_sales_invoices: 'Some customers have sales invoices',
}; };

View File

@@ -2,11 +2,20 @@ import ApiService from 'services/ApiService';
import t from 'store/types'; import t from 'store/types';
export const submitItemCategory = ({ form }) => { export const submitItemCategory = ({ form }) => {
return (dispatch) => { return (dispatch) =>
return ApiService.post('item_categories', { ...form }); new Promise((resolve, reject) => {
}; ApiService.post('item_categories', form)
}; .then((response) => {
resolve(response);
})
.catch((error) => {
const { response } = error;
const { data } = response;
reject(data?.errors);
});
});
};
export const fetchItemCategories = ({ query }) => { export const fetchItemCategories = ({ query }) => {
return (dispatch, getState) => return (dispatch, getState) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {

View File

@@ -2,9 +2,20 @@ import ApiService from 'services/ApiService';
import t from 'store/types'; import t from 'store/types';
export const submitItem = ({ form }) => { export const submitItem = ({ form }) => {
return (dispatch) => ApiService.post(`items`, form); return (dispatch) =>
}; new Promise((resolve, reject) => {
ApiService.post('items', form)
.then((response) => {
resolve(response);
})
.catch((error) => {
const { response } = error;
const { data } = response;
reject(data?.errors);
});
});
};
export const editItem = ({ id, form }) => { export const editItem = ({ id, form }) => {
return (dispatch) => ApiService.post(`items/${id}`, form); return (dispatch) => ApiService.post(`items/${id}`, form);
}; };