diff --git a/app/Enums/OrderStatus.php b/app/Enums/OrderStatus.php
index 77ae5cd..d95749a 100644
--- a/app/Enums/OrderStatus.php
+++ b/app/Enums/OrderStatus.php
@@ -5,8 +5,11 @@
enum OrderStatus: string
{
case ORDER = 'Order';
+ case ON_HOLD = 'On hold';
case APPROVED = 'Approved';
case PRODUCTION = 'Production';
case COMPLETED = 'Completed';
+ case SHIPPED = 'Shipped';
+ case INVOICED = 'Invoiced';
case CANCELLED = 'Cancelled';
}
diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php
index 0bc5ee0..5151b87 100644
--- a/app/Http/Controllers/CustomerController.php
+++ b/app/Http/Controllers/CustomerController.php
@@ -5,25 +5,20 @@
use App\Http\Requests\CustomerRequest;
use App\Models\Customer;
use App\Models\PackingSlip;
-use App\Models\ShippingEntry;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
class CustomerController extends Controller
{
- public function index(Request $request)
+ public function index()
{
- return view('customers.index', [
- 'customers' => Customer::all(),
- 'tab' => $request->tab,
- ]);
}
public function store(CustomerRequest $request)
{
Customer::create($request->validated());
- return redirect()->route('customers.index')->with('status', 'Customer created successfully.');
+ return redirect()->route('management.index')->with('status', 'Customer created successfully.');
}
public function create()
@@ -68,13 +63,13 @@ public function requestDestroy(Request $request)
$customer = Customer::find($request->id);
$customer->delete();
- return redirect()->route('customers.index')->with('status', 'Customer deleted successfully.');
+ return redirect()->route('management.index')->with('status', 'Customer deleted successfully.');
}
public function destroy(Customer $customer)
{
$customer->delete();
- return redirect()->route('customers.index')->with('status', 'Customer deleted successfully.');
+ return redirect()->route('management.index')->with('status', 'Customer deleted successfully.');
}
}
diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
new file mode 100644
index 0000000..a132753
--- /dev/null
+++ b/app/Http/Controllers/DashboardController.php
@@ -0,0 +1,43 @@
+middleware('auth');
+ }
+
+ /**
+ * Show the application dashboard.
+ *
+ */
+ public function index(Request $request)
+ {
+ if (!$request->get('tab')) {
+ return redirect()->route('dashboard', ['tab' => 'active_orders']);
+ }
+
+ return view('dashboard', [
+ 'today' => Carbon::today(),
+ 'tab' => $request->get('tab'),
+ 'active_orders' => Order::where('status', '!=', 'cancelled')
+ ->where('status', '!=', 'completed')
+ ->orderByDesc('rush')
+ ->orderBy('due_date')
+ ->paginate(15)
+ ->withQueryString()
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
deleted file mode 100644
index 7cbc2c3..0000000
--- a/app/Http/Controllers/HomeController.php
+++ /dev/null
@@ -1,28 +0,0 @@
-middleware('auth');
- }
-
- /**
- * Show the application dashboard.
- *
- * @return \Illuminate\Contracts\Support\Renderable
- */
- public function index()
- {
- return view('home');
- }
-}
diff --git a/app/Http/Controllers/ManagementController.php b/app/Http/Controllers/ManagementController.php
new file mode 100644
index 0000000..60fc9c2
--- /dev/null
+++ b/app/Http/Controllers/ManagementController.php
@@ -0,0 +1,24 @@
+route('management.index', ['tab' => $this->defaultTab]);
+ }
+
+ return view('management.index', [
+ 'customers' => Customer::all(),
+ 'tab' => $tab,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/OrderController.php b/app/Http/Controllers/OrderController.php
index 5148ec7..cd5deea 100644
--- a/app/Http/Controllers/OrderController.php
+++ b/app/Http/Controllers/OrderController.php
@@ -4,15 +4,30 @@
use App\Enums\OrderStatus;
use App\Enums\OrderType;
+use App\Http\Requests\OrderRequest;
use App\Models\Customer;
+use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
class OrderController extends Controller
{
- public function index()
+ public function index(Request $request)
{
+ if (!$request->get('tab')) {
+ return redirect()->route('orders.index', ['tab' => 'active_orders']);
+ }
+ return view('orders.index', [
+ 'tab' => $request->get('tab'),
+ 'today' => Carbon::today(),
+ 'active_orders' => Order::where('status', '!=', 'cancelled')
+ ->where('status', '!=', 'completed')
+ ->orderByDesc('rush')
+ ->orderBy('due_date')
+ ->paginate(15)
+ ->withQueryString()
+ ]);
}
public function create()
@@ -26,8 +41,11 @@ public function create()
]);
}
- public function store(Request $request)
+ public function store(OrderRequest $request)
{
+ $order = Order::create($request->validated());
+
+ return redirect()->route('order-products.create', ['order' => $order->id]);
}
public function show($id)
diff --git a/app/Http/Controllers/OrderProductController.php b/app/Http/Controllers/OrderProductController.php
new file mode 100644
index 0000000..56791a8
--- /dev/null
+++ b/app/Http/Controllers/OrderProductController.php
@@ -0,0 +1,38 @@
+ ['required', 'exists:orders'],
+ 'sku' => ['string', 'nullable'],
+ 'product_name' => ['required'],
+ 'color' => ['string', 'nullable'],
+ ];
+ }
+
+ public function authorize(): bool
+ {
+ return true;
+ }
+}
diff --git a/app/Http/Requests/OrderRequest.php b/app/Http/Requests/OrderRequest.php
index 8da7f60..ce491a0 100644
--- a/app/Http/Requests/OrderRequest.php
+++ b/app/Http/Requests/OrderRequest.php
@@ -9,19 +9,21 @@ class OrderRequest extends FormRequest
public function rules(): array
{
return [
- 'customer_id' => ['required', 'exists:customers'],
- 'internal_po' => ['required'],
- 'customer_po' => ['required'],
+ 'customer_id' => ['required', 'exists:customers,id'],
+ 'contact_id' => ['nullable', 'exists:contacts,id'],
+// 'internal_po' => ['required'],
+ 'customer_po' => ['required', 'string'],
+ 'order_type' => ['required', 'string'],
'order_date' => ['required', 'date'],
'due_date' => ['required', 'date'],
'status' => ['required'],
- 'rush' => ['boolean'],
- 'new_art' => ['boolean'],
- 'digitizing' => ['boolean'],
- 'repeat' => ['boolean'],
- 'purchased_garments' => ['boolean'],
- 'customer_supplied_file' => ['boolean'],
- 'notes' => ['required'],
+ 'rush' => ['nullable'],
+ 'new_art' => ['nullable'],
+ 'digitizing' => ['nullable'],
+ 'repeat' => ['nullable'],
+ 'purchased_garments' => ['nullable'],
+ 'customer_supplied_file' => ['nullable'],
+ 'notes' => ['nullable'],
];
}
diff --git a/app/Http/Requests/ProductServiceRequest.php b/app/Http/Requests/ProductServiceRequest.php
new file mode 100644
index 0000000..0b743db
--- /dev/null
+++ b/app/Http/Requests/ProductServiceRequest.php
@@ -0,0 +1,26 @@
+ ['required', 'exists:order_products'],
+ 'service_file_id' => ['nullable', 'exists:service_files'],
+ 'service_type' => ['required'],
+ 'placement' => ['required'],
+ 'setup_amount' => ['required'],
+ 'amount' => ['nullable'],
+ 'amount_price' => ['nullable'],
+ ];
+ }
+
+ public function authorize(): bool
+ {
+ return true;
+ }
+}
diff --git a/app/Http/Requests/ProductSizeRequest.php b/app/Http/Requests/ProductSizeRequest.php
new file mode 100644
index 0000000..272716f
--- /dev/null
+++ b/app/Http/Requests/ProductSizeRequest.php
@@ -0,0 +1,22 @@
+ ['required', 'exists:order_products'],
+ 'size' => ['required'],
+ 'amount' => ['required'],
+ ];
+ }
+
+ public function authorize(): bool
+ {
+ return true;
+ }
+}
diff --git a/app/Http/Requests/ServiceFileRequest.php b/app/Http/Requests/ServiceFileRequest.php
new file mode 100644
index 0000000..f66ae36
--- /dev/null
+++ b/app/Http/Requests/ServiceFileRequest.php
@@ -0,0 +1,24 @@
+ ['required'],
+ 'name' => ['required'],
+ 'width' => ['required', 'numeric'],
+ 'height' => ['required', 'numeric'],
+ 'unit' => ['required'],
+ ];
+ }
+
+ public function authorize(): bool
+ {
+ return true;
+ }
+}
diff --git a/app/Livewire/Counter.php b/app/Livewire/Counter.php
new file mode 100644
index 0000000..b4ee99c
--- /dev/null
+++ b/app/Livewire/Counter.php
@@ -0,0 +1,25 @@
+count++;
+ }
+
+ public function decrement()
+ {
+ $this->count--;
+ }
+
+ public function render()
+ {
+ return view('livewire.counter');
+ }
+}
diff --git a/app/Livewire/CreateOrder.php b/app/Livewire/CreateOrder.php
new file mode 100644
index 0000000..1ce2e9c
--- /dev/null
+++ b/app/Livewire/CreateOrder.php
@@ -0,0 +1,40 @@
+customers = $customers;
+ $this->contacts = $customers->first()->contacts;
+ }
+
+ public function getContacts()
+ {
+ $this->contacts = Customer::find($this->selectedCustomer)->contacts;
+ }
+
+ public function render()
+ {
+ return view('livewire.create-order', [
+ 'contacts' => $this->contacts,
+ 'order_types' => OrderType::cases(),
+ 'order_status' => OrderStatus::cases(),
+ 'customers' => $this->customers,
+ 'today' => Carbon::today()->format('Y-m-d'),
+ 'due_default' => Carbon::today()->addDay(10)->format('Y-m-d')
+ ]);
+ }
+}
diff --git a/app/Livewire/CustomerAndContactSelect.php b/app/Livewire/CustomerAndContactSelect.php
new file mode 100644
index 0000000..2938dba
--- /dev/null
+++ b/app/Livewire/CustomerAndContactSelect.php
@@ -0,0 +1,41 @@
+customers = $customers;
+
+ if (isset($this->selectedCustomer))
+ {
+ $this->contacts = Customer::find($this->selectedCustomer)->contacts;
+ }
+ else {
+ $this->contacts = $customers->first()->contacts;
+ }
+
+ }
+
+ public function updateContactList()
+ {
+ $this->contacts = Customer::find($this->selectedCustomer)->contacts;
+ }
+
+ public function render()
+ {
+ return view('livewire.customer-and-contact-select', [
+ 'customers' => $this->customers,
+ 'contacts' => $this->contacts,
+ ]);
+ }
+}
diff --git a/app/Models/Contact.php b/app/Models/Contact.php
index 2ae4319..dd92d68 100644
--- a/app/Models/Contact.php
+++ b/app/Models/Contact.php
@@ -20,6 +20,11 @@ class Contact extends Model
'notes',
];
+ public function getFullNameAttribute(): string
+ {
+ return $this->first_name . ' ' . $this->last_name;
+ }
+
public function customer(): BelongsTo
{
return $this->belongsTo(Customer::class);
diff --git a/app/Models/Order.php b/app/Models/Order.php
index cb8ec44..f7e1064 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -7,6 +7,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
class Order extends Model
@@ -15,9 +16,11 @@ class Order extends Model
protected $fillable = [
'customer_id',
+ 'contact_id',
'internal_po',
'customer_po',
'order_date',
+ 'order_type',
'due_date',
'status',
'rush',
@@ -47,6 +50,11 @@ public function customer(): BelongsTo
return $this->belongsTo(Customer::class);
}
+ public function orderProduct(): HasMany
+ {
+ return $this->hasMany(OrderProduct::class);
+ }
+
protected function serializeDate(DateTimeInterface $date): string
{
return $date->format('Y-m-d');
diff --git a/app/Models/OrderProduct.php b/app/Models/OrderProduct.php
new file mode 100644
index 0000000..745ac50
--- /dev/null
+++ b/app/Models/OrderProduct.php
@@ -0,0 +1,42 @@
+belongsTo(Order::class);
+ }
+
+ public function productService(): HasOne
+ {
+ return $this->hasOne(ProductService::class);
+ }
+
+ public function serviceFile(): HasOne
+ {
+ return $this->hasOne(ServiceFile::class);
+ }
+
+ public function productSize(): HasMany
+ {
+ return $this->hasMany(ProductSize::class);
+ }
+}
diff --git a/app/Models/ProductService.php b/app/Models/ProductService.php
new file mode 100644
index 0000000..c351bcf
--- /dev/null
+++ b/app/Models/ProductService.php
@@ -0,0 +1,33 @@
+belongsTo(OrderProduct::class);
+ }
+
+ public function serviceFile(): HasOne
+ {
+ return $this->hasOne(ServiceFile::class);
+ }
+}
diff --git a/app/Models/ProductSize.php b/app/Models/ProductSize.php
new file mode 100644
index 0000000..51150fa
--- /dev/null
+++ b/app/Models/ProductSize.php
@@ -0,0 +1,24 @@
+belongsTo(OrderProduct::class);
+ }
+}
diff --git a/app/Models/ServiceFile.php b/app/Models/ServiceFile.php
new file mode 100644
index 0000000..18b4b9c
--- /dev/null
+++ b/app/Models/ServiceFile.php
@@ -0,0 +1,27 @@
+belongsTo(ProductService::class);
+ }
+}
diff --git a/composer.json b/composer.json
index 7f6cb1b..3b608c3 100644
--- a/composer.json
+++ b/composer.json
@@ -8,7 +8,8 @@
"php": "^8.2",
"davidhsianturi/blade-bootstrap-icons": "^1.5",
"laravel/framework": "^11.9",
- "laravel/tinker": "^2.9"
+ "laravel/tinker": "^2.9",
+ "livewire/livewire": "^3.5"
},
"require-dev": {
"fakerphp/faker": "^1.23",
diff --git a/composer.lock b/composer.lock
index da623a1..363f653 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ecf358f6808ee41e24a7136c4c0cd543",
+ "content-hash": "cf385c78ac1f239d7823feaf6668a15b",
"packages": [
{
"name": "blade-ui-kit/blade-icons",
@@ -1959,6 +1959,82 @@
],
"time": "2024-01-28T23:22:08+00:00"
},
+ {
+ "name": "livewire/livewire",
+ "version": "v3.5.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/livewire/livewire.git",
+ "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/597a2808d8d3001cc3ed5ce89a6ebab00f83b80f",
+ "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "^10.0|^11.0",
+ "illuminate/routing": "^10.0|^11.0",
+ "illuminate/support": "^10.0|^11.0",
+ "illuminate/validation": "^10.0|^11.0",
+ "laravel/prompts": "^0.1.24",
+ "league/mime-type-detection": "^1.9",
+ "php": "^8.1",
+ "symfony/console": "^6.0|^7.0",
+ "symfony/http-kernel": "^6.2|^7.0"
+ },
+ "require-dev": {
+ "calebporzio/sushi": "^2.1",
+ "laravel/framework": "^10.15.0|^11.0",
+ "mockery/mockery": "^1.3.1",
+ "orchestra/testbench": "^8.21.0|^9.0",
+ "orchestra/testbench-dusk": "^8.24|^9.1",
+ "phpunit/phpunit": "^10.4",
+ "psy/psysh": "^0.11.22|^0.12"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Livewire\\LivewireServiceProvider"
+ ],
+ "aliases": {
+ "Livewire": "Livewire\\Livewire"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Livewire\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Caleb Porzio",
+ "email": "calebporzio@gmail.com"
+ }
+ ],
+ "description": "A front-end framework for Laravel.",
+ "support": {
+ "issues": "https://github.com/livewire/livewire/issues",
+ "source": "https://github.com/livewire/livewire/tree/v3.5.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/livewire",
+ "type": "github"
+ }
+ ],
+ "time": "2024-08-19T11:52:18+00:00"
+ },
{
"name": "monolog/monolog",
"version": "3.7.0",
diff --git a/database/factories/OrderFactory.php b/database/factories/OrderFactory.php
index 35d8502..b4093ed 100644
--- a/database/factories/OrderFactory.php
+++ b/database/factories/OrderFactory.php
@@ -3,6 +3,7 @@
namespace Database\Factories;
use App\Enums\OrderStatus;
+use App\Enums\OrderType;
use App\Models\Customer;
use App\Models\Order;
use Illuminate\Database\Eloquent\Factories\Factory;
@@ -14,17 +15,19 @@ class OrderFactory extends Factory
public function definition(): array
{
- $order_date = Carbon::today()->subDays(rand(0, 30));
+ $order_date = Carbon::today()->subDays(rand(0, 10));
+ $due_date = $order_date->copy()->addDays(rand(9,15));
return [
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'internal_po' => 'TN' . $this->faker->randomNumber(4, true),
'customer_po' => $this->faker->randomNumber(6, true),
+ 'order_type' => $this->faker->randomElement(OrderType::cases())->value,
'order_date' => $order_date,
- 'due_date' => $order_date->addDays(rand(8, 12)),
- 'status' => $this->faker->randomELement(OrderStatus::cases())->value, //todo: setup order status enum
- 'rush' => $this->faker->boolean(),
+ 'due_date' => $due_date,
+ 'status' => $this->faker->randomELement(OrderStatus::cases())->value,
+ 'rush' => $this->faker->boolean(10),
'new_art' => $this->faker->boolean(),
'digitizing' => $this->faker->boolean(),
'repeat' => $this->faker->boolean(),
diff --git a/database/factories/OrderProductFactory.php b/database/factories/OrderProductFactory.php
new file mode 100644
index 0000000..c395073
--- /dev/null
+++ b/database/factories/OrderProductFactory.php
@@ -0,0 +1,24 @@
+ Carbon::now(),
+ 'updated_at' => Carbon::now(),
+ 'sku' => $this->faker->randomElement([$this->faker->randomNumber(4, true), null]),
+ 'product_name' => $this->faker->randomElement(['shirts', 'hats', 'jackets', 'pants', 'tote bags', 'backpacks']),
+ 'color' => $this->faker->randomElement(['black', 'white', 'navy', 'red', 'gold', 'charcoal']),
+ ];
+ }
+}
diff --git a/database/factories/ProductServiceFactory.php b/database/factories/ProductServiceFactory.php
new file mode 100644
index 0000000..ad7917e
--- /dev/null
+++ b/database/factories/ProductServiceFactory.php
@@ -0,0 +1,27 @@
+ Carbon::now(),
+ 'updated_at' => Carbon::now(),
+ 'service_type' => $this->faker->randomElement(['embroidery', 'screen printing', 'dtg', 'vinyl']),
+ 'placement' => $this->faker->randomElement(['l/c', 'c/f', 'f/b', 'r/c']),
+ 'setup_amount' => 0,
+ 'amount' => $this->faker->randomNumber(1),
+ 'amount_price' => 0,
+ ];
+ }
+}
diff --git a/database/factories/ProductSizeFactory.php b/database/factories/ProductSizeFactory.php
new file mode 100644
index 0000000..621b3b3
--- /dev/null
+++ b/database/factories/ProductSizeFactory.php
@@ -0,0 +1,23 @@
+ Carbon::now(),
+ 'updated_at' => Carbon::now(),
+ 'size' => $this->faker->randomElement(['xs', 's', 'm', 'l', 'xl', '2xl', '3xl']),
+ 'amount' => $this->faker->randomNumber(2, false),
+ ];
+ }
+}
diff --git a/database/factories/ServiceFileFactory.php b/database/factories/ServiceFileFactory.php
new file mode 100644
index 0000000..8e464ff
--- /dev/null
+++ b/database/factories/ServiceFileFactory.php
@@ -0,0 +1,25 @@
+ Carbon::now(),
+ 'updated_at' => Carbon::now(),
+ 'code' => $this->faker->randomElement(['A', 'B']) . $this->faker->randomNumber(4, true),
+ 'name' => $this->faker->word(),
+ 'width' => round($this->faker->randomFloat(2, 0, 10), 1),
+ 'height' => round($this->faker->randomFloat(2, 0, 10), 1),
+ 'unit' => 'inch',
+ ];
+ }
+}
diff --git a/database/migrations/2024_09_09_194631_create_orders_table.php b/database/migrations/2024_09_09_194631_create_orders_table.php
index c36c202..402d283 100644
--- a/database/migrations/2024_09_09_194631_create_orders_table.php
+++ b/database/migrations/2024_09_09_194631_create_orders_table.php
@@ -11,20 +11,21 @@ public function up(): void
{
Schema::create('orders', function (Blueprint $table) {
$table->id();
- $table->foreignId('customer_id');
- $table->string('internal_po');
+ $table->foreignId('customer_id')->constrained();
+ $table->foreignId('contact_id')->nullable()->constrained();
+ $table->string('internal_po')->nullable();
$table->string('customer_po');
- $table->enum('order_type', OrderType::cases());
+ $table->string('order_type');
$table->date('order_date');
$table->date('due_date');
- $table->enum('status', OrderStatus::cases());
+ $table->string('status');
$table->boolean('rush')->default(0);
$table->boolean('new_art')->default(0);
$table->boolean('digitizing')->default(0);
$table->boolean('repeat')->default(0);
$table->boolean('purchased_garments')->default(0);
$table->boolean('customer_supplied_file')->default(0);
- $table->longText('notes');
+ $table->longText('notes')->nullable();
$table->softDeletes();
$table->timestamps();
});
diff --git a/database/migrations/2024_09_10_224439_create_order_products_table.php b/database/migrations/2024_09_10_224439_create_order_products_table.php
new file mode 100644
index 0000000..8edaf9a
--- /dev/null
+++ b/database/migrations/2024_09_10_224439_create_order_products_table.php
@@ -0,0 +1,25 @@
+id();
+ $table->foreignId('order_id')->constrained();
+ $table->string('sku')->nullable();
+ $table->string('product_name');
+ $table->string('color')->nullable();
+ $table->softDeletes();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('order_products');
+ }
+};
diff --git a/database/migrations/2024_09_10_224947_create_product_services_table.php b/database/migrations/2024_09_10_224947_create_product_services_table.php
new file mode 100644
index 0000000..a9d44d6
--- /dev/null
+++ b/database/migrations/2024_09_10_224947_create_product_services_table.php
@@ -0,0 +1,27 @@
+id();
+ $table->foreignId('order_product_id');
+ $table->string('service_type');
+ $table->string('placement');
+ $table->string('setup_amount');
+ $table->string('amount')->nullable();
+ $table->string('amount_price')->nullable();
+ $table->softDeletes();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('product_services');
+ }
+};
diff --git a/database/migrations/2024_09_10_225029_create_service_files_table.php b/database/migrations/2024_09_10_225029_create_service_files_table.php
new file mode 100644
index 0000000..eca58f6
--- /dev/null
+++ b/database/migrations/2024_09_10_225029_create_service_files_table.php
@@ -0,0 +1,27 @@
+id();
+ $table->foreignId('product_service_id')->constrained();
+ $table->string('code');
+ $table->string('name');
+ $table->decimal('width');
+ $table->decimal('height');
+ $table->string('unit');
+ $table->softDeletes();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('service_files');
+ }
+};
diff --git a/database/migrations/2024_09_10_230904_create_product_sizes_table.php b/database/migrations/2024_09_10_230904_create_product_sizes_table.php
new file mode 100644
index 0000000..00e3e99
--- /dev/null
+++ b/database/migrations/2024_09_10_230904_create_product_sizes_table.php
@@ -0,0 +1,24 @@
+id();
+ $table->foreignId('order_product_id');
+ $table->string('size');
+ $table->string('amount');
+ $table->softDeletes();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('product_sizes');
+ }
+};
diff --git a/database/seeders/CustomerSeeder.php b/database/seeders/CustomerSeeder.php
new file mode 100644
index 0000000..4e80500
--- /dev/null
+++ b/database/seeders/CustomerSeeder.php
@@ -0,0 +1,93 @@
+has(Contact::factory(5))
+ ->has(PackingSlip::factory(30))
+ ->has(ShippingEntry::factory(2))
+ ->has(Order::factory(5)
+ ->has(OrderProduct::factory(2)
+ ->has(ProductSize::factory(3))
+ ->has(ProductService::factory(3)
+ ->has(ServiceFile::factory(1)))))
+ ->create();
+
+ Customer::factory([
+ 'company_name' => 'Genumark',
+ 'internal_name' => 'genumark',
+ 'shipping_address' => '',
+ 'billing_address' => '',
+ ])
+ ->has(Contact::factory([
+ 'first_name' => 'Tammy',
+ 'last_name' => 'Bookbinder',
+ 'email' => 'tbookbinder@genumark.com',
+ 'phone' => '+1 778 229 5668'
+ ]))
+ ->has(Contact::factory([
+ 'first_name' => 'Kathlyn',
+ 'last_name' => 'Wood',
+ 'email' => 'kwood@genumark.com',
+ 'phone' => '+1 604 294 2376',
+ 'notes' => 'Always CC, unless SOF order'
+ ]))
+ ->has(Contact::factory([
+ 'first_name' => 'Jane',
+ 'last_name' => 'Wellman',
+ 'email' => 'jwellman@genumark.com',
+ 'phone' => '+1 604 742 5584',
+ 'notes' => 'Deals with SOF orders'
+ ]))
+ ->has(Contact::factory([
+ 'first_name' => 'Trisha',
+ 'last_name' => 'Miller',
+ 'email' => 'tmiller@genumark.com',
+ 'phone' => '+1 604 802 8486'
+ ]))
+ ->has(Contact::factory([
+ 'first_name' => 'Brenda',
+ 'last_name' => 'Kuepfer',
+ 'email' => 'bkuepfer@genumark.com',
+ 'phone' => '+1 604 305 5002'
+ ]))
+ ->has(PackingSlip::factory(20))
+ ->has(ShippingEntry::factory([
+ 'account_title' => 'Genumark',
+ 'courier' => 'UPS CampusShip',
+ 'contact' => 'https://www.ups.com/lasso/login',
+ 'account_username' => 'GenumarkTopNotch',
+ 'account_password' => 'TopNotch@13579',
+ 'info_needed' => 'Put PO on box',
+ 'notify' => 'Various reps, CC Kathlyn Wood',
+ 'notes' => 'For Save On Foods orders, see Genumark SOF'
+ ]))
+ ->has(ShippingEntry::factory([
+ 'account_title' => 'Genumark Save-On-Foods',
+ 'courier' => 'UPS CampusShip',
+ 'contact' => 'https://www.ups.com/lasso/login',
+ 'account_username' => 'GenumarkTopNotch',
+ 'account_password' => 'TopNotch@13579',
+ 'info_needed' => 'Put PO on box',
+ 'notify' => 'Jane Wellman',
+ 'notes' => 'Don\'t CC Kathlyn for SOF orders'
+ ]))
+ ->has(Order::factory(10))
+ ->create();
+ }
+}
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index 3293b57..0fa984e 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -21,73 +21,10 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
- Customer::factory(9)
- ->has(Contact::factory(5))
- ->has(PackingSlip::factory(30))
- ->has(ShippingEntry::factory(2))
- ->create();
+ $this->call([
+ CustomerSeeder::class,
+ ]);
- Customer::factory([
- 'company_name' => 'Genumark',
- 'internal_name' => 'genumark',
- 'shipping_address' => '',
- 'billing_address' => '',
- ])
- ->has(Contact::factory([
- 'first_name' => 'Tammy',
- 'last_name' => 'Bookbinder',
- 'email' => 'tbookbinder@genumark.com',
- 'phone' => '+1 778 229 5668'
- ]))
- ->has(Contact::factory([
- 'first_name' => 'Kathlyn',
- 'last_name' => 'Wood',
- 'email' => 'kwood@genumark.com',
- 'phone' => '+1 604 294 2376',
- 'notes' => 'Always CC, unless SOF order'
- ]))
- ->has(Contact::factory([
- 'first_name' => 'Jane',
- 'last_name' => 'Wellman',
- 'email' => 'jwellman@genumark.com',
- 'phone' => '+1 604 742 5584',
- 'notes' => 'Deals with SOF orders'
- ]))
- ->has(Contact::factory([
- 'first_name' => 'Trisha',
- 'last_name' => 'Miller',
- 'email' => 'tmiller@genumark.com',
- 'phone' => '+1 604 802 8486'
- ]))
- ->has(Contact::factory([
- 'first_name' => 'Brenda',
- 'last_name' => 'Kuepfer',
- 'email' => 'bkuepfer@genumark.com',
- 'phone' => '+1 604 305 5002'
- ]))
- ->has(PackingSlip::factory(20))
- ->has(ShippingEntry::factory([
- 'account_title' => 'Genumark',
- 'courier' => 'UPS CampusShip',
- 'contact' => 'https://www.ups.com/lasso/login',
- 'account_username' => 'GenumarkTopNotch',
- 'account_password' => 'TopNotch@13579',
- 'info_needed' => 'Put PO on box',
- 'notify' => 'Various reps, CC Kathlyn Wood',
- 'notes' => 'For Save On Foods orders, see Genumark SOF'
- ]))
- ->has(ShippingEntry::factory([
- 'account_title' => 'Genumark Save-On-Foods',
- 'courier' => 'UPS CampusShip',
- 'contact' => 'https://www.ups.com/lasso/login',
- 'account_username' => 'GenumarkTopNotch',
- 'account_password' => 'TopNotch@13579',
- 'info_needed' => 'Put PO on box',
- 'notify' => 'Jane Wellman',
- 'notes' => 'Don\'t CC Kathlyn for SOF orders'
- ]))
- ->has(Order::factory(10))
- ->create();
User::factory()->create([
'name' => 'Test User',
diff --git a/resources/views/customers/index.blade.php b/resources/views/customers/index.blade.php
deleted file mode 100644
index a9f0430..0000000
--- a/resources/views/customers/index.blade.php
+++ /dev/null
@@ -1,144 +0,0 @@
-@extends('layouts.app')
-
-@section('header')
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- {{-- - --}}
- {{-- --}}
- {{--
--}}
-
-
-
-
-
-
-
-@endsection()
-
-@section('content')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- @if(sizeof($customers) !== 0)
-
-
-
- Company Name |
- Internal Name |
- Shipping Address |
- Billing Address |
- Phone |
- View |
-
-
-
-
-
- @foreach($customers as $customer)
-
- {{$customer->company_name}} |
- {{$customer->internal_name}} |
- {{$customer->shipping_address}} |
- {{$customer->billing_address}} |
- {{$customer->phone}} |
-
-
-
-
- |
-
- @endforeach
-
-
-
-
- @else()
- No customer data.
- @endif
-
-
-
-
-
- @include('partials.customers.create-modal')
-
-
- @include('partials.customers.delete-all-modal')
-
-@endsection
diff --git a/resources/views/customers/show.blade.php b/resources/views/customers/show.blade.php
index 2cc702b..ebf3657 100644
--- a/resources/views/customers/show.blade.php
+++ b/resources/views/customers/show.blade.php
@@ -65,7 +65,6 @@
@section('content')
-
diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php
new file mode 100644
index 0000000..5d2c25c
--- /dev/null
+++ b/resources/views/dashboard.blade.php
@@ -0,0 +1,131 @@
+@extends('layouts.app')
+
+@section('header')
+
+
+
+
+
+
+ {{--
Overview
--}}
+
+
+
+
+
+
+
+@endsection
+
+@section('content')
+
+
+
+
+
+
+
+
+
+
+
+ Customer |
+ Internal PO |
+ Customer PO |
+ Order Date |
+ Due Date |
+ Status |
+ Rush |
+ View |
+
+
+
+ @foreach($active_orders as $order)
+
+ {{$order->customer->company_name}} |
+ {{$order->internal_po}} |
+ {{$order->customer_po}} |
+ {{$order->order_date}} |
+ {{$order->due_date}} |
+ {{$order->status->value}} |
+
+ @if($order->rush)
+
+ @endif
+ |
+
+
+
+
+ |
+
+ @endforeach
+
+
+
+
+
+
+
+
+{{-- {{$active_orders->links()}}--}}
+
+
+
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
deleted file mode 100644
index 1f34466..0000000
--- a/resources/views/home.blade.php
+++ /dev/null
@@ -1,23 +0,0 @@
-@extends('layouts.app')
-
-@section('content')
-
-
-
-
-
-
-
- @if (session('status'))
-
- {{ session('status') }}
-
- @endif
-
- {{ __('You are logged in!') }}
-
-
-
-
-
-@endsection
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 1593400..9ef0aae 100644
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -15,65 +15,12 @@
@vite(['resources/sass/app.scss', 'resources/js/app.js'])
+
+{{-- @livewireStyles--}}
-
+ @include('layouts.nav')
@yield('header')
@@ -81,5 +28,6 @@
+{{--@livewireScripts--}}