Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 27s
CI / Web (React + Vite) (push) Successful in 23s
Docker Images / API image (push) Successful in 34s
Docker Images / Web image (push) Successful in 27s
Docker Images / Deploy stage (push) Successful in 15s
Main расходился с БД стейджа (Phase2c3_MsStrict в history, но код ещё ссылался на VatRate etc.) — деплой ломался. Реплицирую удаление сущностей вручную, чтобы код совпадал с таблицами. Убрано (нет в MoySklad — не выдумываем): - Domain: VatRate сущность целиком; Counterparty.Kind + enum CounterpartyKind; Store.Kind + enum StoreKind; Product.IsAlcohol; UnitOfMeasure.Symbol/DecimalPlaces/IsBase. - EF: DbSet<VatRate>, ConfigureVatRate, Product.VatRate navigation, индекс Counterparty.Kind. - DTO/Input: соответствующие поля и VatRateDto/Input. - API: VatRatesController удалён; references в Products/Counterparties/Stores/UoM/Supplies/Retail/Stock. Добавлено как в MoySklad: - Product.Vat (int) + Product.VatEnabled — MoySklad держит НДС числом на товаре. - KZ default VAT 16% — applied в сидерах и в MoySkladImportService когда товар не принёс свой vat. MoySkladImportService: - ResolveKind убран; CompanyType=entrepreneur→Individual (как и было). - VatRates lookup → прямой p.Vat ?? 16 + p.Vat > 0 для VatEnabled. - baseUnit ищется по code="796" вместо IsBase. Web: - types.ts: убраны CounterpartyKind/StoreKind/VatRate/Product.vatRateId/vatPercent/isAlcohol/UoM.symbol/decimalPlaces/isBase; добавлено Product.vat/vatEnabled; унифицировано unitSymbol→unitName. - VatRatesPage удалён, роут из App.tsx тоже. - CounterpartiesPage/StoresPage/UnitsOfMeasurePage: убраны соответствующие поля в формах. - ProductEditPage: select "Ставка НДС" теперь с фиксированными 0/10/12/16/20 + чекбокс VatEnabled. - Stock/RetailSale/Supply pages: unitSymbol → unitName. deploy-stage unguarded — теперь код соответствует DB, авто-deploy безопасен.
81 lines
4.1 KiB
C#
81 lines
4.1 KiB
C#
using foodmarket.Domain.Catalog;
|
|
|
|
namespace foodmarket.Application.Catalog;
|
|
|
|
public record CountryDto(Guid Id, string Code, string Name, int SortOrder);
|
|
|
|
public record CurrencyDto(Guid Id, string Code, string Name, string Symbol, int MinorUnit, bool IsActive);
|
|
|
|
public record UnitOfMeasureDto(
|
|
Guid Id, string Code, string Name, string? Description, bool IsActive);
|
|
|
|
public record PriceTypeDto(
|
|
Guid Id, string Name, bool IsDefault, bool IsRetail, int SortOrder, bool IsActive);
|
|
|
|
public record StoreDto(
|
|
Guid Id, string Name, string? Code, string? Address, string? Phone,
|
|
string? ManagerName, bool IsMain, bool IsActive);
|
|
|
|
public record RetailPointDto(
|
|
Guid Id, string Name, string? Code, Guid StoreId, string? StoreName,
|
|
string? Address, string? Phone, string? FiscalSerial, string? FiscalRegNumber, bool IsActive);
|
|
|
|
public record ProductGroupDto(
|
|
Guid Id, string Name, Guid? ParentId, string Path, int SortOrder, bool IsActive);
|
|
|
|
public record CounterpartyDto(
|
|
Guid Id, string Name, string? LegalName, CounterpartyType Type,
|
|
string? Bin, string? Iin, string? TaxNumber, Guid? CountryId, string? CountryName,
|
|
string? Address, string? Phone, string? Email,
|
|
string? BankName, string? BankAccount, string? Bik, string? ContactPerson, string? Notes, bool IsActive);
|
|
|
|
public record ProductBarcodeDto(Guid Id, string Code, BarcodeType Type, bool IsPrimary);
|
|
|
|
public record ProductPriceDto(Guid Id, Guid PriceTypeId, string PriceTypeName, decimal Amount, Guid CurrencyId, string CurrencyCode);
|
|
|
|
public record ProductDto(
|
|
Guid Id, string Name, string? Article, string? Description,
|
|
Guid UnitOfMeasureId, string UnitName,
|
|
int Vat, bool VatEnabled,
|
|
Guid? ProductGroupId, string? ProductGroupName,
|
|
Guid? DefaultSupplierId, string? DefaultSupplierName,
|
|
Guid? CountryOfOriginId, string? CountryOfOriginName,
|
|
bool IsService, bool IsWeighed, bool IsMarked,
|
|
decimal? MinStock, decimal? MaxStock,
|
|
decimal? PurchasePrice, Guid? PurchaseCurrencyId, string? PurchaseCurrencyCode,
|
|
string? ImageUrl, bool IsActive,
|
|
IReadOnlyList<ProductPriceDto> Prices,
|
|
IReadOnlyList<ProductBarcodeDto> Barcodes);
|
|
|
|
// Upsert payloads (input)
|
|
public record CountryInput(string Code, string Name, int SortOrder = 0);
|
|
public record CurrencyInput(string Code, string Name, string Symbol, int MinorUnit = 2, bool IsActive = true);
|
|
public record UnitOfMeasureInput(string Code, string Name, string? Description = null, bool IsActive = true);
|
|
public record PriceTypeInput(string Name, bool IsDefault = false, bool IsRetail = false, int SortOrder = 0, bool IsActive = true);
|
|
public record StoreInput(
|
|
string Name, string? Code,
|
|
string? Address = null, string? Phone = null, string? ManagerName = null,
|
|
bool IsMain = false, bool IsActive = true);
|
|
public record RetailPointInput(
|
|
string Name, string? Code, Guid StoreId,
|
|
string? Address = null, string? Phone = null,
|
|
string? FiscalSerial = null, string? FiscalRegNumber = null, bool IsActive = true);
|
|
public record ProductGroupInput(string Name, Guid? ParentId, int SortOrder = 0, bool IsActive = true);
|
|
public record CounterpartyInput(
|
|
string Name, string? LegalName, CounterpartyType Type,
|
|
string? Bin, string? Iin, string? TaxNumber, Guid? CountryId,
|
|
string? Address, string? Phone, string? Email,
|
|
string? BankName, string? BankAccount, string? Bik, string? ContactPerson, string? Notes, bool IsActive = true);
|
|
public record ProductBarcodeInput(string Code, BarcodeType Type = BarcodeType.Ean13, bool IsPrimary = false);
|
|
public record ProductPriceInput(Guid PriceTypeId, decimal Amount, Guid CurrencyId);
|
|
public record ProductInput(
|
|
string Name, string? Article, string? Description,
|
|
Guid UnitOfMeasureId, int Vat, bool VatEnabled,
|
|
Guid? ProductGroupId, Guid? DefaultSupplierId, Guid? CountryOfOriginId,
|
|
bool IsService = false, bool IsWeighed = false, bool IsMarked = false,
|
|
decimal? MinStock = null, decimal? MaxStock = null,
|
|
decimal? PurchasePrice = null, Guid? PurchaseCurrencyId = null,
|
|
string? ImageUrl = null, bool IsActive = true,
|
|
IReadOnlyList<ProductPriceInput>? Prices = null,
|
|
IReadOnlyList<ProductBarcodeInput>? Barcodes = null);
|