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)
{
if(isset($hints[$key])) {
nlog($hints[$key]);
continue;
}

View File

@ -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();

View File

@ -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()];
}

View File

@ -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) {

View File

@ -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'];

View File

@ -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) {

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