add contact and remark to address

This commit is contained in:
omair saleh
2021-11-28 21:03:04 +08:00
parent 5d9782d1c9
commit 32465e2170
6 changed files with 130 additions and 11 deletions
@@ -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));
}
@@ -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));
}
+2
View File
@@ -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,
+20 -1
View File
@@ -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');
}
}
@@ -3,6 +3,14 @@
<div class="col">
<div class="row">
<div class="col">
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Address Reference/Label</label>
<input class="form-control" name="reference" v-model="parameters.reference">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.street_one">
@@ -33,12 +41,34 @@
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="row">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Address Reference/Label</label>
<input class="form-control" name="reference" v-model="parameters.reference">
</validation-wrapper-component>
<div class="row">
<div class="col">
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.pic">
<label>Person In Charge</label>
<input class="form-control" name="pic" v-model="parameters.pic">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.phone">
<label>Phone</label>
<input class="form-control" name="phone" v-model="parameters.phone">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.remark">
<label>Delivery Remark</label>
<input class="form-control" name="remark" v-model="parameters.remark">
</validation-wrapper-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -46,7 +76,8 @@
<div class="row">
<div class="col">
<div class="row">
<div class="col text-right">
<div class="col"></div>
<div class="col-auto">
<button type="button" class="btn btn-sm btn-complete b-rad-none" @click="submitForm()">{{ this.data ? "Update" : "Save" }} Address</button>
</div>
</div>
@@ -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: {
@@ -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]