Fixes for task status id set on creation

This commit is contained in:
David Bomba 2023-09-07 14:20:32 +10:00
parent aec1a15ad2
commit a368daac09
7 changed files with 62 additions and 24 deletions

View File

@ -143,7 +143,6 @@ class ImportController extends Controller
foreach($headers as $key => $value) foreach($headers as $key => $value)
{ {
if(isset($hints[$key])) { if(isset($hints[$key])) {
nlog($hints[$key]);
continue; continue;
} }

View File

@ -16,6 +16,7 @@ use App\Models\Quote;
use App\Models\Client; use App\Models\Client;
use App\Models\Account; use App\Models\Account;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Project;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Factory\QuoteFactory; use App\Factory\QuoteFactory;
use App\Filters\QuoteFilters; use App\Filters\QuoteFilters;
@ -33,6 +34,7 @@ use App\Transformers\QuoteTransformer;
use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\GeneratesCounter;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Transformers\InvoiceTransformer; use App\Transformers\InvoiceTransformer;
use App\Transformers\ProjectTransformer;
use App\Factory\CloneQuoteToInvoiceFactory; use App\Factory\CloneQuoteToInvoiceFactory;
use App\Factory\CloneQuoteToProjectFactory; use App\Factory\CloneQuoteToProjectFactory;
use App\Http\Requests\Quote\EditQuoteRequest; use App\Http\Requests\Quote\EditQuoteRequest;
@ -683,6 +685,13 @@ class QuoteController extends BaseController
private function performAction(Quote $quote, $action, $bulk = false) private function performAction(Quote $quote, $action, $bulk = false)
{ {
switch ($action) { 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':
case 'convert_to_invoice': case 'convert_to_invoice':
@ -691,8 +700,6 @@ class QuoteController extends BaseController
return $this->itemResponse($quote->service()->convertToInvoice()); return $this->itemResponse($quote->service()->convertToInvoice());
break;
case 'clone_to_invoice': case 'clone_to_invoice':
$this->entity_type = Invoice::class; $this->entity_type = Invoice::class;
@ -701,19 +708,19 @@ class QuoteController extends BaseController
$invoice = CloneQuoteToInvoiceFactory::create($quote, auth()->user()->id); $invoice = CloneQuoteToInvoiceFactory::create($quote, auth()->user()->id);
return $this->itemResponse($invoice); return $this->itemResponse($invoice);
break;
case 'clone_to_quote': case 'clone_to_quote':
$quote = CloneQuoteFactory::create($quote, auth()->user()->id); $quote = CloneQuoteFactory::create($quote, auth()->user()->id);
return $this->itemResponse($quote); return $this->itemResponse($quote);
break;
case 'approve': case 'approve':
if (! in_array($quote->status_id, [Quote::STATUS_SENT, Quote::STATUS_DRAFT])) { if (! in_array($quote->status_id, [Quote::STATUS_SENT, Quote::STATUS_DRAFT])) {
return response()->json(['message' => ctrans('texts.quote_unapprovable')], 400); return response()->json(['message' => ctrans('texts.quote_unapprovable')], 400);
} }
return $this->itemResponse($quote->service()->approveWithNoCoversion()->save()); return $this->itemResponse($quote->service()->approveWithNoCoversion()->save());
break;
case 'history': case 'history':
// code... // code...
break; break;
@ -725,16 +732,14 @@ class QuoteController extends BaseController
echo Storage::get($file); echo Storage::get($file);
}, basename($file), ['Content-Type' => 'application/pdf']); }, basename($file), ['Content-Type' => 'application/pdf']);
break;
case 'restore': case 'restore':
$this->quote_repo->restore($quote); $this->quote_repo->restore($quote);
if (! $bulk) { if (! $bulk) {
return $this->itemResponse($quote); return $this->itemResponse($quote);
} }
break; break;
case 'archive': case 'archive':
$this->quote_repo->archive($quote); $this->quote_repo->archive($quote);
@ -752,16 +757,11 @@ class QuoteController extends BaseController
break; break;
case 'email': case 'email':
$quote->service()->sendEmail();
return response()->json(['message'=> ctrans('texts.sent_message')], 200);
break;
case 'send_email': case 'send_email':
$quote->service()->sendEmail(); $quote->service()->sendEmail();
return response()->json(['message'=> ctrans('texts.sent_message')], 200); return response()->json(['message'=> ctrans('texts.sent_message')], 200);
break;
case 'mark_sent': case 'mark_sent':
$quote->service()->markSent()->save(); $quote->service()->markSent()->save();

View File

@ -30,9 +30,11 @@ class BulkActionQuoteRequest extends Request
{ {
$input = $this->all(); $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()]; $rules['action'] = [new ConvertableQuoteRule()];
} }

View File

@ -28,23 +28,30 @@ class StoreTaskRequest extends Request
*/ */
public function authorize() : bool 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() public function rules()
{ {
/** @var \App\Models\User $user */
$user = auth()->user();
$rules = []; $rules = [];
if (isset($this->number)) { 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)) { 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)) { 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) { $rules['timelog'] = ['bail','array',function ($attribute, $values, $fail) {

View File

@ -45,7 +45,7 @@ class TaskRepository extends BaseRepository
$task->saveQuietly(); $task->saveQuietly();
if ($this->new_task && ! $task->status_id) { 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']; $task->number = empty($task->number) || ! array_key_exists('number', $data) ? $this->trySaving($task) : $data['number'];

View File

@ -13,13 +13,14 @@ namespace App\Services\Quote;
use App\Utils\Ninja; use App\Utils\Ninja;
use App\Models\Quote; use App\Models\Quote;
use App\Jobs\Util\UnlinkFile; use App\Models\Project;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use App\Exceptions\QuoteConversion; use App\Exceptions\QuoteConversion;
use App\Jobs\Entity\CreateEntityPdf; use App\Jobs\Entity\CreateEntityPdf;
use App\Repositories\QuoteRepository; use App\Repositories\QuoteRepository;
use App\Events\Quote\QuoteWasApproved; use App\Events\Quote\QuoteWasApproved;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Services\Quote\ConvertQuoteToProject;
class QuoteService class QuoteService
{ {
@ -41,6 +42,13 @@ class QuoteService
return $this; return $this;
} }
public function convertToProject(): Project
{
$project = (new ConvertQuoteToProject($this->quote))->run();
return $project;
}
public function convert() :self public function convert() :self
{ {
if ($this->quote->invoice_id) { if ($this->quote->invoice_id) {

View File

@ -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() public function testStartDate()
{ {
$x = []; $x = [];