mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 08:44:25 +08:00
migrate transaction store to composition API and typescript
This commit is contained in:
@@ -1,4 +1,107 @@
|
||||
import type { TransactionGeoLocationResponse } from './transaction.ts';
|
||||
import { TransactionType } from '@/core/transaction.ts';
|
||||
|
||||
import type { TransactionCreateRequest, TransactionGeoLocationResponse } from './transaction.ts';
|
||||
|
||||
export class ImportTransaction implements ImportTransactionResponse {
|
||||
public type: number;
|
||||
public categoryId: string;
|
||||
public originalCategoryName: string;
|
||||
public time: number;
|
||||
public utcOffset: number;
|
||||
public sourceAccountId: string;
|
||||
public originalSourceAccountName: string;
|
||||
public originalSourceAccountCurrency: string;
|
||||
public destinationAccountId: string;
|
||||
public originalDestinationAccountName?: string;
|
||||
public originalDestinationAccountCurrency?: string;
|
||||
public sourceAmount: number;
|
||||
public destinationAmount: number;
|
||||
public tagIds: string[];
|
||||
public originalTagNames: string[];
|
||||
public comment: string;
|
||||
public geoLocation?: TransactionGeoLocationResponse;
|
||||
|
||||
public actualCategoryName: string;
|
||||
public actualSourceAccountName: string;
|
||||
public actualDestinationAccountName?: string;
|
||||
public index: number;
|
||||
public selected: boolean;
|
||||
public valid: boolean;
|
||||
|
||||
private constructor(response: ImportTransactionResponse, index: number) {
|
||||
this.type = response.type;
|
||||
this.categoryId = response.categoryId;
|
||||
this.originalCategoryName = response.originalCategoryName;
|
||||
this.time = response.time;
|
||||
this.utcOffset = response.utcOffset;
|
||||
this.sourceAccountId = response.sourceAccountId;
|
||||
this.originalSourceAccountName = response.originalSourceAccountName;
|
||||
this.originalSourceAccountCurrency = response.originalSourceAccountCurrency;
|
||||
this.destinationAccountId = response.destinationAccountId || '';
|
||||
this.originalDestinationAccountName = response.originalDestinationAccountName;
|
||||
this.originalDestinationAccountCurrency = response.originalDestinationAccountCurrency;
|
||||
this.sourceAmount = response.sourceAmount;
|
||||
this.destinationAmount = response.destinationAmount || 0;
|
||||
this.tagIds = response.tagIds;
|
||||
this.originalTagNames = response.originalTagNames;
|
||||
this.comment = response.comment;
|
||||
this.geoLocation = response.geoLocation;
|
||||
|
||||
this.actualCategoryName = response.originalCategoryName;
|
||||
this.actualSourceAccountName = response.originalSourceAccountName;
|
||||
this.actualDestinationAccountName = response.originalDestinationAccountName;
|
||||
this.index = index;
|
||||
this.selected = false;
|
||||
this.valid = this.isTransactionValid();
|
||||
}
|
||||
|
||||
public toCreateRequest(): TransactionCreateRequest {
|
||||
return {
|
||||
type: this.type,
|
||||
categoryId: this.categoryId,
|
||||
time: this.time,
|
||||
utcOffset: this.utcOffset,
|
||||
sourceAccountId: this.sourceAccountId,
|
||||
destinationAccountId: this.type === TransactionType.Transfer ? this.destinationAccountId : '0',
|
||||
sourceAmount: this.sourceAmount,
|
||||
destinationAmount: this.type === TransactionType.Transfer ? this.destinationAmount : 0,
|
||||
hideAmount: false,
|
||||
tagIds: this.tagIds,
|
||||
pictureIds: [],
|
||||
comment: this.comment,
|
||||
geoLocation: this.geoLocation,
|
||||
clientSessionId: ''
|
||||
};
|
||||
}
|
||||
|
||||
public isTransactionValid(): boolean {
|
||||
if (this.type !== TransactionType.ModifyBalance && (!this.categoryId || this.categoryId === '0')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this.sourceAccountId || this.sourceAccountId === '0') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.type === TransactionType.Transfer && (!this.destinationAccountId || this.destinationAccountId === '0')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.tagIds && this.tagIds.length) {
|
||||
for (const tagId of this.tagIds) {
|
||||
if (!tagId || tagId === '0') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static of(response: ImportTransactionResponse, index: number): ImportTransaction {
|
||||
return new ImportTransaction(response, index);
|
||||
}
|
||||
}
|
||||
|
||||
export interface ImportTransactionResponse {
|
||||
readonly type: number;
|
||||
|
||||
Reference in New Issue
Block a user