mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Persist template changes
This commit is contained in:
parent
a764101c83
commit
2e08fe1ff6
@ -25,6 +25,8 @@ class DesignFactory
|
||||
$design->is_active = true;
|
||||
$design->is_custom = true;
|
||||
$design->name = '';
|
||||
$design->is_template = false;
|
||||
$design->entities = '';
|
||||
$design->design = new DesignBlocks();
|
||||
|
||||
return $design;
|
||||
|
@ -69,6 +69,17 @@ class DesignFilters extends QueryFilters
|
||||
});
|
||||
}
|
||||
|
||||
public function template(string $template = 'false'): Builder
|
||||
{
|
||||
|
||||
if (strlen($template) == 0) {
|
||||
return $this->builder;
|
||||
}
|
||||
|
||||
$bool_val = $template == 'true' ? true : false;
|
||||
|
||||
return $this->builder->where('is_template', $bool_val);
|
||||
}
|
||||
/**
|
||||
* Filter the designs by `is_custom` column.
|
||||
*
|
||||
|
@ -301,7 +301,10 @@ class DesignController extends BaseController
|
||||
*/
|
||||
public function create(CreateDesignRequest $request)
|
||||
{
|
||||
$design = DesignFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$design = DesignFactory::create($user->company()->id, $user->id);
|
||||
|
||||
return $this->itemResponse($design);
|
||||
}
|
||||
@ -346,7 +349,11 @@ class DesignController extends BaseController
|
||||
*/
|
||||
public function store(StoreDesignRequest $request)
|
||||
{
|
||||
$design = DesignFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$design = DesignFactory::create($user->company()->id, $user->id);
|
||||
|
||||
$design->fill($request->all());
|
||||
$design->save();
|
||||
|
||||
|
@ -23,20 +23,29 @@ class StoreDesignRequest extends Request
|
||||
*/
|
||||
public function authorize() : bool
|
||||
{
|
||||
return auth()->user()->isAdmin() && auth()->user()->account->hasFeature(Account::FEATURE_API);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->isAdmin() && $user->account->hasFeature(Account::FEATURE_API);
|
||||
;
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return [
|
||||
//'name' => 'required',
|
||||
'name' => 'required|unique:designs,name,null,null,company_id,'.auth()->user()->companyId(),
|
||||
'name' => 'required|unique:designs,name,null,null,company_id,'.$user->companyId(),
|
||||
'design' => 'required|array',
|
||||
'design.header' => 'required|min:1',
|
||||
'design.body' => 'required|min:1',
|
||||
'design.footer' => 'required|min:1',
|
||||
'design.includes' => 'required|min:1',
|
||||
'is_template' => 'sometimes|boolean',
|
||||
'entities' => 'sometimes|string'
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,10 @@ class UpdateDesignRequest extends Request
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [];
|
||||
return [
|
||||
'is_template' => 'sometimes|boolean',
|
||||
'entities' => 'sometimes|string'
|
||||
];
|
||||
}
|
||||
|
||||
public function prepareForValidation()
|
||||
|
@ -68,7 +68,7 @@ class Design extends BaseModel
|
||||
'name',
|
||||
'design',
|
||||
'is_active',
|
||||
// 'is_template',
|
||||
'is_template',
|
||||
];
|
||||
|
||||
public function company()
|
||||
|
@ -54,6 +54,8 @@ class DesignTransformer extends EntityTransformer
|
||||
'created_at' => (int) $design->created_at,
|
||||
'is_deleted' => (bool) $design->is_deleted,
|
||||
'is_free' => ($design->id <= 4) ? true : false,
|
||||
'is_template' => (bool) $design->is_template,
|
||||
'entities' => (string) $design->entities ?: '',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ return new class extends Migration
|
||||
{
|
||||
Schema::table('designs', function (Blueprint $table) {
|
||||
$table->boolean('is_template')->default(false);
|
||||
$table->text('entities')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@ namespace Tests\Feature;
|
||||
use Tests\TestCase;
|
||||
use App\Models\Design;
|
||||
use Tests\MockAccountData;
|
||||
use App\Factory\DesignFactory;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Events\Design\DesignWasCreated;
|
||||
use App\Events\Design\DesignWasDeleted;
|
||||
@ -36,6 +37,8 @@ class DesignApiTest extends TestCase
|
||||
|
||||
public $id;
|
||||
|
||||
public $faker;
|
||||
|
||||
protected function setUp() :void
|
||||
{
|
||||
parent::setUp();
|
||||
@ -49,6 +52,58 @@ class DesignApiTest extends TestCase
|
||||
Model::reguard();
|
||||
}
|
||||
|
||||
public function testDesignTemplates()
|
||||
{
|
||||
$design = DesignFactory::create($this->company->id, $this->user->id);
|
||||
$design->is_template = true;
|
||||
$design->name = 'Test Template';
|
||||
$design->save();
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get('/api/v1/designs?template=true');
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$arr = $response->json();
|
||||
|
||||
$this->assertCount(1, $arr['data']);
|
||||
}
|
||||
|
||||
public function testDesignTemplatesExcluded()
|
||||
{
|
||||
$design = DesignFactory::create($this->company->id, $this->user->id);
|
||||
$design->is_template = true;
|
||||
$design->name = 'Test Template';
|
||||
$design->save();
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get('/api/v1/designs?template=false');
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$arr = $response->json();
|
||||
|
||||
$this->assertCount(11, $arr['data']);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get('/api/v1/designs');
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$arr = $response->json();
|
||||
|
||||
$this->assertCount(12, $arr['data']);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testDesignPost()
|
||||
{
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user