@zeniai/client-epic-state 5.1.42-betaDI4 → 5.1.43-betaDI5
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/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/entity/tenant/epic/saveExternalConnectionEpic.js +15 -11
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/entity/tenant/epic/saveExternalConnectionEpic.js +15 -11
- 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/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- 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
|
@@ -64,6 +64,33 @@ export declare const journalEntryTotalsByPostingSide: (lines: ReadonlyArray<Pick
|
|
|
64
64
|
creditTotal?: Amount;
|
|
65
65
|
debitTotal?: Amount;
|
|
66
66
|
};
|
|
67
|
+
type PostingBearer = Pick<JournalEntryTransactionLine, 'amount' | 'postingType'>;
|
|
68
|
+
export interface JournalEntrySplitReconciliation {
|
|
69
|
+
creditTotal: number;
|
|
70
|
+
debitTotal: number;
|
|
71
|
+
/** Total debits == total credits == original transaction total. */
|
|
72
|
+
isBalanced: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sums debit and credit sides (big.js-exact) and reports whether the split is
|
|
76
|
+
* balanced: total debits equal total credits AND equal the original
|
|
77
|
+
* transaction total. The original total of a valid JE equals its total debits,
|
|
78
|
+
* so it is passed in by the caller (`transaction.amount.amount`).
|
|
79
|
+
*/
|
|
80
|
+
export declare const journalEntrySplitReconciliation: (lines: ReadonlyArray<PostingBearer>, originalTotal: number) => JournalEntrySplitReconciliation;
|
|
81
|
+
export type JournalEntrySplitErrorKey = 'lineNeedsDebitOrCredit' | 'totalsMustEqual';
|
|
82
|
+
export interface JournalEntrySplitValidation {
|
|
83
|
+
ok: boolean;
|
|
84
|
+
errorKey?: JournalEntrySplitErrorKey;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Save-time validation for a JE split (Figma `4165:33028` / `4165:45379`):
|
|
88
|
+
* 1. every line needs a non-zero debit or credit, and
|
|
89
|
+
* 2. total debits == total credits == original total.
|
|
90
|
+
* Returns the first failing rule's `errorKey` (maps to a strings entry). Does
|
|
91
|
+
* NOT require category/class to be chosen — balance is the only gate.
|
|
92
|
+
*/
|
|
93
|
+
export declare const validateJournalEntrySplit: (lines: ReadonlyArray<PostingBearer>, originalTotal: number) => JournalEntrySplitValidation;
|
|
67
94
|
/**
|
|
68
95
|
* Drops `linked_transaction_line` entries — equivalent to legacy
|
|
69
96
|
* `filterOutLinkedTransactionLine` in `transactionDetail.helpers.ts`.
|
|
@@ -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.43-betaDI5",
|
|
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",
|