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";