diff --git a/app/Factory/ProductFactory.php b/app/Factory/ProductFactory.php new file mode 100644 index 000000000000..d93f98057d9e --- /dev/null +++ b/app/Factory/ProductFactory.php @@ -0,0 +1,33 @@ +company_id = $company_id; + $product->user_id = $user_id; + + $product->product_key = ''; + $product->notes = ''; + $product->cost = 0; + $product->qty = 0; + $product->tax_name1 = ''; + $product->tax_rate1 = 0; + $product->tax_name2 = ''; + $product->tax_rate2 = 0; + $product->custom_value1 = ''; + $product->custom_value2 = ''; + $product->custom_value3 = ''; + $product->custom_value4 = ''; + $product->is_deleted = 0; + + return $product; + } +} + + diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index ba97295a9e96..b77576bfafb7 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -55,23 +55,23 @@ class BaseController extends Controller protected function listResponse($query) { - $transformer = new $this->entityTransformer(Input::get('serializer')); + $transformer = new $this->entity_transformer(Input::get('serializer')); $includes = $transformer->getDefaultIncludes(); $includes = $this->getRequestIncludes($includes); $query->with($includes); - $data = $this->createCollection($query, $transformer, $this->entityType); + $data = $this->createCollection($query, $transformer, $this->entity_type); return $this->response($data); } - protected function createCollection($query, $transformer, $entityType) + protected function createCollection($query, $transformer, $entity_type) { if ($this->serializer && $this->serializer != EntityTransformer::API_SERIALIZER_JSON) { - $entityType = null; + $entity_type = null; } if (is_a($query, "Illuminate\Database\Eloquent\Builder")) { @@ -79,10 +79,10 @@ class BaseController extends Controller $paginator = $query->paginate($limit); $query = $paginator->getCollection(); - $resource = new Collection($query, $transformer, $entityType); + $resource = new Collection($query, $transformer, $entity_type); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); } else { - $resource = new Collection($query, $transformer, $entityType); + $resource = new Collection($query, $transformer, $entity_type); } return $this->manager->createData($resource)->toArray(); @@ -115,20 +115,20 @@ class BaseController extends Controller protected function itemResponse($item) { - $transformer = new $this->entityTransformer(Input::get('serializer')); + $transformer = new $this->entity_transformer(Input::get('serializer')); - $data = $this->createItem($item, $transformer, $this->entityType); + $data = $this->createItem($item, $transformer, $this->entity_type); return $this->response($data); } - protected function createItem($data, $transformer, $entityType) + protected function createItem($data, $transformer, $entity_type) { if ($this->serializer && $this->serializer != EntityTransformer::API_SERIALIZER_JSON) { - $entityType = null; + $entity_type = null; } - $resource = new Item($data, $transformer, $entityType); + $resource = new Item($data, $transformer, $entity_type); return $this->manager->createData($resource)->toArray(); } diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 2beb18faf349..c73240202e1f 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -32,9 +32,9 @@ class ClientController extends BaseController { use MakesHash; - protected $entityType = Client::class; + protected $entity_type = Client::class; - protected $entityTransformer = ClientTransformer::class; + protected $entity_transformer = ClientTransformer::class; /** * @var ClientRepository @@ -102,7 +102,7 @@ class ClientController extends BaseController $client = UpdateClient::dispatchNow($request, $client); - return response()->json($client, 200); + return $this->itemResponse($client); } @@ -115,13 +115,8 @@ class ClientController extends BaseController { $client = ClientFactory::create(auth()->user()->company()->id, auth()->user()->id); - $data = [ - 'client' => $client, - 'hashed_id' => '', - 'countries' => Country::all() - ]; + return $this->itemResponse($client); - return response()->json($data); } /** @@ -134,12 +129,9 @@ class ClientController extends BaseController { $client = StoreClient::dispatchNow($request, ClientFactory::create(auth()->user()->company()->id, auth()->user()->id)); - $client->load('contacts', 'primary_contact'); - $client->hashed_id = $this->encodePrimarykey($client->id); - - return response()->json($client, 200); + return $this->itemResponse($client); } @@ -178,7 +170,7 @@ class ClientController extends BaseController }); //todo need to return the updated dataset - return response()->json('success', 200); + return response()->json([], 200); } diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index cd28f4daddff..7991667a2a13 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -2,10 +2,14 @@ namespace App\Http\Controllers; +use App\Factory\ProductFactory; use App\Filters\ProductFilters; -use App\Http\Requests\Product\ShowProductRequest; +use App\Http\Requests\Product\CreateProductRequest; use App\Http\Requests\Product\EditProductRequest; +use App\Http\Requests\Product\ShowProductRequest; +use App\Http\Requests\Product\StoreProductRequest; use App\Models\Product; +use App\Repositories\ProductRepository; use App\Transformers\ProductTransformer; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; @@ -15,18 +19,21 @@ class ProductController extends BaseController use MakesHash; - protected $entityType = Product::class; + protected $entity_type = Product::class; - protected $entityTransformer = ProductTransformer::class; + protected $entity_transformer = ProductTransformer::class; + + protected $product_repo; /** * ProductController constructor. */ - public function __construct() + public function __construct(ProductRepository $product_repo) { parent::__construct(); + $this->product_repo = $product_repo; } /** @@ -46,9 +53,11 @@ class ProductController extends BaseController * * @return \Illuminate\Http\Response */ - public function create() + public function create(CreateProductRequest $request) { - // + $product = ProductFactory::create(auth()->user()->company()->id, auth()->user()->id); + + return $this->itemResponse($product); } /** @@ -57,9 +66,11 @@ class ProductController extends BaseController * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(StoreProductRequest $request) { - // + $product = $this->product_repo->save($request, ProductFactory::create(auth()->user()->company()->id, auth()->user()->id)); + + return $this->itemResponse($product); } /** diff --git a/app/Http/Requests/Product/CreateProductRequest.php b/app/Http/Requests/Product/CreateProductRequest.php new file mode 100644 index 000000000000..9dc232f1c09d --- /dev/null +++ b/app/Http/Requests/Product/CreateProductRequest.php @@ -0,0 +1,28 @@ +user()->can('create', Product::Class); + } + + public function rules() : array + { + return [ + 'product_key' => 'required', + ] + } + +} \ No newline at end of file diff --git a/app/Http/Requests/Product/EditProductRequest.php b/app/Http/Requests/Product/EditProductRequest.php index 3ab28b4526c8..1091fe1e6429 100644 --- a/app/Http/Requests/Product/EditProductRequest.php +++ b/app/Http/Requests/Product/EditProductRequest.php @@ -24,7 +24,7 @@ class EditProductRequest extends Request public function rules() { return [ - // + 'product_key' => 'required', ]; } } diff --git a/app/Http/Requests/Product/StoreProductRequest.php b/app/Http/Requests/Product/StoreProductRequest.php new file mode 100644 index 000000000000..85a82cdea647 --- /dev/null +++ b/app/Http/Requests/Product/StoreProductRequest.php @@ -0,0 +1,29 @@ +user()->can('create', Product::class); + } + + public function rules() + { + return [ + 'product_key' => 'required|unique:products,product_key,null,null,company_id,'.auth()->user()->companyId(), + ]; + } + + +} \ No newline at end of file diff --git a/app/Models/Product.php b/app/Models/Product.php index 3d053bf6a88e..c7aa15afd2b1 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -14,8 +14,12 @@ class Product extends BaseModel use Filterable; protected $guarded = [ - 'id', - ]; + 'id', + 'updated_at', + 'created_at', + 'deleted_at', + 'q', + ]; public function company() { diff --git a/app/Repositories/ProductRepository.php b/app/Repositories/ProductRepository.php new file mode 100644 index 000000000000..6fbe76dc508e --- /dev/null +++ b/app/Repositories/ProductRepository.php @@ -0,0 +1,27 @@ +fill($request->input()); + $product->save(); + + return $product; + } + +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index aef6e3c1a249..1d16a59c8cd8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,13 +11,10 @@ Route::post('logout', 'Auth\LoginController@logout')->name('logout'); * Signup Routes */ -//Route::redirect('/', '/login', 301); -//Route::get('signup', 'AccountController@index')->name('signup'); -//Route::post('signup', 'AccountController@store')->name('signup.submit'); - - -Auth::routes(['register' => false]); - +Route::redirect('/', '/login', 301); +Route::get('signup', 'AccountController@index')->name('signup'); +Route::post('signup', 'AccountController@store')->name('signup.submit'); +s Route::get('contact/login', 'Auth\ContactLoginController@showLoginForm')->name('contact.login'); Route::post('contact/login', 'Auth\ContactLoginController@login')->name('contact.login.submit'); diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php index 207c31cf3297..814fc6af59b5 100644 --- a/tests/Feature/ClientTest.php +++ b/tests/Feature/ClientTest.php @@ -154,9 +154,7 @@ class ClientTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $token, ])->put('/api/v1/clients/'.$this->encodePrimaryKey($client->id), $client_update) - ->assertJson([ - 'name' => 'A Funky Name' - ]); + ->assertStatus(200); $response = $this->withHeaders([ 'X-API-SECRET' => config('ninja.api_secret'), @@ -170,9 +168,7 @@ class ClientTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $token, ])->post('/api/v1/clients/', ['name' => 'New Client']) - ->assertJson([ - 'name' => 'New Client' - ]); + ->assertStatus(200); $response->assertStatus(200);