mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Add filters for product keys
This commit is contained in:
parent
551e4cad27
commit
e0ae08475b
@ -807,6 +807,24 @@ class BaseExport
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function applyFilters(Builder $query): Builder
|
||||||
|
{
|
||||||
|
|
||||||
|
if(isset($this->input['product_key'])) {
|
||||||
|
|
||||||
|
$products = explode(",", $this->input['product_key']);
|
||||||
|
|
||||||
|
$query->where(function ($q) use ($products) {
|
||||||
|
foreach($products as $product) {
|
||||||
|
$q->orWhereJsonContains('line_items', ['product_key' => $product]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
protected function addInvoiceStatusFilter($query, $status): Builder
|
protected function addInvoiceStatusFilter($query, $status): Builder
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -864,6 +882,8 @@ class BaseExport
|
|||||||
|
|
||||||
protected function addDateRange($query)
|
protected function addDateRange($query)
|
||||||
{
|
{
|
||||||
|
$query = $this->applyFilters($query);
|
||||||
|
|
||||||
$date_range = $this->input['date_range'];
|
$date_range = $this->input['date_range'];
|
||||||
|
|
||||||
if (array_key_exists('date_key', $this->input) && strlen($this->input['date_key']) > 1) {
|
if (array_key_exists('date_key', $this->input) && strlen($this->input['date_key']) > 1) {
|
||||||
|
@ -78,21 +78,6 @@ class InvoiceItemExport extends BaseExport
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function applyFilters(Builder $query): Builder
|
|
||||||
{
|
|
||||||
|
|
||||||
if(isset($this->input['product_key'])) {
|
|
||||||
|
|
||||||
$products = explode(",", $this->input['product_key']);
|
|
||||||
|
|
||||||
foreach($products as $product)
|
|
||||||
$query->orWhereJsonContains('line_items', ['product_key' => $product]);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $query;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function returnJson()
|
public function returnJson()
|
||||||
{
|
{
|
||||||
$query = $this->init();
|
$query = $this->init();
|
||||||
|
@ -28,6 +28,7 @@ use App\Export\CSV\VendorExport;
|
|||||||
use App\Export\CSV\PaymentExport;
|
use App\Export\CSV\PaymentExport;
|
||||||
use App\Export\CSV\ProductExport;
|
use App\Export\CSV\ProductExport;
|
||||||
use App\DataMapper\CompanySettings;
|
use App\DataMapper\CompanySettings;
|
||||||
|
use App\DataMapper\InvoiceItem;
|
||||||
use App\Factory\CompanyUserFactory;
|
use App\Factory\CompanyUserFactory;
|
||||||
use App\Factory\InvoiceItemFactory;
|
use App\Factory\InvoiceItemFactory;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
@ -54,12 +55,13 @@ class ReportCsvGenerationTest extends TestCase
|
|||||||
|
|
||||||
$this->withoutExceptionHandling();
|
$this->withoutExceptionHandling();
|
||||||
|
|
||||||
|
Invoice::withTrashed()->cursor()->each(function ($i) { $i->forceDelete();});
|
||||||
|
|
||||||
$this->buildData();
|
$this->buildData();
|
||||||
|
|
||||||
if (config('ninja.testvars.travis') !== false)
|
if (config('ninja.testvars.travis') !== false)
|
||||||
$this->markTestSkipped('Skip test no company gateways installed');
|
$this->markTestSkipped('Skip test no company gateways installed');
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public $company;
|
public $company;
|
||||||
@ -297,14 +299,78 @@ class ReportCsvGenerationTest extends TestCase
|
|||||||
|
|
||||||
$query = Invoice::query();
|
$query = Invoice::query();
|
||||||
|
|
||||||
$products = explode(",", "clown,joker,batman");
|
$products = explode(",", "clown,joker,batman,bob the builder");
|
||||||
|
|
||||||
foreach($products as $product) {
|
foreach($products as $product) {
|
||||||
$query->orWhereJsonContains('line_items', ['product_key' => $product]);
|
$query->where(function ($q) use ($product) {
|
||||||
|
$q->orWhereJsonContains('line_items', ['product_key' => $product]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->assertEquals(0, $query->count());
|
$this->assertEquals(0, $query->count());
|
||||||
|
|
||||||
|
$item = InvoiceItemFactory::create();
|
||||||
|
$item->product_key = 'haloumi';
|
||||||
|
|
||||||
|
$line_items = [];
|
||||||
|
|
||||||
|
$line_items[] = $item;
|
||||||
|
Invoice::factory()->create(
|
||||||
|
[
|
||||||
|
'company_id' => $this->company->id,
|
||||||
|
'user_id' => $this->user->id,
|
||||||
|
'client_id' => $this->client->id,
|
||||||
|
'line_items' => $line_items
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$query->where(function ($q) use ($products) {
|
||||||
|
foreach($products as $product) {
|
||||||
|
$q->orWhereJsonContains('line_items', ['product_key' => $product]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->assertEquals(0, $query->count());
|
||||||
|
|
||||||
|
$item = InvoiceItemFactory::create();
|
||||||
|
$item->product_key = 'batman';
|
||||||
|
|
||||||
|
$line_items = [];
|
||||||
|
|
||||||
|
$line_items[] = $item;
|
||||||
|
$item = InvoiceItemFactory::create();
|
||||||
|
$item->product_key = 'bob the builder';
|
||||||
|
|
||||||
|
$line_items[] = $item;
|
||||||
|
|
||||||
|
Invoice::factory()->create(
|
||||||
|
[
|
||||||
|
'company_id' => $this->company->id,
|
||||||
|
'user_id' => $this->user->id,
|
||||||
|
'client_id' => $this->client->id,
|
||||||
|
'line_items' => $line_items
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$query = Invoice::query();
|
||||||
|
|
||||||
|
$query->where(function ($q) use($products){
|
||||||
|
foreach($products as $product) {
|
||||||
|
$q->orWhereJsonContains('line_items', ['product_key' => $product]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->assertEquals(1, $query->count());
|
||||||
|
|
||||||
|
$query = Invoice::query();
|
||||||
|
|
||||||
|
$query->where(function ($q){
|
||||||
|
$q->orWhereJsonContains('line_items', ['product_key' => 'bob the builder']);
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->assertEquals(1, $query->count());
|
||||||
|
|
||||||
|
Invoice::withTrashed()->cursor()->each(function ($i) { $i->forceDelete();});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,11 +402,11 @@ class ReportCsvGenerationTest extends TestCase
|
|||||||
|
|
||||||
Invoice::factory()->create(
|
Invoice::factory()->create(
|
||||||
[
|
[
|
||||||
'company_id' => $this->company->id,
|
'company_id' => $this->company->id,
|
||||||
'user_id' => $this->user->id,
|
'user_id' => $this->user->id,
|
||||||
'client_id' => $this->client->id,
|
'client_id' => $this->client->id,
|
||||||
'line_items' => $line_items
|
'line_items' => $line_items
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$item = InvoiceItemFactory::create();
|
$item = InvoiceItemFactory::create();
|
||||||
@ -1346,14 +1412,12 @@ class ReportCsvGenerationTest extends TestCase
|
|||||||
$this->assertEquals('GST', $this->getFirstValueByColumn($csv, 'Item Tax Name 1'));
|
$this->assertEquals('GST', $this->getFirstValueByColumn($csv, 'Item Tax Name 1'));
|
||||||
$this->assertEquals('10', $this->getFirstValueByColumn($csv, 'Item Tax Rate 1'));
|
$this->assertEquals('10', $this->getFirstValueByColumn($csv, 'Item Tax Rate 1'));
|
||||||
|
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'date_range' => 'all',
|
'date_range' => 'all',
|
||||||
'report_keys' => $this->all_client_report_keys,
|
'report_keys' => $this->all_client_report_keys,
|
||||||
'send_email' => false,
|
'send_email' => false,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
$response = $this->withHeaders([
|
$response = $this->withHeaders([
|
||||||
'X-API-SECRET' => config('ninja.api_secret'),
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
'X-API-TOKEN' => $this->token,
|
'X-API-TOKEN' => $this->token,
|
||||||
@ -1372,6 +1436,17 @@ class ReportCsvGenerationTest extends TestCase
|
|||||||
])->post('/api/v1/reports/invoice_items', $data)->assertStatus(200);
|
])->post('/api/v1/reports/invoice_items', $data)->assertStatus(200);
|
||||||
|
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'date_range' => 'all',
|
||||||
|
'report_keys' => $this->all_payment_report_keys,
|
||||||
|
'send_email' => false,
|
||||||
|
'product_key' => 'haloumi,cheese',
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
|
'X-API-TOKEN' => $this->token,
|
||||||
|
])->postJson('/api/v1/reports/invoice_items', $data)->assertStatus(200);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user