Merge branch 'Contact-Cleanup' into 'master'

Contact cleanup

See merge request CIEFWorldwideSdnBhd/izyim!2
This commit is contained in:
omair saleh
2019-03-11 10:37:35 +00:00
21 changed files with 678 additions and 6 deletions
@@ -8,9 +8,23 @@ use Illuminate\Http\Request;
class UpdateContact
{
/** @var Contact */
private $repository;
/**
* UpdateContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
public function execute(Request $request, int $type, string $reference) {
$contact = $request->method() === 'PUT' ? Contact::findOrFail($request->input('id')) : new Contact;
$contact = $this->repository->findOrFail($id);
$contact->type = $type;
$contact->reference_id = $reference;
@@ -19,6 +33,11 @@ class UpdateContact
$contact->contact = $request->input('contact');
$contact->email = $request->input('email');
$contact = $request->method() === 'PUT' ? Contact::findOrFail($request->input('id')) : new Contact;
if($contact->save()){
return new ContactResource($contact);
}
@@ -0,0 +1,37 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 08/03/2019
* Time: 4:35 PM
*/
namespace App\Classes\Modules\Accounts\Services;
use App\Models\User;
use App\Http\Resources\User as UserResource;
class ListUserAccount
{
/** @var User */
private $repository;
/**
* ListUserAccount constructor.
* @param User $repository
*/
public function __construct(User $repository)
{
$this->repository = $repository;
}
public function execute()
{
$user = $this->repository->get();
return UserResource::collection($user);
}
}
@@ -0,0 +1,98 @@
<?php
namespace App\Modules\Contacts\DataTransferObjects;
class ContactObject
{
/** @var int */
private $type;
/** @var int */
private $referenceId;
/** @var string */
private $name;
/** @var string */
private $designation;
/** @var string */
private $contact;
/** @var string */
private $email;
/**
* ContactObject constructor.
* @param int $type
* @param int $referenceId
* @param string $name
* @param string $designation
* @param string $contact
* @param string $email
*/
public function __construct(int $type, int $referenceId, string $name, string $designation, string $contact, string $email)
{
$this->type = $type;
$this->referenceId = $referenceId;
$this->name = $name;
$this->designation = $designation;
$this->contact = $contact;
$this->email = $email;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return int
*/
public function getReferenceId(): int
{
return $this->referenceId;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string
*/
public function getDesignation(): string
{
return $this->designation;
}
/**
* @return string
*/
public function getContact(): string
{
return $this->contact;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Contacts\Exceptions;
use App\Classes\Exceptions\Common\ErrorException;
use App\Classes\ValueObjects\Constants\HttpStatus;
/**
* Created by PhpStorm.
* User: user
* Date: 07/03/2019
* Time: 3:25 PM
*/
final class CannotCreateContactException extends ErrorException
{
/** @param string $message */
/**
* CannotCreateContactException constructor.
*/
public function __construct(string $message)
{
parent::_construct($message, HttpStatus::BAD_REQUEST);
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Classes\Modules\Contacts\Services;
use App\Classes\Modules\Contacts\Exceptions\CannotCreateContactException;
use App\Models\Contact;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
class CreatesContact
{
/** @var Contact */
private $repository;
/**
* CreatesContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
/**
* @param ContactObject $contact
* @param int $type
* @param int $referenceId
* @return Contact
*/
public function execute(ContactObject $contact, int $type, int $referenceId)
{
try{
$this->repository->type = $type;
$this->repository->reference_id = $referenceId;
$this->repository->name = $contact->getName();
$this->repository->designation = $contact->getDesignation();
$this->repository->email = $contact->getEmail();
$this->repository->contact = $contact->getContact();
$this->repository->save();
return $this->repository;
}
catch (\Exception $exception)
{
throw new CannotCreateContactException($exception->getMessage());
}
}
}
@@ -0,0 +1,40 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 4:57 PM
*/
namespace App\Classes\Modules\Contacts\Services;
use App\Models\Contact;
use App\Http\Resources\Contact as ContactResource;
class ListsContact
{
/** @var Contact */
private $repository;
/**
* ListsContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
public function execute(int $type, int $referenceId){
$contacts = $this->repository->where('type', $type)
->where('reference_id', $referenceId)->get();
// Return collection of contacts as a resource
return ContactResource::collection($contacts);
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Contacts\Services;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Models\Contact;
class UpdateContact
{
/** @var Contact */
private $repository;
/**
* UpdateContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
/**
* @param int $id
* @param ContactObject $object
* @return Contact
*/
public function execute(int $id, ContactObject $object)
{
/** @var Contact $contact */
$contact = $this->repository->findOrFail($id);
$contact ->name = $object->getName();
$contact ->designation = $object->getDesignation();
$contact ->contact = $object->getContact();
$contact ->email = $object->getEmail();
$contact->save();
return $contact;
}
}
@@ -0,0 +1,33 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 08/03/2019
* Time: 4:05 PM
*/
namespace App\Classes\Modules\ControllersLogic\Accounts;
use App\Classes\Modules\Accounts\Services\ListUserAccount;
class ListUserAccountLogic
{
/** @var ListUserAccount */
private $listUserAccount;
/**
* ListUserAccountLogic constructor.
* @param ListUserAccount $listUserAccount
*/
public function __construct(ListUserAccount $listUserAccount)
{
$this->listUserAccount = $listUserAccount;
}
public function execute()
{
return $this->listUserAccount->execute();
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\ControllerLogic\Contacts;
use App\Classes\Constants;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Exceptions\CannotCreateContactException;
use App\Classes\Modules\Contacts\Services\CreatesContact;
use Illuminate\Http\Request;
class CreateContactLogic
{
/** @var CreatesContact */
private $createContact;
/**
* CreateContactLogic constructor.
* @param CreatesContact $createContact
*/
public function __construct(CreatesContact $createContact)
{
$this->createContact = $createContact;
}
public function execute(string $type, int $referenceId, Request $request)
{
try{
$object = new ContactObject($request->input('name'), $request->input('designation'), $request->input('contact'), $request->input('email'));
return $this->createContact->execute($object, $type, $referenceId);
}
catch (CannotCreateContactException $exception){
throw new InternalServerErrorException("Failed to create contact because {$exception->getMessage()}");
}
}
}
@@ -0,0 +1,42 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 4:56 PM
*/
namespace App\Modules\ControllerLogic\Contacts;
use App\Classes\Constants;
use App\Classes\Modules\Contacts\Services\ListsContact;
class ListContactLogic
{
/** @var ListsContact */
private $listsContacts;
/**
* ListContactLogic constructor.
* @param ListsContact $listsContacts
*/
public function __construct(ListsContact $listsContacts)
{
$this->listsContacts = $listsContacts;
}
/**
* @param $type
* @param $referenceId
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function execute($type, $referenceId){
return $this->listsContacts->execute(Constants::MODULE_TYPES[$type], $referenceId);
}
}
@@ -0,0 +1,37 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 05/03/2019
* Time: 2:35 PM
*/
namespace App\Modules\ControllerLogic\Contacts;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\UpdateContact;
use Illuminate\Http\Request;
class UpdateContactLogic
{
/** @var UpdateContact */
private $updateContact;
/**
* UpdateContactLogic constructor.
* @param UpdateContact $updateContact
*/
public function __construct(UpdateContact $updateContact)
{
$this->updateContact = $updateContact;
}
public function execute(int $id, Request $request)
{
$object = new ContactObject($request->input('name'), $request->input('designation'), $request->input('contact'), $request->input('email'));
return $this->updateContact->execute($id, $object);
}
}
@@ -15,6 +15,14 @@ final class UserRoles {
public const SUPPLIER = 4;
public const ROLES_ID = [
0 => 'Administrator',
1 => 'Administrator',
2 => 'Importer',
3 => 'Warehouse',
4 => 'Supplier',
];
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 08/03/2019
* Time: 4:07 PM
*/
namespace App\Http\Controllers\Account;
use App\Classes\Modules\ControllersLogic\Accounts\ListUserAccountLogic;
class ListUserController
{
public function list(ListUserAccountLogic $logic)
{
return $logic->execute();
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Http\Controllers\Contacts;
use App\Classes\Constants;
use Illuminate\Http\Request;
use App\Classes\Modules\ControllerLogic\Contacts\CreateContactLogic;
class CreateContactController
{
public function create(string $type, int $referencesId, Request $request, CreateContactLogic $logic){
return $logic->execute(Constants::MODULE_TYPES[$type], $referencesId, $request);
}
}
@@ -0,0 +1,22 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 5:11 PM
*/
namespace App\Http\Controllers\Contacts;
use App\Modules\ControllerLogic\Contacts\ListContactLogic;
class ListContactController
{
public function list(string $type, int $referenceId,ListContactLogic $logic)
{
return $logic->execute($type,$referenceId);
}
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 05/03/2019
* Time: 2:30 PM
*/
namespace App\Http\Controllers\Contacts;
use App\Modules\ControllerLogic\Contacts\UpdateContactLogic;
use Illuminate\Http\Request;
class UpdateContactController
{
public function update(int $id,Request $request, UpdateContactLogic $logic){
return $logic->execute($id, $request);
}
}
+4 -2
View File
@@ -14,14 +14,16 @@ class Contact extends JsonResource
*/
public function toArray($request)
{
$comapny = \App\Models\Company::findOrFail($this->reference_id);
return [
'id' => $this->id,
'type' => $this->type,
'reference_id' => $this->reference_id,
'name' => $this->name,
'name' => $this->first_name.' '. $this->last_name,
'designation' => $this->designation,
'contact' => $this->contact,
'email' => $this->email
'email' => $this->email,
'company' => Company::make($comapny)
];
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Resources;
use App\Classes\Constants;
use App\Classes\ValueObjects\Constants\UserRoles;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'full_name' => $this->first_name.' '.$this->last_name,
'role' => UserRoles::ROLES_ID[$this->role_id],
'created_at' => $this->created_at
];
}
}
@@ -0,0 +1,81 @@
@extends('layouts.base_portal')
@section('inner_content')
<div class="row p-t-20 p-b-20">
<div class="col">
<div class="row">
<div class="col">
<div class="row bg-white p-t-15 p-b-15 m-b-20">
<div class="col">
<div class="row m-b-5">
<div class="col bold fs-15">
Order #216718963296916
</div>
</div>
<div class="row">
<div class="col muted">
Placed on 05 Mar 2019 16:40:08
</div>
</div>
</div>
<div class="col-auto text-right">
<div class="row">
<div class="col">
<span class="muted">Status: </span>
<span class="text-success">Complete</span>
</div>
</div>
<div class="row">
<div class="col">
<span class="muted">Order has been delivered</span>
</div>
</div>
</div>
</div>
<div class="row bg-white">
<div class="col">
<div class="row m-t-5"><div class="col"><div class="row"><div class="col no-padding"><div class="order-history-border"></div></div></div> <div class="row fs-12 p-t-15 p-b-15 "><div class="col"><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has successfully been delivered
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order is out for delivery
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has been unpacked and being prepared for delivery
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has arrived at Malaysia's sorting centre
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has been shipped successfully
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order is packed and is ready to ship
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has arrived at China's sorting centre
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:04
</div> <div class="col p-l-0 semi-bold">
Order has been confirmed
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:02
</div> <div class="col p-l-0 semi-bold">
Order created
</div></div></div></div></div></div></div></div>
</div>
</div>
</div>
<div class="col-4"></div>
</div>
</div>
</div>
@endsection
+12 -2
View File
@@ -19,6 +19,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
Route::group(['prefix' => 'account', 'as' => 'account.', 'namespace' => 'Account'], function () {
Route::post('/create', 'RegisterAccountController@register')->name('create');
Route::post('/invite', 'InviteUserController@invite')->name('invite');
Route::get('/list/active','ListUserController@list')->name('list');
});
// Companies Routes
@@ -67,10 +68,10 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
Route::group(['prefix' => 'contact', 'as' => 'contact.', 'namespace' => 'Contacts'], function () {
// List contacts
Route::get('list/{type}/{reference}', 'ContactController@index')->name('list');
//Route::get('list/{type}/{reference}', 'ContactController@index')->name('list');
// Create new contact
Route::post('{type}/{reference}', 'ContactController@store')->name('create');
//Route::post('{type}/{reference}', 'ContactController@store')->name('create');
// Update contact
Route::put('{type}/{reference}/{id}', 'ContactController@store')->name('update');
@@ -78,6 +79,15 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
// Delete contact
Route::delete('{id}', 'ContactController@destroy')->name('delete');
// Test Create Contact
Route::post('/create/{type}/{reference}','CreateContactController@create')->name('create.contact');
// Test Update Contact
Route::post('/update/{id}','UpdateContactController@update')->name('update.contact');
// Test List Contact
Route::get('/list/{type}/{reference}','ListContactController@list')->name('list.contact');
});
// Warehouses Routes
+4
View File
@@ -40,6 +40,10 @@ Route::group(['middleware' => ['secure', 'clearcache']], function (): void {
Route::get('/warehouse/{warehouseId}/profile', function($warehouseId){
return view('pages.warehouses.profile', ['warehouseId' => $warehouseId]);
})->name('warehouses.profile');
Route::get('/order/profile', function(){
return view('pages.orders.profile');
})->name('order.profile');
});