create(); CommonCatalogItem::factory()->create(['article' => '00125']); $firstImport = $this->createImport($user, 'Заказан', 5, 'Ожидаем поставку'); $this->assertTrue($this->service($firstImport, $user)->handle()); $this->assertDatabaseHas('stock_orders', [ 'order_number' => 'СКЛ-100', 'status' => StockOrder::STATUS_ORDERED, 'ordered_quantity' => 5, 'available_quantity' => 0, ]); $secondImport = $this->createImport($user, 'На складе', 7, 'Поставка принята'); $this->assertTrue($this->service($secondImport, $user)->handle()); $this->assertDatabaseCount('stock_orders', 1); $this->assertDatabaseHas('stock_orders', [ 'order_number' => 'СКЛ-100', 'status' => StockOrder::STATUS_IN_STOCK, 'ordered_quantity' => 7, 'available_quantity' => 7, 'note' => 'Поставка принята', ]); $this->assertDatabaseHas('stock_movements', [ 'movement_type' => StockMovement::TYPE_RECEIPT, 'quantity' => 7, ]); $this->assertSame('DONE', $secondImport->refresh()->status); } private function createImport(User $user, string $status, int $quantity, string $note): Import { $spreadsheet = new Spreadsheet; $sheet = $spreadsheet->getActiveSheet(); $sheet->fromArray(ImportStockOrdersService::HEADERS, null, 'A1'); $sheet->setCellValue('A2', 'СКЛ-100'); $sheet->setCellValueExplicit('B2', '00125', DataType::TYPE_STRING); $sheet->setCellValue('C2', $status); $sheet->setCellValue('D2', $quantity); $sheet->setCellValue('E2', $note); $filename = 'stock_orders_'.uniqid().'.xlsx'; (new Xlsx($spreadsheet))->save(Storage::disk('upload')->path($filename)); return Import::query()->create([ 'type' => 'stock_orders', 'filename' => $filename, 'status' => 'new', 'user_id' => $user->id, ]); } private function service(Import $import, User $user): ImportStockOrdersService { return new ImportStockOrdersService( $import, $user->id, app(StockInventoryService::class), ); } }