| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <?php
- /**
- * Script to generate test Excel file for ImportOrdersService tests
- * Run: php tests/fixtures/generate_test_import.php
- */
- require_once __DIR__ . '/../../vendor/autoload.php';
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- // Headers (must match ImportOrdersService::HEADERS)
- $headers = [
- 'Округ',
- 'Район',
- 'Название площадки',
- 'Адрес объекта',
- 'Тип объекта',
- 'Артикул',
- 'Номер номенклатуры',
- 'Габаритные размеры',
- 'RFID',
- 'Наименование производителя',
- 'Наименование по ТЗ',
- 'Тип по тз',
- 'ТИП',
- 'Цена товара',
- 'Цена установки',
- 'Итоговая цена',
- 'Примечание',
- 'Год установки',
- 'Номер заказа МАФ',
- '№ Ведомости',
- 'Дата ведомости',
- '№УПД',
- 'Статус',
- 'Комментарий',
- 'Менеджер',
- 'Номер фабрики',
- 'Дата пр-ва',
- 'Срок эксплуатации (месяцев)',
- '№ сертификата',
- 'Дата выдачи',
- 'Орган сертификации',
- 'ТИП (Декларация/Сертификат/Отказное)',
- ];
- // Write headers
- $sheet->fromArray($headers, null, 'A1');
- // Test data rows
- $rows = [
- // Row 1: Valid row - should create order, product, product_sku
- [
- 'ЦАО', // Округ (districts.shortname)
- 'Тверской', // Район
- 'Тестовая площадка 1', // Название площадки
- 'ул. Тестовая, д. 1', // Адрес объекта
- 'Детская площадка', // Тип объекта
- 'ART-001', // Артикул
- 'NOM-001', // Номер номенклатуры
- '100x200x300', // Габаритные размеры
- 'RFID-001', // RFID
- 'Тестовый производитель', // Наименование производителя
- 'Горка детская', // Наименование по ТЗ
- 'Тип ТЗ 1', // Тип по тз
- 'Горка', // ТИП
- 100000, // Цена товара
- 50000, // Цена установки
- 150000, // Итоговая цена
- 'Примечание 1', // Примечание
- 2025, // Год установки
- 'MAF-001', // Номер заказа МАФ
- 'В-001', // № Ведомости
- 45658, // Дата ведомости (Excel date: 2025-01-15)
- 'УПД-001', // №УПД
- 'Новый', // Статус
- 'Комментарий к заказу', // Комментарий
- 'Тест Менеджер', // Менеджер
- 'F-001', // Номер фабрики
- 45658, // Дата пр-ва (Excel date)
- 60, // Срок эксплуатации (месяцев)
- 'CERT-001', // № сертификата
- 45658, // Дата выдачи (Excel date)
- 'Росстандарт', // Орган сертификации
- 'Сертификат', // ТИП (Декларация/Сертификат/Отказное)
- ],
- // Row 2: Same address, different product - tests order reuse
- [
- 'ЦАО',
- 'Тверской',
- 'Тестовая площадка 1',
- 'ул. Тестовая, д. 1', // Same address
- 'Детская площадка',
- 'ART-002',
- 'NOM-002', // Different nomenclature
- '200x300x400',
- 'RFID-002',
- 'Тестовый производитель 2',
- 'Качели детские',
- 'Тип ТЗ 2',
- 'Качели',
- 200000,
- 75000,
- 275000,
- 'Примечание 2',
- 2025,
- 'MAF-001', // Same MAF - should increment quantity
- 'В-002',
- 45658,
- 'УПД-002',
- 'Новый',
- '',
- 'Тест Менеджер',
- 'F-002',
- 45658,
- 72,
- 'CERT-002',
- 45658,
- 'Росстандарт',
- 'Сертификат',
- ],
- // Row 3: Invalid district - should be skipped
- [
- 'НЕСУЩЕСТВУЮЩИЙ_ОКРУГ', // Invalid district
- 'Тверской',
- 'Площадка с ошибкой',
- 'ул. Ошибочная, д. 999',
- 'Детская площадка',
- 'ART-003',
- 'NOM-003',
- '300x400x500',
- 'RFID-003',
- 'Производитель 3',
- 'Песочница',
- 'Тип ТЗ 3',
- 'Песочница',
- 50000,
- 25000,
- 75000,
- 'Примечание 3',
- 2025,
- '',
- 'В-003',
- 45658,
- 'УПД-003',
- 'Новый',
- 'Комментарий 3',
- 'Тест Менеджер',
- 'F-003',
- 45658,
- 48,
- 'CERT-003',
- 45658,
- 'Росстандарт',
- 'Сертификат',
- ],
- // Row 4: Duplicate of Row 1 - should be skipped (same RFID, product, order, maf)
- [
- 'ЦАО',
- 'Тверской',
- 'Тестовая площадка 1',
- 'ул. Тестовая, д. 1',
- 'Детская площадка',
- 'ART-001',
- 'NOM-001', // Same nomenclature as Row 1
- '100x200x300',
- 'RFID-001', // Same RFID
- 'Тестовый производитель',
- 'Горка детская',
- 'Тип ТЗ 1',
- 'Горка',
- 100000,
- 50000,
- 150000,
- 'Примечание 1',
- 2025,
- 'MAF-001', // Same MAF
- 'В-001', // Same statement
- 45658,
- 'УПД-001', // Same UPD
- 'Новый',
- 'Комментарий к заказу',
- 'Тест Менеджер',
- 'F-001', // Same factory number
- 45658, // Same manufacture date
- 60,
- 'CERT-001',
- 45658,
- 'Росстандарт',
- 'Сертификат',
- ],
- // Row 5: New order, product without MAF
- [
- 'ЦАО',
- 'Тверской',
- 'Тестовая площадка 2',
- 'ул. Другая, д. 5', // Different address - new order
- 'Детская площадка',
- 'ART-004',
- 'NOM-004',
- '150x250x350',
- 'RFID-004',
- 'Производитель 4',
- 'Карусель',
- 'Тип ТЗ 4',
- 'Карусель',
- 300000,
- 100000,
- 400000,
- 'Примечание 4', // Note - required field
- 2025,
- '', // No MAF order
- 'В-004', // Statement number
- 45658,
- 'УПД-004',
- 'Новый',
- 'Комментарий 4',
- 'Тест Менеджер',
- 'F-004',
- 45658,
- 84,
- 'CERT-004',
- 45658,
- 'Росстандарт',
- 'Декларация',
- ],
- ];
- // Write data rows starting from row 2
- $rowNum = 2;
- foreach ($rows as $row) {
- $sheet->fromArray($row, null, "A{$rowNum}");
- $rowNum++;
- }
- // Save file
- $writer = new Xlsx($spreadsheet);
- $writer->save(__DIR__ . '/test_orders_import.xlsx');
- echo "Test file created: tests/fixtures/test_orders_import.xlsx\n";
- echo "Contains " . count($rows) . " data rows:\n";
- echo "- Row 1: Valid - creates order, product, maf_order, product_sku\n";
- echo "- Row 2: Valid - reuses order, creates product, increments maf_order quantity\n";
- echo "- Row 3: Invalid district - should be skipped\n";
- echo "- Row 4: Duplicate of Row 1 - should be skipped\n";
- echo "- Row 5: Valid - creates new order without MAF\n";
|