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 @@