mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Fixes for task status id set on creation
This commit is contained in:
parent
aec1a15ad2
commit
a368daac09
@ -143,7 +143,6 @@ class ImportController extends Controller
|
||||
foreach($headers as $key => $value)
|
||||
{
|
||||
if(isset($hints[$key])) {
|
||||
nlog($hints[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@ use App\Models\Quote;
|
||||
use App\Models\Client;
|
||||
use App\Models\Account;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\Project;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Factory\QuoteFactory;
|
||||
use App\Filters\QuoteFilters;
|
||||
@ -33,6 +34,7 @@ use App\Transformers\QuoteTransformer;
|
||||
use App\Utils\Traits\GeneratesCounter;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Transformers\InvoiceTransformer;
|
||||
use App\Transformers\ProjectTransformer;
|
||||
use App\Factory\CloneQuoteToInvoiceFactory;
|
||||
use App\Factory\CloneQuoteToProjectFactory;
|
||||
use App\Http\Requests\Quote\EditQuoteRequest;
|
||||
@ -683,6 +685,13 @@ class QuoteController extends BaseController
|
||||
private function performAction(Quote $quote, $action, $bulk = false)
|
||||
{
|
||||
switch ($action) {
|
||||
case 'convert_to_project':
|
||||
|
||||
$this->entity_type = Project::class;
|
||||
$this->entity_transformer = ProjectTransformer::class;
|
||||
|
||||
return $this->itemResponse($quote->service()->convertToProject());
|
||||
|
||||
case 'convert':
|
||||
case 'convert_to_invoice':
|
||||
|
||||
@ -691,8 +700,6 @@ class QuoteController extends BaseController
|
||||
|
||||
return $this->itemResponse($quote->service()->convertToInvoice());
|
||||
|
||||
break;
|
||||
|
||||
case 'clone_to_invoice':
|
||||
|
||||
$this->entity_type = Invoice::class;
|
||||
@ -701,19 +708,19 @@ class QuoteController extends BaseController
|
||||
$invoice = CloneQuoteToInvoiceFactory::create($quote, auth()->user()->id);
|
||||
|
||||
return $this->itemResponse($invoice);
|
||||
break;
|
||||
|
||||
case 'clone_to_quote':
|
||||
$quote = CloneQuoteFactory::create($quote, auth()->user()->id);
|
||||
|
||||
return $this->itemResponse($quote);
|
||||
break;
|
||||
|
||||
case 'approve':
|
||||
if (! in_array($quote->status_id, [Quote::STATUS_SENT, Quote::STATUS_DRAFT])) {
|
||||
return response()->json(['message' => ctrans('texts.quote_unapprovable')], 400);
|
||||
}
|
||||
|
||||
return $this->itemResponse($quote->service()->approveWithNoCoversion()->save());
|
||||
break;
|
||||
|
||||
case 'history':
|
||||
// code...
|
||||
break;
|
||||
@ -725,16 +732,14 @@ class QuoteController extends BaseController
|
||||
echo Storage::get($file);
|
||||
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||
|
||||
|
||||
break;
|
||||
case 'restore':
|
||||
$this->quote_repo->restore($quote);
|
||||
|
||||
if (! $bulk) {
|
||||
return $this->itemResponse($quote);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'archive':
|
||||
$this->quote_repo->archive($quote);
|
||||
|
||||
@ -752,16 +757,11 @@ class QuoteController extends BaseController
|
||||
|
||||
break;
|
||||
case 'email':
|
||||
$quote->service()->sendEmail();
|
||||
|
||||
return response()->json(['message'=> ctrans('texts.sent_message')], 200);
|
||||
break;
|
||||
|
||||
case 'send_email':
|
||||
|
||||
$quote->service()->sendEmail();
|
||||
|
||||
return response()->json(['message'=> ctrans('texts.sent_message')], 200);
|
||||
break;
|
||||
|
||||
case 'mark_sent':
|
||||
$quote->service()->markSent()->save();
|
||||
|
@ -30,9 +30,11 @@ class BulkActionQuoteRequest extends Request
|
||||
{
|
||||
$input = $this->all();
|
||||
|
||||
$rules = [];
|
||||
$rules = [
|
||||
'action' => 'sometimes|in:convert_to_invoice,convert_to_project,email,bulk_download,bulk_print,clone_to_invoice,approve,download,restore,archive,delete,send_email,mark_sent',
|
||||
];
|
||||
|
||||
if ($input['action'] == 'convert_to_invoice') {
|
||||
if (in_array($input['action'], ['convert,convert_to_invoice']) ) {
|
||||
$rules['action'] = [new ConvertableQuoteRule()];
|
||||
}
|
||||
|
||||
|
@ -28,23 +28,30 @@ class StoreTaskRequest extends Request
|
||||
*/
|
||||
public function authorize() : bool
|
||||
{
|
||||
return auth()->user()->can('create', Task::class);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->can('create', Task::class);
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
if (isset($this->number)) {
|
||||
$rules['number'] = Rule::unique('tasks')->where('company_id', auth()->user()->company()->id);
|
||||
$rules['number'] = Rule::unique('tasks')->where('company_id', $user->company()->id);
|
||||
}
|
||||
|
||||
if (isset($this->client_id)) {
|
||||
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.$user->company()->id.',is_deleted,0';
|
||||
}
|
||||
|
||||
if (isset($this->project_id)) {
|
||||
$rules['project_id'] = 'bail|required|exists:projects,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||
$rules['project_id'] = 'bail|required|exists:projects,id,company_id,'.$user->company()->id.',is_deleted,0';
|
||||
}
|
||||
|
||||
$rules['timelog'] = ['bail','array',function ($attribute, $values, $fail) {
|
||||
|
@ -45,7 +45,7 @@ class TaskRepository extends BaseRepository
|
||||
$task->saveQuietly();
|
||||
|
||||
if ($this->new_task && ! $task->status_id) {
|
||||
$this->setDefaultStatus($task);
|
||||
$task->status_id = $this->setDefaultStatus($task);
|
||||
}
|
||||
|
||||
$task->number = empty($task->number) || ! array_key_exists('number', $data) ? $this->trySaving($task) : $data['number'];
|
||||
|
@ -13,13 +13,14 @@ namespace App\Services\Quote;
|
||||
|
||||
use App\Utils\Ninja;
|
||||
use App\Models\Quote;
|
||||
use App\Jobs\Util\UnlinkFile;
|
||||
use App\Models\Project;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Exceptions\QuoteConversion;
|
||||
use App\Jobs\Entity\CreateEntityPdf;
|
||||
use App\Repositories\QuoteRepository;
|
||||
use App\Events\Quote\QuoteWasApproved;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Services\Quote\ConvertQuoteToProject;
|
||||
|
||||
class QuoteService
|
||||
{
|
||||
@ -41,6 +42,13 @@ class QuoteService
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function convertToProject(): Project
|
||||
{
|
||||
$project = (new ConvertQuoteToProject($this->quote))->run();
|
||||
|
||||
return $project;
|
||||
}
|
||||
|
||||
public function convert() :self
|
||||
{
|
||||
if ($this->quote->invoice_id) {
|
||||
|
@ -102,6 +102,28 @@ class TaskApiTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testStatusSets()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'client_id' => $this->client->id,
|
||||
'user_id' => $this->user->id,
|
||||
'company_id' => $this->company->id,
|
||||
'description' => 'Test Task',
|
||||
'time_log' => '[[1681165417,1681165432,"sumtin",true],[1681165446,0]]',
|
||||
];
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->postJson("/api/v1/tasks");
|
||||
|
||||
$response->assertStatus(200);
|
||||
$arr = $response->json();
|
||||
|
||||
$this->assertNotEmpty($arr['data']['status_id']);
|
||||
}
|
||||
|
||||
public function testStartDate()
|
||||
{
|
||||
$x = [];
|
||||
|
Loading…
x
Reference in New Issue
Block a user