mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 23:00:34 +00:00
Merge branch 'master' of https://github.com/abouolia/Ratteb
This commit is contained in:
@@ -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]);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|||||||
@@ -929,11 +929,15 @@ export default {
|
|||||||
'Are you sure you want to activate this item? You will be able to inactivate it later',
|
'Are you sure you want to activate this item? You will be able to inactivate it later',
|
||||||
inactivate_item: 'Inactivate Item',
|
inactivate_item: 'Inactivate Item',
|
||||||
activate_item: 'Activate Item',
|
activate_item: 'Activate Item',
|
||||||
all_payments:'All Payments',
|
all_payments: 'All Payments',
|
||||||
hide_customizer: 'Hide Customizer',
|
hide_customizer: 'Hide Customizer',
|
||||||
opening_quantity_: 'Opening quantity',
|
opening_quantity_: 'Opening quantity',
|
||||||
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',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user