diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index b36cc8ca6ccc..1ec12ef567f0 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -133,30 +133,7 @@ class BaseController extends Controller protected function refreshResponse($query) { - $includes = [ - 'company.tax_rates', - 'company.clients', - 'company.clients.contacts', - 'company.tax_rates', - 'company.groups', - 'company.company_gateways', - 'company.products', - 'company.invoices', - 'company.invoices.invitations', - 'company.invoices.documents', - 'company.payments', - 'company.quotes.invitations', - 'company.quotes.documents', - 'company.credits.invitations', - 'company.credits', - 'company.payment_terms', - 'company.vendors', - 'company.expenses', - 'company.tasks', - ]; - - $this->manager->parseIncludes($includes); - +// $this->manager->parseIncludes($includes); $this->serializer = request()->input('serializer') ?: EntityTransformer::API_SERIALIZER_ARRAY; @@ -168,40 +145,59 @@ class BaseController extends Controller $transformer = new $this->entity_transformer(Input::get('serializer')); - //$includes = $transformer->getDefaultIncludes(); - // $includes = $this->getRequestIncludes($includes); - - //info(print_r($includes,1)); - //info(print_r($includes,1)); - $updated_at = request()->has('updated_at') ? request()->input('updated_at') : 0; $updated_at = date('Y-m-d H:i:s', $updated_at); - //info($updated_at); - $query->with( [ - 'company' => function ($query) use($updated_at){$query->whereNotNull('updated_at');}, - 'company.clients' =>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.clients.contacts'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.tax_rates'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.groups'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.company_gateways'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.products'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.invoices'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.invoices.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.invoices.documents'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.payments'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.quotes.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.quotes'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.credits'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.credits.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.payment_terms'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.vendors'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.expenses'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.tasks'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.projects'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.designs'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company' => function ($query) use($updated_at){ + $query->whereNotNull('updated_at'); + }, + 'company.clients'=>function ($query) use($updated_at){ + $query->where('clients.updated_at', '>=', $updated_at)->with('contacts'); + }, + 'company.tax_rates'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.groups'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.company_gateways'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('gateway'); + }, + 'company.products'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.invoices'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('invitations','documents'); + }, + 'company.payments'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('paymentables'); + }, + 'company.quotes'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('invitations','documents'); + }, + 'company.credits'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('invitations','documents'); + }, + 'company.payment_terms'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.vendors'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at)->with('contacts'); + }, + 'company.expenses'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.tasks'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.projects'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, + 'company.designs'=>function ($query) use($updated_at){ + $query->where('updated_at', '>=', $updated_at); + }, ] ); diff --git a/app/Http/Middleware/QueryLogging.php b/app/Http/Middleware/QueryLogging.php index 0447f3b35605..97d214d595b0 100644 --- a/app/Http/Middleware/QueryLogging.php +++ b/app/Http/Middleware/QueryLogging.php @@ -50,7 +50,7 @@ class QueryLogging Log::info($request->method() . ' - ' . $request->url() . ": $count queries - " . $time); - // if($count > 100) + // if($count > 700) // Log::info($queries); } diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php index eda78fa63fff..2511d8a328f5 100644 --- a/app/Repositories/BaseRepository.php +++ b/app/Repositories/BaseRepository.php @@ -220,7 +220,6 @@ class BaseRepository $tmp_data = $data; /* We need to unset some variable as we sometimes unguard the model */ - if (isset($tmp_data['invitations'])) { unset($tmp_data['invitations']); } diff --git a/app/Services/Invoice/CreateInvitations.php b/app/Services/Invoice/CreateInvitations.php index a9b56bb74901..f9b3f4a3a28e 100644 --- a/app/Services/Invoice/CreateInvitations.php +++ b/app/Services/Invoice/CreateInvitations.php @@ -31,6 +31,7 @@ class CreateInvitations extends AbstractService $invitation = InvoiceInvitation::whereCompanyId($this->invoice->company_id) ->whereClientContactId($contact->id) ->whereInvoiceId($this->invoice->id) + ->withTrashed() ->first(); if (!$invitation && $contact->send_email) { diff --git a/tests/Feature/InvoiceTest.php b/tests/Feature/InvoiceTest.php index e2c55a461dd0..5b6a4f19c6bc 100644 --- a/tests/Feature/InvoiceTest.php +++ b/tests/Feature/InvoiceTest.php @@ -125,6 +125,15 @@ class InvoiceTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/invoices/', $invoice) ->assertStatus(200); + + + //test that the same request should produce a validation error due + //to duplicate number being used. + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/invoices/', $invoice) + ->assertStatus(302); } public function testDeleteInvoice()