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

@@ -59,7 +59,7 @@ function CustomersList({
['resource-views', 'customers'],
(key, resourceName) => requestFetchResourceViews(resourceName),
);
const fetchCustomers = useQuery(
['customers-table', customersTableQuery],
(key, query) => requestFetchCustomers({ ...query }),
@@ -146,6 +146,20 @@ function CustomersList({
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.
const handleConfirmBulkDelete = useCallback(() => {
requestDeleteBulkCustomers(bulkDelete)
@@ -158,7 +172,8 @@ function CustomersList({
intent: Intent.SUCCESS,
});
})
.catch((error) => {
.catch((errors) => {
transformApiErrors(errors);
setBulkDelete(false);
});
}, [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.
const handleFormSubmit = (values, { setSubmitting }) => {
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
setSubmitting(true);
const form = { ...values };
const afterSubmit = () => {
@@ -100,7 +108,9 @@ function ItemCategoryFormDialogContent({
});
afterSubmit(response);
};
const onError = ({ response }) => {
const onError = (errors) => {
transformErrors(errors, { setErrors });
setSubmitting(false);
};
if (isNewMode) {

View File

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

View File

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

View File

@@ -929,11 +929,15 @@ export default {
'Are you sure you want to activate this item? You will be able to inactivate it later',
inactivate_item: 'Inactivate Item',
activate_item: 'Activate Item',
all_payments:'All Payments',
all_payments: 'All Payments',
hide_customizer: 'Hide Customizer',
opening_quantity_: 'Opening quantity',
opening_average_cost: 'Opening average cost',
opening_cost_: 'Opening cost ',
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';
export const submitItemCategory = ({ form }) => {
return (dispatch) => {
return ApiService.post('item_categories', { ...form });
};
};
return (dispatch) =>
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 }) => {
return (dispatch, getState) =>
new Promise((resolve, reject) => {

View File

@@ -2,9 +2,20 @@ import ApiService from 'services/ApiService';
import t from 'store/types';
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 }) => {
return (dispatch) => ApiService.post(`items/${id}`, form);
};