From 32465e21705e1e5d41c5161aba0a636b08928856 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 21:03:04 +0800 Subject: [PATCH] add contact and remark to address --- .../ControllersLogic/CreateAddressLogic.php | 31 +++++++++++- .../ControllersLogic/UpdateAddressLogic.php | 33 ++++++++++++- app/Http/Resources/AddressResource.php | 2 + app/Models/Address.php | 21 +++++++- .../addresses/forms/AddressFormComponent.vue | 49 ++++++++++++++++--- .../validation/addressFormValidation.js | 5 +- 6 files changed, 130 insertions(+), 11 deletions(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index f0240e5c..855d552b 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -4,12 +4,18 @@ namespace App\Classes\Modules\Addresses\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\General\Interfaces\Contactable; use App\Classes\Modules\Addresses\Services\CreatesAddress; use App\Classes\Modules\Addresses\Services\FetchesDistrict; use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; use App\Classes\Modules\Companies\Services\FetchesCompanyModule; +use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; +use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; +use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Http\Resources\AddressResource; +use App\Models\Address; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -39,19 +45,29 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var CreatesAddress */ private $createsAddress; + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + /** * CreateAddressLogic constructor. * @param CanCreateAddress $canCreateAddress * @param FetchesDistrict $fetchesDistrict * @param FetchesCompanyModule $fetchesCompanyModule * @param CreatesAddress $createsAddress + * @param CreateContactProcessor $createContactProcessor + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress) + public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor) { $this->canCreateAddress = $canCreateAddress; $this->fetchesDistrict = $fetchesDistrict; $this->fetchesCompanyModule = $fetchesCompanyModule; $this->createsAddress = $createsAddress; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; } /** @@ -70,8 +86,21 @@ class CreateAddressLogic extends AbstractControllerLogic $this->canCreateAddress->passes($object); + /** @var Address $address */ $address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); + $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + + if($contactObject->getPhone()){ + $this->createContactProcessor->execute($contactObject, $address); + } + + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($address, $remarkObject); + } + return $this->resourceResponse(new AddressResource($address)); } diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 9d8f0600..345dd777 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -9,7 +9,12 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Addresses\Services\FetchesDistrict; use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; +use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; +use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; +use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Http\Resources\AddressResource; +use App\Models\Address; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -38,22 +43,31 @@ class UpdateAddressLogic extends AbstractControllerLogic /** @var FetchesDistrict */ private $fetchesDistrict; + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + /** * UpdateAddressLogic constructor. * @param CanUpdateAddress $canUpdateAddress * @param UpdatesAddress $updatesAddress * @param FetchesAddress $fetchesAddress * @param FetchesDistrict $fetchesDistrict + * @param CreateContactProcessor $createContactProcessor + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict) + public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor) { $this->canUpdateAddress = $canUpdateAddress; $this->updatesAddress = $updatesAddress; $this->fetchesAddress = $fetchesAddress; $this->fetchesDistrict = $fetchesDistrict; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; } - /** * @param Request $request * @return JsonResponse @@ -71,8 +85,23 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->fetchesAddress->execute(['id' => $request->route('id')]); + /** @var Address $address */ $address = $this->updatesAddress->execute($address, $object); + $address->contacts()->delete(); $address->remarks()->delete(); + + $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + + if($contactObject->getPhone()){ + $this->createContactProcessor->execute($contactObject, $address); + } + + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($address, $remarkObject); + } + return $this->resourceResponse(new AddressResource($address)); } diff --git a/app/Http/Resources/AddressResource.php b/app/Http/Resources/AddressResource.php index 6f6a6237..95a60b9f 100644 --- a/app/Http/Resources/AddressResource.php +++ b/app/Http/Resources/AddressResource.php @@ -28,6 +28,8 @@ class AddressResource extends JsonResource 'country' => $this->country, 'default' => (int) $this->default, 'status' => (int) $this->status, + 'contact' => new ContactResource($this->contacts->first()), + 'remark' => new RemarkResource($this->remarks->first()), $this->mergeWhen($this->relationLoaded('owner'), [ 'owner' => $this->when($this->owner instanceof Order, [ 'reference' => $this->owner->reference, diff --git a/app/Models/Address.php b/app/Models/Address.php index bbd60d70..8357940f 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -2,9 +2,12 @@ namespace App\Models; +use App\Classes\General\Interfaces\Contactable; +use App\Classes\General\Interfaces\Remarkable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\MorphTo; /** @@ -20,7 +23,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo; * @property string street_two * @property integer billing_type */ -class Address extends AbstractModel +class Address extends AbstractModel implements Contactable, Remarkable { use SoftDeletes; @@ -70,4 +73,20 @@ class Address extends AbstractModel { return $query->where('default', true); } + + /** + * @return MorphMany + */ + public function contacts(): morphMany + { + return $this->morphMany(Contact::class, 'owner'); + } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 3a0b4ac8..98d405e9 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -3,6 +3,14 @@
+
+
+ + + + +
+
@@ -33,12 +41,34 @@
-
+
- - - - +
+
+
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + +
+
+
+
@@ -46,7 +76,8 @@
-
+
+
@@ -73,6 +104,9 @@ street_two: '', district_id: '', post_code: '', + remark: '', + phone: '', + pic: '', } } @@ -84,6 +118,9 @@ this.parameters.street_two = this.data.street_two; this.parameters.district_id = this.data.district.id; this.parameters.post_code = this.data.post_code; + this.parameters.phone = this.data.contact.phone; + this.parameters.pic = this.data.contact.reference; + this.parameters.remark = this.data.remark.content; } }, watch: { diff --git a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js index 4180331f..6a59841c 100644 --- a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js +++ b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js @@ -1,4 +1,4 @@ -import { required } from "vuelidate/lib/validators"; +import { required, numeric } from "vuelidate/lib/validators"; import addressFormHandler from '../addressFormHandler' export default { validations: { @@ -8,6 +8,9 @@ export default { street_two: {}, district_id: { required }, post_code: { required }, + remark: {}, + phone: {numeric}, + pic: {}, } }, mixins: [addressFormHandler]