mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
feature : Puschases & Sales / fix : tasks
This commit is contained in:
@@ -66,27 +66,7 @@ export const deleteBill = ({ id }) => {
|
||||
};
|
||||
|
||||
export const submitBill = ({ form }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post('purchases/bills', form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
return (dispatch) => ApiService.post('purchases/bills', form);
|
||||
};
|
||||
|
||||
export const fetchBill = ({ id }) => {
|
||||
@@ -94,12 +74,11 @@ export const fetchBill = ({ id }) => {
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.get(`purchases/bills/${id}`)
|
||||
.then((response) => {
|
||||
const { bill } = response.data;
|
||||
|
||||
dispatch({
|
||||
type: t.BILL_SET,
|
||||
payload: {
|
||||
id,
|
||||
bill: response.data.bill,
|
||||
},
|
||||
payload: { id, bill },
|
||||
});
|
||||
resovle(response);
|
||||
})
|
||||
@@ -112,25 +91,5 @@ export const fetchBill = ({ id }) => {
|
||||
};
|
||||
|
||||
export const editBill = (id, form) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post(`purchases/bills/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
rejcet(data?.errors);
|
||||
});
|
||||
});
|
||||
return (dispatch) => ApiService.post(`purchases/bills/${id}`, form);
|
||||
};
|
||||
|
||||
@@ -37,9 +37,13 @@ const reducer = createReducer(initialState, {
|
||||
[t.BILLS_ITEMS_SET]: (state, action) => {
|
||||
const { bills } = action.payload;
|
||||
const _bills = {};
|
||||
|
||||
bills.forEach((bill) => {
|
||||
const oldBill = state.items[bill.id] || {};
|
||||
|
||||
_bills[bill.id] = {
|
||||
...defaultBill,
|
||||
...oldBill,
|
||||
...bill,
|
||||
};
|
||||
});
|
||||
@@ -59,7 +63,6 @@ const reducer = createReducer(initialState, {
|
||||
|
||||
[t.BILLS_PAGE_SET]: (state, action) => {
|
||||
const { customViewId, bills, pagination } = action.payload;
|
||||
|
||||
const viewId = customViewId || -1;
|
||||
const view = state.views[viewId] || {};
|
||||
|
||||
@@ -95,8 +98,6 @@ const reducer = createReducer(initialState, {
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
export default createTableQueryReducers('bills', reducer);
|
||||
|
||||
|
||||
@@ -1,30 +1,37 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
const billTableQuery = (state) => {
|
||||
return state.bills.tableQuery;
|
||||
};
|
||||
|
||||
export const getBillTableQuery = createSelector(
|
||||
paginationLocationQuery,
|
||||
billTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
const billTableQuery = (state) => state.bills.tableQuery;
|
||||
|
||||
const billPageSelector = (state, props, query) => {
|
||||
const viewId = state.bills.currentViewId;
|
||||
return state.bills.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
const billItemsSelector = (state) => state.bills.items;
|
||||
|
||||
const billItemsSelector = (state) => {
|
||||
return state.bills.items;
|
||||
const billByIdSelector = (state, props) => state.bills.items[props.billId];
|
||||
|
||||
const billPaginationSelector = (state, props) => {
|
||||
const viewId = state.bills.currentViewId;
|
||||
return state.bills.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getBillTableQueryFactory = () =>
|
||||
createSelector(
|
||||
paginationLocationQuery,
|
||||
billTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* Get current page bills items.
|
||||
* @return {Array}
|
||||
*/
|
||||
export const getBillCurrentPageFactory = () =>
|
||||
createSelector(billPageSelector, billItemsSelector, (billPage, billItems) => {
|
||||
return typeof billPage === 'object'
|
||||
@@ -32,20 +39,14 @@ export const getBillCurrentPageFactory = () =>
|
||||
: [];
|
||||
});
|
||||
|
||||
const billByIdSelector = (state, props) => {
|
||||
return state.bills.items[props.billId];
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieve bill details of the given bill id.
|
||||
*/
|
||||
export const getBillByIdFactory = () =>
|
||||
createSelector(billByIdSelector, (bill) => {
|
||||
return bill;
|
||||
});
|
||||
|
||||
const billPaginationSelector = (state, props) => {
|
||||
const viewId = state.bills.currentViewId;
|
||||
return state.bills.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getBillPaginationMetaFactory = () =>
|
||||
createSelector(billPaginationSelector, (billPage) => {
|
||||
return billPage?.paginationMeta || {};
|
||||
|
||||
@@ -8,7 +8,6 @@ export const submitEstimate = ({ form }) => {
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post('sales/estimates', form)
|
||||
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
@@ -21,7 +20,6 @@ export const submitEstimate = ({ form }) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -30,23 +28,14 @@ export const submitEstimate = ({ form }) => {
|
||||
export const editEstimate = (id, form) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post(`sales/estimates/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -74,12 +63,12 @@ export const fetchEstimate = ({ id }) => {
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.get(`sales/estimates/${id}`)
|
||||
.then((response) => {
|
||||
|
||||
const { estimate } = response.data;
|
||||
dispatch({
|
||||
type: t.ESTIMATE_SET,
|
||||
payload: {
|
||||
id,
|
||||
estimate: response.data.estimate,
|
||||
estimate,
|
||||
},
|
||||
});
|
||||
resovle(response);
|
||||
@@ -95,7 +84,7 @@ export const fetchEstimate = ({ id }) => {
|
||||
export const fetchEstimatesTable = ({ query = {} }) => {
|
||||
return (dispatch, getState) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
const pageQuery = getState().sales_estimates.tableQuery;
|
||||
const pageQuery = getState().salesEstimates.tableQuery;
|
||||
dispatch({
|
||||
type: t.ESTIMATES_TABLE_LOADING,
|
||||
payload: {
|
||||
@@ -106,7 +95,6 @@ export const fetchEstimatesTable = ({ query = {} }) => {
|
||||
params: { ...pageQuery, ...query },
|
||||
})
|
||||
.then((response) => {
|
||||
// debugger;
|
||||
dispatch({
|
||||
type: t.ESTIMATES_PAGE_SET,
|
||||
payload: {
|
||||
|
||||
@@ -59,6 +59,7 @@ const reducer = createReducer(initialState, {
|
||||
},
|
||||
|
||||
[t.ESTIMATES_PAGE_SET]: (state, action) => {
|
||||
// @todo camelCase keys.
|
||||
const { customViewId, sales_estimates, pagination } = action.payload;
|
||||
|
||||
const viewId = customViewId || -1;
|
||||
|
||||
@@ -1,27 +1,33 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
const estimateTableQuery = (state) => {
|
||||
return state.sales_estimates.tableQuery;
|
||||
};
|
||||
const estimateTableQuery = (state) => state.salesEstimates.tableQuery;
|
||||
|
||||
export const getEstimatesTableQuery = createSelector(
|
||||
paginationLocationQuery,
|
||||
estimateTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
const estimateByIdSelector = (state, props) =>
|
||||
state.salesEstimates.items[props.estimateId];
|
||||
|
||||
const estimatesCurrentViewSelector = (state, props) => {
|
||||
const viewId = state.salesEstimates.currentViewId;
|
||||
return state.salesEstimates.views?.[viewId];
|
||||
};
|
||||
const estimateItemsSelector = (state) => state.salesEstimates.items;
|
||||
|
||||
const estimatesPageSelector = (state, props, query) => {
|
||||
const viewId = state.sales_estimates.currentViewId;
|
||||
return state.sales_estimates.views?.[viewId]?.pages?.[query.page];
|
||||
const viewId = state.salesEstimates.currentViewId;
|
||||
return state.salesEstimates.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
|
||||
const estimateItemsSelector = (state) => state.sales_estimates.items;
|
||||
export const getEstimatesTableQueryFactory = () =>
|
||||
createSelector(
|
||||
paginationLocationQuery,
|
||||
estimateTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
export const getEstimateCurrentPageFactory = () =>
|
||||
createSelector(
|
||||
@@ -34,21 +40,12 @@ export const getEstimateCurrentPageFactory = () =>
|
||||
},
|
||||
);
|
||||
|
||||
const estimateByIdSelector = (state, props) => {
|
||||
return state.sales_estimates.items[props.estimateId];
|
||||
};
|
||||
|
||||
export const getEstimateByIdFactory = () =>
|
||||
createSelector(estimateByIdSelector, (estimate) => {
|
||||
return estimate;
|
||||
});
|
||||
|
||||
const estimatesPaginationSelector = (state, props) => {
|
||||
const viewId = state.sales_estimates.currentViewId;
|
||||
return state.sales_estimates.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getEstimatesPaginationMetaFactory = () =>
|
||||
createSelector(estimatesPaginationSelector, (estimatePage) => {
|
||||
return estimatePage?.paginationMeta || {};
|
||||
createSelector(estimatesCurrentViewSelector, (estimateView) => {
|
||||
return estimateView?.paginationMeta || {};
|
||||
});
|
||||
|
||||
@@ -4,22 +4,13 @@ import t from 'store/types';
|
||||
export const submitInvoice = ({ form }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post('sales/invoices', form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
reject(data?.errors);
|
||||
});
|
||||
@@ -51,18 +42,12 @@ export const editInvoice = (id, form) => {
|
||||
});
|
||||
ApiService.post(`sales/invoices/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -71,7 +56,7 @@ export const editInvoice = (id, form) => {
|
||||
export const fetchInvoicesTable = ({ query } = {}) => {
|
||||
return (dispatch, getState) =>
|
||||
new Promise((resolve, reject) => {
|
||||
const pageQuery = getState().sales_invoices.tableQuery;
|
||||
const pageQuery = getState().salesInvoices.tableQuery;
|
||||
dispatch({
|
||||
type: t.INVOICES_TABLE_LOADING,
|
||||
payload: {
|
||||
@@ -90,6 +75,7 @@ export const fetchInvoicesTable = ({ query } = {}) => {
|
||||
customViewId: response.data.customViewId || -1,
|
||||
},
|
||||
});
|
||||
|
||||
dispatch({
|
||||
type: t.INVOICES_ITEMS_SET,
|
||||
payload: {
|
||||
@@ -138,3 +124,26 @@ export const fetchInvoice = ({ id }) => {
|
||||
});
|
||||
});
|
||||
};
|
||||
export const dueInvoices = ({ id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.get(`sales/invoices/due_invoices`, {
|
||||
params: { customer_id: id },
|
||||
})
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.DUE_INVOICES_SET,
|
||||
payload: {
|
||||
customer_id: id,
|
||||
due_sales_invoices: response.data.due_sales_invoices,
|
||||
},
|
||||
});
|
||||
resovle(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ const initialState = {
|
||||
page_size: 5,
|
||||
page: 1,
|
||||
},
|
||||
dueInvoices: {},
|
||||
};
|
||||
|
||||
const defaultInvoice = {
|
||||
@@ -22,13 +23,13 @@ const reducer = createReducer(initialState, {
|
||||
[t.INVOICE_SET]: (state, action) => {
|
||||
const { id, sale_invoice } = action.payload;
|
||||
const _invoice = state.items[id] || {};
|
||||
|
||||
state.items[id] = { ...defaultInvoice, ..._invoice, ...sale_invoice };
|
||||
},
|
||||
|
||||
[t.INVOICES_ITEMS_SET]: (state, action) => {
|
||||
const { sales_invoices } = action.payload;
|
||||
const _invoices = {};
|
||||
|
||||
sales_invoices.forEach((invoice) => {
|
||||
_invoices[invoice.id] = {
|
||||
...defaultInvoice,
|
||||
@@ -96,6 +97,40 @@ const reducer = createReducer(initialState, {
|
||||
},
|
||||
};
|
||||
},
|
||||
[t.DUE_INVOICES_SET]: (state, action) => {
|
||||
const { customer_id, due_sales_invoices } = action.payload;
|
||||
|
||||
const _dueInvoices = [];
|
||||
|
||||
state.dueInvoices[customer_id] = due_sales_invoices.map((due) => due.id);
|
||||
const _invoices = {};
|
||||
due_sales_invoices.forEach((invoice) => {
|
||||
_invoices[invoice.id] = {
|
||||
...invoice,
|
||||
};
|
||||
});
|
||||
|
||||
state.items = {
|
||||
...state.dueInvoices,
|
||||
...state.items.dueInvoices,
|
||||
..._invoices,
|
||||
};
|
||||
},
|
||||
[t.RELOAD_INVOICES]: (state, action) => {
|
||||
const { sales_invoices } = action.payload;
|
||||
|
||||
const _sales_invoices = {};
|
||||
sales_invoices.forEach((invoice) => {
|
||||
_sales_invoices[invoice.id] = {
|
||||
...invoice,
|
||||
};
|
||||
});
|
||||
|
||||
state.items = {
|
||||
...state.items,
|
||||
..._sales_invoices,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default createTableQueryReducers('sales_invoices', reducer);
|
||||
|
||||
@@ -1,27 +1,38 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
const invoiceTableQuery = (state) => state.sales_invoices.tableQuery;
|
||||
|
||||
export const getInvoiceTableQuery = createSelector(
|
||||
import {
|
||||
pickItemsFromIds,
|
||||
paginationLocationQuery,
|
||||
invoiceTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
getItemById,
|
||||
} from 'store/selectors';
|
||||
|
||||
const invoiceTableQuery = (state) => state.salesInvoices.tableQuery;
|
||||
|
||||
const invoicesByIdSelector = (state, props) =>
|
||||
state.salesInvoices.items[props.invoiceId];
|
||||
|
||||
const invoicesPaginationSelector = (state, props) => {
|
||||
const viewId = state.salesInvoices.currentViewId;
|
||||
return state.salesInvoices.views?.[viewId];
|
||||
};
|
||||
|
||||
const invoicesPageSelector = (state, props, query) => {
|
||||
const viewId = state.sales_invoices.currentViewId;
|
||||
return state.sales_invoices.views?.[viewId]?.pages?.[query.page];
|
||||
const viewId = state.salesInvoices.currentViewId;
|
||||
return state.salesInvoices.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
|
||||
const invoicesItemsSelector = (state) => {
|
||||
return state.sales_invoices.items;
|
||||
};
|
||||
const invoicesItemsSelector = (state) => state.salesInvoices.items;
|
||||
|
||||
export const getInvoiceTableQueryFactory = () =>
|
||||
createSelector(
|
||||
paginationLocationQuery,
|
||||
invoiceTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
export const getInvoiceCurrentPageFactory = () =>
|
||||
createSelector(
|
||||
@@ -34,21 +45,27 @@ export const getInvoiceCurrentPageFactory = () =>
|
||||
},
|
||||
);
|
||||
|
||||
const invoicesByIdSelector = (state, props) => {
|
||||
return state.sales_invoices.items[props.invoiceId];
|
||||
};
|
||||
|
||||
export const getInvoiecsByIdFactory = () =>
|
||||
createSelector(invoicesByIdSelector, (invoice) => {
|
||||
return invoice;
|
||||
});
|
||||
|
||||
const invoicesPaginationSelector = (state, props) => {
|
||||
const viewId = state.sales_invoices.currentViewId;
|
||||
return state.sales_invoices.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getInvoicePaginationMetaFactory = () =>
|
||||
createSelector(invoicesPaginationSelector, (invoicePage) => {
|
||||
return invoicePage?.paginationMeta || {};
|
||||
});
|
||||
|
||||
const dueInvoicesSelector = (state, props) => {
|
||||
return state.salesInvoices.dueInvoices[props.customer_id] || [];
|
||||
};
|
||||
|
||||
export const getdueInvoices = createSelector(
|
||||
dueInvoicesSelector,
|
||||
invoicesItemsSelector,
|
||||
(customerIds, items) => {
|
||||
|
||||
return typeof customerIds === 'object'
|
||||
? pickItemsFromIds(items, customerIds) || []
|
||||
: [];
|
||||
},
|
||||
);
|
||||
|
||||
@@ -9,4 +9,6 @@ export default {
|
||||
INVOICES_PAGINATION_SET: 'INVOICES_PAGINATION_SET',
|
||||
INVOICES_PAGE_SET: 'INVOICES_PAGE_SET',
|
||||
INVOICES_ITEMS_SET: 'INVOICES_ITEMS_SET',
|
||||
DUE_INVOICES_SET: 'DUE_INVOICES_SET',
|
||||
RELOAD_INVOICES: 'RELOAD_INVOICES',
|
||||
};
|
||||
|
||||
128
client/src/store/PaymentMades/paymentMade.actions.js
Normal file
128
client/src/store/PaymentMades/paymentMade.actions.js
Normal file
@@ -0,0 +1,128 @@
|
||||
import ApiService from 'services/ApiService';
|
||||
import t from 'store/types';
|
||||
|
||||
export const submitPaymentMade = ({ form }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
ApiService.post('purchases/bill_payments', form)
|
||||
.then((response) => {
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const deletePaymentMade = ({ id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.delete(`purchases/bill_payments/${id}`)
|
||||
.then((response) => {
|
||||
dispatch({ type: t.PAYMENT_MADE_DELETE, payload: { id } });
|
||||
resovle(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error.response.data.errors || []);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const editPaymentMade = (id, form) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
ApiService.post(`purchases/bill_payments/${id}`, form)
|
||||
.then((response) => {
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
|
||||
rejcet(data?.errors);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const fetchPaymentMadesTable = ({ query = {} }) => {
|
||||
return (dispatch, getState) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
const pageQuery = getState().paymentMades.tableQuery;
|
||||
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADES_TABLE_LOADING,
|
||||
payload: {
|
||||
loading: true,
|
||||
},
|
||||
});
|
||||
ApiService.get('purchases/bill_payments', {
|
||||
params: { ...pageQuery, ...query },
|
||||
})
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADES_PAGE_SET,
|
||||
payload: {
|
||||
bill_payments: response.data.bill_payments.results,
|
||||
pagination: response.data.bill_payments.pagination,
|
||||
customViewId: response.data.customViewId || -1,
|
||||
},
|
||||
});
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADES_ITEMS_SET,
|
||||
payload: {
|
||||
bill_payments: response.data.bill_payments.results,
|
||||
},
|
||||
});
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADES_PAGINATION_SET,
|
||||
payload: {
|
||||
pagination: response.data.bill_payments.pagination,
|
||||
customViewId: response.data.customViewId || -1,
|
||||
},
|
||||
});
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADES_TABLE_LOADING,
|
||||
payload: {
|
||||
loading: false,
|
||||
},
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
rejcet(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const fetchPaymentMade = ({ id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.get(`purchases/bill_payments/${id}`, {})
|
||||
.then((response) => {
|
||||
// dispatch({
|
||||
// type: t.RELOAD_INVOICES,
|
||||
// payload: {
|
||||
// sales_invoices: response.data.paymentReceive.entries.map(
|
||||
// (e) => e.invoice,
|
||||
// ),
|
||||
// },
|
||||
// });
|
||||
dispatch({
|
||||
type: t.PAYMENT_MADE_SET,
|
||||
payload: {
|
||||
id,
|
||||
bill_payment: response.data.bill_payment,
|
||||
},
|
||||
});
|
||||
resovle(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
};
|
||||
88
client/src/store/PaymentMades/paymentMade.reducer.js
Normal file
88
client/src/store/PaymentMades/paymentMade.reducer.js
Normal file
@@ -0,0 +1,88 @@
|
||||
import { createReducer } from '@reduxjs/toolkit';
|
||||
import { createTableQueryReducers } from 'store/queryReducers';
|
||||
import { omit } from 'lodash';
|
||||
import t from 'store/types';
|
||||
|
||||
const initialState = {
|
||||
items: {},
|
||||
views: {},
|
||||
loading: false,
|
||||
currentViewId: -1,
|
||||
tableQuery: {
|
||||
page_size: 5,
|
||||
page: 1,
|
||||
},
|
||||
};
|
||||
|
||||
const defaultPaymentMade = {
|
||||
entries: [],
|
||||
};
|
||||
|
||||
const reducer = createReducer(initialState, {
|
||||
[t.PAYMENT_MADES_TABLE_LOADING]: (state, action) => {
|
||||
const { loading } = action.payload;
|
||||
state.loading = loading;
|
||||
},
|
||||
[t.PAYMENT_MADES_ITEMS_SET]: (state, action) => {
|
||||
const { bill_payments } = action.payload;
|
||||
const _bill_payments = {};
|
||||
bill_payments.forEach((billPayment) => {
|
||||
_bill_payments[billPayment.id] = {
|
||||
...defaultPaymentMade,
|
||||
...billPayment,
|
||||
};
|
||||
});
|
||||
state.items = {
|
||||
...state.items,
|
||||
..._bill_payments,
|
||||
};
|
||||
},
|
||||
|
||||
[t.PAYMENT_MADE_DELETE]: (state, action) => {
|
||||
const { id } = action.payload;
|
||||
|
||||
if (typeof state.items[id] !== 'undefined') {
|
||||
delete state.items[id];
|
||||
}
|
||||
},
|
||||
|
||||
[t.PAYMENT_MADES_PAGINATION_SET]: (state, action) => {
|
||||
const { pagination, customViewId } = action.payload;
|
||||
|
||||
const mapped = {
|
||||
pageSize: parseInt(pagination.pageSize, 10),
|
||||
page: parseInt(pagination.page, 10),
|
||||
total: parseInt(pagination.total, 10),
|
||||
};
|
||||
const paginationMeta = {
|
||||
...mapped,
|
||||
pagesCount: Math.ceil(mapped.total / mapped.pageSize),
|
||||
pageIndex: Math.max(mapped.page - 1, 0),
|
||||
};
|
||||
state.views = {
|
||||
...state.views,
|
||||
[customViewId]: {
|
||||
...(state.views?.[customViewId] || {}),
|
||||
paginationMeta,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
[t.PAYMENT_MADES_PAGE_SET]: (state, action) => {
|
||||
const { customViewId, bill_payments, pagination } = action.payload;
|
||||
|
||||
const viewId = customViewId || -1;
|
||||
const view = state.views[viewId] || {};
|
||||
|
||||
state.views[viewId] = {
|
||||
...view,
|
||||
pages: {
|
||||
...(state.views?.[viewId]?.pages || {}),
|
||||
[pagination.page]: {
|
||||
ids: bill_payments.map((i) => i.id),
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
export default createTableQueryReducers('bill_payments', reducer);
|
||||
56
client/src/store/PaymentMades/paymentMade.selector.js
Normal file
56
client/src/store/PaymentMades/paymentMade.selector.js
Normal file
@@ -0,0 +1,56 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
|
||||
|
||||
const paymentMadeTableQuery = (state) => state.paymentMades.tableQuery;
|
||||
|
||||
const paymentMadesPageSelector = (state, props, query) => {
|
||||
const viewId = state.paymentMades.currentViewId;
|
||||
return state.paymentMades.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
|
||||
const paymentMadesItemsSelector = (state) => {
|
||||
return state.paymentMades.items;
|
||||
};
|
||||
|
||||
const PaymentMadePaginationSelector = (state, props) => {
|
||||
const viewId = state.paymentMades.currentViewId;
|
||||
return state.paymentMades.views?.[viewId];
|
||||
};
|
||||
|
||||
const paymentMadesIds = (state, props) => {
|
||||
return state.paymentMades.items[props.paymentMadeId];
|
||||
};
|
||||
|
||||
export const getPaymentMadeCurrentPageFactory = () =>
|
||||
createSelector(
|
||||
paymentMadesPageSelector,
|
||||
paymentMadesItemsSelector,
|
||||
(Page, Items) => {
|
||||
return typeof Page === 'object'
|
||||
? pickItemsFromIds(Items, Page.ids) || []
|
||||
: [];
|
||||
},
|
||||
);
|
||||
|
||||
export const getPaymentMadeTableQuery = createSelector(
|
||||
paginationLocationQuery,
|
||||
paymentMadeTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
export const getPaymentMadePaginationMetaFactory = () =>
|
||||
createSelector(PaymentMadePaginationSelector, (Page) => {
|
||||
return Page?.paginationMeta || {};
|
||||
});
|
||||
|
||||
export const getPaymentMadeByIdFactory = () =>
|
||||
createSelector(paymentMadesIds, (payment_Made) => {
|
||||
return payment_Made;
|
||||
});
|
||||
11
client/src/store/PaymentMades/paymentMade.type.js
Normal file
11
client/src/store/PaymentMades/paymentMade.type.js
Normal file
@@ -0,0 +1,11 @@
|
||||
export default {
|
||||
PAYMENT_MADE_LIST_SET: 'PAYMENT_MADE_LIST_SET',
|
||||
PAYMENT_MADE_DELETE: 'PAYMENT_MADE_DELETE',
|
||||
PAYMENT_MADE_SET: 'PAYMENT_MADE_SET',
|
||||
PAYMENT_MADE_SET_CURRENT_VIEW: 'PAYMENT_MADE_SET_CURRENT_VIEW',
|
||||
PAYMENT_MADE_TABLE_QUERIES_ADD: 'PAYMENT_MADE_TABLE_QUERIES_ADD',
|
||||
PAYMENT_MADES_TABLE_LOADING: 'PAYMENT_MADES_TABLE_LOADING',
|
||||
PAYMENT_MADES_PAGE_SET: 'PAYMENT_MADES_PAGE_SET',
|
||||
PAYMENT_MADES_ITEMS_SET: 'PAYMENT_MADES_ITEMS_SET',
|
||||
PAYMENT_MADES_PAGINATION_SET: 'PAYMENT_MADES_PAGINATION_SET',
|
||||
};
|
||||
@@ -4,22 +4,14 @@ import t from 'store/types';
|
||||
export const submitPaymentReceive = ({ form }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post('sales/payment_receives', form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -28,22 +20,14 @@ export const submitPaymentReceive = ({ form }) => {
|
||||
export const editPaymentReceive = (id, form) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post(`sales/payment_receives/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
rejcet(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -52,9 +36,9 @@ export const editPaymentReceive = (id, form) => {
|
||||
export const deletePaymentReceive = ({ id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.delete(`payment_receives/${id}`)
|
||||
ApiService.delete(`sales/payment_receives/${id}`)
|
||||
.then((response) => {
|
||||
dispatch({ type: t.PAYMENT_RECEIVE_DELETE });
|
||||
dispatch({ type: t.PAYMENT_RECEIVE_DELETE, payload: { id } });
|
||||
resovle(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
@@ -66,21 +50,31 @@ export const deletePaymentReceive = ({ id }) => {
|
||||
export const fetchPaymentReceive = ({ id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resovle, reject) => {
|
||||
ApiService.get(`payment_receives/${id}`)
|
||||
ApiService.get(`sales/payment_receives/${id}`, {})
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.RELOAD_INVOICES,
|
||||
payload: {
|
||||
sales_invoices: response.data.paymentReceive.entries.map(
|
||||
(e) => e.invoice,
|
||||
),
|
||||
},
|
||||
});
|
||||
dispatch({
|
||||
type: t.PAYMENT_RECEIVE_SET,
|
||||
payload: {
|
||||
id,
|
||||
payment_receive: response.data.payment_receive,
|
||||
paymentReceive: response.data.paymentReceive,
|
||||
|
||||
},
|
||||
});
|
||||
resovle(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
reject(data?.errors);
|
||||
// const { response } = error;
|
||||
// const { data } = response;
|
||||
// reject(data?.errors);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
@@ -88,7 +82,7 @@ export const fetchPaymentReceive = ({ id }) => {
|
||||
export const fetchPaymentReceivesTable = ({ query = {} }) => {
|
||||
return (dispatch, getState) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
const pageQuery = getState().payment_receive.tableQuery;
|
||||
const pageQuery = getState().paymentReceives.tableQuery;
|
||||
|
||||
dispatch({
|
||||
type: t.PAYMENT_RECEIVES_TABLE_LOADING,
|
||||
@@ -96,12 +90,12 @@ export const fetchPaymentReceivesTable = ({ query = {} }) => {
|
||||
loading: true,
|
||||
},
|
||||
});
|
||||
ApiService.get('payment_receives', {
|
||||
ApiService.get('sales/payment_receives', {
|
||||
params: { ...pageQuery, ...query },
|
||||
})
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.RECEIPTS_PAGE_SET,
|
||||
type: t.PAYMENT_RECEIVES_PAGE_SET,
|
||||
payload: {
|
||||
payment_receives: response.data.payment_receives.results,
|
||||
pagination: response.data.payment_receives.pagination,
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
import { createReducer } from '@reduxjs/toolkit';
|
||||
import { createTableQueryReducers } from 'store/queryReducers';
|
||||
import { omit } from 'lodash';
|
||||
import t from 'store/types';
|
||||
|
||||
const initialState = {
|
||||
items: {},
|
||||
views: {},
|
||||
loading: false,
|
||||
currentViewId: -1,
|
||||
tableQuery: {
|
||||
page_size: 5,
|
||||
page: 1,
|
||||
},
|
||||
};
|
||||
|
||||
const defaultPaymentReceive = {
|
||||
entries: [],
|
||||
};
|
||||
|
||||
const reducer = createReducer(initialState, {
|
||||
[t.PAYMENT_RECEIVE_SET]: (state, action) => {
|
||||
const { id, paymentReceive } = action.payload;
|
||||
|
||||
const _paymentReceive = {
|
||||
...paymentReceive,
|
||||
entries: paymentReceive.entries.map((e) => {
|
||||
return { ...omit(e, ['invoice']) };
|
||||
}),
|
||||
};
|
||||
|
||||
const oldPaymentReceive = state.items[id] || {};
|
||||
state.items[id] = {
|
||||
...defaultPaymentReceive,
|
||||
...oldPaymentReceive,
|
||||
..._paymentReceive,
|
||||
};
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVES_TABLE_LOADING]: (state, action) => {
|
||||
const { loading } = action.payload;
|
||||
state.loading = loading;
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVES_ITEMS_SET]: (state, action) => {
|
||||
const { payment_receives } = action.payload;
|
||||
const _payment_receives = {};
|
||||
payment_receives.forEach((payment_receive) => {
|
||||
_payment_receives[payment_receive.id] = {
|
||||
...defaultPaymentReceive,
|
||||
...payment_receive,
|
||||
};
|
||||
});
|
||||
state.items = {
|
||||
...state.items,
|
||||
..._payment_receives,
|
||||
};
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVE_SET_CURRENT_VIEW]: (state, action) => {
|
||||
state.currentViewId = action.currentViewId;
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVE_DELETE]: (state, action) => {
|
||||
const { id } = action.payload;
|
||||
|
||||
if (typeof state.items[id] !== 'undefined') {
|
||||
delete state.items[id];
|
||||
}
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVES_PAGINATION_SET]: (state, action) => {
|
||||
const { pagination, customViewId } = action.payload;
|
||||
|
||||
const mapped = {
|
||||
pageSize: parseInt(pagination.pageSize, 10),
|
||||
page: parseInt(pagination.page, 10),
|
||||
total: parseInt(pagination.total, 10),
|
||||
};
|
||||
const paginationMeta = {
|
||||
...mapped,
|
||||
pagesCount: Math.ceil(mapped.total / mapped.pageSize),
|
||||
pageIndex: Math.max(mapped.page - 1, 0),
|
||||
};
|
||||
state.views = {
|
||||
...state.views,
|
||||
[customViewId]: {
|
||||
...(state.views?.[customViewId] || {}),
|
||||
paginationMeta,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
[t.PAYMENT_RECEIVES_PAGE_SET]: (state, action) => {
|
||||
const { customViewId, payment_receives, pagination } = action.payload;
|
||||
|
||||
const viewId = customViewId || -1;
|
||||
const view = state.views[viewId] || {};
|
||||
|
||||
state.views[viewId] = {
|
||||
...view,
|
||||
pages: {
|
||||
...(state.views?.[viewId]?.pages || {}),
|
||||
[pagination.page]: {
|
||||
ids: payment_receives.map((i) => i.id),
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
export default createTableQueryReducers('payment_receives', reducer);
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
const paymentReceivesPageSelector = (state, props, query) => {
|
||||
const viewId = state.paymentReceives.currentViewId;
|
||||
return state.paymentReceives.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
|
||||
const paymentReceivesItemsSelector = (state) => {
|
||||
return state.paymentReceives.items;
|
||||
};
|
||||
|
||||
export const getPaymentReceiveCurrentPageFactory = () =>
|
||||
createSelector(
|
||||
paymentReceivesPageSelector,
|
||||
paymentReceivesItemsSelector,
|
||||
(Page, Items) => {
|
||||
return typeof Page === 'object'
|
||||
? pickItemsFromIds(Items, Page.ids) || []
|
||||
: [];
|
||||
},
|
||||
);
|
||||
|
||||
const paymentReceiveTableQuery = (state) => state.paymentReceives.tableQuery;
|
||||
|
||||
export const getPaymentReceiveTableQuery = createSelector(
|
||||
paginationLocationQuery,
|
||||
paymentReceiveTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
const PaymentReceivePaginationSelector = (state, props) => {
|
||||
const viewId = state.paymentReceives.currentViewId;
|
||||
return state.paymentReceives.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getPaymentReceivePaginationMetaFactory = () =>
|
||||
createSelector(PaymentReceivePaginationSelector, (Page) => {
|
||||
return Page?.paginationMeta || {};
|
||||
});
|
||||
|
||||
const invoicesItems = (state) => {
|
||||
return state.salesInvoices.items;
|
||||
};
|
||||
|
||||
|
||||
const payemntReceiveById = (state, props) => {
|
||||
return state.paymentReceives.items[props.paymentReceiveId];
|
||||
};
|
||||
|
||||
export const getPaymentReceiveByIdFactory = () =>
|
||||
createSelector(payemntReceiveById, (payment_receive) => {
|
||||
return payment_receive;
|
||||
});
|
||||
|
||||
|
||||
const paymentReceiveInvoicesIdss = (state, props) => {
|
||||
return state.paymentReceives.items[props.paymentReceiveInvoices]
|
||||
};
|
||||
|
||||
// const invoicesItems = (state) => {
|
||||
// return state.sales_invoices.items;
|
||||
// };
|
||||
|
||||
// export const = createSelector(
|
||||
// paymentReceiveInvoicesIds,
|
||||
// invoicesItems,
|
||||
// (ids, items) => {},
|
||||
// );
|
||||
|
||||
export const getPaymentReceiveInvoices = createSelector(
|
||||
payemntReceiveById,
|
||||
invoicesItems,
|
||||
(paymentRecieve, items) => {
|
||||
return typeof paymentRecieve === 'object'
|
||||
? pickItemsFromIds(
|
||||
items,
|
||||
paymentRecieve.entries.map((entry) => entry.invoice_id),
|
||||
)
|
||||
: [];
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export default {
|
||||
PAYMENT_RECEIVE_LIST_SET: 'PAYMENT_RECEIVE_LIST_SET',
|
||||
PAYMENT_RECEIVE_SET: 'PAYMENT_RECEIVE_SET',
|
||||
PAYMENT_RECEIVE_DELETE: 'PAYMENT_RECEIVE_DELETE',
|
||||
PAYMENT_RECEIVE_SET: 'PAYMENT_RECEIVE_SET',
|
||||
PAYMENT_RECEIVE_SET_CURRENT_VIEW: 'PAYMENT_RECEIVE_SET_CURRENT_VIEW',
|
||||
PAYMENT_RECEIVE_TABLE_QUERIES_ADD: 'PAYMENT_RECEIVE_TABLE_QUERIES_ADD',
|
||||
PAYMENT_RECEIVES_TABLE_LOADING: 'PAYMENT_RECEIVES_TABLE_LOADING',
|
||||
|
||||
@@ -3,6 +3,7 @@ export default {
|
||||
ITEMS_CATEGORY_DATA_TABLE: 'ITEMS_CATEGORY_DATA_TABLE',
|
||||
CATEGORY_DELETE: 'CATEGORY_DELETE',
|
||||
ITEM_CATEGORIES_TABLE_LOADING: 'ITEM_CATEGORIES_TABLE_LOADING',
|
||||
ITEM_CATEGORIES_BULK_DELETE:'ITEM_CATEGORIES_BULK_DELETE'
|
||||
|
||||
ITEM_CATEGORIES_BULK_DELETE: 'ITEM_CATEGORIES_BULK_DELETE',
|
||||
ITEM_CATEGORIES_TABLE_QUERIES_ADD: 'ITEM_CATEGORIES_TABLE_QUERIES_ADD',
|
||||
ITEM_CATEGORIES_SET_CURRENT_VIEW: 'ITEM_CATEGORIES_SET_CURRENT_VIEW',
|
||||
};
|
||||
|
||||
@@ -45,22 +45,14 @@ export const deleteReceipt = ({ id }) => {
|
||||
export const editReceipt = (id, form) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
ApiService.post(`sales/receipts/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
rejcet(data?.errors);
|
||||
});
|
||||
});
|
||||
@@ -91,7 +83,7 @@ export const fetchReceipt = ({ id }) => {
|
||||
export const fetchReceiptsTable = ({ query = {} }) => {
|
||||
return (dispatch, getState) =>
|
||||
new Promise((resolve, rejcet) => {
|
||||
const pageQuery = getState().sales_receipts.tableQuery;
|
||||
const pageQuery = getState().salesReceipts.tableQuery;
|
||||
dispatch({
|
||||
type: t.RECEIPTS_TABLE_LOADING,
|
||||
payload: {
|
||||
|
||||
@@ -2,14 +2,22 @@ import { createSelector } from '@reduxjs/toolkit';
|
||||
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
|
||||
|
||||
const receiptsPageSelector = (state, props, query) => {
|
||||
const viewId = state.sales_receipts.currentViewId;
|
||||
return state.sales_receipts.views?.[viewId]?.pages?.[query.page];
|
||||
const viewId = state.salesReceipts.currentViewId;
|
||||
return state.salesReceipts.views?.[viewId]?.pages?.[query.page];
|
||||
};
|
||||
|
||||
const receiptItemsSelector = (state) => {
|
||||
return state.sales_receipts.items;
|
||||
const receiptsPaginationSelector = (state, props) => {
|
||||
const viewId = state.salesReceipts.currentViewId;
|
||||
return state.salesReceipts.views?.[viewId];
|
||||
};
|
||||
|
||||
const receiptItemsSelector = (state) => state.salesReceipts.items;
|
||||
|
||||
const receiptTableQuery = (state) => state.salesReceipts.tableQuery;
|
||||
|
||||
const receiptByIdSelector = (state, props) => state.salesReceipts.items[props.receiptId];
|
||||
|
||||
|
||||
export const getReceiptCurrentPageFactory = () =>
|
||||
createSelector(
|
||||
receiptsPageSelector,
|
||||
@@ -21,35 +29,23 @@ export const getReceiptCurrentPageFactory = () =>
|
||||
},
|
||||
);
|
||||
|
||||
const receiptTableQuery = (state) => {
|
||||
return state.sales_receipts.tableQuery;
|
||||
};
|
||||
|
||||
export const getReceiptsTableQuery = createSelector(
|
||||
paginationLocationQuery,
|
||||
receiptTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
const receiptByIdSelector = (state, props) => {
|
||||
return state.sales_receipts.items[props.receiptId];
|
||||
};
|
||||
export const getReceiptsTableQueryFactory = () =>
|
||||
createSelector(
|
||||
paginationLocationQuery,
|
||||
receiptTableQuery,
|
||||
(locationQuery, tableQuery) => {
|
||||
return {
|
||||
...locationQuery,
|
||||
...tableQuery,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
export const getReceiptByIdFactory = () =>
|
||||
createSelector(receiptByIdSelector, (receipt) => {
|
||||
return receipt;
|
||||
});
|
||||
|
||||
const receiptsPaginationSelector = (state, props) => {
|
||||
const viewId = state.sales_receipts.currentViewId;
|
||||
return state.sales_receipts.views?.[viewId];
|
||||
};
|
||||
|
||||
export const getReceiptsPaginationMetaFactory = () =>
|
||||
createSelector(receiptsPaginationSelector, (receiptPage) => {
|
||||
return receiptPage?.paginationMeta || {};
|
||||
|
||||
@@ -18,11 +18,13 @@ import globalSearch from './search/search.reducer';
|
||||
import exchangeRates from './ExchangeRate/exchange.reducer';
|
||||
import globalErrors from './globalErrors/globalErrors.reducer';
|
||||
import customers from './customers/customers.reducer';
|
||||
import sales_estimates from './Estimate/estimates.reducer';
|
||||
import sales_invoices from './Invoice/invoices.reducer';
|
||||
import sales_receipts from './receipt/receipt.reducer';
|
||||
import salesEstimates from './Estimate/estimates.reducer';
|
||||
import salesInvoices from './Invoice/invoices.reducer';
|
||||
import salesReceipts from './receipt/receipt.reducer';
|
||||
import bills from './Bills/bills.reducer';
|
||||
import vendors from './vendors/vendors.reducer';
|
||||
import paymentReceives from './PaymentReceive/paymentReceive.reducer';
|
||||
import paymentMades from './PaymentMades/paymentMade.reducer';
|
||||
|
||||
export default combineReducers({
|
||||
authentication,
|
||||
@@ -43,9 +45,12 @@ export default combineReducers({
|
||||
exchangeRates,
|
||||
globalErrors,
|
||||
customers,
|
||||
sales_estimates,
|
||||
sales_invoices,
|
||||
sales_receipts,
|
||||
|
||||
salesEstimates,
|
||||
salesInvoices,
|
||||
salesReceipts,
|
||||
bills,
|
||||
vendors,
|
||||
paymentReceives,
|
||||
paymentMades
|
||||
});
|
||||
|
||||
@@ -21,8 +21,9 @@ import estimates from './Estimate/estimates.types';
|
||||
import invoices from './Invoice/invoices.types';
|
||||
import receipts from './receipt/receipt.type';
|
||||
import bills from './Bills/bills.type';
|
||||
import paymentReceives from './PaymentReceive/paymentReceive.type';
|
||||
import vendors from './vendors/vendors.types';
|
||||
import paymentReceives from './PaymentReceive/paymentReceive.type';
|
||||
import paymentMades from './PaymentMades/paymentMade.type';
|
||||
|
||||
export default {
|
||||
...authentication,
|
||||
@@ -50,4 +51,5 @@ export default {
|
||||
...bills,
|
||||
...paymentReceives,
|
||||
...vendors,
|
||||
...paymentMades,
|
||||
};
|
||||
|
||||
22
client/src/store/vendors/vendors.actions.js
vendored
22
client/src/store/vendors/vendors.actions.js
vendored
@@ -9,9 +9,7 @@ export const fetchVendorsTable = ({ query }) => {
|
||||
type: t.VENDORS_TABLE_LOADING,
|
||||
payload: { loading: true },
|
||||
});
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
|
||||
ApiService.get(`vendors`, { params: { ...pageQuery, ...query } })
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
@@ -22,14 +20,12 @@ export const fetchVendorsTable = ({ query }) => {
|
||||
customViewId: response.data.customViewId,
|
||||
},
|
||||
});
|
||||
|
||||
dispatch({
|
||||
type: t.VENDORS_ITEMS_SET,
|
||||
payload: {
|
||||
vendors: response.data.vendors.results,
|
||||
},
|
||||
});
|
||||
|
||||
dispatch({
|
||||
type: t.VENDORS_PAGINATION_SET,
|
||||
payload: {
|
||||
@@ -37,14 +33,11 @@ export const fetchVendorsTable = ({ query }) => {
|
||||
customViewId: response.data.customViewId || -1,
|
||||
},
|
||||
});
|
||||
|
||||
dispatch({
|
||||
type: t.VENDORS_TABLE_LOADING,
|
||||
payload: { loading: false },
|
||||
});
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
@@ -56,23 +49,16 @@ export const fetchVendorsTable = ({ query }) => {
|
||||
export const editVendor = ({ form, id }) => {
|
||||
return (dispatch) =>
|
||||
new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_LOADING,
|
||||
});
|
||||
|
||||
ApiService.post(`vendors/${id}`, form)
|
||||
.then((response) => {
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
resolve(response);
|
||||
})
|
||||
.catch((error) => {
|
||||
const { response } = error;
|
||||
const { data } = response;
|
||||
dispatch({
|
||||
type: t.SET_DASHBOARD_REQUEST_COMPLETED,
|
||||
});
|
||||
|
||||
reject(data?.errors);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user