From b19f01d7a423b24fc8b67b5110ad6bd10ac64b4d Mon Sep 17 00:00:00 2001 From: Deon George Date: Thu, 24 Jan 2019 14:40:33 +1100 Subject: [PATCH] Minor updates to order process --- app/Console/Commands/OrderReject.php | 2 +- app/Http/Controllers/AdminHomeController.php | 15 ++++- app/Http/Controllers/OrderController.php | 3 + app/Mail/OrderRequest.php | 55 +++++++++++++++++++ app/Models/Service.php | 30 +++++++++- .../2019_01_24_142111_create_jobs_table.php | 36 ++++++++++++ .../backend/adminlte/a/service.blade.php | 48 +++++++++++----- .../a/widgets/service/order/submit.blade.php | 44 +++++++++++++++ .../views/email/admin/order/reject.blade.php | 4 +- 9 files changed, 217 insertions(+), 20 deletions(-) create mode 100644 app/Mail/OrderRequest.php create mode 100644 database/migrations/2019_01_24_142111_create_jobs_table.php create mode 100644 resources/theme/backend/adminlte/a/widgets/service/order/submit.blade.php diff --git a/app/Console/Commands/OrderReject.php b/app/Console/Commands/OrderReject.php index 6744d16..60364e6 100644 --- a/app/Console/Commands/OrderReject.php +++ b/app/Console/Commands/OrderReject.php @@ -52,7 +52,7 @@ class OrderReject extends Command } $so->order_status = 'ORDER-REJECTED'; - $so->order_info = array_merge($so->order_info,['reason'=>$this->argument('reason')]); + $so->order_info = array_merge($so->order_info ? $so->order_info : [],['reason'=>$this->argument('reason')]); $so->save(); } } \ No newline at end of file diff --git a/app/Http/Controllers/AdminHomeController.php b/app/Http/Controllers/AdminHomeController.php index ad98365..5d71308 100644 --- a/app/Http/Controllers/AdminHomeController.php +++ b/app/Http/Controllers/AdminHomeController.php @@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Mail; -use App\Mail\OrderRequestApprove; +use App\Mail\{OrderRequestApprove,OrderRequestReject}; use App\Models\{Service,SiteDetails}; class AdminHomeController extends Controller @@ -34,6 +34,19 @@ class AdminHomeController extends Controller $o->nextStatus(); break; + case 'reject': + if (! $x=$o->validStatus(strtolower($request->input('action')))) + return $this->service($o); + + $o->order_info = array_merge($o->order_info ? $o->order_info : [],['reason'=>$request->input('notes')]); + $o->order_status = $x; + $o->save(); + + // Send mail to user + Mail::to($o->orderby->email)->queue((new OrderRequestReject($o,$request->input('notes')))->onQueue('email')); + + break; + // No action specified. default: return $this->service($o); diff --git a/app/Http/Controllers/OrderController.php b/app/Http/Controllers/OrderController.php index fb80a23..ffec4c0 100644 --- a/app/Http/Controllers/OrderController.php +++ b/app/Http/Controllers/OrderController.php @@ -5,9 +5,11 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Igaster\LaravelTheme\Facades\Theme; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Validator; use Illuminate\Database\Eloquent\Model; +use App\Mail\OrderRequest; use App\Models\{Account,Product,Service}; use App\User; @@ -115,6 +117,7 @@ class OrderController extends Controller $options->save(); } + Mail::to('deon@graytech.net.au')->queue((new OrderRequest($so))->onQueue('email')); //@todo Get email from DB. return view('order_received',['o'=>$so]); } } \ No newline at end of file diff --git a/app/Mail/OrderRequest.php b/app/Mail/OrderRequest.php new file mode 100644 index 0000000..737cd05 --- /dev/null +++ b/app/Mail/OrderRequest.php @@ -0,0 +1,55 @@ +service = $o; + $this->notes = $notes; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + switch ($this->service->category) + { + case 'ADSL': $subject = sprintf('%s: %s',$this->service->category,$this->service->service_adsl->service_address); + break; + + case 'VOIP': $subject = sprintf('%s: %s',$this->service->category,$this->service->service_voip->service_number); + break; + + default: + $subject = 'New Order Request'; + } + + return $this + ->markdown('email.admin.order.approve') + ->subject($subject) + ->with(['site'=>$this->service->site]); + } +} \ No newline at end of file diff --git a/app/Models/Service.php b/app/Models/Service.php index cc84b51..1ccaf7a 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -50,8 +50,13 @@ class Service extends Model ]; private $inactive_status = [ - 'CANCELLED', + 'CANCELLED', // @todo Check if these should be changed to ORDER-CANCELLED 'ORDER-REJECTED', + 'ORDER-CANCELLED', + ]; + + private $valid_status = [ + 'ORDER-SUBMIT' => ['accept'=>'ORDER-SENT','reject'=>'ORDER-REJECTED'], ]; public function account() @@ -159,6 +164,18 @@ class Service extends Model return $this->date_next_invoice ? $this->date_next_invoice->format('Y-m-d') : NULL; } + /** + * This function will present the Order Info Details + */ + public function getOrderInfoDetailsAttribute() + { + $result = ''; + foreach ($this->order_info as $k=>$v) + $result .= sprintf('%s: %s
',ucfirst($k),$v); + + return $result; + } + public function getProductNameAttribute() { // @todo: All services should be linked to a product. This might require data cleaning for old services not linked to a product. @@ -238,4 +255,15 @@ class Service extends Model default: return NULL; } } + + /** + * Return if the proposed status is valid. + * + * @param string $status + * @return string | NULL + */ + public function validStatus(string $status) + { + return array_get(array_get($this->valid_status,$this->order_status,[]),$status,NULL); + } } \ No newline at end of file diff --git a/database/migrations/2019_01_24_142111_create_jobs_table.php b/database/migrations/2019_01_24_142111_create_jobs_table.php new file mode 100644 index 0000000..58d7715 --- /dev/null +++ b/database/migrations/2019_01_24_142111_create_jobs_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +} diff --git a/resources/theme/backend/adminlte/a/service.blade.php b/resources/theme/backend/adminlte/a/service.blade.php index b8fe3c6..cca84c0 100644 --- a/resources/theme/backend/adminlte/a/service.blade.php +++ b/resources/theme/backend/adminlte/a/service.blade.php @@ -14,25 +14,43 @@ @section('main-content')
-
-

Service Information

-
+
+ {{ csrf_field() }} -
-
- @include('u.widgets.service_info') +
+

Service Information

- @if($o->order_status == 'ORDER-REQUEST') -
- @include('a.widgets.service_order-request') -
- @endif -
+
- +
+ @switch($o->order_status) + @case('ORDER-SUBMIT') + @include('a.widgets.service.order.submit') + @break + + @default + @include('u.widgets.service_info') + @endswitch +
+ + @if($o->order_status == 'ORDER-REQUEST') +
+ @include('a.widgets.service_order-request') +
+ @endif +
+ + +
@endsection \ No newline at end of file diff --git a/resources/theme/backend/adminlte/a/widgets/service/order/submit.blade.php b/resources/theme/backend/adminlte/a/widgets/service/order/submit.blade.php new file mode 100644 index 0000000..8284468 --- /dev/null +++ b/resources/theme/backend/adminlte/a/widgets/service/order/submit.blade.php @@ -0,0 +1,44 @@ +
+
+

New Order

+
+ + +
+
+ +
+ + + + + + + + @if($o->date_last_invoice) + + + + + + + + + + @endif + + + + + + +
Account{{ $o->account->company }}
Product{{ $o->product->name }}
Last Invoice{{ $o->date_last_invoice }}
Paid Until{{ 'TBA' }}
Next Invoice{{ $o->date_next_invoice }}
Order Details{!! $o->order_info_details !!}
Save/Reject Note:
+
+ + {{-- + + --}} +
\ No newline at end of file diff --git a/resources/views/email/admin/order/reject.blade.php b/resources/views/email/admin/order/reject.blade.php index 2a5dd97..02c3da4 100644 --- a/resources/views/email/admin/order/reject.blade.php +++ b/resources/views/email/admin/order/reject.blade.php @@ -11,10 +11,10 @@ | Product | {{ $service->product_name }} | @switch($service->category) @case('ADSL') - | Address | {{ $service->service_adsl->service_address }} | + | Address | {{ is_object($service->service_voip) ? $service->service_voip->service_address : 'Not Supplied' }} | @break; @case('VOIP') - | Address | {{ $service->service_voip->service_address }} | + | Address | {{ is_object($service->service_voip) ? $service->service_voip->service_address : 'Not Supplied' }} | | Supplier Details | {{ join(':',$service->order_info) }} | @break; @endswitch