addProvider(new Rut($faker)); $comunas = $this->container->get(Repository\Comuna::class)->fetchAll(); $projects = $this->container->get(Repository\Proyecto::class)->fetchAll(); $project = $faker->randomElement($projects); $unitTypes = $this->container->get(Repository\Proyecto\TipoUnidad::class)->fetchAll(); $unitsRepository = $this->container->get(Repository\Venta\Unidad::class); $units = []; $unitsValue = []; $unitsCount = $faker->numberBetween(1, 3); for ($i = 0; $i < $unitsCount; $i++) { $type = $faker->randomElement($unitTypes); $units[] = $unitsRepository->fetchByProyectoAndTipo($project->id, $type->id); $unitsValue[] = $faker->randomFloat(2, 1000, 10000); } $brokersCount = $faker->numberBetween(1, 3); for ($i = 0; $i < $brokersCount; $i++) { $rut = $faker->rut(false, false); $brokerData = [ 'rut' => $rut, 'digit' => $faker->digitoVerificador($rut), 'name' => $faker->firstName, 'legal_name' => $faker->company, 'contact' => $faker->name, 'email' => $faker->email, 'phone' => $faker->phoneNumber ]; $broker = $this->container->get(Repository\Proyecto\Broker::class)->create($brokerData); $broker = $this->container->get(Repository\Proyecto\Broker::class)->save($broker); $contractData = [ 'project_id' => $project->id, 'broker_rut' => $broker->rut, 'commission' => $faker->randomFloat(4, 0, 1), ]; $contract = $this->container->get(Repository\Proyecto\Broker\Contract::class)->create($contractData); $contract = $this->container->get(Repository\Proyecto\Broker\Contract::class)->save($contract); $state = $this->container->get(Repository\Proyecto\Broker\Contract\State::class)->create([ 'contract_id' => $contract->id, 'type' => Model\Proyecto\Broker\Contract\State\Type::ACTIVE->value, 'date' => $faker->dateTimeBetween('-2 months')->format('Y-m-d') ]); $this->container->get(Repository\Proyecto\Broker\Contract\State::class)->save($state); } $contracts = $this->container->get(Repository\Proyecto\Broker\Contract::class)->fetchActiveByProject($project->id); $broker = $faker->boolean(10) ? $faker->randomElement($contracts)->broker : null; $activePromotions = $this->container->get(Repository\Venta\Promotion::class)->fetchActiveByProject($project->id); $promotionsCount = $faker->numberBetween(0, 3); $promotions = []; for ($i = 0; $i < $promotionsCount; $i++) { $promotions[] = $faker->randomElement($activePromotions)->id; } $rut = $faker->rut(false, false); $data = [ 'project_id' => $faker->randomElement($projects)->id, 'date' => $faker->dateTimeBetween('-2 years', 'now')->format('Y-m-d'), 'buyer_rut' => $rut, 'buyer_digit' => $faker->digitoVerificador($rut), 'buyer_names' => $faker->firstName, 'buyer_last_name' => $faker->lastName, 'buyer_last_name2' => $faker->lastName, 'buyer_email' => $faker->email, 'buyer_phone' => $faker->phoneNumber, 'buyer_address_street' => $faker->streetName, 'buyer_address_number' => $faker->buildingNumber, 'buyer_address_extra' => $faker->streetAddress, 'buyer_address_comuna_id' => $faker->randomElement($comunas)->id, 'units' => $units, 'units_value' => $unitsValue, 'broker_rut' => $broker ? $broker->rut : '', ]; if (count($promotions) > 0) { $data['promotions'] = $promotions; } $reservation = $this->container->get(Service\Venta\Reservation::class)->add($data); $this->assertInstanceOf(Model\Venta\Reservation::class, $reservation); $this->assertEquals($data['date'], $reservation->date->format('Y-m-d')); $this->assertEquals($data['project_id'], $reservation->project->id); $this->assertEquals($data['buyer_rut'], $reservation->buyer->rut); $this->assertEquals($data['buyer_digit'], $reservation->buyer->digito); $this->assertEquals($data['buyer_names'], $reservation->buyer->nombres); $this->assertEquals($data['buyer_last_name'], $reservation->buyer->apellido_paterno); $this->assertEquals($data['buyer_last_name2'], $reservation->buyer->apellido_materno); $this->assertEquals($data['buyer_email'], $reservation->buyer->datos->email); $this->assertEquals($data['buyer_phone'], $reservation->buyer->datos->telefono); $this->assertEquals($data['buyer_address_street'], $reservation->buyer->direccion->calle); $this->assertEquals($data['buyer_address_number'], $reservation->buyer->direccion->numero); $this->assertEquals($data['buyer_address_extra'], $reservation->buyer->direccion->extra); $this->assertEquals($data['buyer_address_comuna_id'], $reservation->buyer->direccion->comuna->id); $this->assertEquals($data['broker_rut'], $reservation->broker->rut); } }