mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
API optimizations
This commit is contained in:
parent
2a6876a902
commit
9ebb539cce
172
app/Console/Commands/CreateTestData.php
Normal file
172
app/Console/Commands/CreateTestData.php
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
<?php namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use stdClass;
|
||||||
|
use Auth;
|
||||||
|
use DB;
|
||||||
|
use Utils;
|
||||||
|
use Artisan;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Faker\Factory;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
use App\Ninja\Repositories\ClientRepository;
|
||||||
|
use App\Ninja\Repositories\InvoiceRepository;
|
||||||
|
use App\Ninja\Repositories\PaymentRepository;
|
||||||
|
use App\Ninja\Repositories\VendorRepository;
|
||||||
|
use App\Ninja\Repositories\ExpenseRepository;
|
||||||
|
|
||||||
|
class CreateTestData extends Command
|
||||||
|
{
|
||||||
|
//protected $name = 'ninja:create-test-data';
|
||||||
|
protected $description = 'Create Test Data';
|
||||||
|
protected $signature = 'ninja:create-test-data {count=1}';
|
||||||
|
|
||||||
|
protected $token;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
ClientRepository $clientRepo,
|
||||||
|
InvoiceRepository $invoiceRepo,
|
||||||
|
PaymentRepository $paymentRepo,
|
||||||
|
VendorRepository $vendorRepo,
|
||||||
|
ExpenseRepository $expenseRepo)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->faker = Factory::create();
|
||||||
|
|
||||||
|
$this->clientRepo = $clientRepo;
|
||||||
|
$this->invoiceRepo = $invoiceRepo;
|
||||||
|
$this->paymentRepo = $paymentRepo;
|
||||||
|
$this->vendorRepo = $vendorRepo;
|
||||||
|
$this->expenseRepo = $expenseRepo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fire()
|
||||||
|
{
|
||||||
|
if (Utils::isNinjaProd()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info(date('Y-m-d').' Running CreateTestData...');
|
||||||
|
|
||||||
|
Auth::loginUsingId(1);
|
||||||
|
$this->count = $this->argument('count');
|
||||||
|
|
||||||
|
$this->createClients();
|
||||||
|
$this->createVendors();
|
||||||
|
|
||||||
|
$this->info('Done');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createClients()
|
||||||
|
{
|
||||||
|
for ($i=0; $i<$this->count; $i++) {
|
||||||
|
$data = [
|
||||||
|
'name' => $this->faker->name,
|
||||||
|
'address1' => $this->faker->streetAddress,
|
||||||
|
'address2' => $this->faker->secondaryAddress,
|
||||||
|
'city' => $this->faker->city,
|
||||||
|
'state' => $this->faker->state,
|
||||||
|
'postal_code' => $this->faker->postcode,
|
||||||
|
'contacts' => [[
|
||||||
|
'first_name' => $this->faker->firstName,
|
||||||
|
'last_name' => $this->faker->lastName,
|
||||||
|
'email' => $this->faker->safeEmail,
|
||||||
|
'phone' => $this->faker->phoneNumber,
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
|
$client = $this->clientRepo->save($data);
|
||||||
|
$this->info('Client: ' . $client->name);
|
||||||
|
|
||||||
|
$this->createInvoices($client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createInvoices($client)
|
||||||
|
{
|
||||||
|
for ($i=0; $i<$this->count; $i++) {
|
||||||
|
$data = [
|
||||||
|
'client_id' => $client->id,
|
||||||
|
'invoice_items' => [[
|
||||||
|
'product_key' => $this->faker->word,
|
||||||
|
'qty' => $this->faker->randomDigit + 1,
|
||||||
|
'cost' => $this->faker->randomFloat(2, 1, 10),
|
||||||
|
'notes' => $this->faker->text($this->faker->numberBetween(50, 300))
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
|
$invoice = $this->invoiceRepo->save($data);
|
||||||
|
$this->info('Invoice: ' . $invoice->invoice_number);
|
||||||
|
|
||||||
|
$this->createPayment($client, $invoice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createPayment($client, $invoice)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'invoice_id' => $invoice->id,
|
||||||
|
'client_id' => $client->id,
|
||||||
|
'amount' => $this->faker->randomFloat(2, 0, $invoice->amount)
|
||||||
|
];
|
||||||
|
|
||||||
|
$payment = $this->paymentRepo->save($data);
|
||||||
|
|
||||||
|
$this->info('Payment: ' . $payment->amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createVendors()
|
||||||
|
{
|
||||||
|
for ($i=0; $i<$this->count; $i++) {
|
||||||
|
$data = [
|
||||||
|
'name' => $this->faker->name,
|
||||||
|
'address1' => $this->faker->streetAddress,
|
||||||
|
'address2' => $this->faker->secondaryAddress,
|
||||||
|
'city' => $this->faker->city,
|
||||||
|
'state' => $this->faker->state,
|
||||||
|
'postal_code' => $this->faker->postcode,
|
||||||
|
'vendorcontacts' => [[
|
||||||
|
'first_name' => $this->faker->firstName,
|
||||||
|
'last_name' => $this->faker->lastName,
|
||||||
|
'email' => $this->faker->safeEmail,
|
||||||
|
'phone' => $this->faker->phoneNumber,
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
|
$vendor = $this->vendorRepo->save($data);
|
||||||
|
$this->info('Vendor: ' . $vendor->name);
|
||||||
|
|
||||||
|
$this->createExpense($vendor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createExpense($vendor)
|
||||||
|
{
|
||||||
|
for ($i=0; $i<$this->count; $i++) {
|
||||||
|
$data = [
|
||||||
|
'vendor_id' => $vendor->id,
|
||||||
|
'amount' => $this->faker->randomFloat(2, 1, 10),
|
||||||
|
'expense_date' => null,
|
||||||
|
'public_notes' => null,
|
||||||
|
];
|
||||||
|
|
||||||
|
$expense = $this->expenseRepo->save($data);
|
||||||
|
$this->info('Expense: ' . $expense->amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getArguments()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
//array('example', InputArgument::REQUIRED, 'An example argument.'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getOptions()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
//array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -17,6 +17,7 @@ class Kernel extends ConsoleKernel
|
|||||||
'App\Console\Commands\ResetData',
|
'App\Console\Commands\ResetData',
|
||||||
'App\Console\Commands\CheckData',
|
'App\Console\Commands\CheckData',
|
||||||
'App\Console\Commands\PruneData',
|
'App\Console\Commands\PruneData',
|
||||||
|
'App\Console\Commands\CreateTestData',
|
||||||
'App\Console\Commands\SendRenewalInvoices',
|
'App\Console\Commands\SendRenewalInvoices',
|
||||||
'App\Console\Commands\ChargeRenewalInvoices',
|
'App\Console\Commands\ChargeRenewalInvoices',
|
||||||
'App\Console\Commands\SendReminders',
|
'App\Console\Commands\SendReminders',
|
||||||
|
@ -30,6 +30,7 @@ class ExpenseApiController extends BaseAPIController
|
|||||||
{
|
{
|
||||||
$expenses = Expense::scope()
|
$expenses = Expense::scope()
|
||||||
->withTrashed()
|
->withTrashed()
|
||||||
|
->with('client', 'invoice', 'vendor')
|
||||||
->orderBy('created_at','desc');
|
->orderBy('created_at','desc');
|
||||||
|
|
||||||
return $this->listResponse($expenses);
|
return $this->listResponse($expenses);
|
||||||
|
@ -60,7 +60,7 @@ class InvoiceApiController extends BaseAPIController
|
|||||||
{
|
{
|
||||||
$invoices = Invoice::scope()
|
$invoices = Invoice::scope()
|
||||||
->withTrashed()
|
->withTrashed()
|
||||||
->with('invoice_items')
|
->with('invoice_items', 'client')
|
||||||
->orderBy('created_at', 'desc');
|
->orderBy('created_at', 'desc');
|
||||||
|
|
||||||
return $this->listResponse($invoices);
|
return $this->listResponse($invoices);
|
||||||
|
@ -47,7 +47,7 @@ class ClientTransformer extends EntityTransformer
|
|||||||
protected $availableIncludes = [
|
protected $availableIncludes = [
|
||||||
'invoices',
|
'invoices',
|
||||||
'credits',
|
'credits',
|
||||||
'expenses',
|
//'expenses',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function includeContacts(Client $client)
|
public function includeContacts(Client $client)
|
||||||
|
@ -28,7 +28,7 @@ class InvoiceTransformer extends EntityTransformer
|
|||||||
'invitations',
|
'invitations',
|
||||||
'payments',
|
'payments',
|
||||||
'client',
|
'client',
|
||||||
'expenses',
|
//'expenses',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct($account = null, $serializer = null, $client = null)
|
public function __construct($account = null, $serializer = null, $client = null)
|
||||||
|
@ -35,10 +35,13 @@ class VendorTransformer extends EntityTransformer
|
|||||||
* @SWG\Property(property="id_number", type="string", example="123456")
|
* @SWG\Property(property="id_number", type="string", example="123456")
|
||||||
*/
|
*/
|
||||||
|
|
||||||
protected $availableIncludes = [
|
protected $defaultIncludes = [
|
||||||
'vendorContacts',
|
'vendorContacts',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $availableIncludes = [
|
||||||
'invoices',
|
'invoices',
|
||||||
'expenses',
|
//'expenses',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function includeVendorContacts(Vendor $vendor)
|
public function includeVendorContacts(Vendor $vendor)
|
||||||
|
48
database/factories/ModelFactory.php
Normal file
48
database/factories/ModelFactory.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Client;
|
||||||
|
use App\Models\Contact;
|
||||||
|
use App\Models\Country;
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Model Factories
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may define all of your model factories. Model factories give
|
||||||
|
| you a convenient way to create models for testing and seeding your
|
||||||
|
| database. Just tell the factory how a default model should look.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
$factory->define(Contact::class, function (Faker\Generator $faker) {
|
||||||
|
return [
|
||||||
|
'client_id' => function() {
|
||||||
|
return factory(Client::class)->create()->id;
|
||||||
|
},
|
||||||
|
'user_id' => 1,
|
||||||
|
'account_id' => 1,
|
||||||
|
'public_id' => Contact::count() + 1,
|
||||||
|
'is_primary' => true,
|
||||||
|
'send_invoice' => true,
|
||||||
|
'first_name' => $faker->firstName,
|
||||||
|
'last_name' => $faker->lastName,
|
||||||
|
'email' => $faker->safeEmail,
|
||||||
|
'phone' => $faker->phoneNumber,
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
$factory->define(Client::class, function (Faker\Generator $faker) {
|
||||||
|
return [
|
||||||
|
'user_id' => 1,
|
||||||
|
'account_id' => 1,
|
||||||
|
'public_id' => Client::count() + 1,
|
||||||
|
'name' => $faker->name,
|
||||||
|
'address1' => $faker->streetAddress,
|
||||||
|
'address2' => $faker->secondaryAddress,
|
||||||
|
'city' => $faker->city,
|
||||||
|
'state' => $faker->state,
|
||||||
|
'postal_code' => $faker->postcode,
|
||||||
|
'country_id' => Country::all()->random()->id,
|
||||||
|
];
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user