Merge pull request #8293 from turbo124/v5-develop

Fixes for mollie - disable idempotency
This commit is contained in:
David Bomba 2023-02-21 18:17:11 +11:00 committed by GitHub
commit cff6ab4fb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 91 additions and 33 deletions

View File

@ -1 +1 @@
5.5.71 5.5.72

View File

@ -11,6 +11,7 @@
namespace App\Filters; namespace App\Filters;
use App\Models\Payment;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
/** /**
@ -41,6 +42,70 @@ class PaymentFilters extends QueryFilters
}); });
} }
/**
* Filter based on client status.
*
* Statuses we need to handle
* - all
* - pending
* - cancelled
* - failed
* - completed
* - partially refunded
* - refunded
*
* @param string client_status The payment status as seen by the client
* @return Builder
*/
public function client_status(string $value = ''): Builder
{
if (strlen($value) == 0) {
return $this->builder;
}
$status_parameters = explode(',', $value);
if (in_array('all', $status_parameters)) {
return $this->builder;
}
$this->builder->where(function ($query) use ($status_parameters) {
$payment_filters = [];
if (in_array('pending', $status_parameters)) {
$payment_filters[] = Payment::STATUS_PENDING;
}
if (in_array('cancelled', $status_parameters)) {
$payment_filters[] = Payment::STATUS_CANCELLED;
}
if (in_array('failed', $status_parameters)) {
$payment_filters[] = Payment::STATUS_FAILED;
}
if (in_array('completed', $status_parameters)) {
$payment_filters[] = Payment::STATUS_COMPLETED;
}
if (in_array('partially_refunded', $status_parameters)) {
$payment_filters[] = Payment::STATUS_PARTIALLY_REFUNDED;
}
if (in_array('refunded', $status_parameters)) {
$payment_filters[] = Payment::STATUS_REFUNDED;
}
if (count($payment_filters) >0) {
$query->whereIn('status_id', $payment_filters);
}
});
return $this->builder;
}
/** /**
* Returns a list of payments that can be matched to bank transactions * Returns a list of payments that can be matched to bank transactions
*/ */

View File

@ -23,7 +23,6 @@ use App\Utils\CurlUtils;
use App\Utils\Ninja; use App\Utils\Ninja;
use App\Utils\SystemHealth; use App\Utils\SystemHealth;
use App\Utils\Traits\AppSetup; use App\Utils\Traits\AppSetup;
use Beganovich\Snappdf\Snappdf;
use Exception; use Exception;
use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Contracts\Routing\ResponseFactory;
@ -209,30 +208,9 @@ class SetupController extends Controller
public function checkPdf(Request $request) public function checkPdf(Request $request)
{ {
try { try {
// if (config('ninja.pdf_generator') == 'phantom') {
// return $this->testPhantom();
// }
// $pdf = new Snappdf();
// if (config('ninja.snappdf_chromium_path')) {
// $pdf->setChromiumPath(config('ninja.snappdf_chromium_path'));
// }
// if (config('ninja.snappdf_chromium_arguments')) {
// $pdf->clearChromiumArguments();
// $pdf->addChromiumArguments(config('ninja.snappdf_chromium_arguments'));
// }
// $pdf = $pdf
// ->setHtml('GENERATING PDFs WORKS! Thank you for using Invoice Ninja!')
// ->generate();
// Storage::disk(config('filesystems.default'))->put('test.pdf', $pdf);
// Storage::disk('local')->put('test.pdf', $pdf);
return response(['url' => ''], 200); return response(['url' => ''], 200);
// return response(['url' => Storage::disk('local')->url('test.pdf')], 200);
} catch (Exception $e) { } catch (Exception $e) {
nlog($e->getMessage()); nlog($e->getMessage());

View File

@ -26,6 +26,9 @@ class ValidCompanyQuantity implements Rule
*/ */
public function passes($attribute, $value) public function passes($attribute, $value)
{ {
if(config('ninja.testvars.travis'))
return true;
if (Ninja::isSelfHost()) { if (Ninja::isSelfHost()) {
return auth()->user()->company()->account->companies->count() < 10; return auth()->user()->company()->account->companies->count() < 10;
} }

View File

@ -39,6 +39,7 @@ class TestMailServer extends Mailable
$settings = new \stdClass; $settings = new \stdClass;
$settings->primary_color = '#4caf50'; $settings->primary_color = '#4caf50';
$settings->email_style = 'dark'; $settings->email_style = 'dark';
$settings->email_alignment = 'left';
return $this->from(config('mail.from.address'), config('mail.from.name')) return $this->from(config('mail.from.address'), config('mail.from.name'))
->subject(ctrans('texts.email')) ->subject(ctrans('texts.email'))

View File

@ -72,7 +72,7 @@ class CreditCard
'sequenceType' => 'recurring', 'sequenceType' => 'recurring',
'description' => $description, 'description' => $description,
'webhookUrl' => $this->mollie->company_gateway->webhookUrl(), 'webhookUrl' => $this->mollie->company_gateway->webhookUrl(),
'idempotencyKey' => uniqid("st", true), // 'idempotencyKey' => uniqid("st", true),
'metadata' => [ 'metadata' => [
'client_id' => $this->mollie->client->hashed_id, 'client_id' => $this->mollie->client->hashed_id,
'hash' => $this->mollie->payment_hash->hash, 'hash' => $this->mollie->payment_hash->hash,
@ -111,7 +111,7 @@ class CreditCard
'value' => $amount, 'value' => $amount,
], ],
'description' => $description, 'description' => $description,
'idempotencyKey' => uniqid("st", true), // 'idempotencyKey' => uniqid("st", true),
'redirectUrl' => route('mollie.3ds_redirect', [ 'redirectUrl' => route('mollie.3ds_redirect', [
'company_key' => $this->mollie->client->company->company_key, 'company_key' => $this->mollie->client->company->company_key,
'company_gateway_id' => $this->mollie->company_gateway->hashed_id, 'company_gateway_id' => $this->mollie->company_gateway->hashed_id,

View File

@ -218,6 +218,7 @@ class MolliePaymentDriver extends BaseDriver
'customerId' => $cgt->gateway_customer_reference, 'customerId' => $cgt->gateway_customer_reference,
'sequenceType' => 'recurring', 'sequenceType' => 'recurring',
'description' => $description, 'description' => $description,
'idempotencyKey' => uniqid("st", true),
'webhookUrl' => $this->company_gateway->webhookUrl(), 'webhookUrl' => $this->company_gateway->webhookUrl(),
]); ]);

View File

@ -14,8 +14,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true), 'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
'app_version' => '5.5.71', 'app_version' => '5.5.72',
'app_tag' => '5.5.71', 'app_tag' => '5.5.72',
'minimum_client_version' => '5.0.16', 'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1', 'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''), 'api_secret' => env('API_SECRET', ''),

View File

@ -151,7 +151,7 @@
<td align="center"> <td align="center">
<div class="dark-bg" <div class="dark-bg"
style="background-color:#f9f9f9; padding-bottom: 20px; margin-top:20px;"> style="background-color:#f9f9f9; padding-bottom: 20px; margin-top:20px;">
@if($logo) @if($logo && strpos($logo, 'blank.png') === false)
<img class="" src="{{ $logo ?? '' }}" width="50%" height="" alt="alt_text" border="0" style="width: 50%; max-width: 570px; height: auto; display: block;" class="g-img"> <img class="" src="{{ $logo ?? '' }}" width="50%" height="" alt="alt_text" border="0" style="width: 50%; max-width: 570px; height: auto; display: block;" class="g-img">
@endif @endif
</div> </div>

View File

@ -27,8 +27,8 @@ use Tests\TestCase;
class CompanyGatewayTest extends TestCase class CompanyGatewayTest extends TestCase
{ {
use MockAccountData; use MockAccountData;
// use DatabaseTransactions; use DatabaseTransactions;
use RefreshDatabase; // use RefreshDatabase;
protected function setUp() :void protected function setUp() :void
{ {

View File

@ -29,9 +29,9 @@ use Illuminate\Foundation\Testing\DatabaseTransactions;
class CompanySettingsTest extends TestCase class CompanySettingsTest extends TestCase
{ {
use MakesHash; use MakesHash;
// use DatabaseTransactions; use DatabaseTransactions;
use MockAccountData; use MockAccountData;
use RefreshDatabase; // use RefreshDatabase;
public function setUp() :void public function setUp() :void
{ {

View File

@ -62,6 +62,16 @@ class PaymentTest extends TestCase
); );
} }
public function testPatymentGetClientStatus()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/payments?client_status=completed');
$response->assertStatus(200);
}
public function testGetPaymentMatchList() public function testGetPaymentMatchList()
{ {
$response = $this->withHeaders([ $response = $this->withHeaders([