@zeniai/client-epic-state 5.1.41 → 5.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/index.js +4 -4
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +7 -0
- package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +22 -0
- package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +75 -3
- package/lib/esm/view/transactionDetail/journalEntryLinesViewModel.js +58 -0
- package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +10 -8
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +66 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +32 -28
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +7 -0
- package/lib/view/transactionDetail/epics/saveTransactionHelper.js +22 -0
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +5 -1
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +77 -4
- package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +27 -0
- package/lib/view/transactionDetail/journalEntryLinesViewModel.js +61 -1
- package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +10 -8
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +11 -2
- package/lib/view/transactionDetail/transactionDetailReducer.js +67 -2
- package/lib/view/transactionDetail/transactionDetailState.d.ts +8 -1
- package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -0
- package/package.json +1 -1
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.sortJournalEntryLines = exports.filterJournalEntryLinesExcludingLinked = exports.journalEntryTotalsByPostingSide = exports.sumJournalEntryAmounts = exports.journalEntryDefaultSortConfig = exports.toJournalEntrySortKey = exports.JOURNAL_ENTRY_SORT_KEYS = void 0;
|
|
6
|
+
exports.sortJournalEntryLines = exports.filterJournalEntryLinesExcludingLinked = exports.validateJournalEntrySplit = exports.journalEntrySplitReconciliation = exports.journalEntryTotalsByPostingSide = exports.sumJournalEntryAmounts = exports.journalEntryDefaultSortConfig = exports.toJournalEntrySortKey = exports.JOURNAL_ENTRY_SORT_KEYS = void 0;
|
|
7
|
+
const big_js_1 = __importDefault(require("big.js"));
|
|
7
8
|
const orderBy_1 = __importDefault(require("lodash/orderBy"));
|
|
8
9
|
const stringToUnion_1 = require("../../commonStateTypes/stringToUnion");
|
|
9
10
|
const transactionLine_1 = require("../../entity/transaction/stateTypes/transactionLine");
|
|
@@ -110,6 +111,65 @@ const journalEntryTotalsByPostingSide = (lines) => {
|
|
|
110
111
|
};
|
|
111
112
|
exports.journalEntryTotalsByPostingSide = journalEntryTotalsByPostingSide;
|
|
112
113
|
// ---------------------------------------------------------------------------
|
|
114
|
+
// Split reconciliation & validation (Phase 2 — JE split)
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// Half-cent tolerance for the balance equality checks, matching the expense
|
|
117
|
+
// reconciliation row's epsilon. Sums use big.js so repeated decimal addition
|
|
118
|
+
// doesn't drift before the comparison.
|
|
119
|
+
const JOURNAL_ENTRY_BALANCE_EPSILON = 0.005;
|
|
120
|
+
/**
|
|
121
|
+
* Sums debit and credit sides (big.js-exact) and reports whether the split is
|
|
122
|
+
* balanced: total debits equal total credits AND equal the original
|
|
123
|
+
* transaction total. The original total of a valid JE equals its total debits,
|
|
124
|
+
* so it is passed in by the caller (`transaction.amount.amount`).
|
|
125
|
+
*/
|
|
126
|
+
const journalEntrySplitReconciliation = (lines, originalTotal) => {
|
|
127
|
+
let debit = new big_js_1.default(0);
|
|
128
|
+
let credit = new big_js_1.default(0);
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
const amount = new big_js_1.default(line.amount?.amount ?? 0);
|
|
131
|
+
if (line.postingType === 'debit') {
|
|
132
|
+
debit = debit.plus(amount);
|
|
133
|
+
}
|
|
134
|
+
else if (line.postingType === 'credit') {
|
|
135
|
+
credit = credit.plus(amount);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const balancedToEachOther = debit
|
|
139
|
+
.minus(credit)
|
|
140
|
+
.abs()
|
|
141
|
+
.lt(JOURNAL_ENTRY_BALANCE_EPSILON);
|
|
142
|
+
const balancedToOriginal = debit
|
|
143
|
+
.minus(originalTotal)
|
|
144
|
+
.abs()
|
|
145
|
+
.lt(JOURNAL_ENTRY_BALANCE_EPSILON);
|
|
146
|
+
return {
|
|
147
|
+
debitTotal: debit.toNumber(),
|
|
148
|
+
creditTotal: credit.toNumber(),
|
|
149
|
+
isBalanced: balancedToEachOther && balancedToOriginal,
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
exports.journalEntrySplitReconciliation = journalEntrySplitReconciliation;
|
|
153
|
+
/**
|
|
154
|
+
* Save-time validation for a JE split (Figma `4165:33028` / `4165:45379`):
|
|
155
|
+
* 1. every line needs a non-zero debit or credit, and
|
|
156
|
+
* 2. total debits == total credits == original total.
|
|
157
|
+
* Returns the first failing rule's `errorKey` (maps to a strings entry). Does
|
|
158
|
+
* NOT require category/class to be chosen — balance is the only gate.
|
|
159
|
+
*/
|
|
160
|
+
const validateJournalEntrySplit = (lines, originalTotal) => {
|
|
161
|
+
const everyLineHasSide = lines.every((line) => (line.postingType === 'debit' || line.postingType === 'credit') &&
|
|
162
|
+
Math.abs(line.amount?.amount ?? 0) > JOURNAL_ENTRY_BALANCE_EPSILON);
|
|
163
|
+
if (!everyLineHasSide) {
|
|
164
|
+
return { ok: false, errorKey: 'lineNeedsDebitOrCredit' };
|
|
165
|
+
}
|
|
166
|
+
if (!(0, exports.journalEntrySplitReconciliation)(lines, originalTotal).isBalanced) {
|
|
167
|
+
return { ok: false, errorKey: 'totalsMustEqual' };
|
|
168
|
+
}
|
|
169
|
+
return { ok: true };
|
|
170
|
+
};
|
|
171
|
+
exports.validateJournalEntrySplit = validateJournalEntrySplit;
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
113
173
|
// Filter
|
|
114
174
|
// ---------------------------------------------------------------------------
|
|
115
175
|
/**
|
|
@@ -834,14 +834,16 @@ const getChangedLineItemCountFromLocalData = (transaction, transactionLocalData)
|
|
|
834
834
|
line.type === 'transaction_with_product_or_service_line' ||
|
|
835
835
|
line.type === 'journal_entry_transaction_line') {
|
|
836
836
|
const accountLineLocal = transactionLocalData.lineItemById[lineId];
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
accountLineLocal.account?.
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
837
|
+
if (accountLineLocal != null) {
|
|
838
|
+
const accountLine = line;
|
|
839
|
+
hasCategoryChanged =
|
|
840
|
+
accountLineLocal.account?.qboId !== accountLine.account.qboId &&
|
|
841
|
+
accountLineLocal.account?.accountId !== accountLine.account.accountId;
|
|
842
|
+
hasClassChanged =
|
|
843
|
+
(accountLineLocal.class?.qboId != null ||
|
|
844
|
+
accountLine.class?.qboId != null) &&
|
|
845
|
+
accountLineLocal.class?.qboId !== accountLine.class?.qboId;
|
|
846
|
+
}
|
|
845
847
|
}
|
|
846
848
|
hasDescriptionChanged =
|
|
847
849
|
transactionLocalData.lineItemById[lineId] != null
|
|
@@ -8,7 +8,7 @@ import { SupportedTransaction, SupportedTransactionPayload } from '../../entity/
|
|
|
8
8
|
import { ZeniAPIStatus } from '../../responsePayload';
|
|
9
9
|
import { UncategorizedAccounts } from '../accountList/accountListSelector';
|
|
10
10
|
import { TransactionDetailState, TransactionSaveUpdates } from './transactionDetailState';
|
|
11
|
-
import { TransactionDetailLocalData, TransactionVendorUpdates } from './transactionDetailTypes';
|
|
11
|
+
import { TransactionDetailLineItemData, TransactionDetailLocalData, TransactionVendorUpdates } from './transactionDetailTypes';
|
|
12
12
|
export declare const initialState: TransactionDetailState;
|
|
13
13
|
export declare const downloadAccountingProviderAttachment: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[attachmentId: string], {
|
|
14
14
|
attachmentId: string;
|
|
@@ -166,6 +166,15 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
|
|
|
166
166
|
transactionId: TransactionID;
|
|
167
167
|
transaction: SupportedTransaction;
|
|
168
168
|
isEnabled: boolean;
|
|
169
|
-
}, "transactionDetail/setIsVendorUpdateAllChecked", never, never
|
|
169
|
+
}, "transactionDetail/setIsVendorUpdateAllChecked", never, never>, addSplitLine: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, newLine: TransactionDetailLineItemData], {
|
|
170
|
+
transactionId: TransactionID;
|
|
171
|
+
newLine: TransactionDetailLineItemData;
|
|
172
|
+
}, "transactionDetail/addSplitLine", never, never>, deleteSplitLine: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, lineId: string], {
|
|
173
|
+
transactionId: TransactionID;
|
|
174
|
+
lineId: string;
|
|
175
|
+
}, "transactionDetail/deleteSplitLine", never, never>, toggleSplitEditMode: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, editMode: boolean], {
|
|
176
|
+
transactionId: TransactionID;
|
|
177
|
+
editMode: boolean;
|
|
178
|
+
}, "transactionDetail/toggleSplitEditMode", never, never>;
|
|
170
179
|
declare const _default: import("redux").Reducer<TransactionDetailState>;
|
|
171
180
|
export default _default;
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
var _a;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.markCategoryClassRecommendationsFailureForTransactionDetail = exports.markCategoryClassRecommendationsCompletedForTransactionDetail = exports.markCategoryClassRecommendationsInProgressForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.clearTransactionDetail = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
|
|
7
|
+
exports.toggleSplitEditMode = exports.deleteSplitLine = exports.addSplitLine = exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.markCategoryClassRecommendationsFailureForTransactionDetail = exports.markCategoryClassRecommendationsCompletedForTransactionDetail = exports.markCategoryClassRecommendationsInProgressForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.clearTransactionDetail = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
10
10
|
const entity_1 = require("../../entity/genericEntity/entity");
|
|
@@ -670,6 +670,71 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
670
670
|
};
|
|
671
671
|
},
|
|
672
672
|
},
|
|
673
|
+
// Split transaction — Phase 1 (expense)
|
|
674
|
+
addSplitLine: {
|
|
675
|
+
reducer(draft, action) {
|
|
676
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
|
|
677
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
678
|
+
if (detail != null) {
|
|
679
|
+
draft.transactionDetailById[key] = {
|
|
680
|
+
...detail,
|
|
681
|
+
transactionDetailLocalData: {
|
|
682
|
+
...detail.transactionDetailLocalData,
|
|
683
|
+
lineItemById: {
|
|
684
|
+
...detail.transactionDetailLocalData.lineItemById,
|
|
685
|
+
[action.payload.newLine.id]: action.payload.newLine,
|
|
686
|
+
},
|
|
687
|
+
},
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
prepare(transactionId, newLine) {
|
|
692
|
+
return { payload: { transactionId, newLine } };
|
|
693
|
+
},
|
|
694
|
+
},
|
|
695
|
+
deleteSplitLine: {
|
|
696
|
+
reducer(draft, action) {
|
|
697
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
|
|
698
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
699
|
+
if (detail == null) {
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
const { lineItemById, deletedLineIds = [] } = detail.transactionDetailLocalData;
|
|
703
|
+
const updated = { ...lineItemById };
|
|
704
|
+
delete updated[action.payload.lineId];
|
|
705
|
+
draft.transactionDetailById[key] = {
|
|
706
|
+
...detail,
|
|
707
|
+
transactionDetailLocalData: {
|
|
708
|
+
...detail.transactionDetailLocalData,
|
|
709
|
+
lineItemById: updated,
|
|
710
|
+
deletedLineIds: [...deletedLineIds, action.payload.lineId],
|
|
711
|
+
},
|
|
712
|
+
};
|
|
713
|
+
},
|
|
714
|
+
prepare(transactionId, lineId) {
|
|
715
|
+
return { payload: { transactionId, lineId } };
|
|
716
|
+
},
|
|
717
|
+
},
|
|
718
|
+
toggleSplitEditMode: {
|
|
719
|
+
reducer(draft, action) {
|
|
720
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
|
|
721
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
722
|
+
if (detail != null) {
|
|
723
|
+
draft.transactionDetailById[key] = {
|
|
724
|
+
...detail,
|
|
725
|
+
transactionDetailLocalData: {
|
|
726
|
+
...detail.transactionDetailLocalData,
|
|
727
|
+
editMode: action.payload.editMode,
|
|
728
|
+
// Clear delete tracking when exiting edit mode without saving.
|
|
729
|
+
...(!action.payload.editMode && { deletedLineIds: [] }),
|
|
730
|
+
},
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
},
|
|
734
|
+
prepare(transactionId, editMode) {
|
|
735
|
+
return { payload: { transactionId, editMode } };
|
|
736
|
+
},
|
|
737
|
+
},
|
|
673
738
|
clearRecommendedVendorsList(draft) {
|
|
674
739
|
Object.assign(draft, exports.initialState);
|
|
675
740
|
},
|
|
@@ -778,7 +843,7 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
778
843
|
},
|
|
779
844
|
},
|
|
780
845
|
});
|
|
781
|
-
_a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.clearTransactionDetail = _a.clearTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.markCategoryClassRecommendationsInProgressForTransactionDetail = _a.markCategoryClassRecommendationsInProgressForTransactionDetail, exports.markCategoryClassRecommendationsCompletedForTransactionDetail = _a.markCategoryClassRecommendationsCompletedForTransactionDetail, exports.markCategoryClassRecommendationsFailureForTransactionDetail = _a.markCategoryClassRecommendationsFailureForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked;
|
|
846
|
+
_a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.clearTransactionDetail = _a.clearTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.markCategoryClassRecommendationsInProgressForTransactionDetail = _a.markCategoryClassRecommendationsInProgressForTransactionDetail, exports.markCategoryClassRecommendationsCompletedForTransactionDetail = _a.markCategoryClassRecommendationsCompletedForTransactionDetail, exports.markCategoryClassRecommendationsFailureForTransactionDetail = _a.markCategoryClassRecommendationsFailureForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked, exports.addSplitLine = _a.addSplitLine, exports.deleteSplitLine = _a.deleteSplitLine, exports.toggleSplitEditMode = _a.toggleSplitEditMode;
|
|
782
847
|
exports.default = transactionDetail.reducer;
|
|
783
848
|
function getUpdatedEntityLocalData(detail, updates, entity, resetRecommendations, type) {
|
|
784
849
|
const key = type === 'customer' ? 'customerUpdates' : 'vendorUpdates';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FetchState, FetchStateAndError, FetchedState, ID } from '../../commonStateTypes/common';
|
|
2
|
+
import { Amount } from '../../commonStateTypes/amount';
|
|
2
3
|
import { Recommendation } from '../../commonStateTypes/recommendationBase';
|
|
3
4
|
import { AccountBase } from '../../entity/account/accountState';
|
|
4
5
|
import { ClassBase } from '../../entity/class/classState';
|
|
@@ -6,9 +7,10 @@ import { CustomerBase } from '../../entity/customer/customerState';
|
|
|
6
7
|
import { EntityType } from '../../entity/genericEntity/entity';
|
|
7
8
|
import { ProjectBase } from '../../entity/project/projectState';
|
|
8
9
|
import { Transaction, TransactionID } from '../../entity/transaction/stateTypes/transaction';
|
|
10
|
+
import { TransactionCategory } from '../../entity/transaction/stateTypes/transactionType';
|
|
9
11
|
import { VendorBase } from '../../entity/vendor/vendorState';
|
|
10
12
|
import { EntityRecommendationKey } from '../recommendation/recommendationState';
|
|
11
|
-
import { TransactionDetailLocalData } from './transactionDetailTypes';
|
|
13
|
+
import { TransactionDetailLineItemData, TransactionDetailLocalData } from './transactionDetailTypes';
|
|
12
14
|
export declare const getTransactionDetailKey: (transactionId: TransactionID) => `${string}_bill` | `${string}_expense` | `${string}_check` | `${string}_refund` | `${string}_invoice` | `${string}_payment` | `${string}_credit_memo` | `${string}_sales_receipt` | `${string}_delayed_credit` | `${string}_delayed_charge` | `${string}_bill_payment` | `${string}_bill_payment_check` | `${string}_bill_payment_credit_card` | `${string}_vendor_credit` | `${string}_credit_card_credit` | `${string}_transfer` | `${string}_credit_card_payment` | `${string}_deposit` | `${string}_journal_entry`;
|
|
13
15
|
export type TransactionDetailKey = ReturnType<typeof getTransactionDetailKey>;
|
|
14
16
|
export declare const getZeniTransactionDetailKey: (transactionId: TransactionID) => `${string}_bill` | `${string}_expense` | `${string}_check` | `${string}_refund` | `${string}_invoice` | `${string}_payment` | `${string}_credit_memo` | `${string}_sales_receipt` | `${string}_delayed_credit` | `${string}_delayed_charge` | `${string}_bill_payment` | `${string}_bill_payment_check` | `${string}_bill_payment_credit_card` | `${string}_vendor_credit` | `${string}_credit_card_credit` | `${string}_transfer` | `${string}_credit_card_payment` | `${string}_deposit` | `${string}_journal_entry`;
|
|
@@ -50,9 +52,12 @@ export interface TransactionDetailState {
|
|
|
50
52
|
}
|
|
51
53
|
export interface TransactionLineUpdates {
|
|
52
54
|
account?: AccountBase;
|
|
55
|
+
amount?: Amount;
|
|
53
56
|
class?: ClassBase;
|
|
54
57
|
customer?: CustomerBase;
|
|
55
58
|
lineDescription?: string;
|
|
59
|
+
postingType?: TransactionCategory;
|
|
60
|
+
postingTypeName?: string;
|
|
56
61
|
project?: ProjectBase;
|
|
57
62
|
recommendation?: Recommendation[];
|
|
58
63
|
vendor?: VendorBase;
|
|
@@ -78,5 +83,7 @@ export interface TransactionSaveUpdates {
|
|
|
78
83
|
entityRelatedUpdates: Record<EntityRecommendationKey, EntityRelatedRecommendationUpdates>;
|
|
79
84
|
markAsMiscatUpdates: boolean;
|
|
80
85
|
updates: TransactionUpdates;
|
|
86
|
+
addedLines?: TransactionDetailLineItemData[];
|
|
87
|
+
deletedLineIds?: ID[];
|
|
81
88
|
}
|
|
82
89
|
export {};
|
|
@@ -50,7 +50,9 @@ export interface TransactionDetailLocalData {
|
|
|
50
50
|
qboId: ID;
|
|
51
51
|
};
|
|
52
52
|
customerUpdates?: TransactionVendorUpdates;
|
|
53
|
+
deletedLineIds?: ID[];
|
|
53
54
|
documentId?: string;
|
|
55
|
+
editMode?: boolean;
|
|
54
56
|
latestSelectedEntityOnLineItem?: Entity;
|
|
55
57
|
latestUpdatedLineWithEntity?: ID;
|
|
56
58
|
memo?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.42",
|
|
4
4
|
"description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|