diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index df552b6a..6b964475 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -18,6 +18,7 @@ use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\RemarkTypes; use App\Http\Resources\AddressResource; use App\Models\Address; use App\Transformers\AddressTransformer; @@ -110,6 +111,15 @@ class CreateAddressLogic extends AbstractControllerLogic ->parseIncludes('remark') ->respond(200, [], JSON_PRETTY_PRINT);*/ + $addressExtraFields = [ + 'property_type' => $request->input('property_type'), + 'tools_required_unload' => $request->input('tools_required_unload'), + 'pickup_time_from' => $request->input('pickup_time_from'), + 'pickup_time_to' => $request->input('pickup_time_to'), + ]; + + $addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS); + $this->createRemarkProcessor->execute($address, $addressExtraFieldsObject); 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 4216a0e8..46eae08d 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -15,6 +15,7 @@ use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Classes\ValueObjects\Constants\AddressType; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\RemarkTypes; use App\Http\Resources\AddressResource; use App\Models\Address; use App\Transformers\AddressTransformer; @@ -110,6 +111,15 @@ class UpdateAddressLogic extends AbstractControllerLogic ->item($address, new AddressTransformer()) ->parseIncludes('remark') ->respond(200, [], JSON_PRETTY_PRINT);*/ + $addressExtraFields = [ + 'property_type' => $request->input('property_type'), + 'tools_required_unload' => $request->input('tools_required_unload'), + 'pickup_time_from' => $request->input('pickup_time_from'), + 'pickup_time_to' => $request->input('pickup_time_to'), + ]; + + $addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS); + $this->createRemarkProcessor->execute($address, $addressExtraFieldsObject); return $this->resourceResponse(new AddressResource($address)); diff --git a/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php b/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php index 44a9507f..5a07c508 100644 --- a/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php +++ b/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php @@ -13,10 +13,14 @@ class RemarkObject implements DataTransferObject /** @var string*/ private $content; - public function __construct(string $content, int $commenterID) + /** @var int|null */ + private $type; + + public function __construct(string $content, int $commenterID, int $type = null) { $this->commenterID = $commenterID; $this->content = $content; + $this->type = $type; } /** @@ -35,4 +39,12 @@ class RemarkObject implements DataTransferObject return $this->content; } + /** + * @return int|null + */ + public function getType(): ?int + { + return $this->type; + } + } diff --git a/app/Classes/Modules/Remarks/Services/CreatesRemark.php b/app/Classes/Modules/Remarks/Services/CreatesRemark.php index ac0d57a3..b7bcf388 100644 --- a/app/Classes/Modules/Remarks/Services/CreatesRemark.php +++ b/app/Classes/Modules/Remarks/Services/CreatesRemark.php @@ -24,6 +24,7 @@ class CreatesRemark extends AbstractUpdateRelationshipRecord $model->commenter_id = $object->getCommenterId(); $model->content = $object->getContent(); + $model->type = $object->getType(); return $this->handler($remarkable->remarks(), $model); diff --git a/app/Classes/ValueObjects/Constants/RemarkTypes.php b/app/Classes/ValueObjects/Constants/RemarkTypes.php index 9629e89a..7c233594 100644 --- a/app/Classes/ValueObjects/Constants/RemarkTypes.php +++ b/app/Classes/ValueObjects/Constants/RemarkTypes.php @@ -10,4 +10,6 @@ final class RemarkTypes public const EXTERNAL = 1; -} \ No newline at end of file + public const ADDRESS_EXTRA_COLUMNS = 2; + +} diff --git a/app/Http/Resources/AddressResource.php b/app/Http/Resources/AddressResource.php index 70461cd6..5d2d8b5b 100644 --- a/app/Http/Resources/AddressResource.php +++ b/app/Http/Resources/AddressResource.php @@ -27,6 +27,9 @@ class AddressResource extends JsonResource $outstationPostcodeConstant = $outstationPostcodeConstantObject->isEmpty() ? [] : (array)$outstationPostcodeConstantObject->first()->value; in_array((String)$this->postcode, $outstationPostcodeConstant) ? $postcodeArea = 'OUTSTATION_POSTCODE' : null; + $extrafields = json_decode($this->addressExtraFields->first()); + $extrafields = $extrafields ? (isset($extrafields->content) ? json_decode($extrafields->content) : null) : null; + return [ 'id' => $this->id, 'reference' => $this->reference, @@ -43,6 +46,11 @@ class AddressResource extends JsonResource 'contact' => new ContactResource($this->contacts->first()), 'remark' => new RemarkResource($this->remarks->first()), 'type' => $this->type, + 'extrafields' => $extrafields, + 'property_type' => $extrafields ? $extrafields->property_type : null, + 'tools_required_unload' => $extrafields ? $extrafields->tools_required_unload : null, + 'pickup_time_from' => $extrafields ? $extrafields->pickup_time_from : null, + 'pickup_time_to' => $extrafields ? $extrafields->pickup_time_to : null, $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 32ac4841..ca41c484 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Remarkable; use Barryvdh\LaravelIdeHelper\Eloquent; +use App\Classes\ValueObjects\Constants\RemarkTypes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -142,4 +143,12 @@ class Address extends AbstractModel implements Contactable, Remarkable { return $this->morphMany(Remark::class, 'owner'); } + + /** + * @return MorphMany + */ + public function addressExtraFields(): MorphMany + { + return $this->morphMany(Remark::class, 'owner')->where('type', RemarkTypes::ADDRESS_EXTRA_COLUMNS); + } } diff --git a/database/migrations/2024_06_12_110706_add_type_to_remarks_table.php b/database/migrations/2024_06_12_110706_add_type_to_remarks_table.php new file mode 100644 index 00000000..76ed8bac --- /dev/null +++ b/database/migrations/2024_06_12_110706_add_type_to_remarks_table.php @@ -0,0 +1,32 @@ +string('type')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('remarks', function (Blueprint $table) { + $table->dropColumn('type'); + }); + } +} diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 11fe9c7a..ca7748b0 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -3,14 +3,6 @@