diff --git a/src/food-market.domain/Catalog/Enums.cs b/src/food-market.domain/Catalog/Enums.cs index 7f2a11f..d886eb4 100644 --- a/src/food-market.domain/Catalog/Enums.cs +++ b/src/food-market.domain/Catalog/Enums.cs @@ -2,6 +2,10 @@ namespace foodmarket.Domain.Catalog; public enum CounterpartyKind { + /// Не указано — дефолт для импортированных без явной классификации. + /// MoySklad сам не имеет встроенного поля Supplier/Customer, оно ставится + /// через теги или группы, и часто отсутствует. Не выдумываем за пользователя. + Unspecified = 0, Supplier = 1, Customer = 2, Both = 3, diff --git a/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs b/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs index 58ef210..cb82666 100644 --- a/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs +++ b/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs @@ -39,16 +39,19 @@ public async Task ImportCounterpartiesAsync(string token, { var orgId = _tenant.OrganizationId ?? throw new InvalidOperationException("No tenant organization in context."); - // Map MoySklad tag set → local CounterpartyKind. If no tags say otherwise, assume Both. + // MoySklad сам НЕ имеет встроенного "Supplier/Customer" поля у контрагентов. + // Классификация обычно через теги ("Поставщик"/"Покупатель") или группы. Если их нет — + // оставляем Unspecified, не выдумываем за пользователя. static foodmarket.Domain.Catalog.CounterpartyKind ResolveKind(IReadOnlyList? tags) { - if (tags is null || tags.Count == 0) return foodmarket.Domain.Catalog.CounterpartyKind.Both; + if (tags is null || tags.Count == 0) return foodmarket.Domain.Catalog.CounterpartyKind.Unspecified; var lower = tags.Select(t => t.ToLowerInvariant()).ToList(); var hasSupplier = lower.Any(t => t.Contains("постав")); var hasCustomer = lower.Any(t => t.Contains("покуп") || t.Contains("клиент")); - if (hasSupplier && !hasCustomer) return foodmarket.Domain.Catalog.CounterpartyKind.Supplier; - if (hasCustomer && !hasSupplier) return foodmarket.Domain.Catalog.CounterpartyKind.Customer; - return foodmarket.Domain.Catalog.CounterpartyKind.Both; + if (hasSupplier && hasCustomer) return foodmarket.Domain.Catalog.CounterpartyKind.Both; + if (hasSupplier) return foodmarket.Domain.Catalog.CounterpartyKind.Supplier; + if (hasCustomer) return foodmarket.Domain.Catalog.CounterpartyKind.Customer; + return foodmarket.Domain.Catalog.CounterpartyKind.Unspecified; } static foodmarket.Domain.Catalog.CounterpartyType ResolveType(string? companyType) diff --git a/src/food-market.web/src/lib/types.ts b/src/food-market.web/src/lib/types.ts index 3156dc6..f728570 100644 --- a/src/food-market.web/src/lib/types.ts +++ b/src/food-market.web/src/lib/types.ts @@ -6,7 +6,7 @@ export interface PagedResult { totalPages: number } -export const CounterpartyKind = { Supplier: 1, Customer: 2, Both: 3 } as const +export const CounterpartyKind = { Unspecified: 0, Supplier: 1, Customer: 2, Both: 3 } as const export type CounterpartyKind = (typeof CounterpartyKind)[keyof typeof CounterpartyKind] export const CounterpartyType = { LegalEntity: 1, Individual: 2 } as const diff --git a/src/food-market.web/src/pages/CounterpartiesPage.tsx b/src/food-market.web/src/pages/CounterpartiesPage.tsx index e9abbb5..f2e2e19 100644 --- a/src/food-market.web/src/pages/CounterpartiesPage.tsx +++ b/src/food-market.web/src/pages/CounterpartiesPage.tsx @@ -36,7 +36,7 @@ interface Form { } const blankForm: Form = { - name: '', legalName: '', kind: CounterpartyKind.Supplier, type: CounterpartyType.LegalEntity, + name: '', legalName: '', kind: CounterpartyKind.Unspecified, type: CounterpartyType.LegalEntity, bin: '', iin: '', taxNumber: '', countryId: '', address: '', phone: '', email: '', bankName: '', bankAccount: '', bik: '', @@ -44,9 +44,10 @@ const blankForm: Form = { } const kindLabel: Record = { + [CounterpartyKind.Unspecified]: '—', [CounterpartyKind.Supplier]: 'Поставщик', [CounterpartyKind.Customer]: 'Покупатель', - [CounterpartyKind.Both]: 'Оба', + [CounterpartyKind.Both]: 'Поставщик + Покупатель', } export function CounterpartiesPage() { @@ -138,9 +139,10 @@ export function CounterpartiesPage() {