From 165bd9ee866bf3b40412ff08a357ce78f88da776 Mon Sep 17 00:00:00 2001 From: Aji Kamaludin Date: Tue, 4 Jul 2023 01:27:12 +0700 Subject: [PATCH] bit fix --- app/Http/Controllers/CustomerController.php | 5 +- app/Http/Controllers/ProductController.php | 9 ++- app/Models/Product.php | 5 ++ app/Services/GeneralService.php | 24 ++++++ ...023_05_03_163959_create_products_table.php | 1 + database/seeders/DummySeeder.php | 9 ++- resources/js/Pages/Auth/Login.jsx | 75 ++++++++++++------- resources/js/Pages/Product/FormModal.jsx | 19 +++++ resources/js/Pages/Product/Index.jsx | 16 ++++ resources/js/Pages/Sale/Form.jsx | 15 ++-- 10 files changed, 135 insertions(+), 43 deletions(-) create mode 100644 app/Services/GeneralService.php diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 5b69263..54672c9 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Customer; +use App\Services\GeneralService; use Illuminate\Http\Request; use Illuminate\Support\Str; @@ -17,7 +18,7 @@ class CustomerController extends Controller } $query->orderBy('created_at', 'desc'); - + return inertia('Customer/Index', [ 'query' => $query->paginate(10), ]); @@ -32,7 +33,7 @@ class CustomerController extends Controller ]); Customer::create([ - 'code' => Str::upper(Str::random(6)), + 'code' => 'PE-' . GeneralService::formatNum(Customer::count() + 1), 'name' => $request->name, 'phone' => $request->phone, 'address' => $request->address, diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 216e80f..61cbb07 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Product; +use App\Services\GeneralService; use Illuminate\Http\Request; use Illuminate\Support\Str; @@ -17,7 +18,7 @@ class ProductController extends Controller } $query->orderBy('created_at', 'desc'); - + return inertia('Product/Index', [ 'query' => $query->paginate(10), ]); @@ -31,15 +32,17 @@ class ProductController extends Controller 'cost' => 'required|numeric|min:1', 'stock' => 'required|numeric|min:1', 'category_id' => 'required|exists:categories,id', + 'is_active' => 'required|in:0,1', ]); Product::create([ - 'code' => Str::upper(Str::random(6)), + 'code' => 'PO-' . GeneralService::formatNum(Product::count() + 1), 'name' => $request->name, 'price' => $request->price, 'cost' => $request->cost, 'stock' => $request->stock, 'category_id' => $request->category_id, + 'is_active' => $request->is_active, ]); return redirect()->route('product.index') @@ -54,6 +57,7 @@ class ProductController extends Controller 'cost' => 'required|numeric|min:1', 'stock' => 'required|numeric|min:1', 'category_id' => 'required|exists:categories,id', + 'is_active' => 'required|in:0,1', ]); $product->update([ @@ -62,6 +66,7 @@ class ProductController extends Controller 'cost' => $request->cost, 'stock' => $request->stock, 'category_id' => $request->category_id, + 'is_active' => $request->is_active, ]); return redirect()->route('product.index') diff --git a/app/Models/Product.php b/app/Models/Product.php index 20c64c5..3afe19a 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -4,6 +4,10 @@ namespace App\Models; class Product extends Model { + const ACTIVE = 0; + + const INACTIVE = 1; + protected $fillable = [ 'code', 'name', @@ -11,6 +15,7 @@ class Product extends Model 'cost', 'stock', 'category_id', + 'is_active' ]; public function category() diff --git a/app/Services/GeneralService.php b/app/Services/GeneralService.php new file mode 100644 index 0000000..bc7acee --- /dev/null +++ b/app/Services/GeneralService.php @@ -0,0 +1,24 @@ +decimal('cost', 14, 2)->default(0); $table->decimal('stock', 14, 2)->default(0); $table->uuid('category_id')->nullable(); + $table->smallInteger('is_active')->default(0); $table->timestamps(); $table->softDeletes(); $table->uuid('created_by')->nullable(); diff --git a/database/seeders/DummySeeder.php b/database/seeders/DummySeeder.php index d862960..9377b12 100644 --- a/database/seeders/DummySeeder.php +++ b/database/seeders/DummySeeder.php @@ -5,6 +5,7 @@ namespace Database\Seeders; use App\Models\Category; use App\Models\Customer; use App\Models\Product; +use App\Services\GeneralService; use Illuminate\Database\Seeder; use Illuminate\Support\Str; @@ -48,9 +49,9 @@ class DummySeeder extends Seeder 'Sepatu', 'Obat Nyamuk' ]; - foreach ($products as $prod) { + foreach ($products as $index => $prod) { Product::create([ - 'code' => Str::upper(Str::random(6)), + 'code' => 'PO-' . GeneralService::formatNum($index + 1), 'name' => $prod, 'price' => rand(1000, 10000), 'cost' => rand(1000, 10000), @@ -59,9 +60,9 @@ class DummySeeder extends Seeder ]); } - foreach (['Customer A', 'Customer B'] as $cust) { + foreach (['Customer A', 'Customer B'] as $index => $cust) { Customer::create([ - 'code' => Str::upper(Str::random(6)), + 'code' => 'PE-' . GeneralService::formatNum($index + 1), 'name' => $cust, ]); } diff --git a/resources/js/Pages/Auth/Login.jsx b/resources/js/Pages/Auth/Login.jsx index ef9e826..705af10 100644 --- a/resources/js/Pages/Auth/Login.jsx +++ b/resources/js/Pages/Auth/Login.jsx @@ -1,43 +1,52 @@ -import React, { useEffect } from 'react'; -import GuestLayout from '@/Layouts/GuestLayout'; -import InputError from '@/Components/Defaults/InputError'; -import { Head, Link, useForm } from '@inertiajs/react'; -import { Button, TextInput,Label, Checkbox, Spinner } from 'flowbite-react'; +import React, { useEffect } from 'react' +import GuestLayout from '@/Layouts/GuestLayout' +import InputError from '@/Components/Defaults/InputError' +import { Head, Link, useForm } from '@inertiajs/react' +import { Button, TextInput, Label, Checkbox, Spinner } from 'flowbite-react' export default function Login({ status }) { const { data, setData, post, processing, errors, reset } = useForm({ email: '', password: '', remember: '', - }); + }) useEffect(() => { return () => { - reset('password'); - }; - }, []); + reset('password') + } + }, []) const onHandleChange = (event) => { - setData(event.target.name, event.target.type === 'checkbox' ? event.target.checked : event.target.value); - }; + setData( + event.target.name, + event.target.type === 'checkbox' + ? event.target.checked + : event.target.value + ) + } - const handleKeyDown = e => { - if(e.code === 'Enter') { + const handleKeyDown = (e) => { + if (e.code === 'Enter') { post(route('login')) } } const submit = (e) => { - e.preventDefault(); + e.preventDefault() - post(route('login')); - }; + post(route('login')) + } return ( - {status &&
{status}
} + {status && ( +
+ {status} +
+ )}
@@ -66,29 +75,37 @@ export default function Login({ status }) { className="mt-1 block w-full" autoComplete="current-password" onChange={onHandleChange} - onKeyDownCapture={e => handleKeyDown(e)} + onKeyDownCapture={(e) => handleKeyDown(e)} />
-
- +
+
+ +
+ + Forgot password +
- ); + ) } diff --git a/resources/js/Pages/Product/FormModal.jsx b/resources/js/Pages/Product/FormModal.jsx index d57096f..9134698 100644 --- a/resources/js/Pages/Product/FormModal.jsx +++ b/resources/js/Pages/Product/FormModal.jsx @@ -16,6 +16,7 @@ export default function FormModal(props) { cost: 0, stock: 0, category_id: null, + is_active: 0, }) const handleOnChange = (event) => { @@ -62,6 +63,7 @@ export default function FormModal(props) { cost: product.cost, stock: product.stock, category_id: product.category_id, + is_active: product.is_active, }) return } @@ -106,6 +108,23 @@ export default function FormModal(props) { onItemSelected={(id) => setData('category_id', id)} error={errors.category_id} /> +
+
Status
+ + {errors.is_active && ( +

+ {errors.is_active} +

+ )} +