food-market/src/food-market.infrastructure/Persistence/Migrations/20260425110000_Phase3a_PricingModel.cs
nns 6acf6b7c03 feat(domain): pricing model rename and new fields (Phase3a)
Подготовка к новой модели цен сторонняя система-style:
- Product.PurchasePrice → ReferencePrice (справочная закупочная,
  не обязательная). + ReferencePriceUpdatedAt для 30-дневного таймера.
- Product.+ Cost numeric(18,4) — себестоимость по скользящему среднему.
- Product.+ LastSupplyAt — UTC последней Posted приёмки.
- ProductGroup.+ MarkupPercent (5,2) — % наценки на cost для авто-розничной.
- Organization.+ MultiplePriceTypesEnabled (default false) и
  ShowReferencePriceOnProduct (default true).
- SupplyLine.+ RetailPriceManuallyOverridden + RetailPriceOverride —
  отметка ручной правки розничной в строке приёмки.

Миграция Phase3a_PricingModel: RENAME + AddColumn'ы. Logic перерасчёта
себестоимости, автонаценки, recalc-endpoint и Hangfire job — следующими
коммитами.

DTO/контроллеры/OtherSystem-импорт/UI поля переименованы в referencePrice
(включая фильтры списка товаров). UI-логика следующего коммита будет
показывать Cost и кнопку «привести розничную к себестоимости»; пока
referencePrice работает как раньше.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 20:59:09 +05:00

71 lines
3.6 KiB
C#

using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace foodmarket.Infrastructure.Persistence.Migrations
{
/// <summary>Новая модель цен:
/// - products.PurchasePrice → ReferencePrice (справочная цена закупа)
/// - products.+ ReferencePriceUpdatedAt timestamptz NULL
/// - products.+ Cost numeric(18,4) NOT NULL DEFAULT 0 (себестоимость, скользящее среднее)
/// - products.+ LastSupplyAt timestamptz NULL
/// - product_groups.+ MarkupPercent numeric(5,2) NULL (% наценки на cost для авто-розничной)
/// - organizations.+ MultiplePriceTypesEnabled boolean DEFAULT false
/// - organizations.+ ShowReferencePriceOnProduct boolean DEFAULT true
/// - supply_lines.+ RetailPriceManuallyOverridden boolean DEFAULT false
/// - supply_lines.+ RetailPriceOverride numeric(18,2) NULL
/// </summary>
public partial class Phase3a_PricingModel : Migration
{
protected override void Up(MigrationBuilder b)
{
b.RenameColumn(name: "PurchasePrice", schema: "public", table: "products", newName: "ReferencePrice");
b.AddColumn<System.DateTime>(
name: "ReferencePriceUpdatedAt", schema: "public", table: "products",
type: "timestamp with time zone", nullable: true);
b.AddColumn<decimal>(
name: "Cost", schema: "public", table: "products",
type: "numeric(18,4)", precision: 18, scale: 4, nullable: false, defaultValue: 0m);
b.AddColumn<System.DateTime>(
name: "LastSupplyAt", schema: "public", table: "products",
type: "timestamp with time zone", nullable: true);
b.AddColumn<decimal>(
name: "MarkupPercent", schema: "public", table: "product_groups",
type: "numeric(5,2)", precision: 5, scale: 2, nullable: true);
b.AddColumn<bool>(
name: "MultiplePriceTypesEnabled", schema: "public", table: "organizations",
type: "boolean", nullable: false, defaultValue: false);
b.AddColumn<bool>(
name: "ShowReferencePriceOnProduct", schema: "public", table: "organizations",
type: "boolean", nullable: false, defaultValue: true);
b.AddColumn<bool>(
name: "RetailPriceManuallyOverridden", schema: "public", table: "supply_lines",
type: "boolean", nullable: false, defaultValue: false);
b.AddColumn<decimal>(
name: "RetailPriceOverride", schema: "public", table: "supply_lines",
type: "numeric(18,2)", precision: 18, scale: 2, nullable: true);
}
protected override void Down(MigrationBuilder b)
{
b.DropColumn(name: "RetailPriceOverride", schema: "public", table: "supply_lines");
b.DropColumn(name: "RetailPriceManuallyOverridden", schema: "public", table: "supply_lines");
b.DropColumn(name: "ShowReferencePriceOnProduct", schema: "public", table: "organizations");
b.DropColumn(name: "MultiplePriceTypesEnabled", schema: "public", table: "organizations");
b.DropColumn(name: "MarkupPercent", schema: "public", table: "product_groups");
b.DropColumn(name: "LastSupplyAt", schema: "public", table: "products");
b.DropColumn(name: "Cost", schema: "public", table: "products");
b.DropColumn(name: "ReferencePriceUpdatedAt", schema: "public", table: "products");
b.RenameColumn(name: "ReferencePrice", schema: "public", table: "products", newName: "PurchasePrice");
}
}
}