Реальный сценарий владельца: весов с печатью этикеток нет, штрихкоды весовых —
обычные коды «27xxxxx» в карточке. Исправлены два бага:
- поиск по ШК матчил весовой PLU по АРТИКУЛУ (вода арт.12345 → 1,5 кг) — убрано,
поиск по штрихкоду больше нигде не матчит по артикулу;
- разбор весовых этикеток был дефолт-ON (WeightedBarcodeSettings.Enabled,
Organization.WeightBarcodeEnabled) и ловил обычные коды — теперь дефолт OFF.
- ByBarcode: сначала точное совпадение штрихкода (вкл. короткие «27xxxxx»),
разбор этикетки — только если включён в орг И точного ШК нет.
- Phase40: WeightBarcodeEnabled DEFAULT false + выключение у существующих орг;
WeightedCodeFormat('short'|'ean13')/WeightedCodePrefix(27)/WeightedCodeDigits(5).
- Генератор ШК нового весового товара: короткий «<prefix>+N цифр» (27xxxxx, next-free)
или EAN-13 по настройке; уникальность.
- Настройки орг отдают/принимают формат кода весовых.
- Sync отдаёт unitShort («шт»/«кг»/«л») рядом с unitCode (ОКЕИ) — shared UnitShort.
- Тесты: MobileApi (exact-only по умолчанию; не матчит артикул; PLU как ШК при вкл) 9/9;
unit WeightedBarcode/UnitShort 16/16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
54 lines
2.8 KiB
C#
54 lines
2.8 KiB
C#
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||
using Microsoft.EntityFrameworkCore.Migrations;
|
||
using foodmarket.Infrastructure.Persistence;
|
||
|
||
#nullable disable
|
||
|
||
namespace foodmarket.Infrastructure.Persistence.Migrations
|
||
{
|
||
/// <summary>Phase40 — весовой товар по реальному сценарию владельца (09.10):
|
||
/// разбор весовых этикеток ВЫКЛ по умолчанию + формат короткого кода весового товара.
|
||
///
|
||
/// <list type="bullet">
|
||
/// <item><c>WeightBarcodeEnabled</c> DEFAULT false + существующие организации
|
||
/// выключаем (фича была дефолт-on и ловила обычные коды как весовые).</item>
|
||
/// <item><c>WeightedCodeFormat</c> text DEFAULT 'short' («ean13» | «short»).</item>
|
||
/// <item><c>WeightedCodePrefix</c> integer DEFAULT 27.</item>
|
||
/// <item><c>WeightedCodeDigits</c> integer DEFAULT 5.</item>
|
||
/// </list>
|
||
/// Идемпотентно (IF NOT EXISTS / ALTER DEFAULT).</summary>
|
||
[DbContext(typeof(AppDbContext))]
|
||
[Migration("20261009120000_Phase40_WeightedCodeAndDefaults")]
|
||
public partial class Phase40_WeightedCodeAndDefaults : Migration
|
||
{
|
||
protected override void Up(MigrationBuilder b)
|
||
{
|
||
b.Sql(@"
|
||
ALTER TABLE public.organizations
|
||
ALTER COLUMN ""WeightBarcodeEnabled"" SET DEFAULT false;
|
||
-- Выключаем разбор этикеток у существующих организаций (фича была
|
||
-- дефолт-on и принимала обычные/внутренние коды за весовые этикетки).
|
||
UPDATE public.organizations SET ""WeightBarcodeEnabled"" = false;
|
||
|
||
ALTER TABLE public.organizations
|
||
ADD COLUMN IF NOT EXISTS ""WeightedCodeFormat"" text NOT NULL DEFAULT 'short';
|
||
ALTER TABLE public.organizations
|
||
ADD COLUMN IF NOT EXISTS ""WeightedCodePrefix"" integer NOT NULL DEFAULT 27;
|
||
ALTER TABLE public.organizations
|
||
ADD COLUMN IF NOT EXISTS ""WeightedCodeDigits"" integer NOT NULL DEFAULT 5;
|
||
");
|
||
}
|
||
|
||
protected override void Down(MigrationBuilder b)
|
||
{
|
||
b.Sql(@"
|
||
ALTER TABLE public.organizations
|
||
ALTER COLUMN ""WeightBarcodeEnabled"" SET DEFAULT true;
|
||
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodeFormat"";
|
||
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodePrefix"";
|
||
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodeDigits"";
|
||
");
|
||
}
|
||
}
|
||
}
|