Добавлен новый модель SupplySupplier в схему Prisma и реализована логика для работы с поставщиками в компонентах создания поставок. Обновлены компоненты CreateSupplyPage и DirectSupplyCreation для интеграции новых функций, включая обработку поставщиков и расчет логистики. Оптимизирован интерфейс с использованием новых компонентов и улучшена логика отображения данных.
This commit is contained in:
@ -1136,4 +1136,24 @@ export const ADMIN_LOGOUT = gql`
|
||||
mutation AdminLogout {
|
||||
adminLogout
|
||||
}
|
||||
`
|
||||
|
||||
export const CREATE_SUPPLY_SUPPLIER = gql`
|
||||
mutation CreateSupplySupplier($input: CreateSupplySupplierInput!) {
|
||||
createSupplySupplier(input: $input) {
|
||||
success
|
||||
message
|
||||
supplier {
|
||||
id
|
||||
name
|
||||
contactName
|
||||
phone
|
||||
market
|
||||
address
|
||||
place
|
||||
telegram
|
||||
createdAt
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
@ -178,6 +178,35 @@ export const GET_MY_COUNTERPARTIES = gql`
|
||||
}
|
||||
`
|
||||
|
||||
export const GET_SUPPLY_SUPPLIERS = gql`
|
||||
query GetSupplySuppliers {
|
||||
supplySuppliers {
|
||||
id
|
||||
name
|
||||
contactName
|
||||
phone
|
||||
market
|
||||
address
|
||||
place
|
||||
telegram
|
||||
createdAt
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
export const GET_ORGANIZATION_LOGISTICS = gql`
|
||||
query GetOrganizationLogistics($organizationId: ID!) {
|
||||
organizationLogistics(organizationId: $organizationId) {
|
||||
id
|
||||
fromLocation
|
||||
toLocation
|
||||
priceUnder1m3
|
||||
priceOver1m3
|
||||
description
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
export const GET_INCOMING_REQUESTS = gql`
|
||||
query GetIncomingRequests {
|
||||
incomingRequests {
|
||||
|
@ -379,6 +379,45 @@ export const resolvers = {
|
||||
return counterparties.map((c) => c.counterparty);
|
||||
},
|
||||
|
||||
// Поставщики поставок
|
||||
supplySuppliers: async (_: unknown, __: unknown, context: Context) => {
|
||||
if (!context.user) {
|
||||
throw new GraphQLError("Требуется авторизация", {
|
||||
extensions: { code: "UNAUTHENTICATED" },
|
||||
});
|
||||
}
|
||||
|
||||
const currentUser = await prisma.user.findUnique({
|
||||
where: { id: context.user.id },
|
||||
include: { organization: true },
|
||||
});
|
||||
|
||||
if (!currentUser?.organization) {
|
||||
throw new GraphQLError("У пользователя нет организации");
|
||||
}
|
||||
|
||||
const suppliers = await prisma.supplySupplier.findMany({
|
||||
where: { organizationId: currentUser.organization.id },
|
||||
orderBy: { createdAt: 'desc' }
|
||||
});
|
||||
|
||||
return suppliers;
|
||||
},
|
||||
|
||||
// Логистика конкретной организации
|
||||
organizationLogistics: async (_: unknown, args: { organizationId: string }, context: Context) => {
|
||||
if (!context.user) {
|
||||
throw new GraphQLError("Требуется авторизация", {
|
||||
extensions: { code: "UNAUTHENTICATED" },
|
||||
});
|
||||
}
|
||||
|
||||
return await prisma.logistics.findMany({
|
||||
where: { organizationId: args.organizationId },
|
||||
orderBy: { createdAt: "desc" },
|
||||
});
|
||||
},
|
||||
|
||||
// Входящие заявки
|
||||
incomingRequests: async (_: unknown, __: unknown, context: Context) => {
|
||||
if (!context.user) {
|
||||
@ -4534,6 +4573,76 @@ export const resolvers = {
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
// Создать поставщика для поставки
|
||||
createSupplySupplier: async (
|
||||
_: unknown,
|
||||
args: {
|
||||
input: {
|
||||
name: string;
|
||||
contactName: string;
|
||||
phone: string;
|
||||
market?: string;
|
||||
address?: string;
|
||||
place?: string;
|
||||
telegram?: string;
|
||||
};
|
||||
},
|
||||
context: Context
|
||||
) => {
|
||||
if (!context.user) {
|
||||
throw new GraphQLError("Требуется авторизация", {
|
||||
extensions: { code: "UNAUTHENTICATED" },
|
||||
});
|
||||
}
|
||||
|
||||
const currentUser = await prisma.user.findUnique({
|
||||
where: { id: context.user.id },
|
||||
include: { organization: true },
|
||||
});
|
||||
|
||||
if (!currentUser?.organization) {
|
||||
throw new GraphQLError("У пользователя нет организации");
|
||||
}
|
||||
|
||||
try {
|
||||
// Создаем поставщика в базе данных
|
||||
const supplier = await prisma.supplySupplier.create({
|
||||
data: {
|
||||
name: args.input.name,
|
||||
contactName: args.input.contactName,
|
||||
phone: args.input.phone,
|
||||
market: args.input.market,
|
||||
address: args.input.address,
|
||||
place: args.input.place,
|
||||
telegram: args.input.telegram,
|
||||
organizationId: currentUser.organization.id,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Поставщик добавлен успешно!",
|
||||
supplier: {
|
||||
id: supplier.id,
|
||||
name: supplier.name,
|
||||
contactName: supplier.contactName,
|
||||
phone: supplier.phone,
|
||||
market: supplier.market,
|
||||
address: supplier.address,
|
||||
place: supplier.place,
|
||||
telegram: supplier.telegram,
|
||||
createdAt: supplier.createdAt,
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error creating supply supplier:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: "Ошибка при добавлении поставщика",
|
||||
};
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
// Резолверы типов
|
||||
|
@ -16,6 +16,12 @@ export const typeDefs = gql`
|
||||
# Мои контрагенты
|
||||
myCounterparties: [Organization!]!
|
||||
|
||||
# Поставщики поставок
|
||||
supplySuppliers: [SupplySupplier!]!
|
||||
|
||||
# Логистика организации
|
||||
organizationLogistics(organizationId: ID!): [Logistics!]!
|
||||
|
||||
# Входящие заявки
|
||||
incomingRequests: [CounterpartyRequest!]!
|
||||
|
||||
@ -217,6 +223,11 @@ export const typeDefs = gql`
|
||||
): WildberriesSupplyResponse!
|
||||
deleteWildberriesSupply(id: ID!): Boolean!
|
||||
|
||||
# Работа с поставщиками для поставок
|
||||
createSupplySupplier(
|
||||
input: CreateSupplySupplierInput!
|
||||
): SupplySupplierResponse!
|
||||
|
||||
# Админ мутации
|
||||
adminLogin(username: String!, password: String!): AdminAuthResponse!
|
||||
adminLogout: Boolean!
|
||||
@ -963,6 +974,35 @@ export const typeDefs = gql`
|
||||
type: Int!
|
||||
}
|
||||
|
||||
# Типы для поставщиков поставок
|
||||
type SupplySupplier {
|
||||
id: ID!
|
||||
name: String!
|
||||
contactName: String!
|
||||
phone: String!
|
||||
market: String
|
||||
address: String
|
||||
place: String
|
||||
telegram: String
|
||||
createdAt: DateTime!
|
||||
}
|
||||
|
||||
input CreateSupplySupplierInput {
|
||||
name: String!
|
||||
contactName: String!
|
||||
phone: String!
|
||||
market: String
|
||||
address: String
|
||||
place: String
|
||||
telegram: String
|
||||
}
|
||||
|
||||
type SupplySupplierResponse {
|
||||
success: Boolean!
|
||||
message: String
|
||||
supplier: SupplySupplier
|
||||
}
|
||||
|
||||
# Типы для статистики кампаний
|
||||
input WildberriesCampaignStatsInput {
|
||||
campaigns: [CampaignStatsRequest!]!
|
||||
|
Reference in New Issue
Block a user