diff --git a/app/Http/Controllers/BaseAPIController.php b/app/Http/Controllers/BaseAPIController.php index 489053d055f0..a1983ed2b5f0 100644 --- a/app/Http/Controllers/BaseAPIController.php +++ b/app/Http/Controllers/BaseAPIController.php @@ -3,6 +3,7 @@ use Session; use Utils; use Auth; +use Log; use Input; use Response; use Request; @@ -66,6 +67,10 @@ class BaseAPIController extends Controller } else { $this->manager->setSerializer(new ArraySerializer()); } + + if (Utils::isNinjaDev()) { + \DB::enableQueryLog(); + } } protected function handleAction($request) @@ -82,7 +87,13 @@ class BaseAPIController extends Controller protected function listResponse($query) { - //\DB::enableQueryLog(); + $transformerClass = EntityModel::getTransformerName($this->entityType); + $transformer = new $transformerClass(Auth::user()->account, Input::get('serializer')); + + $include = $transformer->getDefaultIncludes(); + $include = $this->getRequestIncludes($include); + $query->with($include); + if ($clientPublicId = Input::get('client_id')) { $filter = function($query) use ($clientPublicId) { $query->where('public_id', '=', $clientPublicId); @@ -98,12 +109,8 @@ class BaseAPIController extends Controller } } - $transformerClass = EntityModel::getTransformerName($this->entityType); - $transformer = new $transformerClass(Auth::user()->account, Input::get('serializer')); - $data = $this->createCollection($query, $transformer, $this->entityType); - //return \DB::getQueryLog(); return $this->response($data); } @@ -113,7 +120,7 @@ class BaseAPIController extends Controller $transformer = new $transformerClass(Auth::user()->account, Input::get('serializer')); $data = $this->createItem($item, $transformer, $this->entityType); - + return $this->response($data); } @@ -146,6 +153,12 @@ class BaseAPIController extends Controller protected function response($response) { + if (Utils::isNinjaDev()) { + $count = count(\DB::getQueryLog()); + Log::info(Request::method() . ' - ' . Request::url() . ": $count queries"); + //Log::info(print_r(\DB::getQueryLog(), true)); + } + $index = Request::get('index') ?: 'data'; if ($index == 'none') { @@ -178,9 +191,9 @@ class BaseAPIController extends Controller } - protected function getIncluded() + protected function getRequestIncludes($data) { - $data = ['user']; + $data[] = 'user'; $included = Request::get('include'); $included = explode(',', $included); diff --git a/app/Http/Controllers/ClientApiController.php b/app/Http/Controllers/ClientApiController.php index ba6b56c952fa..557daa29fff6 100644 --- a/app/Http/Controllers/ClientApiController.php +++ b/app/Http/Controllers/ClientApiController.php @@ -44,7 +44,6 @@ class ClientApiController extends BaseAPIController public function index() { $clients = Client::scope() - ->with($this->getIncluded()) ->orderBy('created_at', 'desc') ->withTrashed(); diff --git a/app/Http/Controllers/InvoiceApiController.php b/app/Http/Controllers/InvoiceApiController.php index c9282cd95bd2..459abed2bacd 100644 --- a/app/Http/Controllers/InvoiceApiController.php +++ b/app/Http/Controllers/InvoiceApiController.php @@ -61,7 +61,7 @@ class InvoiceApiController extends BaseAPIController { $invoices = Invoice::scope() ->withTrashed() - ->with(array_merge(['invoice_items'], $this->getIncluded())) + ->with('invoice_items') ->orderBy('created_at', 'desc'); return $this->listResponse($invoices); diff --git a/app/Http/Controllers/PaymentApiController.php b/app/Http/Controllers/PaymentApiController.php index 5cea7f23641a..b41100acfad9 100644 --- a/app/Http/Controllers/PaymentApiController.php +++ b/app/Http/Controllers/PaymentApiController.php @@ -49,7 +49,7 @@ class PaymentApiController extends BaseAPIController { $payments = Payment::scope() ->withTrashed() - ->with(array_merge(['client.contacts', 'invitation', 'user', 'invoice'], $this->getIncluded())) + ->with(['client.contacts', 'invitation', 'user', 'invoice']) ->orderBy('created_at', 'desc'); return $this->listResponse($payments); diff --git a/app/Http/Controllers/TaskApiController.php b/app/Http/Controllers/TaskApiController.php index 5e5e05ef80e9..7945008bcc40 100644 --- a/app/Http/Controllers/TaskApiController.php +++ b/app/Http/Controllers/TaskApiController.php @@ -42,7 +42,6 @@ class TaskApiController extends BaseAPIController { $payments = Task::scope() ->withTrashed() - ->with($this->getIncluded()) ->orderBy('created_at', 'desc'); return $this->listResponse($payments); diff --git a/app/Http/Controllers/VendorApiController.php b/app/Http/Controllers/VendorApiController.php index d3cc27094760..2995e5c5e5f2 100644 --- a/app/Http/Controllers/VendorApiController.php +++ b/app/Http/Controllers/VendorApiController.php @@ -49,7 +49,6 @@ class VendorApiController extends BaseAPIController public function index() { $vendors = Vendor::scope() - ->with($this->getIncluded()) ->withTrashed() ->orderBy('created_at', 'desc'); diff --git a/app/Ninja/Transformers/ClientTransformer.php b/app/Ninja/Transformers/ClientTransformer.php index f7d786a2ee25..e9a63e07d693 100644 --- a/app/Ninja/Transformers/ClientTransformer.php +++ b/app/Ninja/Transformers/ClientTransformer.php @@ -58,7 +58,7 @@ class ClientTransformer extends EntityTransformer public function includeInvoices(Client $client) { - $transformer = new InvoiceTransformer($this->account, $this->serializer); + $transformer = new InvoiceTransformer($this->account, $this->serializer, $client); return $this->includeCollection($client->invoices, $transformer, ENTITY_INVOICE); } diff --git a/app/Ninja/Transformers/EntityTransformer.php b/app/Ninja/Transformers/EntityTransformer.php index ea0dba263d97..af1304acd67f 100644 --- a/app/Ninja/Transformers/EntityTransformer.php +++ b/app/Ninja/Transformers/EntityTransformer.php @@ -37,4 +37,9 @@ class EntityTransformer extends TransformerAbstract { return $date ? $date->getTimestamp() : null; } + + public function getDefaultIncludes() + { + return $this->defaultIncludes; + } } diff --git a/app/Ninja/Transformers/ExpenseTransformer.php b/app/Ninja/Transformers/ExpenseTransformer.php index a6d358d15766..8f2e02c0a88f 100644 --- a/app/Ninja/Transformers/ExpenseTransformer.php +++ b/app/Ninja/Transformers/ExpenseTransformer.php @@ -6,9 +6,15 @@ use League\Fractal; class ExpenseTransformer extends EntityTransformer { + public function __construct($account = null, $serializer = null, $client = null) + { + parent::__construct($account, $serializer); + + $this->client = $client; + } + public function transform(Expense $expense) { - return [ 'id' => (int) $expense->public_id, 'private_notes' => $expense->private_notes, @@ -25,7 +31,7 @@ class ExpenseTransformer extends EntityTransformer 'exchange_rate' => (float) $expense->exchange_rate, 'invoice_currency_id' => (int) $expense->invoice_currency_id, 'is_deleted' => (bool) $expense->is_deleted, - 'client_id' => isset($expense->client->public_id) ? (int) $expense->client->public_id : null, + 'client_id' => $this->client ? $this->client->public_id : (isset($expense->client->public_id) ? (int) $expense->client->public_id : null), 'invoice_id' => isset($expense->invoice->public_id) ? (int) $expense->invoice->public_id : null, 'vendor_id' => isset($expense->vendor->public_id) ? (int) $expense->vendor->public_id : null, ]; diff --git a/app/Ninja/Transformers/InvoiceTransformer.php b/app/Ninja/Transformers/InvoiceTransformer.php index 413f43ce1a10..51af3d029936 100644 --- a/app/Ninja/Transformers/InvoiceTransformer.php +++ b/app/Ninja/Transformers/InvoiceTransformer.php @@ -31,6 +31,13 @@ class InvoiceTransformer extends EntityTransformer 'expenses', ]; + public function __construct($account = null, $serializer = null, $client = null) + { + parent::__construct($account, $serializer); + + $this->client = $client; + } + public function includeInvoiceItems(Invoice $invoice) { $transformer = new InvoiceItemTransformer($this->account, $this->serializer); @@ -45,7 +52,7 @@ class InvoiceTransformer extends EntityTransformer public function includePayments(Invoice $invoice) { - $transformer = new PaymentTransformer($this->account, $this->serializer); + $transformer = new PaymentTransformer($this->account, $this->serializer, $invoice); return $this->includeCollection($invoice->payments, $transformer, ENTITY_PAYMENT); } @@ -68,7 +75,7 @@ class InvoiceTransformer extends EntityTransformer 'id' => (int) $invoice->public_id, 'amount' => (float) $invoice->amount, 'balance' => (float) $invoice->balance, - 'client_id' => (int) $invoice->client->public_id, + 'client_id' => (int) ($this->client ? $this->client->public_id : $invoice->client->public_id), 'invoice_status_id' => (int) $invoice->invoice_status_id, 'updated_at' => $this->getTimestamp($invoice->updated_at), 'archived_at' => $this->getTimestamp($invoice->deleted_at), diff --git a/app/Ninja/Transformers/PaymentTransformer.php b/app/Ninja/Transformers/PaymentTransformer.php index a1de09cd6ff4..8ea2dcbae051 100644 --- a/app/Ninja/Transformers/PaymentTransformer.php +++ b/app/Ninja/Transformers/PaymentTransformer.php @@ -26,10 +26,11 @@ class PaymentTransformer extends EntityTransformer ]; - public function __construct(Account $account) + public function __construct($account = null, $serializer = null, $invoice = null) { - parent::__construct($account); - + parent::__construct($account, $serializer); + + $this->invoice = $invoice; } public function includeInvoice(Payment $payment) @@ -57,7 +58,7 @@ class PaymentTransformer extends EntityTransformer 'archived_at' => $this->getTimestamp($payment->deleted_at), 'is_deleted' => (bool) $payment->is_deleted, 'payment_type_id' => (int) $payment->payment_type_id, - 'invoice_id' => (int) $payment->invoice->public_id, + 'invoice_id' => (int) ($this->invoice ? $this->invoice->public_id : $payment->invoice->public_id), ]; } } \ No newline at end of file diff --git a/tests/acceptance/ExpenseCest.php b/tests/acceptance/ExpenseCest.php index 72d7666aab9d..e22bebac3b7f 100644 --- a/tests/acceptance/ExpenseCest.php +++ b/tests/acceptance/ExpenseCest.php @@ -48,6 +48,7 @@ class ExpenseCest // invoice expense $I->executeJS('submitAction(\'invoice\')'); + $I->wait(3); $I->click('Save'); $I->wait(3); $I->see($clientEmail);