big commit

This commit is contained in:
omair saleh
2021-03-22 08:46:33 +08:00
parent 307aff1c3f
commit 9fe0757baf
75 changed files with 2587 additions and 425 deletions
@@ -89,7 +89,7 @@ class ScaffoldGeneratorCommand extends BaseCommand
*/
protected function checkIsThereAnyDataToGenerate()
{
if (count($this->commandData->fields) > 1) {
if (count($this->commandData->fields) > 0) {
return true;
}
}
@@ -0,0 +1,13 @@
[
{
"name": "name",
"dbType": "string",
"htmlType": "text",
"validations": "required",
"searchable": true,
"fillable": true,
"primary": false,
"inForm": true,
"inIndex": true
}
]
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\General\Eloquent;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOneOrMany;
use Illuminate\Database\QueryException;
abstract class AbstractUpdateRelationshipRecord
{
/**
* @param HasOneOrMany $relation
* @param Model $model
* @return Model
* @throws MalformedRequestException
*/
public function handler(HasOneOrMany $relation, Model $model){
try{
if($relation->save($model)){
return $model;
}
} catch (QueryException $exception){
throw new MalformedRequestException('Unable to update the record due to unexpected error');
}
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class CompanyId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('company_id', $value);
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Documentable
{
public function documents(): morphMany;
}
@@ -5,15 +5,33 @@ namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\ResetsAddressDefault;
use App\Classes\Modules\Addresses\Services\SetsAddressDefault;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateAddressLogic extends AbstractControllerLogic
{
/**
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param CreatesAddress $createsAddress
* @param ResetsAddressDefault $resetsAddressDefault
* @param SetsAddressDefault $setsAddressDefault
*/
public function __construct(CanCreateAddress $canCreateAddress, CreatesAddress $createsAddress, ResetsAddressDefault $resetsAddressDefault, SetsAddressDefault $setsAddressDefault)
{
$this->canCreateAddress = $canCreateAddress;
$this->createsAddress = $createsAddress;
$this->resetsAddressDefault = $resetsAddressDefault;
$this->setsAddressDefault = $setsAddressDefault;
}
/**
* @return array
@@ -31,16 +49,12 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var CreatesAddress */
private $createsAddress;
/**
* CreateAddressControllerLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param CreatesAddress $createsAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, CreatesAddress $createsAddress)
{
$this->canCreateAddress = $canCreateAddress;
$this->createsAddress = $createsAddress;
}
/** @var ResetsAddressDefault */
private $resetsAddressDefault;
/** @var SetsAddressDefault */
private $setsAddressDefault;
/**
@@ -56,8 +70,13 @@ class CreateAddressLogic extends AbstractControllerLogic
$this->canCreateAddress->passes($object);
/** @var Address $query */
$query = $this->createsAddress->execute($object);
$this->resetsAddressDefault->execute($query);
$this->setsAddressDefault->execute($query);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
@@ -0,0 +1,79 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\ResetsAddressDefault;
use App\Classes\Modules\Addresses\Services\SetsAddressDefault;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SetAddressDefaultLogic extends AbstractControllerLogic
{
/**
* SetAddressDefaultLogic constructor.
* @param FetchesAddress $fetchesAddress
* @param ResetsAddressDefault $resetsAddressDefault
* @param SetsAddressDefault $setsAddressDefault
*/
public function __construct(FetchesAddress $fetchesAddress, ResetsAddressDefault $resetsAddressDefault, SetsAddressDefault $setsAddressDefault)
{
$this->fetchesAddress = $fetchesAddress;
$this->resetsAddressDefault = $resetsAddressDefault;
$this->setsAddressDefault = $setsAddressDefault;
}
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Set Default Address',
'message' => 'You have successfully updated your default address'
];
}
/** @var FetchesAddress */
private $fetchesAddress;
/** @var ResetsAddressDefault */
private $resetsAddressDefault;
/** @var SetsAddressDefault */
private $setsAddressDefault;
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->resetsAddressDefault->execute($address);
$this->setsAddressDefault->execute($address);
return $this->resourceResponse(new AddressResource($address));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
class ResetsAddressDefault
{
/**
* @param Address $model
* @return void
*/
public function execute(Address $model) {
$model->company->addresses()->update([
'default' => false,
'billing' => false
]);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
class SetsAddressDefault extends AbstractUpdateRecord
{
/**
* @param Address $model
* @return void
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Address $model) {
$model->default = true;
$model->billing = true;
$this->handler($model);
}
}
@@ -0,0 +1,100 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFile;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\CompanyTypes;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\OwnerType;
use App\Http\Resources\CompanyResource;
use App\Http\Resources\DocumentResource;
use App\Models\Document;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateCompanyIdentificationDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Company Identification',
'message' => 'You have successfully created a new Company Identification Document'
];
}
/** @var FetchesUser */
private $fetchesUser;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesDocument */
private $createsDocument;
/** @var CreatesFile */
private $createsFile;
/** @var UpdatesCompanyStatus */
private $updatesCompanyStatus;
/**
* UpdateCompanyIdentificationDocumentLogic constructor.
* @param FetchesUser $fetchesUser
* @param FetchesCompany $fetchesCompany
* @param CreatesDocument $createsDocument
* @param CreatesFile $createsFile
* @param UpdatesCompanyStatus $updatesCompanyStatus
*/
public function __construct(FetchesUser $fetchesUser, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFile $createsFile, UpdatesCompanyStatus $updatesCompanyStatus)
{
$this->fetchesUser = $fetchesUser;
$this->fetchesCompany = $fetchesCompany;
$this->createsDocument = $createsDocument;
$this->createsFile = $createsFile;
$this->updatesCompanyStatus = $updatesCompanyStatus;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$object = new DocumentObject(
$company->type === CompanyTypes::COMPANY_BUSINESS ? DocumentType::SSM_REGISTRATION: DocumentType::IDENTITY_CARD,
$request->input('files'), $request->input('reference'));
/** @var Document $document */
$document = $this->createsDocument->execute($company, $object);
$this->createsFile->execute($document, $object);
$this->updatesCompanyStatus->execute($company, ApprovalStatus::PENDING_VERIFICATION);
return $this->resourceResponse(new DocumentResource($document));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Models\Company;
class UpdatesCompanyStatus extends AbstractUpdateRecord
{
/**
* @param Company $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $model, int $status)
{
$model->status = $status;
return $this->handler($model);
}
}
@@ -0,0 +1,84 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\DocumentResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Standards\Rules\CanUpdateDocument;
use App\Classes\Modules\Documents\Services\ApprovesDocument;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class ApproveDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Approve Document',
'message' => 'You have successfully approved the Document'
];
}
/** @var CanUpdateDocument */
private $canUpdateDocument;
/** @var ApprovesDocument */
private $approvesDocument;
/** @var FetchesDocument */
private $fetchesDocument;
/**
* UpdateStandardSegmentConstantLogic constructor.
* @param CanUpdateDocument $canUpdateDocument
* @param ApprovesDocument $approvesDocument
* @param FetchesDocument $fetchesDocument
*/
public function __construct(
canUpdateDocument $canUpdateDocument,
ApprovesDocument $approvesDocument,
FetchesDocument $fetchesDocument
)
{
$this->canUpdateDocument = $canUpdateDocument;
$this->approvesDocument = $approvesDocument;
$this->fetchesDocument = $fetchesDocument;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$document = $this->fetchesDocument->execute(['id' => $request->route('id')]);
$this->canUpdateDocument->passes($document);
$document_query = $this->approvesDocument->execute($document);
return $this->resourceResponse(new DocumentResource($document_query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\ListsDocuments;
use App\Classes\Modules\Documents\Standards\Rules\CanListDocuments;
use App\Http\Resources\DocumentResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Document',
'message' => 'You have successfully retrieved a list of Document'
];
}
/** @var CanListDocuments */
private $canListDocuments;
/** @var ListsDocuments */
private $listsDocuments;
/**
* ListStandardSegmentLogic constructor.
* @param CanListDocuments $canListDocuments
* @param ListsDocuments $listsDocuments
*/
public function __construct(CanListDocuments $canListDocuments, ListsDocuments $listsDocuments)
{
$this->canListDocuments = $canListDocuments;
$this->listsDocuments = $listsDocuments;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListDocuments->passes();
$query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($request->input('filters')));
return $this->collectionResponse(DocumentResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\Documents\DataTransferObjects;
use App\Classes\Interfaces\DataTransferObject;
use App\Classes\Modules\Documents\Services\ConvertsBase64ToFile;
class DocumentObject implements DataTransferObject
{
/** @var string */
private $document_type;
/** @var array */
private $files;
/** @var string|null */
private $reference;
/**
* DocumentObject constructor.
* @param string $document_type
* @param array $files
* @param null|string $reference
*/
public function __construct(string $document_type, array $files, ?string $reference = null)
{
$this->document_type = $document_type;
$this->files = $files;
$this->reference = $reference;
}
/**
* @return string
*/
public function getDocumentType(): string
{
return $this->document_type;
}
/**
* @return string|null
*/
public function getReference(): string
{
return $this->reference;
}
/**
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function getFiles(): array
{
return (new ConvertsBase64ToFile())->convert($this->files);
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Documents\DataTransferObjects;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\File;
use Illuminate\Support\Str;
use Intervention\Image\ImageManager;
class FileObject implements DataTransferObject
{
/** @var string */
private $data;
/**
* FileInfoObject constructor.
* @param string $data
*/
public function __construct(string $data)
{
$this->data = $data;
}
/**
* @return \Intervention\Image\Image|string
* @throws MalformedRequestException
*/
public function getData()
{
return $this->getExtension() === 'pdf' ? $this->data : (new imageManager())->make($this->data);
}
/**
* @return string
*/
public function getFileName(): string
{
return (string) Str::uuid();
}
/**
* @return string
*/
public function getMimeType(): string
{
return finfo_file(finfo_open(), $this->data, FILEINFO_MIME_TYPE);
}
/**
* @return string
* @throws MalformedRequestException
*/
public function getExtension(): string
{
if(array_key_exists($this->getMimeType(), File::EXTENSION)){
return File::EXTENSION[$this->getMimeType()];
}
throw new MalformedRequestException('Failed to save file due to Unknown file extension');
}
/**
* @return string
* @throws MalformedRequestException
*/
public function getDecodedData(): string
{
return $this->getExtension() === 'pdf' ?
base64_decode((explode('base64,', $this->getData()))[1]):
$this->getData()->encode('data-url')->encoded;
}
/**
* @param string $data
*/
public function setData(string $data): void
{
$this->data = $data;
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Document;
use Carbon\Carbon;
class ApprovesDocument extends AbstractUpdateRecord
{
/**
* @param Document $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Document $model)
{
$model->status = ApprovalStatus::ACTIVE;
$model->approved_by = Auth()->user()->id;
$model->approved_date = Carbon::now();
return $this->handler($model);
}
}
@@ -0,0 +1,128 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
class ConvertsBase64ToFile
{
/** @var string|null */
private $path;
/** @var array */
private $filesInfo;
/**
* ConvertsBase64ToFile constructor.
* @param null|string $path
*/
public function __construct(?string $path = 'documents')
{
$this->path = $path;
$this->filesInfo = [];
File::isDirectory(storage_path($this->path)) or
File::makeDirectory(storage_path($this->path), 0777, true, true);
}
/**
* @param array $files
* @return array
* @throws MalformedRequestException
*/
public function convert($files = []){
foreach ($files as $file) {
$object = new FileObject($file);
$object->getExtension() === 'pdf' ? $this->generatePDF($object) : $this->generateImage($object);
}
return $this->filesInfo;
}
/**
* @param FileObject $file
* @throws MalformedRequestException
*/
private function generatePDF(FileObject $file){
$filePath = $this->generateFile($file);
$this->updateFiles($file, [ 'original' => [ 'file' => $filePath ] ]);
}
/**
* @param FileObject $file
* @throws MalformedRequestException
*/
private function generateImage(FileObject $file){
$fileInfo = [];
foreach (['original' => null, 'large' => 800, 'medium' => 480, 'small' => 320] as $size => $value) {
$suffix = $size !== 'original' ? '_'.$size : '';
if($size !== 'original') {
$thumbnail = $file->getData()->widen($value, function ($constraint) {
$constraint->upsize();
})->heighten($value, function ($constraint) {
$constraint->upsize();
});
$file->setData($thumbnail->encode('data-url')->encoded);
}
$filePath = $this->generateFile($file, $suffix);
$fileInfo[] = [ $size => [ 'file' => $filePath, 'width' => $file->getData()->width(), 'height' => $file->getData()->height() ]];
}
$this->updateFiles($file, $fileInfo);
}
/**
* @param FileObject $file
* @param string $suffix
* @return string
* @throws MalformedRequestException
*/
private function generateFile(FileObject $file, string $suffix = '') {
$filePath = storage_path($this->path.'/'.$file->getFileName().$suffix.'.'.$file->getExtension());
Storage::put($filePath, $file->getDecodedData());
return $filePath;
}
/**
* @param FileObject $file
* @param array $fileInfo
* @throws MalformedRequestException
*/
private function updateFiles(FileObject $file, array $fileInfo){
$this->filesInfo[] = json_encode([
'path' => $this->path,
'filename' => $file->getFileName().'.'.$file->getExtension(),
'mime_type' => $file->getMimeType(),
'extension' => $file->getExtension(),
'file_info' => $fileInfo
]);
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Models\Document;
class CreatesDocument extends AbstractUpdateRelationshipRecord
{
/**
* @param Documentable $documentable
* @param DocumentObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Documentable $documentable, DocumentObject $object)
{
$model = new Document();
$model->document_type = $object->getDocumentType();
$model->reference = $object->getReference();
return $this->handler($documentable->documents(), $model);
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Models\Document;
use App\Models\File;
class CreatesFile extends AbstractUpdateRelationshipRecord
{
/**
* @param Document $document
* @param DocumentObject $object
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Document $document, DocumentObject $object)
{
$models = [];
foreach ($object->getFiles() as $file) {
$model = new File(['file' => $file]);
$models[] = $this->handler($document->files(), $model);
}
return $models;
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Document;
class FetchesDocument extends AbstractFetchRecord
{
/** @var Document */
private $repository;
/**
* FetchesUser constructor.
* @param Document $repository
*/
public function __construct(Document $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Document;
class ListsDocuments extends AbstractListRecord
{
/** @var Document */
private $repository;
/**
* ListsDocuments constructor.
* @param Document $repository
*/
public function __construct(Document $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Standards\Validators\DocumentValidation;
class CanCreateDocument extends AbstractRule
{
/** @var DocumentValidation */
private $documentValidation;
/**
* CanCreateAddress constructor.
* @param DocumentValidation $documentValidation
*/
public function __construct(DocumentValidation $documentValidation)
{
$this->documentValidation = $documentValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->documentValidation->validate($object);
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
use App\Classes\Modules\Documents\Standards\Validators\FileValidation;
class CanCreateFile extends AbstractRule
{
/** @var FileValidation */
private $fileValidation;
/**
* CanCreateFile constructor.
* @param FileValidation $fileValidation
*/
public function __construct(FileValidation $fileValidation)
{
$this->fileValidation = $fileValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param FileObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->fileValidation->validate($object);
}
/**
* @param FileObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class CanListDocuments extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
if (!\Auth::user()->can('view document')) {
return false;
}
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Standards\Validators\DocumentValidation;
class CanUpdateDocument extends AbstractRule
{
/** @var DocumentValidation */
private $documentValidation;
/**
* CanCreateAddress constructor.
* @param DocumentValidation $documentValidation
*/
public function __construct(DocumentValidation $documentValidation)
{
$this->documentValidation = $documentValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->documentValidation->validate($object);
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class DocumentValidation extends AbstractValidation
{
/**
* @param DocumentObject $object
* @return array
*/
protected function data($object): array
{
return [
'owner_id' => $object->getOwnerId(),
'owner_type' => $object->getOwnerType(),
'document_type' => $object->getDocumentType(),
'reference' => $object->getReference(),
'status' => $object->getStatus(),
'approved_by' => $object->getApprovedBy(),
'issued_date' => $object->getIssuedDate(),
'expired_date' => $object->getExpiredDate(),
'approved_date' => $object->getApprovedDate()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'owner_id' => 'required',
'owner_type' => 'required',
'document_type' => 'required',
'reference' => 'required',
'status' => '',
'issued_date' => '',
'expired_date' => '',
'approved_date' => '',
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
class FileValidation extends AbstractValidation
{
/**
* @param FileObject $object
* @return array
*/
protected function data($object): array
{
return [
'document_id' => $object->getDocumentId(),
'file' => $object->getFile(),
'file_type' => $object->getFileType()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'document_id' => 'required',
'file' => 'required',
'file_type' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\Modules\Orders\DataTransferObjects\PackagesListObject;
interface createPackagesListLogic
{
public function execute(){
}
}
@@ -0,0 +1,82 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
class ItemObject
{
/** @var string */
private $description;
/** @var string */
private $unitOfMeasurment;
/** @var float */
private $quantity;
/** @var double */
private $price;
/** @var string */
private $currency;
/**
* ItemObject constructor.
* @param string $description
* @param string $unitOfMeasurment
* @param float $quantity
* @param float $price
* @param string $currency
*/
public function __construct(string $description, string $unitOfMeasurment, float $quantity, float $price, string $currency)
{
$this->description = $description;
$this->unitOfMeasurment = $unitOfMeasurment;
$this->quantity = $quantity;
$this->price = $price;
$this->currency = $currency;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @return string
*/
public function getUnitOfMeasurment(): string
{
return $this->unitOfMeasurment;
}
/**
* @return float
*/
public function getQuantity(): float
{
return $this->quantity;
}
/**
* @return float
*/
public function getPrice(): float
{
return $this->price;
}
/**
* @return string
*/
public function getCurrency(): string
{
return $this->currency;
}
}
@@ -0,0 +1,83 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
class PackageObject
{
/** @var int */
private $type;
/** @var float */
private $width;
/** @var float */
private $height;
/** @var float */
private $lenght;
/** @var array */
private $items;
/**
* PackageObject constructor.
* @param int $type
* @param float $width
* @param float $height
* @param float $lenght
* @param array $items
*/
public function __construct(int $type, float $width, float $height, float $lenght, array $items)
{
$this->type = $type;
$this->width = $width;
$this->height = $height;
$this->lenght = $lenght;
$this->items = $items;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return float
*/
public function getWidth(): float
{
return $this->width;
}
/**
* @return float
*/
public function getHeight(): float
{
return $this->height;
}
/**
* @return float
*/
public function getLenght(): float
{
return $this->lenght;
}
/**
* @return array
*/
public function getItems(): array
{
return $this->items;
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
class PackagesListObject
{
/** @var int */
private $orderId;
/** @var array */
private $packages;
/**
* PackagesListObject constructor.
* @param int $orderId
* @param array $packages
*/
public function __construct(int $orderId, array $packages)
{
$this->orderId = $orderId;
$this->packages = $packages;
}
/**
* @return int
*/
public function getOrderId(): int
{
return $this->orderId;
}
/**
* @return array
*/
public function getPackages(): array
{
return $this->packages;
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class ApprovalStatus {
public const PENDING_SUBMISSION = 0;
public const PENDING_VERIFICATION = 1;
public const APPROVED = 2;
public const COMPLETED = 3;
public const REJECTED = 4;
public const SUSPENDED = 5;
public const EXPIRED = 6;
}
@@ -0,0 +1,8 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class DocumentType {
public const SSM_REGISTRATION = 'SSM_REGISTRATION';
public const IDENTITY_CARD = 'IDENTITY_CARD';
}
@@ -0,0 +1,16 @@
<?php
namespace App\Classes\ValueObjects\Constants;
class File
{
public const EXTENSION = [
'image/gif' => 'gif',
'image/png' => 'png',
'image/jpeg' => 'jpeg',
'application/pdf' => 'pdf',
];
}
@@ -0,0 +1,7 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class OwnerType {
public const COMPANY = 1;
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\CreateAddressLogic;
use App\Classes\Modules\Addresses\ControllersLogic\SetAddressDefaultLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SetAddressDefaultController
{
/**
* @param Request $request
* @param SetAddressDefaultLogic $logic
* @return JsonResponse
*/
public function set(Request $request, SetAddressDefaultLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Companies;
use App\Classes\Modules\Companies\ControllersLogic\UpdateCompanyIdentificationDocumentLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateCompanyIdentificationDocumentController
{
/**
* @param Request $request
* @param UpdateCompanyIdentificationDocumentLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateCompanyIdentificationDocumentLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -11,6 +11,7 @@ use App\Models\Company;
use App\Models\CompanyConnections;
use App\Models\Order;
use Illuminate\Http\Request;
use Barryvdh\DomPDF\PDF;
class OrderController
{
@@ -26,8 +27,8 @@ class OrderController
$order->company_id = $company->id;
$order->order_number = $generatesUniqueOrderNumber->execute();
$order->forwarder_id = 1;
$order->address_id = $company->addresses()->first()->id;
$order->contact_id = $company->contacts()->first()->id;
$order->address_id = $company->addresses->first()->id;
$order->contact_id = $company->contacts->first()->id;
$order->current_step = 'MS_WAREHOUSE_RECEIVING';
$order->multiple_batch = false;
$order->complete = false;
@@ -59,7 +60,7 @@ class OrderController
HttpStatus::OK_WITH_MESSAGE, json_decode(OrderResource::collection($orders)->response()->getContent(), true)))->handler();
}
public function download(String $orderId){
public function download(String $orderId, PDF $pdf){
/** @var Order $order */
$order = order::findOrFail($orderId);
/** @var Company $warehouse */
@@ -78,7 +79,7 @@ class OrderController
return view('pages.pdf.qr', $data);
return $this->pdf->loadView('pages.pdf.qr', $data)->stream();
return $pdf->loadView('pages.pdf.qr', $data)->download();
}
}
-271
View File
@@ -1,271 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Classes\Modules\Accounts\ControllersLogic\CheckEmailLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class TestController
{
public function index(){
$cookies = $this->getToken();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"controller":"WarehouseList","view":"grid1","request":{"PageSize":10000000, "Filter":["ParcelDate:>%js%\"2020-01-10T00:00:00.000\"\u0000"]}}');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
$headers = array();
$headers[] = 'Connection: keep-alive';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36';
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers[] = 'Content-Type: application/json; charset=UTF-8';
$headers[] = 'Accept: */*';
$headers[] = 'Origin: http://portalvt.azurewebsites.net';
$headers[] = 'Referer: http://portalvt.azurewebsites.net/Pages/WarehouseList.aspx';
$headers[] = 'Accept-Language: en-US,en;q=0.9';
$headers[] = 'Cookie: '.implode('; ', $cookies);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
dd(json_decode($result));
}
private function getToken(){
$cookies = $this->getCookies();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"username":"CIEF","password":"0122120880","createPersistentCookie":true}');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
$headers = array();
$headers[] = 'Connection: keep-alive';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36';
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers[] = 'Content-Type: application/json; charset=UTF-8';
$headers[] = 'Accept: */*';
$headers[] = 'Origin: http://portalvt.azurewebsites.net';
$headers[] = 'Referer: http://portalvt.azurewebsites.net/Login.aspx?ReturnUrl=%2fPages%2fHome.aspx';
$headers[] = 'Accept-Language: en-US,en;q=0.9';
$headers[] = 'Cookie: '.implode('; ', $cookies);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
$cookies[] = 'AppVTCC='.json_decode($result)->d->Token;
return $cookies;
}
private function getCookies(){
$cookies = [];
$curl_handle = curl_init('http://portalvt.azurewebsites.net/Login.aspx');
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl_handle, CURLOPT_HEADER, true);
$data = curl_exec($curl_handle);
$responseHeader= substr($data,0, intval(curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE)));
$endPosition = 0;
while(true) {
$startPosition = strpos($responseHeader, 'Set-Cookie: ', $endPosition);
if (!$startPosition){break;}
$startPosition += 12;
$endPosition = strpos($responseHeader, ';', $startPosition);
$cookies[] = substr($responseHeader,$startPosition,$endPosition-$startPosition);
}
return $cookies;
}
public function index2() {
// curl 'http://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login' \
// -H 'Connection: keep-alive' \
// -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' \
// -H 'X-Requested-With: XMLHttpRequest' \
// -H 'Content-Type: application/json; charset=UTF-8' \
// -H 'Accept: */*' \
// -H 'Origin: http://portalvt.azurewebsites.net' \
// -H 'Referer: http://portalvt.azurewebsites.net/Login.aspx?ReturnUrl=%2fPages%2fHome.aspx' \
// -H 'Accept-Language: en-US,en;q=0.9' \
// -H 'Cookie: ASP.NET_SessionId=cxe2tgbsi03jtg2p0nlfdcrl; ARRAffinity=2950dd3bc3c86410bd48fe08ed3595e06670f25d93c162510d25040b02f01a67' \
// --data-binary '{"username":"CIEF","password":"0122120880","createPersistentCookie":true}' \
// --compressed \
// --insecure
header('Content-Type: text/plain; charset=utf-8');
$post = array('createPersistentCookie'=>true,
'username'=>'CIEF',
'password'=>'0122120880');
$request = array();
$request[] = 'Connection: keep-alive';
$request[] = 'Pragma: no-cache';
$request[] = 'Cache-Control: no-cache';
$request[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
$request[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36';
$request[] = 'DNT: 1';
$request[] = 'http://portalvt.azurewebsites.net/Login.aspx?ReturnUrl=%2fPages%2fHome.aspx';
$request[] = 'Accept-Encoding: gzip, deflate';
$request[] = 'Accept-Language: en-US,en;q=0.8';
$request[] = 'Content-Type:multipart/form-data';
$url = 'http://portalvt.azurewebsites.net/Login.aspx';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$data = curl_exec($ch);
if (curl_errno($ch)){
$data .= 'Retreive Base Page Error: ' . curl_error($ch);
var_dump($data);
}
else {
$info = rawurldecode(var_export(curl_getinfo($ch),true));
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$responseHeader= substr($data,0,$skip);
// The folowing line is for debug
// echo "$info\n$responseHeader\n$data\n\n";
// Get the cookies:
$e = 0;
while(true){
$s = strpos($responseHeader,'Set-Cookie: ',$e);
if (!$s){break;}
$s += 12;
$e = strpos($responseHeader,';',$s);
$cookie = substr($responseHeader,$s,$e-$s) ;
$s = strpos($cookie,'=');
$key = substr($cookie,0,$s);
$value = substr($cookie,$s);
$cookies[$key] = $value;
}
// Create cookie for subsequent Requests:
$cookie = '';
$show = '';
$head = '';
$delim = '';
foreach ($cookies as $k => $v){
$cookie .= "$delim$k$v";
$delim = '; ';
}
}
var_dump($cookies);
$request = array();
$request[] = 'Host: portalvt.azurewebsites.net';
$request[] = 'Connection: keep-alive';
$request[] = 'Pragma: no-cache';
$request[] = 'Cache-Control: no-cache';
$request[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
$request[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36';
$request[] = 'DNT: 1';
$request[] = 'Referer: http://portalvt.azurewebsites.net/Login.aspx?ReturnUrl=%2fPages%2fHome.aspx';
$request[] = 'Accept-Encoding: gzip, deflate';
$request[] = 'Accept-Language: en-US,en;q=0.8';
$url = 'http://portalvt.azurewebsites.net/Login.aspx';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, false);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION , true );
curl_setopt($ch, CURLOPT_COOKIE, $cookie );
$data = curl_exec($ch);
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
echo substr($data,$skip); //do not transmit header
// if (curl_errno($ch)){
// $data .= 'Retreive Base Page Error: ' . curl_error($ch);
// var_dump($data);
// }
// else {
// $info = rawurldecode(var_export(curl_getinfo($ch), true));
//
// // Get the cookies:
//
// $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
// $responseHeader = substr($data, 0, $skip);
//
// echo "$info\n$responseHeader\n$data\n\n";
//
// $e = 0;
// while (true) {
// $s = strpos($responseHeader, 'Set-Cookie: ', $e);
// if (!$s) {
// break;
// }
// $s += 12;
// $e = strpos($responseHeader, ';', $s);
// $cookie = substr($responseHeader, $s, $e - $s);
// $s = strpos($cookie, '=');
// $key = substr($cookie, 0, $s);
// $value = substr($cookie, $s);
// $cookies[$key] = $value;
// }
// }
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers;
class invoiceClass
{
$user = User::fetch();
public function execute(){
$company = $user->company();
$price = $company->price();
$order = Order::fetch();
$items = $order->items();
$deliveryAddress = address();
$invoice = Invoice::create([
$order,
$items
]);
$convertToPdf = $invoice->pdf();
$email = email()->pdf();
solid
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers;
class preformaClass
{
public function execute(){
$user = User::fetch();
$company = $user->company();
$price = $company->price();
$order = Order::fetch();
$items = $order->items();
$deliveryAddress = address();
$invoice = Performa::create([
$order,
$items
]);
$convertToPdf = $invoice->pdf();
$email = email()->pdf();
}
}
+4 -2
View File
@@ -3,6 +3,7 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\AccountStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\CompanyConnections;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -22,9 +23,10 @@ class CompanyResource extends JsonResource
'marking' => CompanyConnections::where('module_one', $this->modules->first()->id)->first()->marking,
'name' => $this->name,
'type' => $this->type,
'status' => AccountStatus::STATUS[$this->status],
'status' => $this->status,
'delivery_address' => new AddressResource($this->deliveryAddress),
'contact' => new ContactResource($this->contacts->first())
'contact' => new ContactResource($this->contacts->first()),
'total_orders' => count($this->orders)
];
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class DocumentResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'document_type' => $this->document_type,
'reference' => $this->reference,
'status' => (int) $this->status,
'approved_by' => (int) $this->approved_by,
'files' => $this->files()->get()
];
}
}
+6 -5
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -29,12 +30,12 @@ class Address extends AbstractModel
protected $dates = ['deleted_at'];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
**/
public function company(): HasOne
/**
* @return BelongsTo
*/
public function company(): BelongsTo
{
return $this->hasOne(Company::class, 'company_id', 'id');
return $this->BelongsTo(Company::class, 'company_id', 'id');
}
}
+19 -2
View File
@@ -2,10 +2,11 @@
namespace App\Models;
use App\Models\AbstractModel as Model;
use App\Classes\General\Interfaces\Documentable;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -17,7 +18,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property string name
* @property integer type
*/
class Company extends AbstractModel
class Company extends AbstractModel implements Documentable
{
use SoftDeletes;
@@ -74,6 +75,22 @@ class Company extends AbstractModel
return $this->hasManyThrough(Company::class, CompanyConnections::class);
}
/**
* @return MorphMany
*/
public function documents(): morphMany
{
return $this->morphMany(Document::class, 'owner');
}
/**
* @return HasMany
*/
public function orders(): hasMany
{
return $this->hasMany(Order::class);
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Carbon\Traits\Timestamp;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\hasMany;
/**
* Class Document
* @package App\Models
* @version August 4, 2020, 4:36 am
*
* @property int owner_id
* @property int owner_type
* @property int document_type
* @property string reference
* @property int status
* @property \App\Models\User approved_by
* @property timestamp issued_date
* @property timestamp expired_date
* @property timestamp approved_date
*/
class Document extends AbstractModel
{
use SoftDeletes;
protected $table = 'documents';
protected $dates = ['deleted_at'];
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
*/
public function owner(): morphTo
{
return $this->morphTo();
}
/**
* @return hasMany
*/
public function files(): hasMany
{
return $this->hasMany(File::class, 'document_id');
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class File
* @package App\Models
* @version August 4, 2020, 4:36 am
*
* @property \App\Models\Document document_id
* @property text file
* @property int file_type_id
*/
class File extends AbstractModel
{
use SoftDeletes;
protected $table = 'files';
protected $fillable = ['file'];
protected $dates = ['deleted_at'];
public function getFileAttribute($value)
{
return $value ? json_decode($value) : [];
}
}
+1
View File
@@ -8,6 +8,7 @@ class PasswordReset extends AbstractModel
{
protected $table = 'password_resets';
protected $fillable = ['token'];
/**
* @param $query
* @return mixed
+12 -1
View File
@@ -2,8 +2,10 @@
namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Auth\Authenticatable;
@@ -18,7 +20,8 @@ class User extends AbstractModel implements
JWTSubject,
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
CanResetPasswordContract,
documentable
{
use Notifiable, Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
@@ -62,4 +65,12 @@ class User extends AbstractModel implements
return $this->hasMany(Order::class, 'user_id', 'id');
}
/**
* @return MorphMany
*/
public function documents(): morphMany
{
return $this->morphMany(Document::class, 'owner');
}
}