diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php new file mode 100644 index 00000000..e134bcc7 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php @@ -0,0 +1,60 @@ + 'Created Order', + 'message' => 'You have successfully created a new Order' + ]; + } + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + + /** + * CreateOrderRemarkLogic constructor. + * @param FetchesOrder $fetchesOrder + * @param CreateRemarkProcessor $createRemarkProcessor + */ + public function __construct(FetchesOrder $fetchesOrder, CreateRemarkProcessor $createRemarkProcessor) + { + $this->fetchesOrder = $fetchesOrder; + $this->createRemarkProcessor = $createRemarkProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $order = $this->fetchesOrder->execute(['id' => $request->route('id')]); + + $object = new RemarkObject($request->input('content'), auth()->user()->id); + + $this->createRemarkProcessor->execute($order, $object); + + return $this->resourceResponse(new OrderResource($order)); + + } +} diff --git a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php index ffd7a701..f120efab 100644 --- a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php +++ b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php @@ -57,7 +57,7 @@ class UpdateRemarkLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - $object = new RemarkObject($request->input('content'), $request->input('commenter_id')); + $object = new RemarkObject($request->input('content'), auth()->user()->id); $this->canUpdateRemark->passes($object); diff --git a/app/Http/Controllers/Orders/CreateOrderRemarkController.php b/app/Http/Controllers/Orders/CreateOrderRemarkController.php new file mode 100644 index 00000000..3464566a --- /dev/null +++ b/app/Http/Controllers/Orders/CreateOrderRemarkController.php @@ -0,0 +1,14 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 06e31b6f..0c30bb62 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -46,6 +46,7 @@ class OrderResource extends JsonResource 'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()), ]; }), + 'remarks' => RemarkResource::collection($this->remarks), 'created_at' => $this->created_at->format('d-m-Y') ]; diff --git a/app/Models/Order.php b/app/Models/Order.php index 401da1db..3923d913 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Addressable; use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Packable; +use App\Classes\General\Interfaces\Remarkable; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Scopes\CustomerOrdersScope; @@ -14,7 +15,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; -class Order extends AbstractModel implements Addressable, Packable +class Order extends AbstractModel implements Addressable, Packable, Remarkable { use SoftDeletes; @@ -147,4 +148,12 @@ class Order extends AbstractModel implements Addressable, Packable { return $this->morphMany(Transaction::class, 'owner'); } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index f4e8462d..597fa352 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -16,8 +16,19 @@
- Order No. -
{{item.reference}}
+
+
+ Order No +
+
+
+
+
{{item.reference}}
+
+
+ +
+
diff --git a/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue new file mode 100644 index 00000000..a23d077f --- /dev/null +++ b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue @@ -0,0 +1,32 @@ + + diff --git a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue new file mode 100644 index 00000000..79273650 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue @@ -0,0 +1,49 @@ + + diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 3b663e3e..1e4ce119 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -21,6 +21,47 @@

Order No. {{order.reference}}

+
+
+
+
+
Remark:
+
+
+
Add a Remark
+
+
+
{{order.remarks[0].content}}
+ + + + + + + + + +
+
+
+
+ +
+
+
+
+ Cancel +
+
+
+
+
+
+ +
+
+
+
Order Date: {{order.created_at}}
@@ -412,7 +453,9 @@ return { section: 'orderProfileSection', isLoading: true, - order: null + order: null, + isEditRemark: false, + addComment: false, } }, computed: { diff --git a/routes/order.php b/routes/order.php index 2da8880f..ea7bc389 100644 --- a/routes/order.php +++ b/routes/order.php @@ -17,4 +17,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f // Route::post('/create', 'CreateOrderController@create')->name('create'); Route::get('/{id}/shipping-cost', 'ShippingCostController@calculate')->name('shipping.cost'); + + Route::post('/{id}/remark/create', 'CreateOrderRemarkController@create')->name('remark.create'); });