инвентаризация

This commit is contained in:
commit 69672c8721
4 changed files with 84 additions and 19 deletions

View File

@ -43,6 +43,25 @@ class PartnerViewSet(viewsets.ModelViewSet):
logger.error(e) logger.error(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@action(detail=False, methods=["get"], url_path=r"external/(?P<cat_id>[^/.]+)")
def get_remote_partner_one(self, request, cat_id):
params = {
"$format": "json",
"$select": ",".join(["НаименованиеПолное", "Description", "Ref_Key"]),
}
remote_url = (
f"https://1c.svs-tech.pro/UNF/odata/standard.odata/Catalog_Контрагенты(guid'{cat_id}')?"
+ "&".join([f"{p}={params[p]}" for p in params])
)
logger.info(remote_url)
data = requests.get(remote_url, headers={"Authorization": settings.ODATA_AUTH})
try:
parsed_data = data.json()
return Response(parsed_data)
except Exception as e:
logger.error(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get_depth_cat(id): def get_depth_cat(id):
params = { params = {

View File

@ -11,8 +11,8 @@ export type ApiTypeBase =
ApiPartner | ApiInventory | ApiElement; ApiPartner | ApiInventory | ApiElement;
export type ApiPartner = { id: number, external_id: number } export type ApiPartner = { id: number, external_id: number, name: string, total_inventory: number }
export type ApiInventory = { id: number, partner: number } export type ApiInventory = { id: number, partner: number, name: string }
export type ApiElement = { id: number, external_id: string, element_id: number, photo: string, additional_text: string, inventory: number } export type ApiElement = { id: number, external_id: string, element_id: number, photo: string, additional_text: string, inventory: number }
export type ApiTypeExternal = { export type ApiTypeExternal = {
'НаименованиеПолное': string; 'НаименованиеПолное': string;

View File

@ -7,15 +7,32 @@ headers.append("Content-Type", "application/json");
const route = useRoute() const route = useRoute()
const { data } = await useFetch<ApiTypeList>(`${apiBase}/element?inventory_id=${route.params.inv_id}`, { headers }) const inventory = ref()
const elements = ref()
onMounted(async () => {
const inventory_data = await $fetch<ApiTypeList>(`${apiBase}/inventory/${route.params.inv_id}`, { headers })
inventory.value = inventory_data
const elements_data = await $fetch<ApiTypeList>(`${apiBase}/element?inventory_id=${route.params.inv_id}`, { headers })
elements.value = elements_data
})
</script> </script>
<template> <template>
<UCard class="mb-4" v-if="inventory">
<template #header>
Инвентаризация <strong>{{ inventory.name }}</strong>
</template>
<ul class="flex flex-col gap-2">
<li>Всего элементов: {{ inventory.total_elements }}</li>
</ul>
<template #footer>
<UButton icon="i-heroicons-plus"
:to="`/organization/p_${route.params.org_id}/i_${route.params.inv_id}/edit`">
Добавить элемент</UButton>
</template>
</UCard>
<div class="mb-4"> <div class="mb-4">
<UButton icon="i-heroicons-plus" :to="`/organization/p_${route.params.org_id}/i_${route.params.inv_id}/edit`"> <UTable :rows="elements?.results"
Добавить элемент</UButton>
</div>
<div class="mb-4">
<UTable :rows="data?.results"
:columns="makeColumns(['id', 'external_id', 'element_id', 'photo', 'additional_text'])" /> :columns="makeColumns(['id', 'external_id', 'element_id', 'photo', 'additional_text'])" />
</div> </div>
</template> </template>

View File

@ -1,23 +1,52 @@
<script setup lang="ts"> <script setup lang="ts">
import { apiBase, makeColumns } from '~/helpers'; import { apiBase, makeColumns } from '~/helpers';
import type { ApiTypeList } from '~/helpers'; import type { ApiPartner, ApiTypeList } from '~/helpers';
const headers = new Headers(); const headers = new Headers();
headers.append("Content-Type", "application/json"); headers.append("Content-Type", "application/json");
const route = useRoute() const route = useRoute()
const { data } = await useFetch<ApiTypeList>(`${apiBase}/inventory?partner_id=${route.params.org_id}`, { headers }) const partner = ref()
const partnerRemote = ref()
const inventory = ref()
onMounted(async () => {
const partner_data = await $fetch<ApiPartner>(`${apiBase}/partner/${route.params.org_id}`, { headers })
partner.value = partner_data
const partnerRemote_data = await $fetch<ApiPartner>(`${apiBase}/partner/external/${partner_data.external_id}`, { headers })
partnerRemote.value = partnerRemote_data
const inventory_data = await $fetch<ApiTypeList>(`${apiBase}/inventory?partner_id=${route.params.org_id}`, { headers })
inventory.value = inventory_data
})
</script> </script>
<template> <template>
<UTable :rows="data?.results" :columns="makeColumns(['id', 'name', 'created_at', 'total_elements',])"> <UCard class="mb-4" v-if="partner">
<template #name-data="{ row }"> <template #header>
<NuxtLink :to="`/organization/p_${route.params.org_id}/i_${row.id}`"> Контрагент <strong>{{ partner.name }}</strong>
{{ row.name }}
</NuxtLink>
</template> </template>
<template #created_at-data="{ row }"> <ul class="flex flex-col gap-2">
{{ new Date(row.created_at).toLocaleString() }} <li>Всего инвентаризаций: {{ partner.total_inventory }}</li>
</template> <li>1C ID: {{ partner.external_id }}
</UTable> <ul class="p-4">
<template v-for="(value, name) in partnerRemote">
<li>{{ name }}: {{ value }}</li>
</template>
</ul>
</li>
</ul>
</UCard>
<div class="mb-4">
<UTable :rows="inventory?.results" :columns="makeColumns(['id', 'name', 'created_at', 'total_elements',])">
<template #name-data="{ row }">
<NuxtLink :to="`/organization/p_${route.params.org_id}/i_${row.id}`">
{{ row.name }}
</NuxtLink>
</template>
<template #created_at-data="{ row }">
{{ new Date(row.created_at).toLocaleString() }}
</template>
</UTable>
</div>
</template> </template>