1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

Refactor for payments to improve query efficiency

This commit is contained in:
= 2022-08-22 13:24:33 +10:00
parent b99e623100
commit 4e3f52a1ee
6 changed files with 22 additions and 6 deletions

View File

@ -68,7 +68,9 @@ class StorePaymentRequest extends Request
if (isset($input['credits']) && is_array($input['credits']) !== false) {
foreach ($input['credits'] as $key => $value) {
if (array_key_exists('credit_id', $input['credits'][$key])) {
$input['credits'][$key]['credit_id'] = $value['credit_id'];
// $input['credits'][$key]['credit_id'] = $value['credit_id'];
$input['credits'][$key]['credit_id'] = $this->decodePrimaryKey($value['credit_id']);
$credits_total += $value['amount'];
}
}

View File

@ -50,11 +50,14 @@ class ValidCreditsRules implements Rule
}
$unique_array = [];
$cred_collection = Credit::withTrashed()->whereIn('id', array_column($this->input['credits'], 'credit_id'))->get();
foreach ($this->input['credits'] as $credit) {
$unique_array[] = $credit['credit_id'];
$cred = Credit::find($this->decodePrimaryKey($credit['credit_id']));
// $cred = Credit::find($this->decodePrimaryKey($credit['credit_id']));
$cred = $cred_collection->firstWhere('id', $credit['credit_id']);
if (! $cred) {
$this->error_msg = ctrans('texts.credit_not_found');

View File

@ -51,6 +51,9 @@ class ValidInvoicesRules implements Rule
$unique_array = [];
/////
$inv_collection = Invoice::withTrashed()->whereIn('id', array_column($this->input['invoices'], 'invoice_id'))->get();
//todo optimize this into a single query
foreach ($this->input['invoices'] as $invoice) {
$unique_array[] = $invoice['invoice_id'];
@ -61,7 +64,10 @@ class ValidInvoicesRules implements Rule
return false;
}
$inv = Invoice::withTrashed()->whereId($invoice['invoice_id'])->first();
/////
$inv = $inv_collection->firstWhere('id', $invoice['invoice_id']);
// $inv = Invoice::withTrashed()->whereId($invoice['invoice_id'])->first();
if (! $inv) {
$this->error_msg = ctrans('texts.invoice_not_found');

View File

@ -55,6 +55,8 @@ class CompanySizeCheck implements ShouldQueue
private function check()
{
nlog("Checking all company sizes");
Company::where('is_large', false)->withCount(['invoices', 'clients', 'products'])->cursor()->each(function ($company) {
if ($company->invoices_count > 500 || $company->products_count > 500 || $company->clients_count > 500) {
nlog("Marking company {$company->id} as large");

View File

@ -157,12 +157,15 @@ class PaymentRepository extends BaseRepository {
if (array_key_exists('credits', $data) && is_array($data['credits'])) {
$credit_totals = array_sum(array_column($data['credits'], 'amount'));
$credits = Credit::whereIn('id', $this->transformKeys(array_column($data['credits'], 'credit_id')))->get();
// $credits = Credit::whereIn('id', $this->transformKeys(array_column($data['credits'], 'credit_id')))->get();
$credits = Credit::whereIn('id', array_column($data['credits'], 'credit_id'))->get();
$payment->credits()->saveMany($credits);
//todo optimize into a single query
foreach ($data['credits'] as $paid_credit) {
$credit = Credit::withTrashed()->find($this->decodePrimaryKey($paid_credit['credit_id']));
$credit = Credit::withTrashed()->find($paid_credit['credit_id']);
if ($credit) {
$credit = $credit->service()->markSent()->save();

View File

@ -78,7 +78,7 @@ class ImportCompanyTest extends TestCase
{
parent::setUp();
$this->artisan('db:seed');
// $this->artisan('db:seed');
$this->withoutMiddleware(
ThrottleRequests::class