diff --git a/docs/mammon-api.yml b/docs/mammon-api.yml index a5ee825..89de5e2 100644 --- a/docs/mammon-api.yml +++ b/docs/mammon-api.yml @@ -814,10 +814,17 @@ paths: get: tags: - acquisition - summary: "Find acquisitions, optionally filtered by market type and consumption\ - \ state" + summary: "Find the caller's acquisitions, optionally filtered by ledger, market\ + \ type and consumption state" operationId: findAllAcquisitions parameters: + - name: ledgerId + in: query + description: Only return acquisitions held in this ledger + required: false + schema: + type: string + format: uuid - name: marketTypeId in: query description: Only return acquisitions of this market type @@ -848,10 +855,6 @@ components: description: Request to update the caller's rule book; replaces its mutable fields. properties: - usedForAcquisitions: - type: boolean - description: Whether this rule book is used to derive acquisitions. - example: true bindings: type: object additionalProperties: @@ -866,7 +869,6 @@ components: required: - bindings - script - - usedForAcquisitions RuleBookResponse: type: object description: "The caller's rule book: a script that classifies transactions,\ @@ -877,10 +879,6 @@ components: format: uuid description: Owning user identifier. example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 - usedForAcquisitions: - type: boolean - description: Whether this rule book is used to derive acquisitions. - example: true bindings: type: object additionalProperties: @@ -895,7 +893,6 @@ components: required: - bindings - script - - usedForAcquisitions - userId UpdateMainLedgerRequest: type: object @@ -1686,6 +1683,11 @@ components: format: uuid description: Unique acquisition identifier. example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + ledgerId: + type: string + format: uuid + description: Ledger the acquisition is held in. + example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 source: $ref: "#/components/schemas/ActivitySourceResponse" description: "Where the acquisition came from: a character, a corporation,\ @@ -1695,12 +1697,6 @@ components: format: int64 description: EVE market type (item) id that was acquired. example: 34 - origin: - type: string - description: How the item entered the inventory. - enum: - - BOUGHT - - MANUAL datetime: type: string format: date-time @@ -1723,8 +1719,8 @@ components: required: - acquisitionId - datetime + - ledgerId - marketTypeId - - origin - quantity - remaining - source diff --git a/src/generated/mammon/api.ts b/src/generated/mammon/api.ts index f512f93..47b42d6 100644 --- a/src/generated/mammon/api.ts +++ b/src/generated/mammon/api.ts @@ -31,6 +31,10 @@ export interface AcquisitionResponse { * Unique acquisition identifier. */ 'acquisitionId': string; + /** + * Ledger the acquisition is held in. + */ + 'ledgerId': string; /** * Where the acquisition came from: a character, a corporation, or nothing. */ @@ -39,10 +43,6 @@ export interface AcquisitionResponse { * EVE market type (item) id that was acquired. */ 'marketTypeId': number; - /** - * How the item entered the inventory. - */ - 'origin': AcquisitionResponseOriginEnum; /** * When the acquisition occurred. */ @@ -60,14 +60,6 @@ export interface AcquisitionResponse { */ 'unitCost': number; } - -export const AcquisitionResponseOriginEnum = { - Bought: 'BOUGHT', - Manual: 'MANUAL', -} as const; - -export type AcquisitionResponseOriginEnum = typeof AcquisitionResponseOriginEnum[keyof typeof AcquisitionResponseOriginEnum]; - /** * Where an activity or transaction came from: a character, a corporation wallet, or nothing (a manual entry). */ @@ -612,10 +604,6 @@ export interface RuleBookResponse { * Owning user identifier. */ 'userId': string; - /** - * Whether this rule book is used to derive acquisitions. - */ - 'usedForAcquisitions': boolean; /** * Ledger references the script writes to, each bound to one of the user\'s ledgers. */ @@ -682,10 +670,6 @@ export interface UpdateMainLedgerRequest { * Request to update the caller\'s rule book; replaces its mutable fields. */ export interface UpdateRuleBookRequest { - /** - * Whether this rule book is used to derive acquisitions. - */ - 'usedForAcquisitions': boolean; /** * Ledger references the script writes to, each bound to one of the user\'s ledgers. */ @@ -703,13 +687,14 @@ export const AcquisitionApiAxiosParamCreator = function (configuration?: Configu return { /** * - * @summary Find acquisitions, optionally filtered by market type and consumption state + * @summary Find the caller\'s acquisitions, optionally filtered by ledger, market type and consumption state + * @param {string} [ledgerId] Only return acquisitions held in this ledger * @param {number} [marketTypeId] Only return acquisitions of this market type * @param {boolean} [includeConsumed] Include fully consumed acquisitions (no remaining stock) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - findAllAcquisitions: async (marketTypeId?: number, includeConsumed?: boolean, options: RawAxiosRequestConfig = {}): Promise => { + findAllAcquisitions: async (ledgerId?: string, marketTypeId?: number, includeConsumed?: boolean, options: RawAxiosRequestConfig = {}): Promise => { const localVarPath = `/acquisitions`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -722,6 +707,10 @@ export const AcquisitionApiAxiosParamCreator = function (configuration?: Configu const localVarHeaderParameter = {} as any; const localVarQueryParameter = {} as any; + if (ledgerId !== undefined) { + localVarQueryParameter['ledgerId'] = ledgerId; + } + if (marketTypeId !== undefined) { localVarQueryParameter['marketTypeId'] = marketTypeId; } @@ -752,14 +741,15 @@ export const AcquisitionApiFp = function(configuration?: Configuration) { return { /** * - * @summary Find acquisitions, optionally filtered by market type and consumption state + * @summary Find the caller\'s acquisitions, optionally filtered by ledger, market type and consumption state + * @param {string} [ledgerId] Only return acquisitions held in this ledger * @param {number} [marketTypeId] Only return acquisitions of this market type * @param {boolean} [includeConsumed] Include fully consumed acquisitions (no remaining stock) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.findAllAcquisitions(marketTypeId, includeConsumed, options); + async findAllAcquisitions(ledgerId?: string, marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.findAllAcquisitions(ledgerId, marketTypeId, includeConsumed, options); const localVarOperationServerIndex = configuration?.serverIndex ?? 0; const localVarOperationServerBasePath = operationServerMap['AcquisitionApi.findAllAcquisitions']?.[localVarOperationServerIndex]?.url; return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); @@ -775,14 +765,15 @@ export const AcquisitionApiFactory = function (configuration?: Configuration, ba return { /** * - * @summary Find acquisitions, optionally filtered by market type and consumption state + * @summary Find the caller\'s acquisitions, optionally filtered by ledger, market type and consumption state + * @param {string} [ledgerId] Only return acquisitions held in this ledger * @param {number} [marketTypeId] Only return acquisitions of this market type * @param {boolean} [includeConsumed] Include fully consumed acquisitions (no remaining stock) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): AxiosPromise> { - return localVarFp.findAllAcquisitions(marketTypeId, includeConsumed, options).then((request) => request(axios, basePath)); + findAllAcquisitions(ledgerId?: string, marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): AxiosPromise> { + return localVarFp.findAllAcquisitions(ledgerId, marketTypeId, includeConsumed, options).then((request) => request(axios, basePath)); }, }; }; @@ -793,14 +784,15 @@ export const AcquisitionApiFactory = function (configuration?: Configuration, ba export class AcquisitionApi extends BaseAPI { /** * - * @summary Find acquisitions, optionally filtered by market type and consumption state + * @summary Find the caller\'s acquisitions, optionally filtered by ledger, market type and consumption state + * @param {string} [ledgerId] Only return acquisitions held in this ledger * @param {number} [marketTypeId] Only return acquisitions of this market type * @param {boolean} [includeConsumed] Include fully consumed acquisitions (no remaining stock) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - public findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig) { - return AcquisitionApiFp(this.configuration).findAllAcquisitions(marketTypeId, includeConsumed, options).then((request) => request(this.axios, this.basePath)); + public findAllAcquisitions(ledgerId?: string, marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig) { + return AcquisitionApiFp(this.configuration).findAllAcquisitions(ledgerId, marketTypeId, includeConsumed, options).then((request) => request(this.axios, this.basePath)); } } diff --git a/src/ledger/LedgerLabel.vue b/src/ledger/LedgerLabel.vue index d7fbede..1da5a96 100644 --- a/src/ledger/LedgerLabel.vue +++ b/src/ledger/LedgerLabel.vue @@ -1,7 +1,7 @@ + + \ No newline at end of file diff --git a/src/market/acquisition/acquisition.ts b/src/market/acquisition/acquisition.ts index 02ea897..9e3e698 100644 --- a/src/market/acquisition/acquisition.ts +++ b/src/market/acquisition/acquisition.ts @@ -7,6 +7,7 @@ export type AcquiredTypeSource = 'bo' | 'so' | 'prod' | 'misc'; export type RawAcquiredType = { id: string; + ledgerId: string; type: number; quantity: number; remaining: number; @@ -15,8 +16,9 @@ export type RawAcquiredType = { source: ActivitySourceResponse; } -const toAcquiredType = (a: AcquisitionResponse): RawAcquiredType => ({ +export const toAcquiredType = (a: AcquisitionResponse): RawAcquiredType => ({ id: a.acquisitionId, + ledgerId: a.ledgerId, type: a.marketTypeId, quantity: a.quantity, remaining: a.remaining, diff --git a/src/market/acquisition/index.ts b/src/market/acquisition/index.ts index 77d427d..86abef3 100644 --- a/src/market/acquisition/index.ts +++ b/src/market/acquisition/index.ts @@ -2,6 +2,7 @@ export * from './AcquiredType'; export * from './acquisition'; export { default as AcquisitionResultTable } from './AcquisitionResultTable.vue'; +export { default as AcquisitionsPanel } from './AcquisitionsPanel.vue'; export { default as BuyModal } from './BuyModal.vue'; export { default as SellModal } from './SellModal.vue'; diff --git a/src/pages/ledger/ViewLedger.vue b/src/pages/ledger/ViewLedger.vue index f230850..c617654 100644 --- a/src/pages/ledger/ViewLedger.vue +++ b/src/pages/ledger/ViewLedger.vue @@ -3,7 +3,7 @@ import {RouterLink, RouterView} from 'vue-router'; import {useLedgerParam} from "@/ledger"; import {routeNames} from "@/routes.ts"; -const {ledgerId, ledger} = useLedgerParam(); +const {ledger} = useLedgerParam(); @@ -16,6 +16,9 @@ const {ledgerId, ledger} = useLedgerParam(); Transactions + + Acquisitions + diff --git a/src/pages/ledger/ViewLedgerAcquisitions.vue b/src/pages/ledger/ViewLedgerAcquisitions.vue new file mode 100644 index 0000000..ef4cf90 --- /dev/null +++ b/src/pages/ledger/ViewLedgerAcquisitions.vue @@ -0,0 +1,24 @@ + + + \ No newline at end of file diff --git a/src/pages/market/Acquisitions.vue b/src/pages/market/Acquisitions.vue index 0050d09..b071f56 100644 --- a/src/pages/market/Acquisitions.vue +++ b/src/pages/market/Acquisitions.vue @@ -1,42 +1,15 @@ \ No newline at end of file diff --git a/src/pages/market/TypeInfo.vue b/src/pages/market/TypeInfo.vue index dec64c2..9680f58 100644 --- a/src/pages/market/TypeInfo.vue +++ b/src/pages/market/TypeInfo.vue @@ -40,9 +40,10 @@ const result = computedAsync(async () => { const acquisitions = computedAsync(async () => { const p = price.value; - return !p ? [] : (await acquisitionApi.findAllAcquisitions(item.value?.id, true)).data + return !p ? [] : (await acquisitionApi.findAllAcquisitions(undefined, item.value?.id, true)).data .map(a => ({ id: a.acquisitionId, + ledgerId: a.ledgerId, quantity: a.quantity, remaining: a.remaining, price: a.unitCost, diff --git a/src/pages/rules/EditRuleBook.vue b/src/pages/rules/EditRuleBook.vue index 7ae6407..2ca61f0 100644 --- a/src/pages/rules/EditRuleBook.vue +++ b/src/pages/rules/EditRuleBook.vue @@ -4,7 +4,6 @@ import {useEventListener} from "@vueuse/core"; import log from "loglevel"; import {ScriptEditor, useRuleBookStore} from "@/rules"; import {PlusIcon, TrashIcon} from "@heroicons/vue/24/outline"; -import {SliderCheckbox} from "@/components"; import {isMain, Ledger, LedgerSelect, systemLedger, useLedgersStore} from "@/ledger"; type Binding = { ref: string; ledger: Ledger }; @@ -14,7 +13,6 @@ const ledgersStore = useLedgersStore(); const ledgersToUse = computed(() => [systemLedger, ...ledgersStore.ledgers.filter(isMain)]); -const usedForAcquisitions = ref(false); const bindings = ref([]); const script = ref(''); @@ -23,7 +21,6 @@ const ledgerRefs = computed(() => bindings.value.map(b => b.ref)); watchEffect(() => { const ruleBook = ruleBookStore.ruleBook; - usedForAcquisitions.value = ruleBook?.usedForAcquisitions ?? false; script.value = ruleBook?.script ?? ''; bindings.value = Object.entries(ruleBook?.bindings ?? {}) .map(([ref, id]) => ({ref, ledger: ledgersToUse.value.find(l => l.ledgerId === id) ?? systemLedger})); @@ -39,7 +36,6 @@ const removeBinding = (index: number) => { }; const save = () => ruleBookStore.update({ - usedForAcquisitions: usedForAcquisitions.value, bindings: Object.fromEntries( bindings.value .filter(b => b.ref) @@ -59,12 +55,6 @@ useEventListener(window, 'keydown', (event: KeyboardEvent) => {