在庫管理機能 Phase 1 実装(apps/materials + フロントエンド)
Backend: - apps/materials 新規作成(Material, FertilizerProfile, PesticideProfile, StockTransaction) - 資材マスタ CRUD API(/api/materials/materials/) - 入出庫履歴 API(/api/materials/stock-transactions/) - 在庫集計 API(/api/materials/stock-summary/) - 既存 Fertilizer に material OneToOneField 追加(0005マイグレーション、データ移行込み) Frontend: - /materials: 在庫一覧画面(タブフィルタ、履歴展開、入出庫モーダル) - /materials/masters: 資材マスタ管理(肥料/農薬/その他タブ、インライン編集) - Navbar に「在庫管理」メニュー追加 - Material/StockTransaction/StockSummary 型定義追加 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def create_materials_for_existing_fertilizers(apps, schema_editor):
|
||||
Fertilizer = apps.get_model('fertilizer', 'Fertilizer')
|
||||
Material = apps.get_model('materials', 'Material')
|
||||
FertilizerProfile = apps.get_model('materials', 'FertilizerProfile')
|
||||
|
||||
for fertilizer in Fertilizer.objects.all():
|
||||
material = Material.objects.create(
|
||||
name=fertilizer.name,
|
||||
material_type='fertilizer',
|
||||
maker=fertilizer.maker or '',
|
||||
stock_unit='bag',
|
||||
is_active=True,
|
||||
notes=fertilizer.notes or '',
|
||||
)
|
||||
FertilizerProfile.objects.create(
|
||||
material=material,
|
||||
capacity_kg=fertilizer.capacity_kg,
|
||||
nitrogen_pct=fertilizer.nitrogen_pct,
|
||||
phosphorus_pct=fertilizer.phosphorus_pct,
|
||||
potassium_pct=fertilizer.potassium_pct,
|
||||
)
|
||||
fertilizer.material = material
|
||||
fertilizer.save(update_fields=['material'])
|
||||
|
||||
|
||||
def reverse_migration(apps, schema_editor):
|
||||
Fertilizer = apps.get_model('fertilizer', 'Fertilizer')
|
||||
Fertilizer.objects.all().update(material=None)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fertilizer', '0004_fertilizationplan_calc_settings'),
|
||||
('materials', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fertilizer',
|
||||
name='material',
|
||||
field=models.OneToOneField(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name='legacy_fertilizer',
|
||||
to='materials.material',
|
||||
verbose_name='資材マスタ',
|
||||
),
|
||||
),
|
||||
migrations.RunPython(create_materials_for_existing_fertilizers, reverse_migration),
|
||||
]
|
||||
Reference in New Issue
Block a user