mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Merge pull request #6270 from beganovich/v5-570-571
(v5) Quotes improvements
This commit is contained in:
commit
04e17c7349
@ -1,6 +1,12 @@
|
||||
# Release notes
|
||||
|
||||
## [Unreleased (daily channel)](https://github.com/invoiceninja/invoiceninja/tree/v5-develop)
|
||||
## Added:
|
||||
- Client portal: Show message when trying to approve non-approvable quotes
|
||||
- Client portal: Remove "Approve" button from single quote page if quote is non-approvable
|
||||
|
||||
## Fixed:
|
||||
- Client portal: Showing message instead of blank page when trying to download zero quotes.
|
||||
|
||||
## [v5.2.0-release](https://github.com/invoiceninja/invoiceninja/releases/tag/v5.2.0-release)
|
||||
## Added:
|
||||
|
@ -85,7 +85,9 @@ class QuoteController extends Controller
|
||||
->get();
|
||||
|
||||
if (! $quotes || $quotes->count() == 0) {
|
||||
return;
|
||||
return redirect()
|
||||
->route('client.quotes.index')
|
||||
->with('message', ctrans('texts.no_quotes_available_for_download'));
|
||||
}
|
||||
|
||||
if ($quotes->count() == 1) {
|
||||
@ -121,7 +123,9 @@ class QuoteController extends Controller
|
||||
->get();
|
||||
|
||||
if (!$quotes || $quotes->count() == 0) {
|
||||
return redirect()->route('client.quotes.index');
|
||||
return redirect()
|
||||
->route('client.quotes.index')
|
||||
->with('message', ctrans('texts.quotes_with_status_sent_can_be_approved'));
|
||||
}
|
||||
|
||||
if ($process) {
|
||||
|
@ -4278,6 +4278,8 @@ $LANG = array(
|
||||
'one_time_purchases' => 'One time purchases',
|
||||
'recurring_purchases' => 'Recurring purchases',
|
||||
'you_might_be_interested_in_following' => 'You might be interested in following',
|
||||
'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved.',
|
||||
'no_quotes_available_for_download' => 'No quotes available for download.',
|
||||
);
|
||||
|
||||
return $LANG;
|
||||
|
@ -19,10 +19,12 @@
|
||||
@endcomponent
|
||||
@endif
|
||||
|
||||
@if(!$quote->isApproved())
|
||||
@if($quote->status_id === \App\Models\Quote::STATUS_SENT)
|
||||
<div class="mb-4">
|
||||
@include('portal.ninja2020.quotes.includes.actions', ['quote' => $quote])
|
||||
</div>
|
||||
@else
|
||||
<p class="text-right text-gray-900 text-sm mb-4">{{ ctrans('texts.quotes_with_status_sent_can_be_approved') }}</p>
|
||||
@endif
|
||||
|
||||
@include('portal.ninja2020.components.entity-documents', ['entity' => $quote])
|
||||
|
@ -70,6 +70,17 @@ class QuotesTest extends DuskTestCase
|
||||
}
|
||||
|
||||
public function testQuotesWithSentStatusCanOnlyBeApproved()
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser
|
||||
->visitRoute('client.quotes.index')
|
||||
->clickLink('View')
|
||||
->assertSee('Only quotes with "Sent" status can be approved.')
|
||||
->visitRoute('client.logout');
|
||||
});
|
||||
}
|
||||
|
||||
public function testMessageForNonApprovableQuotesIsVisible()
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser
|
||||
@ -78,7 +89,18 @@ class QuotesTest extends DuskTestCase
|
||||
->press('Approve')
|
||||
->assertPathIs('/client/quotes')
|
||||
->assertDontSee('Quote(s) approved successfully.')
|
||||
->assertSee('Only quotes with "Sent" status can be approved.')
|
||||
->visitRoute('client.logout');
|
||||
});
|
||||
}
|
||||
|
||||
public function testNoQuotesAvailableForDownloadMessage()
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser
|
||||
->visitRoute('client.quotes.index')
|
||||
->press('Download')
|
||||
->assertSee('No quotes available for download.');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user