New eveal #32

Merged
Sirttas merged 115 commits from new-eveal into main 2026-07-14 17:15:11 +02:00
3 changed files with 61 additions and 26 deletions
Showing only changes of commit 5e7af075cb - Show all commits
+18 -2
View File
@@ -816,11 +816,27 @@ paths:
get: get:
tags: tags:
- acquisition - acquisition
summary: Find all acquisitions that still have remaining stock summary: "Find acquisitions, optionally filtered by market type and consumption\
\ state"
operationId: findAllAcquisitions operationId: findAllAcquisitions
parameters:
- name: marketTypeId
in: query
description: Only return acquisitions of this market type
required: false
schema:
type: integer
format: int64
- name: includeConsumed
in: query
description: Include fully consumed acquisitions (no remaining stock)
required: false
schema:
type: boolean
default: false
responses: responses:
"200": "200":
description: The acquisitions with remaining stock description: The matching acquisitions
content: content:
'*/*': '*/*':
schema: schema:
+27 -11
View File
@@ -207,11 +207,13 @@ export const AcquisitionApiAxiosParamCreator = function (configuration?: Configu
return { return {
/** /**
* *
* @summary Find all acquisitions that still have remaining stock * @summary Find acquisitions, optionally filtered by market type and consumption state
* @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. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
findAllAcquisitions: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => { findAllAcquisitions: async (marketTypeId?: number, includeConsumed?: boolean, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/acquisitions`; const localVarPath = `/acquisitions`;
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -224,6 +226,14 @@ export const AcquisitionApiAxiosParamCreator = function (configuration?: Configu
const localVarHeaderParameter = {} as any; const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any; const localVarQueryParameter = {} as any;
if (marketTypeId !== undefined) {
localVarQueryParameter['marketTypeId'] = marketTypeId;
}
if (includeConsumed !== undefined) {
localVarQueryParameter['includeConsumed'] = includeConsumed;
}
localVarHeaderParameter['Accept'] = '*/*'; localVarHeaderParameter['Accept'] = '*/*';
setSearchParams(localVarUrlObj, localVarQueryParameter); setSearchParams(localVarUrlObj, localVarQueryParameter);
@@ -246,12 +256,14 @@ export const AcquisitionApiFp = function(configuration?: Configuration) {
return { return {
/** /**
* *
* @summary Find all acquisitions that still have remaining stock * @summary Find acquisitions, optionally filtered by market type and consumption state
* @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. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async findAllAcquisitions(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AcquisitionResponse>>> { async findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AcquisitionResponse>>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.findAllAcquisitions(options); const localVarAxiosArgs = await localVarAxiosParamCreator.findAllAcquisitions(marketTypeId, includeConsumed, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0; const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['AcquisitionApi.findAllAcquisitions']?.[localVarOperationServerIndex]?.url; const localVarOperationServerBasePath = operationServerMap['AcquisitionApi.findAllAcquisitions']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -267,12 +279,14 @@ export const AcquisitionApiFactory = function (configuration?: Configuration, ba
return { return {
/** /**
* *
* @summary Find all acquisitions that still have remaining stock * @summary Find acquisitions, optionally filtered by market type and consumption state
* @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. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
findAllAcquisitions(options?: RawAxiosRequestConfig): AxiosPromise<Array<AcquisitionResponse>> { findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig): AxiosPromise<Array<AcquisitionResponse>> {
return localVarFp.findAllAcquisitions(options).then((request) => request(axios, basePath)); return localVarFp.findAllAcquisitions(marketTypeId, includeConsumed, options).then((request) => request(axios, basePath));
}, },
}; };
}; };
@@ -283,12 +297,14 @@ export const AcquisitionApiFactory = function (configuration?: Configuration, ba
export class AcquisitionApi extends BaseAPI { export class AcquisitionApi extends BaseAPI {
/** /**
* *
* @summary Find all acquisitions that still have remaining stock * @summary Find acquisitions, optionally filtered by market type and consumption state
* @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. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
public findAllAcquisitions(options?: RawAxiosRequestConfig) { public findAllAcquisitions(marketTypeId?: number, includeConsumed?: boolean, options?: RawAxiosRequestConfig) {
return AcquisitionApiFp(this.configuration).findAllAcquisitions(options).then((request) => request(this.axios, this.basePath)); return AcquisitionApiFp(this.configuration).findAllAcquisitions(marketTypeId, includeConsumed, options).then((request) => request(this.axios, this.basePath));
} }
} }
+13 -10
View File
@@ -1,12 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import {ClipboardButton} from '@/components'; import {ClipboardButton} from '@/components';
import {getMarketType, MarketType, MarketTypeInput, useApraisalStore, useMarketTaxStore} from "@/market"; import {getMarketType, MarketType, MarketTypeInput, useApraisalStore, useMarketTaxStore} from "@/market";
import {AcquisitionResultTable, BuyModal, useAcquiredTypesStore} from '@/market/acquisition'; import {AcquisitionResultTable, BuyModal} from '@/market/acquisition';
import {ScanResultTable, toScanResult} from '@/market/scan'; import {ScanResultTable, toScanResult} from '@/market/scan';
import {marketApi} from "@/mammon"; import {acquisitionApi, marketApi} from "@/mammon";
import {ShoppingCartIcon} from '@heroicons/vue/24/outline'; import {ShoppingCartIcon} from '@heroicons/vue/24/outline';
import log from "loglevel"; import log from "loglevel";
import {computed, ref, watch} from "vue"; import {ref, watch} from "vue";
import {useRoute, useRouter} from "vue-router"; import {useRoute, useRouter} from "vue-router";
import {routeNames} from "@/routes"; import {routeNames} from "@/routes";
import {computedAsync, useStorage} from "@vueuse/core"; import {computedAsync, useStorage} from "@vueuse/core";
@@ -36,20 +36,23 @@ const result = computedAsync(async () => {
return toScanResult(data, item.value); return toScanResult(data, item.value);
}); });
const acquiredTypesStore = useAcquiredTypesStore();
const acquisitions = computed(() => { const acquisitions = computedAsync(async () => {
const p = price.value; const p = price.value;
return !p ?[] : acquiredTypesStore.acquiredTypes return !p ? [] : (await acquisitionApi.findAllAcquisitions(item.value?.id, true)).data
.filter(t => t.type === item.value?.id) .map(a => ({
.map(i => ({ id: a.acquisitionId,
...i, quantity: a.quantity,
remaining: a.remaining,
price: a.unitCost,
date: new Date(a.datetime),
source: a.source,
type: p.type, type: p.type,
buy: p.buy, buy: p.buy,
sell: p.sell sell: p.sell
})); }));
}); }, []);
const view = () => { const view = () => {
if (!inputItem.value) { if (!inputItem.value) {
return; return;