mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 20:44:19 +00:00
Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68c5208316 | |||
| 5ca007ab28 | |||
| f190997634 | |||
| 5dd8a70677 | |||
| 9dbb6a8b49 | |||
| 812da07f63 | |||
| 130aa78dfe | |||
| f820ba578f | |||
| 961f8acf65 | |||
| 9a2a5d797c | |||
| 743662af9e | |||
| 1ba98379bf | |||
| 0f18556667 | |||
| 27b4dee1e3 | |||
| 3e982f5351 | |||
| b17fe23652 | |||
| 191bd161f3 | |||
| 6b8a61877e | |||
| 9730fa79e4 | |||
| 009c064002 | |||
| 6be228e7fd | |||
| fd52aa6b01 | |||
| de4c09fb07 | |||
| adb81ebfe9 | |||
| 8d11ff6b7f | |||
| 76cc4296a3 | |||
| 90f485f84b | |||
| 1cc3581800 | |||
| 7dfa7b0220 | |||
| 27204bca13 | |||
| b735462321 | |||
| 8b2ef2acd4 | |||
| f5f278fb77 | |||
| 8afa6a496e | |||
| 03a7ed5785 | |||
| efe5ccecea | |||
| 7faeec6ef7 | |||
| 20e7e19bc6 | |||
| 151447c573 | |||
| a21614ba32 | |||
| d99cb103ce | |||
| 4c92ac5a83 |
@@ -70,3 +70,6 @@ SST_START_DATE="2024-04-01 00:00:00"
|
||||
E_INVOICE_START_DATE="2025-07-01 00:00:00"
|
||||
MAINTENANCE_MESSAGE_TITLE="We'll be back online on 00:00 1/7/2025"
|
||||
MAINTENANCE_MESSAGE="Sorry for the inconvenience but we're performing some maintenance at the moment."
|
||||
|
||||
OPENAI_API_KEY=""
|
||||
ANTHROPIC_API_KEY=""
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=testing
|
||||
|
||||
APP_KEY=base64:I9qXyDlm7GVu/e47+YGzLB00fA/FMA2/hMPEhqu8pUQ=
|
||||
JWT_SECRET=9j7f7vUWEzxUBjLYcQimZp5wmxHEglcjU3beog26qC4pQKENZSpfWQfv065tjZrZ
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=172.18.0.2
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=ci_test_shipping_portal
|
||||
DB_USERNAME=ci
|
||||
DB_PASSWORD=bi9y@T8r
|
||||
+3
-1
@@ -6,6 +6,7 @@
|
||||
**/.idea/
|
||||
.env
|
||||
.env.backup
|
||||
.env.testing.example
|
||||
.phpunit.result.cache
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
@@ -21,7 +22,6 @@ gox.iml
|
||||
rebuild_docker.sh
|
||||
docker/*
|
||||
db/*
|
||||
package-lock.json
|
||||
public/*
|
||||
/public/*
|
||||
storage/framework/laravel-excel/*
|
||||
@@ -29,3 +29,5 @@ storage/framework/laravel-excel/*
|
||||
.env.production
|
||||
.env.staging
|
||||
.env.development
|
||||
docz/*
|
||||
.phpunit.cache/
|
||||
|
||||
@@ -19,12 +19,19 @@
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
setInterval(function() {
|
||||
window.location.href = "/";
|
||||
}, 60000); // 60000 ms = 1 minute, 300000 ms = 5 minutes
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="content">
|
||||
<h1>We'll be back soon!</h1>
|
||||
<p>Sorry for the inconvenience but we're performing some maintenance at the moment. We'll be back online shortly!</p>
|
||||
<p>— CIEF IZYIM</p>
|
||||
|
||||
<a href="/" class="btn">Go Back Home</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Vendored
+68
-18
@@ -9,17 +9,17 @@
|
||||
pipeline {
|
||||
agent {
|
||||
docker {
|
||||
args '--group-add 992 -v /var/run/docker.sock:/var/run/docker.sock'
|
||||
image '303644228504.dkr.ecr.ap-southeast-1.amazonaws.com/jenkins-pipeline-agent:latest'
|
||||
args '--network ci-net --group-add 992 -v /var/run/docker.sock:/var/run/docker.sock'
|
||||
image '303644228504.dkr.ecr.ap-southeast-1.amazonaws.com/jenkins-pipeline-agent-php-8.3-node-22:latest'
|
||||
registryCredentialsId "ecr:ap-southeast-1:aws-ec2-instance-iam-role"
|
||||
registryUrl "https://303644228504.dkr.ecr.ap-southeast-1.amazonaws.com"
|
||||
}
|
||||
}
|
||||
environment {
|
||||
HOME = '.'
|
||||
DB_CONNECTION = 'mysql'
|
||||
DB_DATABASE = 'portal_development'
|
||||
APP_ENV = 'testing'
|
||||
// DB_CONNECTION = 'mysql'
|
||||
// DB_DATABASE = 'portal_development'
|
||||
// APP_ENV = 'testing'
|
||||
}
|
||||
stages {
|
||||
stage('Download source code from Git') {
|
||||
@@ -31,6 +31,7 @@ pipeline {
|
||||
case "vapor/production":
|
||||
case "vapor/staging":
|
||||
case "vapor/development":
|
||||
case "vapor/test":
|
||||
git(
|
||||
url: 'https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git',
|
||||
credentialsId: 'gitlab-jenkins-localhost',
|
||||
@@ -61,18 +62,45 @@ pipeline {
|
||||
|
||||
stage('Tests') {
|
||||
steps {
|
||||
//sh 'vendor/bin/phpunit tests/Unit'
|
||||
withCredentials([
|
||||
usernamePassword(
|
||||
credentialsId: 'shipping-portal-dev-db-credential',
|
||||
usernameVariable: 'DB_USERNAME',
|
||||
passwordVariable: 'DB_PASSWORD'
|
||||
),
|
||||
string(credentialsId: 'shipping-portal-dev-db-host', variable: 'DB_HOST')
|
||||
]) {
|
||||
// sh 'vendor/bin/phpunit --filter ListOrderTrackingLogicTest'
|
||||
}
|
||||
script{
|
||||
// sh 'vendor/bin/phpunit tests/Unit'
|
||||
// withCredentials([
|
||||
// usernamePassword(
|
||||
// credentialsId: 'shipping-portal-dev-db-credential',
|
||||
// usernameVariable: 'DB_USERNAME',
|
||||
// passwordVariable: 'DB_PASSWORD'
|
||||
// ),
|
||||
// string(credentialsId: 'shipping-portal-dev-db-host', variable: 'DB_HOST')
|
||||
// ]) {
|
||||
// sh 'vendor/bin/phpunit --filter ListOrderTrackingLogicTest'
|
||||
// }
|
||||
sh '''
|
||||
set -e
|
||||
|
||||
export APP_ENV=testing
|
||||
# export APP_KEY=$(php -r "echo 'base64:'.base64_encode(random_bytes(32));")
|
||||
# export JWT_SECRET=$(php -r "echo bin2hex(random_bytes(32));")
|
||||
|
||||
# Show which PHP binary is used
|
||||
which php
|
||||
php -v
|
||||
|
||||
# List PHP modules to confirm pdo_mysql
|
||||
php -m | grep pdo_mysql || echo "pdo_mysql not loaded"
|
||||
|
||||
# Show DB environment variables
|
||||
echo "DB_CONNECTION=$DB_CONNECTION"
|
||||
echo "DB_HOST=$DB_HOST"
|
||||
echo "DB_PORT=$DB_PORT"
|
||||
echo "DB_DATABASE=$DB_DATABASE"
|
||||
echo "DB_USERNAME=$DB_USERNAME"
|
||||
# Do NOT echo password in logs
|
||||
|
||||
php artisan migrate:fresh --force
|
||||
|
||||
vendor/bin/phpunit -c phpunit.ci.xml --group ok_to_run
|
||||
|
||||
'''
|
||||
script {
|
||||
currentBuild.description = 'Step 4 of 6 Completed'
|
||||
}
|
||||
}
|
||||
@@ -94,6 +122,9 @@ pipeline {
|
||||
case "vapor/development":
|
||||
sh "vendor/bin/vapor deploy development --message='${gitCommitMessage}'"
|
||||
break
|
||||
case "vapor/test":
|
||||
sh "vendor/bin/vapor deploy test --message='${gitCommitMessage}'"
|
||||
break
|
||||
case "origin/dillon/34-jenkins-vapor":
|
||||
sh "vendor/bin/vapor deploy development --message='${gitCommitMessage}'"
|
||||
break
|
||||
@@ -107,10 +138,29 @@ pipeline {
|
||||
steps {
|
||||
script {
|
||||
try {
|
||||
sh 'docker image prune -a -f'
|
||||
sh '''
|
||||
echo "Starting Docker cleanup..."
|
||||
|
||||
# Remove stopped containers
|
||||
docker container prune -f
|
||||
|
||||
# Remove unused networks
|
||||
docker network prune -f
|
||||
|
||||
# Remove unused images
|
||||
docker image prune -a -f
|
||||
|
||||
# Remove unused build cache
|
||||
docker builder prune -f
|
||||
|
||||
echo "Docker cleanup completed."
|
||||
|
||||
docker system df
|
||||
'''
|
||||
} catch (Exception e) {
|
||||
echo "Error during cleanup: ${e.message}"
|
||||
}
|
||||
|
||||
currentBuild.description = 'Step 6 of 6 Completed'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,22 +19,29 @@ abstract class AbstractGetRecord
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
private function getQueryFilters(){
|
||||
private function getQueryFilters()
|
||||
{
|
||||
return $this->filters->except(self::DECORATION_FILTERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
public function getDecorationFilters(){
|
||||
public function getDecorationFilters()
|
||||
{
|
||||
return $this->filters->only(self::DECORATION_FILTERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|string $json
|
||||
* @param null|string|array $json
|
||||
* @return array
|
||||
*/
|
||||
public function deserializeFilters(?string $json): array {
|
||||
public function deserializeFilters($json): array
|
||||
{
|
||||
if (is_array($json)) {
|
||||
return $json;
|
||||
}
|
||||
|
||||
return $json !== null ? collect(json_decode($json))->toArray() : [];
|
||||
}
|
||||
|
||||
@@ -50,7 +57,8 @@ abstract class AbstractGetRecord
|
||||
* @param array $filters
|
||||
* @return mixed
|
||||
*/
|
||||
public function handler(array $filters, array $params = []){
|
||||
public function handler(array $filters, array $params = [])
|
||||
{
|
||||
$this->filters = collect($filters);
|
||||
return $this->getResults($this->applyFiltersToQuery(), $params);
|
||||
}
|
||||
|
||||
@@ -10,4 +10,4 @@ interface Steppable
|
||||
|
||||
public function steps(): morphMany;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@ use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Tymon\JWTAuth\JWT;
|
||||
|
||||
class GeneratesAuthenticationToken {
|
||||
class GeneratesAuthenticationToken
|
||||
{
|
||||
|
||||
/** @var JWT */
|
||||
private $builder;
|
||||
@@ -21,7 +22,8 @@ class GeneratesAuthenticationToken {
|
||||
* GeneratesAuthenticationToken constructor.
|
||||
* @param JWT $builder
|
||||
*/
|
||||
public function __construct(JWT $builder) {
|
||||
public function __construct(JWT $builder)
|
||||
{
|
||||
$this->builder = $builder;
|
||||
}
|
||||
|
||||
@@ -31,15 +33,16 @@ class GeneratesAuthenticationToken {
|
||||
* @param bool $rememberUser
|
||||
* @return string
|
||||
*/
|
||||
public function execute(User $user, bool $rememberUser = false): string {
|
||||
public function execute(User $user, bool $rememberUser = false): string
|
||||
{
|
||||
|
||||
$this->builder->manager()->setBlacklistEnabled(false);
|
||||
|
||||
// generate token for the customer
|
||||
$this->builder->factory()->setTTL(Carbon::now()->addDay()->timestamp);
|
||||
$this->builder->factory()->setTTL(525600); // 1 year
|
||||
|
||||
if ($rememberUser === true) {
|
||||
$this->builder->factory()->setTTL(Carbon::now()->addWeek()->timestamp);
|
||||
$this->builder->factory()->setTTL(525600); // 1 year
|
||||
}
|
||||
|
||||
// set the claim based on the object
|
||||
@@ -52,7 +55,8 @@ class GeneratesAuthenticationToken {
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
private function setTokenClaims(User $user): void {
|
||||
private function setTokenClaims(User $user): void
|
||||
{
|
||||
|
||||
$claims = [
|
||||
'id' => $user->id,
|
||||
@@ -62,7 +66,7 @@ class GeneratesAuthenticationToken {
|
||||
'status' => $user->status
|
||||
];
|
||||
|
||||
if($user->type === RoleTypes::USER) {
|
||||
if ($user->type === RoleTypes::USER) {
|
||||
|
||||
/** @var Company $companyModule */
|
||||
$companyModule = $user->companyModule()->first();
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Accounts\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UserCreateValidation extends AbstractValidation
|
||||
{
|
||||
@@ -29,7 +30,7 @@ class UserCreateValidation extends AbstractValidation
|
||||
{
|
||||
return [
|
||||
'name' => 'required',
|
||||
'email' => 'required|unique:users',
|
||||
'email' => ['required', Rule::unique('users')],
|
||||
'password' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Accounts\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UserRegistrationValidation extends AbstractValidation
|
||||
{
|
||||
@@ -32,7 +33,7 @@ class UserRegistrationValidation extends AbstractValidation
|
||||
{
|
||||
return [
|
||||
'name' => 'required',
|
||||
'email' => 'required|email|max:255|unique:users,email',
|
||||
'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')],
|
||||
'password' => 'required|min:6|confirmed',
|
||||
'type' => 'required',
|
||||
'status' => 'required'
|
||||
|
||||
@@ -30,7 +30,7 @@ class CreatesClaudeResponse
|
||||
'anthropic-version' => config('anthropic.api_version', '2023-06-01'),
|
||||
'Content-Type' => 'application/json',
|
||||
])->post(config('anthropic.base_url') . '/v1/messages', [
|
||||
'model' => config('anthropic.default_model', 'claude-sonnet-4-5-20250929'),
|
||||
'model' => !empty($model) ? $model : config('anthropic.default_model', 'claude-sonnet-4-5-20250929'),
|
||||
'max_tokens' => 8192,
|
||||
'messages' => [
|
||||
[
|
||||
|
||||
@@ -5,8 +5,10 @@ namespace App\Classes\Modules\Documents\DataTransferObjects;
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
use App\Classes\ValueObjects\Constants\FileType;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Intervention\Image\ImageManager;
|
||||
use Intervention\Image\Drivers\Gd\Driver;
|
||||
|
||||
class FileObject implements DataTransferObject
|
||||
{
|
||||
@@ -28,7 +30,13 @@ class FileObject implements DataTransferObject
|
||||
*/
|
||||
public function getData()
|
||||
{
|
||||
return in_array($this->getExtension(), ['pdf', 'excel']) ? $this->data : (new imageManager())->make($this->data);
|
||||
// intervention/image v2: old
|
||||
// return in_array($this->getExtension(), ['pdf', 'excel']) ? $this->data : (new imageManager())->make($this->data);
|
||||
|
||||
// intervention/image v3: new
|
||||
return in_array($this->getExtension(), ['pdf', 'excel'])
|
||||
? $this->data
|
||||
: (new ImageManager(new Driver()))->read($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,9 +74,10 @@ class FileObject implements DataTransferObject
|
||||
*/
|
||||
public function getDecodedData(): string
|
||||
{
|
||||
// intervention/image v3: Use encode()->toDataUri() instead of encode('data-url')->encoded
|
||||
return in_array($this->getExtension(), ['pdf', 'excel']) ?
|
||||
base64_decode((explode('base64,', $this->getData()))[1]):
|
||||
$this->getData()->encode('data-url')->encoded;
|
||||
$this->getData()->encode()->toDataUri();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -66,17 +66,22 @@ class ConvertsBase64ToFile
|
||||
$suffix = $size !== 'original' ? '_'.$size : '';
|
||||
|
||||
if($size !== 'original') {
|
||||
$thumbnail = $file->getData()->widen($value, function ($constraint) {
|
||||
|
||||
$constraint->upsize();
|
||||
// intervention/image v2: old
|
||||
// $thumbnail = $file->getData()->widen($value, function ($constraint) {
|
||||
// $constraint->upsize();
|
||||
// })->heighten($value, function ($constraint) {
|
||||
// $constraint->upsize();
|
||||
// });
|
||||
// $file->setData($thumbnail->encode('data-url')->encoded);
|
||||
|
||||
})->heighten($value, function ($constraint) {
|
||||
|
||||
$constraint->upsize();
|
||||
// intervention/image v3: Use scaleDown() instead of widen()/heighten()
|
||||
// scaleDown() maintains aspect ratio and prevents upsizing by default
|
||||
$thumbnail = $file->getData()->scaleDown(width: $value, height: $value);
|
||||
|
||||
});
|
||||
|
||||
$file->setData($thumbnail->encode('data-url')->encoded);
|
||||
// intervention/image v3: Use encode()->toDataUri() instead of encode('data-url')->encoded
|
||||
$file->setData($thumbnail->encode()->toDataUri());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,14 +19,18 @@ class CreatesFiles extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
$models = [];
|
||||
|
||||
// foreach ($object->getFiles() as $file) {
|
||||
// $model = new File(['file' => $file]);
|
||||
// $models[] = $this->handler($document->files(), $model);
|
||||
// }
|
||||
|
||||
foreach ($object->getFiles() as $file) {
|
||||
|
||||
$model = new File(['file' => $file]);
|
||||
$fileData = is_string($file) ? json_decode($file, true) : $file;
|
||||
$model = new File(['file' => $fileData]);
|
||||
$models[] = $this->handler($document->files(), $model);
|
||||
|
||||
}
|
||||
|
||||
return $models;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanFetchOrder;
|
||||
use App\Http\Resources\OrderPackagesOriginWarehouseResource;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchOrderPackagesOriginWarehouseV2Logic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Retrieved Order Packages Origin Warehouse',
|
||||
'message' => 'You have successfully retrieved an order packages'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var CanFetchOrder */
|
||||
private $canFetchOrder;
|
||||
|
||||
/** @var FetchesOrder */
|
||||
private $fetchesOrder;
|
||||
|
||||
/**
|
||||
* FetchOrderPackagesOriginWarehouseV2Logic constructor.
|
||||
* @param CanFetchOrder $canFetchOrder
|
||||
* @param FetchesOrder $fetchesOrder
|
||||
*/
|
||||
public function __construct(CanFetchOrder $canFetchOrder, FetchesOrder $fetchesOrder)
|
||||
{
|
||||
$this->canFetchOrder = $canFetchOrder;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$this->canFetchOrder->passes();
|
||||
|
||||
$query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]);
|
||||
|
||||
//Can refer FetchOrderPackagesLogic for different type of OrderPackages Resources
|
||||
return $this->resourceResponse(new OrderPackagesOriginWarehouseResource($query));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,6 +15,10 @@ use App\Classes\Modules\OrderSteps\DataTransferObjects\StepsObject;
|
||||
use App\Classes\Modules\OrderSteps\Services\UpdatesOrderSteps;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (9 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class ConfirmOrderProcessor
|
||||
{
|
||||
private $canConfirmOrder;
|
||||
@@ -42,6 +46,8 @@ class ConfirmOrderProcessor
|
||||
//Only Processing Step is created at this point
|
||||
$orderStep = $order->orderSteps[0];
|
||||
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 9 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
$orderStepObject = new StepsObject(
|
||||
0,
|
||||
$orderStep->reference,
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||
use App\Models\Address;
|
||||
use App\Models\CompanyModule;
|
||||
|
||||
class ResolveIzyimQrWarehousePrefix
|
||||
{
|
||||
public const NEW_LOCATION_PREFIX_MAP = [
|
||||
'kuching' => 'KCH-',
|
||||
'bintulu' => 'BNT-',
|
||||
'miri' => 'MIRI-',
|
||||
];
|
||||
|
||||
public function execute(CompanyModule $originWarehouse, Address $deliveryAddress): string
|
||||
{
|
||||
$warehousePrefix = '';
|
||||
|
||||
if ($originWarehouse->reference === WarehouseReferences::YD_YIWU) {
|
||||
$warehousePrefix = 'YW/';
|
||||
}
|
||||
|
||||
$stateName = strtolower((string) optional($deliveryAddress->state)->name);
|
||||
$districtName = strtolower((string) optional($deliveryAddress->district)->name);
|
||||
|
||||
if (in_array($originWarehouse->reference, [WarehouseReferences::YD_GUANG_ZHOU, WarehouseReferences::YD_GUANG_ZHOU_2, WarehouseReferences::YD_FS_EAST_MALAYSIA, WarehouseReferences::YD_FS_WEST_MALAYSIA])) {
|
||||
$warehousePrefix = 'YD/';
|
||||
|
||||
if (strtolower($deliveryAddress->state->name) === 'sabah' || strtolower($deliveryAddress->state->name) === 'labuan' || in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KK/';
|
||||
}
|
||||
|
||||
if (strtolower($deliveryAddress->state->name) === 'sarawak' && !in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KU/';
|
||||
}
|
||||
|
||||
if (strtolower($deliveryAddress->state->name) === 'johor') {
|
||||
$warehousePrefix = 'NX/';
|
||||
}
|
||||
}
|
||||
|
||||
if (isset(self::NEW_LOCATION_PREFIX_MAP[$districtName])) {
|
||||
$warehousePrefix = self::NEW_LOCATION_PREFIX_MAP[$districtName];
|
||||
}
|
||||
|
||||
return $warehousePrefix;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Orders\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ConfirmOrderValidation extends AbstractValidation
|
||||
{
|
||||
@@ -26,7 +27,7 @@ class ConfirmOrderValidation extends AbstractValidation
|
||||
{
|
||||
|
||||
return [
|
||||
'id' => 'required|exists:orders,id'
|
||||
'id' => ['required', Rule::exists('orders', 'id')]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Orders\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class OrderRoleValidation extends AbstractValidation
|
||||
{
|
||||
@@ -28,8 +29,8 @@ class OrderRoleValidation extends AbstractValidation
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
return [
|
||||
'order_id' => 'required|exists:orders,id',
|
||||
'company_module_id' => 'required|exists:company_modules,id',
|
||||
'order_id' => ['required', Rule::exists('orders', 'id')],
|
||||
'company_module_id' => ['required', Rule::exists('company_modules', 'id')],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
+39
@@ -4,15 +4,19 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Jobs\Commands\V2\YD\FetchPackingListsFromYdPortalV2CommandJob;
|
||||
use App\Classes\Modules\PackingLists\Services\DeletesPackingList;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
|
||||
use App\Classes\Modules\PackingLists\Standards\Rules\CanDeletePackingList;
|
||||
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Models\PackingList;
|
||||
use Carbon\Carbon;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class DeletePackingListByPackageIdLogic extends AbstractControllerLogic
|
||||
{
|
||||
@@ -69,13 +73,48 @@ class DeletePackingListByPackageIdLogic extends AbstractControllerLogic
|
||||
|
||||
$packingList = PackingList::where('reference', $packingList->reference)->get();
|
||||
|
||||
foreach ($packingList as $singlePL) {
|
||||
$invoice_transaction = $singlePL->transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get();
|
||||
if($invoice_transaction->count() > 0){
|
||||
throw new ErrorException('Effective 2026, packages cannot be deleted if a related invoice has already been generated. Please delete the invoice first before proceeding with this action. Please contact IT support for more information.');
|
||||
}
|
||||
}
|
||||
|
||||
$childPackingList = PackingList::where('owner_type', PackingList::class)->whereIn('owner_id', $packingList->pluck('id'))->get();
|
||||
|
||||
$packingList->each->delete();
|
||||
|
||||
$childPackingList->each->delete();
|
||||
|
||||
$jobs1 = $this->fetchPackingListsFromYdPortalV2CommandJobs();
|
||||
foreach ($jobs1 as $index => $job) {
|
||||
dispatch($job)->delay(now()->addSeconds($index * 2));
|
||||
}
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
|
||||
private function fetchPackingListsFromYdPortalV2CommandJobs()
|
||||
{
|
||||
$jobs = [];
|
||||
$count = 0;
|
||||
|
||||
// Always take last 10 days INCLUDING today
|
||||
for ($x = 0; $x < 10; $x++) {
|
||||
|
||||
$startDate = Carbon::today()->subDays($x)->startOfDay();
|
||||
$endDate = Carbon::today()->subDays($x - 1)->startOfDay();
|
||||
|
||||
$jobs[] = new FetchPackingListsFromYdPortalV2CommandJob($startDate, $endDate);
|
||||
|
||||
Log::info('Dispatched FetchPackingListsFromYdPortalV2CommandJob for start date: ' . $startDate . ', end date: ' . $endDate);
|
||||
$count++;
|
||||
}
|
||||
|
||||
Log::info('Total FetchPackingListsFromYdPortalV2CommandJob dispatched: ' . $count);
|
||||
|
||||
return $jobs;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+9
-7
@@ -1,15 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackingList\Packages\Items\ControllersLogic;
|
||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\PackingLists\Services\Packages\Items\CreatesItem;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\Items\CanCreatePackageItem;
|
||||
use App\Classes\Modules\PackingLists\DataTransferObjects\ItemObject;
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||
use App\Classes\Modules\Packages\Services\FetchesPackage;
|
||||
use App\Classes\Modules\PackingLists\DataTransferObjects\ItemObject;
|
||||
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanCreatePackageItem;
|
||||
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
|
||||
use App\Http\Resources\ItemResource;
|
||||
use ErrorException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -21,7 +21,8 @@ class CreatePackageItemLogic extends AbstractControllerLogic
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
protected function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'Created PackageItem',
|
||||
'message' => 'You have successfully created a new PackageItem'
|
||||
@@ -57,7 +58,7 @@ class CreatePackageItemLogic extends AbstractControllerLogic
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
public function logic(Request $request): JsonResponse
|
||||
{
|
||||
|
||||
$package = $this->fetchesPackage->execute(['id' => $request->input('package_id')]);
|
||||
@@ -73,7 +74,8 @@ class CreatePackageItemLogic extends AbstractControllerLogic
|
||||
$request->input('uom'),
|
||||
$request->input('price'),
|
||||
$request->input('total'),
|
||||
ApprovalStatus::PENDING_SUBMISSION);
|
||||
ApprovalStatus::PENDING_SUBMISSION
|
||||
);
|
||||
|
||||
$this->canCreatePackageItem->passes($object);
|
||||
|
||||
|
||||
+6
-5
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackageItems\ControllersLogic;
|
||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
@@ -16,7 +16,8 @@ class DeletePackageItemLogic extends AbstractControllerLogic
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
protected function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'Deleted PackageItem',
|
||||
'message' => 'You have successfully deleted a PackageItem'
|
||||
@@ -31,7 +32,7 @@ class DeletePackageItemLogic extends AbstractControllerLogic
|
||||
private $deletesPackageItem;
|
||||
|
||||
/** @var FetchesItem */
|
||||
private $fetchesPackageItem;
|
||||
private $fetchesPackageItem;
|
||||
|
||||
/**
|
||||
* DeletePackageItemControllersLogic constructor.
|
||||
@@ -52,7 +53,7 @@ class DeletePackageItemLogic extends AbstractControllerLogic
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
public function logic(Request $request): JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -64,7 +65,7 @@ class DeletePackageItemLogic extends AbstractControllerLogic
|
||||
|
||||
return $this->response([]);
|
||||
|
||||
} catch (\Exception $exception){
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackageItems\ControllersLogic;
|
||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
@@ -17,7 +17,8 @@ class FetchPackageItemLogic extends AbstractControllerLogic
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
protected function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'Retrieved PackageItem',
|
||||
'message' => 'You have successfully retrieved a PackageItem'
|
||||
@@ -47,7 +48,7 @@ class FetchPackageItemLogic extends AbstractControllerLogic
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
public function logic(Request $request): JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -57,7 +58,7 @@ class FetchPackageItemLogic extends AbstractControllerLogic
|
||||
|
||||
return $this->resourceResponse(new ItemResource($query));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackageItems\ControllersLogic;
|
||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
@@ -17,7 +17,8 @@ class ListPackageItemsLogic extends AbstractControllerLogic
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
protected function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'Retrieved PackageItems',
|
||||
'message' => 'You have successfully retrieved a list of PackageItems'
|
||||
@@ -47,7 +48,7 @@ class ListPackageItemsLogic extends AbstractControllerLogic
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
public function logic(Request $request): JsonResponse
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -57,7 +58,7 @@ class ListPackageItemsLogic extends AbstractControllerLogic
|
||||
|
||||
return $this->collectionResponse(ItemResource::collection($query));
|
||||
|
||||
} catch (\Exception $exception){
|
||||
} catch (\Exception $exception) {
|
||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||
}
|
||||
|
||||
|
||||
+6
-4
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackageItems\ControllersLogic;
|
||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items;
|
||||
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
@@ -19,7 +19,8 @@ class UpdatePackageItemLogic extends AbstractControllerLogic
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
protected function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'Updated PackageItem',
|
||||
'message' => 'You have successfully updated the PackageItem'
|
||||
@@ -54,7 +55,7 @@ class UpdatePackageItemLogic extends AbstractControllerLogic
|
||||
* @return JsonResponse
|
||||
* @throws ErrorException
|
||||
*/
|
||||
public function logic(Request $request) : JsonResponse
|
||||
public function logic(Request $request): JsonResponse
|
||||
{
|
||||
$packageItem = $this->fetchesPackageItem->execute(['id' => $request->route('id')]);
|
||||
|
||||
@@ -67,7 +68,8 @@ class UpdatePackageItemLogic extends AbstractControllerLogic
|
||||
$request->input('uom'),
|
||||
$request->input('price'),
|
||||
$request->input('total'),
|
||||
$request->input('status'));
|
||||
$request->input('status')
|
||||
);
|
||||
|
||||
$this->canUpdatePackageItem->passes($object);
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
||||
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Classes\Modules\Steps\Services\CreatesStep;
|
||||
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
|
||||
use App\Classes\Modules\Transports\Services\CreatesTransport;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@ use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
||||
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Classes\Modules\Steps\Services\CreatesStep;
|
||||
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
|
||||
use App\Classes\Modules\Transports\Services\CreatesTransport;
|
||||
|
||||
+13
-6
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackingList\Processors;
|
||||
namespace App\Classes\Modules\PackingLists\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Processors\UpdatesOrderCurrentStepProcessor;
|
||||
@@ -21,9 +21,13 @@ use App\Models\Step;
|
||||
use App\Classes\Jobs\UnityLogin;
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Classes\General\Interfaces\Steppable;
|
||||
use function PHPSTORM_META\map;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (5 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class GenerateShippingOrderStepsProcessor
|
||||
{
|
||||
/** @var CreatesManySteps */
|
||||
@@ -44,13 +48,16 @@ class GenerateShippingOrderStepsProcessor
|
||||
}
|
||||
|
||||
|
||||
public function execute(Steppable $owner, CompanyModule $appointee, array $contract_obligation_list = []){
|
||||
public function execute(Steppable $owner, CompanyModule $appointee, array $contract_obligation_list = [])
|
||||
{
|
||||
|
||||
$obligations = $contract_obligation_list;
|
||||
|
||||
$this->createsManyStep->execute($owner, array_map(function($obligation) use ($appointee) {
|
||||
return new StepsObject($appointee->id, $obligation->name,true, $step->sequence??0, 0,0, null,0, $step->hash_id);
|
||||
}, $obligations));
|
||||
$this->createsManyStep->execute($owner, array_map(function ($obligation) use ($appointee) {
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 5 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
return new StepsObject($appointee->id, $obligation->name, true, $obligation->sequence ?? 0, $obligation->hash_id ?? null);
|
||||
}, $obligations));
|
||||
|
||||
$this->updateStepProcessors->execute(OrderSteps::PROCESSING);
|
||||
|
||||
|
||||
-1
@@ -10,7 +10,6 @@ use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
|
||||
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
// use App\Classes\Modules\Steps\Services\CreatesStep;
|
||||
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
|
||||
// use App\Classes\Modules\Transports\Services\CreatesTransport;
|
||||
|
||||
+45
-16
@@ -221,13 +221,18 @@ class FetchByTrakingNoYdPortalV2Processor
|
||||
{$remark}
|
||||
What are the ETA and ETD?";
|
||||
Log::info('prompt: '.$userPrompt);
|
||||
$result = $this->createsClaudeResponse->execute($userPrompt);
|
||||
$result = $this->createsClaudeResponse->execute($userPrompt, 'claude-haiku-4-5-20251001');
|
||||
Log::info('result (json_encoded): '.json_encode($result));
|
||||
// $content = $result['choices'][0]['message']['content'] ?? null;
|
||||
$content = $result['content'][0]['text'] ?? '[]';
|
||||
Log::info('content (json_encoded):'. json_encode($content));
|
||||
if ($content) {
|
||||
$parsedContent = json_decode($content, true);
|
||||
Log::info('raw ETA/ETD content: ' . $content);
|
||||
|
||||
// Remove markdown code fences if they exist
|
||||
$contentClean = preg_replace('/^```json\s*|\s*```$/', '', $content);
|
||||
$contentClean = trim($contentClean);
|
||||
|
||||
if ($contentClean) {
|
||||
$parsedContent = json_decode($contentClean, true);
|
||||
|
||||
// $parsedContent = json_decode(str_replace("'", '"', $content), true);
|
||||
if (is_array($parsedContent) && isset($parsedContent['ETA'], $parsedContent['ETD'])) {
|
||||
@@ -327,22 +332,46 @@ class FetchByTrakingNoYdPortalV2Processor
|
||||
|
||||
private function translateTracking($textToTranslate)
|
||||
{
|
||||
$userPrompt = "Please translate mandarin to english and return result in this format, e.g. {'mandarin': '.$textToTranslate.', 'english': ''}. ".$textToTranslate." ";
|
||||
Log::info('prompt: '.$userPrompt);
|
||||
$result = $this->createsClaudeResponse->execute($userPrompt);
|
||||
Log::info('result (json_encoded): '.json_encode($result));
|
||||
// $content = $result['choices'][0]['message']['content'] ?? null;
|
||||
$content = $result['content'][0]['text'] ?? '[]';
|
||||
Log::info('content (json_encoded):'. json_encode($content));
|
||||
$parsedContent = json_decode(str_replace("'", '"', $content), true);
|
||||
// Return null immediately if no Mandarin character is present
|
||||
if (!preg_match('/\p{Han}/u', $textToTranslate)) {
|
||||
Log::info('No Mandarin characters detected, skipping translation.');
|
||||
return null;
|
||||
}
|
||||
|
||||
if($parsedContent && $parsedContent['english']){
|
||||
$userPrompt = "Translate the following Mandarin text to English.
|
||||
|
||||
You must respond with raw JSON only.
|
||||
No explanations.
|
||||
No markdown.
|
||||
No code fences.
|
||||
No comments.
|
||||
Only this JSON structure:
|
||||
|
||||
{\"mandarin\": \"".$textToTranslate."\", \"english\": \"<translation>\"}
|
||||
|
||||
Text: ".$textToTranslate;
|
||||
|
||||
Log::info('prompt: '.$userPrompt);
|
||||
$result = $this->createsClaudeResponse->execute($userPrompt, 'claude-haiku-4-5-20251001');
|
||||
|
||||
Log::info('result (json_encoded): '.json_encode($result));
|
||||
|
||||
$content = $result['content'][0]['text'] ?? '[]';
|
||||
Log::info('raw content: ' . $content);
|
||||
|
||||
// Remove markdown code fences if they exist
|
||||
$contentClean = preg_replace('/^```json\s*|\s*```$/', '', $content);
|
||||
$contentClean = trim($contentClean);
|
||||
|
||||
// Decode JSON safely
|
||||
$parsedContent = json_decode($contentClean, true);
|
||||
|
||||
if($parsedContent && isset($parsedContent['english'])){
|
||||
Log::info('Translated Text: ' . $parsedContent['english']);
|
||||
return $parsedContent['english'];
|
||||
}
|
||||
else{
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -18,7 +18,6 @@ use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
||||
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Classes\Modules\Steps\Services\CreatesStep;
|
||||
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
|
||||
use App\Classes\Modules\Transports\Services\CreatesTransport;
|
||||
|
||||
+10
@@ -29,6 +29,7 @@ use App\Models\Order;
|
||||
use App\Models\PackingList;
|
||||
use Carbon\Carbon;
|
||||
use DateTime;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@@ -158,6 +159,7 @@ class FetchPackingListsFromYdPortalV2Processor
|
||||
$packingListReference = $row->expressno;
|
||||
|
||||
try{
|
||||
Log::info('Fetch SHIPPING_PACKING_LIST expressno: ' . $row->expressno);
|
||||
$packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::SHIPPING_PACKING_LIST]);
|
||||
Log::info('Fetch SHIPPING_PACKING_LIST id: ' . $packingList->id);
|
||||
|
||||
@@ -175,6 +177,14 @@ class FetchPackingListsFromYdPortalV2Processor
|
||||
} catch (ResourceNotFoundException $exception) {
|
||||
Log::info('SHIPPING_PACKING_LIST/WAREHOUSE_RECEIVE_LIST NOT FOUND');
|
||||
|
||||
$lockKey = "FetchPackingListsFromYdPortalV2Processor-expressno:{$row->expressno}";
|
||||
$lock = Cache::lock($lockKey, 300);
|
||||
|
||||
if (!$lock->get()) {
|
||||
Log::info("SHIPPING_PACKING_LIST expressno {$row->expressno} is already being processed. Try again later.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$allow_contract) {
|
||||
$appointee_id = 2307;
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\PackingLists\Services;
|
||||
namespace App\Classes\Modules\PackingLists\Services\Packages\Items;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\PackingLists\DataTransferObjects\ItemObject;
|
||||
@@ -8,7 +8,8 @@ use App\Models\Item;
|
||||
|
||||
class UpdatesItem extends AbstractUpdateRecord
|
||||
{
|
||||
public function execute(Item $model, ItemObject $object) {
|
||||
public function execute(Item $model, ItemObject $object)
|
||||
{
|
||||
|
||||
$model->name = $object->getName();
|
||||
$model->reference = $object->getReference();
|
||||
|
||||
@@ -6,11 +6,17 @@ class AddItemToConstantValueArray
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @param array|string|null $array
|
||||
* @param $item
|
||||
* @return array
|
||||
*/
|
||||
public function execute($array, $item): array {
|
||||
// PHP 8.3: Ensure $array is always an array, even if JSON cast fails
|
||||
// Handle cases where value might be empty string, null, or invalid JSON
|
||||
if (!is_array($array)) {
|
||||
$array = [];
|
||||
}
|
||||
|
||||
$array[] = $item;
|
||||
sort($array);
|
||||
return $array;
|
||||
|
||||
@@ -19,7 +19,7 @@ class CreatesConstant extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
$model = new SegmentConstant();
|
||||
$model->reference = $object->getReference();
|
||||
$model->value = json_encode($object->getValue());
|
||||
$model->value = $object->getValue();
|
||||
|
||||
return $this->handler($segment->constants(), $model);
|
||||
}
|
||||
|
||||
@@ -6,11 +6,17 @@ class RemoveItemFromConstantValueArray
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @param array|string|null $array
|
||||
* @param $item
|
||||
* @return array
|
||||
*/
|
||||
public function execute($array, $item): array {
|
||||
// PHP 8.3: Ensure $array is always an array, even if JSON cast fails
|
||||
// Handle cases where value might be empty string, null, or invalid JSON
|
||||
if (!is_array($array)) {
|
||||
$array = [];
|
||||
}
|
||||
|
||||
foreach($array as $key => $value){
|
||||
if($array[$key] == $item){
|
||||
unset($array[$key]);
|
||||
|
||||
@@ -18,7 +18,7 @@ class UpdatesConstant extends AbstractUpdateRecord
|
||||
public function execute(SegmentConstant $model, ConstantObject $object)
|
||||
{
|
||||
$model->reference = $object->getReference();
|
||||
$model->value = json_encode($object->getValue());
|
||||
$model->value = $object->getValue();
|
||||
|
||||
return $this->handler($model);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\Steps;
|
||||
use App\Classes\ValueObjects\Constants\OrderType;
|
||||
use App\Http\Resources\StepResource;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Classes\Modules\Steps\Services\FetchesSteps;
|
||||
use App\Classes\Modules\Steps\Processors\CompletesStepProcessor;
|
||||
|
||||
|
||||
@@ -19,6 +19,10 @@ use App\Classes\Modules\Orders\Processors\UpdatesOrderCurrentStepProcessor;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (9 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class CompletesStepProcessor
|
||||
{
|
||||
|
||||
@@ -52,6 +56,8 @@ class CompletesStepProcessor
|
||||
|
||||
//Unity Contract Obligation Completed Status = 3
|
||||
if(isset($completed->status) && $completed->status == OrderStatus::COMPLETE){
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 9 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
$orderStepObject = new StepsObject(
|
||||
$contractEntity->company_module_id,
|
||||
$orderStep->reference,
|
||||
|
||||
@@ -17,6 +17,10 @@ use App\Models\Order;
|
||||
use App\Models\Step;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (9 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class CreateStepsProcessor
|
||||
{
|
||||
private $canCreateStep;
|
||||
@@ -46,6 +50,8 @@ class CreateStepsProcessor
|
||||
*/
|
||||
public function execute(Order $order, string $currentStep, $appointee_id){
|
||||
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 9 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
$stepObject = new StepsObject( $appointee_id, $currentStep, true, 0, OrderStatus::PROCESSING, 0, null, 0, null);
|
||||
|
||||
$this->canCreateStep->passes($stepObject);
|
||||
|
||||
@@ -20,7 +20,10 @@ use App\Classes\Jobs\UnityLogin;
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (9 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class GenerateStepsProcessor
|
||||
{
|
||||
private $updatesOrderCurrentStep;
|
||||
@@ -46,6 +49,8 @@ class GenerateStepsProcessor
|
||||
//TODO: Collect hash_id & search company module table for appointee id
|
||||
|
||||
foreach($obligations as $step){
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 9 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
$orderSteps[] = new StepsObject(
|
||||
$orderRoles[0]->company_module_id,
|
||||
$step->name,
|
||||
|
||||
@@ -14,6 +14,10 @@ use App\Classes\ValueObjects\Constants\Steps;
|
||||
use App\Models\Order;
|
||||
use App\Models\Step;
|
||||
|
||||
/**
|
||||
* @deprecated This class uses incorrect StepsObject instantiation (9 parameters instead of 4)
|
||||
* FIXME: Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
*/
|
||||
class UpdateStepsProcessor
|
||||
{
|
||||
private $canUpdateStep;
|
||||
@@ -31,6 +35,8 @@ class UpdateStepsProcessor
|
||||
|
||||
public function execute(string $currentStep){
|
||||
|
||||
// FIXME: Incorrect StepsObject instantiation - uses 9 parameters instead of correct 4-parameter pattern
|
||||
// Correct pattern: new StepsObject($appointee_id, $obligation->reference, $obligation->sequence, $obligation->hash_id)
|
||||
$orderStepsObject = new StepsObject(0,$currentStep, 0, 0, 1, 1, null, 0, null);
|
||||
|
||||
$this->canUpdateStep->passes($orderStepsObject);
|
||||
|
||||
@@ -7,22 +7,30 @@ use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Models\Step;
|
||||
use App\Models\Order;
|
||||
use App\Classes\General\Interfaces\Steppable;
|
||||
|
||||
/**
|
||||
* @deprecated This class calls undefined methods on StepsObject (getPrimary, getHashId)
|
||||
* FIXME: StepsObject only has: getAppointeeId(), getReference(), getSequence(), getObligationId()
|
||||
*/
|
||||
class CreatesManySteps extends AbstractUpdateRelationshipRecord
|
||||
{
|
||||
|
||||
public function execute(Steppable $owner, array $orderSteps) {
|
||||
public function execute(Steppable $owner, array $orderSteps)
|
||||
{
|
||||
|
||||
$orderStepsModel=[];
|
||||
foreach($orderSteps as $step){
|
||||
$orderStepsModel[]=[
|
||||
$orderStepsModel = [];
|
||||
foreach ($orderSteps as $step) {
|
||||
// FIXME: Calling undefined getter methods on StepsObject
|
||||
// StepsObject only has: getAppointeeId(), getReference(), getSequence(), getObligationId()
|
||||
$orderStepsModel[] = [
|
||||
'appointee_id' => $step->getAppointeeId(),
|
||||
'reference' => $step->getReference(),
|
||||
'primary' => $step->getPrimary(),
|
||||
'primary' => $step->getPrimary(), // UNDEFINED METHOD
|
||||
'sequence' => $step->getSequence(),
|
||||
'status' => 0,
|
||||
'contract_status' => 0,
|
||||
'unity_hash_id' => $step->getHashId(),
|
||||
'unity_hash_id' => $step->getHashId(), // UNDEFINED METHOD
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -6,14 +6,21 @@ use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
|
||||
use App\Models\Step;
|
||||
|
||||
/**
|
||||
* @deprecated This class calls undefined methods on StepsObject (getStatus, getContractStatus, getCompletedDate)
|
||||
* FIXME: StepsObject only has: getAppointeeId(), getReference(), getSequence(), getObligationId()
|
||||
*/
|
||||
class UpdatesSteps extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(Step $model, StepsObject $object) {
|
||||
|
||||
$model->status = $object->getStatus();
|
||||
$model->contract_status = $object->getContractStatus();
|
||||
$model->complete_date = $object->getCompletedDate();
|
||||
// FIXME: Calling undefined getter methods on StepsObject
|
||||
// StepsObject only has: getAppointeeId(), getReference(), getSequence(), getObligationId()
|
||||
// The following methods DO NOT EXIST:
|
||||
$model->status = $object->getStatus(); // UNDEFINED METHOD
|
||||
$model->contract_status = $object->getContractStatus(); // UNDEFINED METHOD
|
||||
$model->complete_date = $object->getCompletedDate(); // UNDEFINED METHOD
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Transactions\Services\ListsGroups;
|
||||
use App\Http\Resources\GroupPaidInvoicesPNBPageResource;
|
||||
use App\Http\Resources\GroupPendingInvoicesPNBPageResource;
|
||||
use App\Http\Resources\GroupResource;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -45,6 +46,9 @@ class ListGroupsLogic extends AbstractControllerLogic
|
||||
if($section === 'customerPaidGroupInvoiceComponent'){
|
||||
return $this->collectionResponse(GroupPaidInvoicesPNBPageResource::collection($query));
|
||||
}
|
||||
else if($section === 'customerGroupPaymentInProgressInvoiceComponent'){
|
||||
return $this->collectionResponse(GroupPendingInvoicesPNBPageResource::collection($query));
|
||||
}
|
||||
else{
|
||||
return $this->collectionResponse(GroupResource::collection($query));
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ class ListTransactionsLogic extends AbstractControllerLogic
|
||||
{
|
||||
$query = $this->listsTransactions->execute($this->listsTransactions->deserializeFilters($request->input('filters')));
|
||||
foreach ($query->items() as $item) {
|
||||
if($item instanceof \App\Models\Transaction && $item->owner->owner->companyModule){
|
||||
if($item instanceof \App\Models\Transaction && $item->owner && $item->owner->owner->companyModule){
|
||||
$item['is_einvoice_applicable'] = $item->owner->owner->companyModule->company->e_invoice === 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace App\Classes\Modules\Transports\Services;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\Transport;
|
||||
|
||||
class updatesTransportStatus extends AbstractUpdateRecord
|
||||
class UpdatesTransportStatus extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
@@ -14,7 +14,8 @@ class updatesTransportStatus extends AbstractUpdateRecord
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Transport $model, int $status) {
|
||||
public function execute(Transport $model, int $status)
|
||||
{
|
||||
|
||||
$model->status = $status;
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ class PermitsReminderEmail extends AbstractEmail
|
||||
public function toMail()
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject('Permits Renew Remidner Email')
|
||||
->subject('Permits Renew Reminder Email')
|
||||
->view('emails.reminder.permits_reminder', ['user' => $this->user, 'reminders' => $this->reminders]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,4 +22,8 @@ class SegmentConstants
|
||||
public const OUTSTATION_POSTCODE = 'OUTSTATION_POSTCODE';
|
||||
|
||||
public const CUSTOMER_RATE = 'CUSTOMER_RATE';
|
||||
}
|
||||
|
||||
public const SERVICE_TYPE = 'SERVICE_TYPE'; //syntax fix, likely no longer used
|
||||
|
||||
public const CUSTOM_SERVICE_TYPE = 'CUSTOM_SERVICE_TYPE'; //syntax fix, likely no longer used
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ class ProcessYDPortalDataV2Command extends Command
|
||||
$jobs1 = $this->fetchPackingListsFromYdPortalV2CommandJobs();
|
||||
$jobs2 = $this->fetchContainersYdPortalV3CommandJobs();
|
||||
$jobs3 = $this->fetchContainersUpdatesYdPortalV3CommandJob();
|
||||
$jobs4 = $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs();
|
||||
// $jobs4 = $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs();
|
||||
|
||||
// The following job is intentionally excluded
|
||||
////$jobs5 = array_merge($jobs, $this->fetchOrderListsFromYdPortalV2CommandJob());
|
||||
@@ -66,10 +66,10 @@ class ProcessYDPortalDataV2Command extends Command
|
||||
dispatch($job);
|
||||
}
|
||||
|
||||
foreach ($jobs4 as $index => $job) {
|
||||
$delayInSeconds = intdiv($index, 2);
|
||||
dispatch($job)->delay(now()->addSeconds($delayInSeconds));
|
||||
}
|
||||
// foreach ($jobs4 as $index => $job) {
|
||||
// $delayInSeconds = intdiv($index, 2);
|
||||
// dispatch($job)->delay(now()->addSeconds($delayInSeconds));
|
||||
// }
|
||||
}
|
||||
|
||||
private function fetchPackingListsFromYdPortalV2CommandJobs(){
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use App\Classes\Jobs\FetchContainersStatusUpdateFromVTPortalJob;
|
||||
use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob;
|
||||
use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob;
|
||||
use App\Classes\Jobs\FetchPackingListFromVTPortalJob;
|
||||
use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
//Commands Version 2: Laravel Vapor with AWS
|
||||
$isEnabled = env('COMMANDS_V2_ENABLED', false);
|
||||
if($isEnabled){
|
||||
// $schedule->command('dummy-command')
|
||||
// ->everyFiveMinutes()
|
||||
// ->withoutOverlapping();
|
||||
|
||||
$schedule->command('housekeeping-s3-files-command')
|
||||
->dailyAt('01:00')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('password-reset-token-expriration-check-command')
|
||||
->everySixHours()
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('new-user-registration-expire-check-command')
|
||||
->everySixHours()
|
||||
->withoutOverlapping();
|
||||
|
||||
if(env('APP_ENV') === 'production'){
|
||||
$schedule->command('curl-vt-command')
|
||||
->cron('0 8 * * *')
|
||||
->withoutOverlapping();
|
||||
|
||||
// $schedule->command('curl-yd-order-list-command')
|
||||
// ->cron('0 9-18/3 * * *')
|
||||
// ->withoutOverlapping();
|
||||
|
||||
$schedule->command('process-yd-by-traking-no-data-command')
|
||||
->cron('0 8,11,14,17 * * *')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('process-yd-portal-data-command')
|
||||
->cron('0 9,12,15,18 * * *') //->cron('0 9-18/3 * * *')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('fix-packinglist-command')
|
||||
->cron('30 9-18/3 * * *')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('fix-duplicate-container-reference-command')
|
||||
->cron('0 1 * * *')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('invoice-generate-command')
|
||||
->hourly()
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('billplz-failed-callback-fix-command')
|
||||
->hourly()
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('check-storage-invoices-group-transactions-command')
|
||||
->dailyAt('0:01')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('permits-reminder-send-command')
|
||||
->dailyAt('09:30')
|
||||
->withoutOverlapping();
|
||||
|
||||
$schedule->command('process-delayed-jobs-command')
|
||||
->everyFiveMinutes()
|
||||
->withoutOverlapping();
|
||||
}
|
||||
else if (env('APP_ENV') === 'development'){
|
||||
$schedule->command('process-delayed-jobs-command')
|
||||
->everyTwoHours()
|
||||
->withoutOverlapping();
|
||||
}
|
||||
}
|
||||
//Commands Version 1: Before AWS
|
||||
else
|
||||
{
|
||||
$schedule->command('command:curlVTCommand')
|
||||
->cron('0 8 * * *')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/curlvt.log');
|
||||
|
||||
$schedule->command('command:curlYdOrderListCommand')
|
||||
->cron('0 9-18/3 * * *')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/curlyd.log');
|
||||
|
||||
$schedule->command('fix-packinglist')
|
||||
->cron('30 9-18/3 * * *')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/fix_packinglist.log');
|
||||
|
||||
// $schedule->command('command:curlYdOrderListCommand')
|
||||
// ->cron('0 9 * * *')
|
||||
// ->withoutOverlapping()
|
||||
// ->appendOutputTo (storage_path().'/logs/departure_email.log');
|
||||
|
||||
$schedule->command('fix-duplicate-container-reference')
|
||||
->cron('0 1 * * *')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/fix_duplicate_container_reference.log');
|
||||
|
||||
$schedule->command('invoice:generate')
|
||||
->hourly()
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/auto_generate_invoice.log');
|
||||
|
||||
$schedule->command('billplz-failed-callback:fix')
|
||||
->hourly()
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo (storage_path().'/logs/fix_failed_callback_from_billplz.log');
|
||||
|
||||
$schedule->command('check-storage-invoices-group-transactions')
|
||||
->dailyAt('0:01')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo(storage_path().'/logs/check_storage_invoices.log');
|
||||
|
||||
$schedule->command('permitsReminder:send')
|
||||
->dailyAt('09:30')
|
||||
->withoutOverlapping()
|
||||
->appendOutputTo(storage_path().'/logs/permits-reminder-send.log');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
$this->load(__DIR__.'/Commands/V2');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use App\Classes\ValueObjects\Response\ApiResponseObject;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Illuminate\Foundation\Http\Exceptions\MaintenanceModeException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* A list of the exception types that are not reported.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontReport = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* A list of the inputs that are never flashed for validation exceptions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param Throwable $exception
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function report(Throwable $exception)
|
||||
{
|
||||
if (env('LOG_STACK_TRACE', false)) {
|
||||
Log::error($exception->getMessage(), [
|
||||
'exception' => $exception,
|
||||
'stack_trace' => $exception->getTraceAsString(),
|
||||
]);
|
||||
}
|
||||
|
||||
parent::report($exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render an exception into an HTTP response.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Throwable $exception
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function render($request, Throwable $exception)
|
||||
{
|
||||
if ($exception instanceof MaintenanceModeException) {
|
||||
return response()
|
||||
->view('pages.errors.maintenance');
|
||||
}
|
||||
|
||||
if ($exception instanceof AuthenticationException) {
|
||||
return (new ApiResponseObject('Authentication', 'To keep your account secure we need to re-validate your account', HttpStatus::ACCESS_UNAUTHORISED))->handler();
|
||||
}
|
||||
|
||||
return parent::render($request, $exception);
|
||||
}
|
||||
}
|
||||
@@ -19,33 +19,33 @@ class ExportArrivedParcelController extends Controller
|
||||
{
|
||||
/**
|
||||
* ExportArrivedParcelController constructor.
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(Request $request)
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth.check');
|
||||
// $token = Auth::fromUser(User::find(1));
|
||||
// $request->headers->set('Authorization', 'Bearer '.$token);
|
||||
}
|
||||
|
||||
public function export(Request $request) {
|
||||
public function export(Request $request)
|
||||
{
|
||||
$startDate = $request->query('start_date');
|
||||
$endDate = $request->query('end_date');
|
||||
|
||||
$exportsPendingArrangementDeliveryList = new ExportsArrivedParcel($startDate, $endDate);
|
||||
$exportFileName = 'arrived-parcel.xlsx';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList)]);
|
||||
} else {
|
||||
$response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
public function summary(Request $request) {
|
||||
public function summary(Request $request)
|
||||
{
|
||||
|
||||
$validated = $request->validate([
|
||||
'startDate' => 'nullable|date_format:d-m-Y',
|
||||
@@ -66,38 +66,37 @@ class ExportArrivedParcelController extends Controller
|
||||
$exportsParcelsSummary = new ExportsParcel($startDate, $endDate);
|
||||
$exportFileName = 'parcel-summary.xls';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsParcelsSummary) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsParcelsSummary)]);
|
||||
} else {
|
||||
$response = $exportsParcelsSummary->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
public function guangZhou2ToJohor(Request $request) {
|
||||
public function guangZhou2ToJohor(Request $request)
|
||||
{
|
||||
$exportsWarehousePackingList = new ExportsWarehousePackingList();
|
||||
$exportFileName = 'guangzhou2-to-johor-summary.xls';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsWarehousePackingList) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsWarehousePackingList)]);
|
||||
} else {
|
||||
$response = $exportsWarehousePackingList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
public function aging(Request $request) {
|
||||
public function aging(Request $request)
|
||||
{
|
||||
$data = new ExportsAgingList();
|
||||
$exportFileName = 'aging_report.xls';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $data) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $data)]);
|
||||
} else {
|
||||
$response = $data->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
|
||||
@@ -15,35 +15,34 @@ class ExportPendingArrangementPackingListController extends Controller
|
||||
{
|
||||
/**
|
||||
* ExportPendingArrangementPackingListController constructor.
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(Request $request)
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth.check');
|
||||
}
|
||||
|
||||
public function export(Request $request) {
|
||||
public function export(Request $request)
|
||||
{
|
||||
$exportsPendingArrangementDeliveryList = new ExportsPendingArrangementDeliveryList($request);
|
||||
$exportFileName = 'packing-list-delivery.xls';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList)]);
|
||||
} else {
|
||||
$response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
public function onHold(Request $request) {
|
||||
public function onHold(Request $request)
|
||||
{
|
||||
$exportsPendingArrangementDeliveryList = new ExportsOnHoldPackingList($request);
|
||||
$exportFileName = 'packing-list-on-hold.xls';
|
||||
$filesystemDriver = Storage::getDefaultDriver();
|
||||
if($filesystemDriver === 's3'){
|
||||
return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]);
|
||||
}
|
||||
else{
|
||||
if ($filesystemDriver === 's3') {
|
||||
return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList)]);
|
||||
} else {
|
||||
$response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||
ob_end_clean();
|
||||
return $response;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\Services\ResolveIzyimQrWarehousePrefix;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
||||
use App\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||
@@ -15,7 +16,7 @@ use Illuminate\Support\Facades\Storage;
|
||||
class DownloadOrderQrPdfController
|
||||
{
|
||||
|
||||
public function download(Request $request){
|
||||
public function download(Request $request, ResolveIzyimQrWarehousePrefix $resolveIzyimQrWarehousePrefix){
|
||||
$order = Order::find($request->route('id'));
|
||||
$deliveryAddress = $order->addresses()->where('status', ApprovalStatus::APPROVED)->first();
|
||||
$warehouse= $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee;
|
||||
@@ -39,25 +40,7 @@ class DownloadOrderQrPdfController
|
||||
}
|
||||
}
|
||||
|
||||
if($warehouse->reference === WarehouseReferences::YD_YIWU){
|
||||
$warehousePrefix = 'YW/';
|
||||
}
|
||||
|
||||
if(in_array($warehouse->reference,[WarehouseReferences::YD_GUANG_ZHOU, WarehouseReferences::YD_GUANG_ZHOU_2, WarehouseReferences::YD_FS_EAST_MALAYSIA, WarehouseReferences::YD_FS_WEST_MALAYSIA])){
|
||||
$warehousePrefix = 'YD/';
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'sabah' || strtolower($deliveryAddress->state->name) === 'labuan' || in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KK/';
|
||||
}
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'sarawak' && !in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KU/';
|
||||
}
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'johor') {
|
||||
$warehousePrefix = 'NX/';
|
||||
}
|
||||
}
|
||||
$warehousePrefix = $resolveIzyimQrWarehousePrefix->execute($warehouse, $deliveryAddress);
|
||||
|
||||
$data = [
|
||||
'order' => $order,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\Services\ResolveIzyimQrWarehousePrefix;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
||||
use App\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||
@@ -16,7 +17,7 @@ use Illuminate\Support\Facades\Storage;
|
||||
class DownloadTaxRebateQrPdfController
|
||||
{
|
||||
|
||||
public function download(Request $request){
|
||||
public function download(Request $request, ResolveIzyimQrWarehousePrefix $resolveIzyimQrWarehousePrefix){
|
||||
$order = Order::find($request->route('id'));
|
||||
$deliveryAddress = $order->addresses()->where('status', ApprovalStatus::APPROVED)->first();
|
||||
$warehouse= $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee;
|
||||
@@ -40,25 +41,7 @@ class DownloadTaxRebateQrPdfController
|
||||
}
|
||||
}
|
||||
|
||||
if($warehouse->reference === WarehouseReferences::YD_YIWU){
|
||||
$warehousePrefix = 'YW/';
|
||||
}
|
||||
|
||||
if(in_array($warehouse->reference,[WarehouseReferences::YD_GUANG_ZHOU, WarehouseReferences::YD_GUANG_ZHOU_2, WarehouseReferences::YD_FS_EAST_MALAYSIA, WarehouseReferences::YD_FS_WEST_MALAYSIA])){
|
||||
$warehousePrefix = 'YD/';
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'sabah' || strtolower($deliveryAddress->state->name) === 'labuan' || in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KK/';
|
||||
}
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'sarawak' && !in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
|
||||
$warehousePrefix = 'KU/';
|
||||
}
|
||||
|
||||
if(strtolower($deliveryAddress->state->name) === 'johor') {
|
||||
$warehousePrefix = 'NX/';
|
||||
}
|
||||
}
|
||||
$warehousePrefix = $resolveIzyimQrWarehousePrefix->execute($warehouse, $deliveryAddress);
|
||||
|
||||
// tax rebate data
|
||||
$tax_rebate_refeerence = $request->query('tax_rebate_refeerence');
|
||||
|
||||
@@ -4,11 +4,22 @@ namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\Orders\ControllersLogic\FetchOrderPackagesReceivedV2Logic;
|
||||
use App\Classes\Modules\Orders\ControllersLogic\FetchOrderPackagesV2Logic;
|
||||
use App\Classes\Modules\Orders\ControllersLogic\FetchOrderPackagesOriginWarehouseV2Logic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FetchOrderPackagesV2Controller
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchOrderPackagesV2Logic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetch(Request $request, FetchOrderPackagesV2Logic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchOrderPackagesReceivedV2Logic $logic
|
||||
@@ -21,10 +32,10 @@ class FetchOrderPackagesV2Controller
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param FetchOrderPackagesV2Logic $logic
|
||||
* @param FetchOrderPackagesOriginWarehouseV2Logic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetch(Request $request, FetchOrderPackagesV2Logic $logic): JsonResponse
|
||||
public function fetchOriginWarehouse(Request $request, FetchOrderPackagesOriginWarehouseV2Logic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\PackingLists\Packages\items;
|
||||
namespace App\Http\Controllers\PackingLists\Packages\Items;
|
||||
|
||||
use App\Classes\Modules\PackageItems\ControllersLogic\CreatePackageItemLogic;
|
||||
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items\CreatePackageItemLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -13,7 +13,8 @@ class CreatePackageItemController
|
||||
* @param CreatePackageItemLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreatePackageItemLogic $logic): JsonResponse {
|
||||
public function create(Request $request, CreatePackageItemLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\PackingLists\Packages\items;
|
||||
namespace App\Http\Controllers\PackingLists\Packages\Items;
|
||||
|
||||
use App\Classes\Modules\PackageItems\ControllersLogic\DeletePackageItemLogic;
|
||||
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items\DeletePackageItemLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -13,7 +13,8 @@ class DeletePackageItemController
|
||||
* @param DeletePackageItemLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function delete(Request $request, DeletePackageItemLogic $logic): JsonResponse {
|
||||
public function delete(Request $request, DeletePackageItemLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\PackingLists\Packages\items;
|
||||
namespace App\Http\Controllers\PackingLists\Packages\Items;
|
||||
|
||||
use App\Classes\Modules\PackageItems\ControllersLogic\FetchPackageItemLogic;
|
||||
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items\FetchPackageItemLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -13,7 +13,8 @@ class FetchPackageItemController
|
||||
* @param FetchPackageItemLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function fetch(Request $request, FetchPackageItemLogic $logic): JsonResponse {
|
||||
public function fetch(Request $request, FetchPackageItemLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\PackingLists\Packages\items;
|
||||
namespace App\Http\Controllers\PackingLists\Packages\Items;
|
||||
|
||||
use App\Classes\Modules\PackageItems\ControllersLogic\ListPackageItemsLogic;
|
||||
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items\ListPackageItemsLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -10,10 +10,11 @@ class ListPackageItemsController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param ListPackageItemLogic $logic
|
||||
* @param ListPackageItemsLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function list(Request $request, ListPackageItemsLogic $logic): JsonResponse {
|
||||
public function list(Request $request, ListPackageItemsLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\PackingLists\Packages\items;
|
||||
namespace App\Http\Controllers\PackingLists\Packages\Items;
|
||||
|
||||
use App\Classes\Modules\PackageItems\ControllersLogic\UpdatePackageItemLogic;
|
||||
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\Items\UpdatePackageItemLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -13,7 +13,8 @@ class UpdatePackageItemController
|
||||
* @param UpdatePackageItemLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function update(Request $request, UpdatePackageItemLogic $logic): JsonResponse {
|
||||
public function update(Request $request, UpdatePackageItemLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class CreatePermitsReminderController
|
||||
{
|
||||
@@ -19,7 +20,7 @@ class CreatePermitsReminderController
|
||||
{
|
||||
// Define validation rules
|
||||
$rules = [
|
||||
'model' => 'required|unique:permits_reminders,model',
|
||||
'model' => ['required', Rule::unique('permits_reminders', 'model')],
|
||||
'expiry_date' => 'required|date|after_or_equal:today',
|
||||
'reminder_date' => 'required|date|after_or_equal:today',
|
||||
];
|
||||
|
||||
@@ -7,6 +7,7 @@ use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UpdatePermitsReminderController
|
||||
{
|
||||
@@ -17,7 +18,7 @@ class UpdatePermitsReminderController
|
||||
public function update(Request $request): JsonResponse
|
||||
{
|
||||
$rules = [
|
||||
'model' => 'required|unique:permits_reminders,model,' . $request->route('id'),
|
||||
'model' => ['required', Rule::unique('permits_reminders', 'model')->ignore($request->route('id'))],
|
||||
'expiry_date' => 'required|date|after_or_equal:today',
|
||||
'reminder_date' => 'required|date|after_or_equal:today',
|
||||
];
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use App\Http\Middleware\ValidateToken;
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
// \App\Http\Middleware\TrustHosts::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Fruitcake\Cors\HandleCors::class,
|
||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
'throttle:300,1',
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'apipub' => [
|
||||
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'valid.token' => ValidateToken::class,
|
||||
'token.check' => \App\Http\Middleware\TokenCheckerMiddleware::class,
|
||||
'auth.check' => \App\Http\Middleware\CheckAuthorizationMiddleware::class,
|
||||
'storage.invoice.check.byorder' => \App\Http\Middleware\CheckForStorageInvoiceByOrderId::class,
|
||||
'storage.invoice.check.bytransaction' => \App\Http\Middleware\CheckForStorageInvoiceByTransactionId::class,
|
||||
'storage.invoice.check.bytransactions' => \App\Http\Middleware\CheckForStorageInvoiceByTransactions::class,
|
||||
'storage.invoice.check.bygroup' => \App\Http\Middleware\CheckForStorageInvoiceByGroup::class,
|
||||
'storage.invoice.check.bypackinglists' => \App\Http\Middleware\CheckForStorageInvoiceByPackingLists::class,
|
||||
'admin' => \App\Http\Middleware\EnsureUserIsAdmin::class, //cief maintenance
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Classes\General\LogHelper;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class LogRequestPathMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if(env('APP_ENV') !== 'local'){
|
||||
$method = $request->method();
|
||||
$fullUrl = $request->fullUrl();
|
||||
LogHelper::channel('request_path')->info('Request Method: ' . $method);
|
||||
LogHelper::channel('request_path')->info('Request URL: ' . $fullUrl);
|
||||
|
||||
|
||||
if ($request->isMethod('post')) {
|
||||
$payload = $request->all();
|
||||
LogHelper::channel('request_path')->info('Request Payload POST: ', $payload);
|
||||
}
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -23,7 +22,7 @@ class RedirectIfAuthenticated
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
return redirect('/dashboard');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Fideloper\Proxy\TrustProxies as Middleware;
|
||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
|
||||
@@ -11,19 +11,6 @@ use Tymon\JWTAuth\JWT;
|
||||
|
||||
class ValidateToken
|
||||
{
|
||||
/** @var JWT */
|
||||
private $manager;
|
||||
|
||||
/**
|
||||
* ValidateToken constructor.
|
||||
* @param JWT $manager
|
||||
*/
|
||||
public function __construct(JWT $manager)
|
||||
{
|
||||
$this->manager = $manager;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if jwt token is valid.
|
||||
*
|
||||
@@ -35,7 +22,9 @@ class ValidateToken
|
||||
{
|
||||
try {
|
||||
|
||||
if(!$this->manager->check()){ throw new AccessUnauthorisedException(); }
|
||||
if (!auth('api')->check()) {
|
||||
throw new AccessUnauthorisedException();
|
||||
}
|
||||
|
||||
} catch (Exception $exception) {
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use App\Models\Transaction;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
//PNB - Payment And Billing Page
|
||||
//Class based on GroupResource.php
|
||||
class GroupPendingInvoicesPNBPageResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$payment_transaction = Transaction::where('payment_reference', $this->reference)->first();
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'original_amount' => (float) $this->original_amount,
|
||||
'original_currency' => new CurrencyResource($this->original_currency),
|
||||
'issuer_name' => $this->issuerCompany->name,
|
||||
'issuer_id' => $this->issuerCompany->id,
|
||||
'amount' => (float) $this->amount,
|
||||
'service_charge' => (float) $this->amount,
|
||||
'currency' => new CurrencyResource($this->currency),
|
||||
'created_at' => Carbon::parse($this->created_at)->format('d-m-Y h:i:s A'),
|
||||
'currency_rate' => (float) $this->currency_rate,
|
||||
'status' => $this->status,
|
||||
'status_name' => ApprovalStatus::APPROVAL_STATUS_ID[$this->status],
|
||||
'payment_method' => $this->payment_method,
|
||||
'payment_method_name' => ucwords(PaymentMethodType::PAYMENT_METHODS_ID[$this->payment_method]),
|
||||
'reference' => $this->reference,
|
||||
'payment_transaction' => $payment_transaction ? [
|
||||
'id' => $payment_transaction->id,
|
||||
'status' => $payment_transaction->status,
|
||||
'status_name' => ApprovalStatus::APPROVAL_STATUS_ID[$payment_transaction->status],
|
||||
'documents' => $this->status === ApprovalStatus::APPROVED ? DocumentResource::collection($payment_transaction->documents->where('status', ApprovalStatus::APPROVED)) : DocumentResource::collection($payment_transaction->documents->where('status', ApprovalStatus::PENDING_VERIFICATION)),
|
||||
] : []
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
//Originally from OrderPackagesDeprecatedResource
|
||||
class OrderPackagesOriginWarehouseResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$origin_warehouse_packages = $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('packages')->get(); //$this->originWarehousePackages()->get();
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'reference_contract' => (int) $this->type,
|
||||
'type' => (int) $this->type,
|
||||
'status' => (int) $this->status,
|
||||
'origin_warehouse_packages' => PackingListForPackagesReceivedResource::collection($origin_warehouse_packages), //cief todo: 150 - to update with new resource
|
||||
'created_at' => $this->created_at->format('d-m-Y')
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ use App\Models\PackingList;
|
||||
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class PackageReceivedResource extends JsonResource
|
||||
{
|
||||
@@ -19,7 +20,7 @@ class PackageReceivedResource extends JsonResource
|
||||
public function toArray($request)
|
||||
{
|
||||
$userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER;
|
||||
$exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]);
|
||||
$exceptionUsers = in_array($userType, RoleTypes::ADMIN_ROLES);
|
||||
$originalPackingList = $this->packingList->owner instanceof PackingList ? $this->packingList->owner : $this->packingList;
|
||||
|
||||
return [
|
||||
@@ -38,8 +39,8 @@ class PackageReceivedResource extends JsonResource
|
||||
]),
|
||||
'container' => new ContainerResource($originalPackingList->containers()->first()),
|
||||
'transport' => new TransportResource($originalPackingList->transports()->first()),
|
||||
|
||||
'reference' => $exceptionUsers ? $this->packingList->reference : '',
|
||||
// 'reference' => $exceptionUsers ? $this->packingList->reference : '',
|
||||
'reference' => $exceptionUsers ? str_replace('_01', '', $this->packingList->reference) : '',
|
||||
'reference_hash' => hash('sha256', $this->packingList->reference),
|
||||
'reference_encrypted' => Crypt::encryptString($this->packingList->reference),
|
||||
];
|
||||
|
||||
@@ -14,10 +14,16 @@ class UserCompanyResource extends JsonResource
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$companyModule = $this->companyModule()->first();
|
||||
|
||||
if(!$companyModule){
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'reference' => $this->companyModule()->first()->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference,
|
||||
'reference' => $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference,
|
||||
'type' => (int) $this->type,
|
||||
'status' => (int) $this->status,
|
||||
'email' => $this->email
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace App\Logging;
|
||||
|
||||
use Aws\CloudWatchLogs\CloudWatchLogsClient;
|
||||
use Maxbanton\Cwh\Handler\CloudWatch;
|
||||
use PhpNexus\Cwh\Handler\CloudWatch;
|
||||
use Monolog\Formatter\JsonFormatter;
|
||||
use Monolog\Logger;
|
||||
|
||||
|
||||
@@ -6,12 +6,21 @@ namespace App\Models;
|
||||
use App\Classes\General\Interfaces\Notifiable;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
|
||||
class AbstractModel extends Model implements Notifiable
|
||||
{
|
||||
use LogsActivity;
|
||||
protected static $logFillable = true;
|
||||
|
||||
/**
|
||||
* Get the options for logging activity.
|
||||
*/
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logFillable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphTo
|
||||
|
||||
+18
-10
@@ -15,22 +15,30 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
* Class Address
|
||||
* @package App\Models
|
||||
*
|
||||
* @property int country_id
|
||||
* @property int company_id
|
||||
* @property int state_id
|
||||
* @property int district_id
|
||||
* @property string postcode
|
||||
* @property string street_one
|
||||
* @property string street_two
|
||||
* @property integer billing_type
|
||||
* @property int $country_id
|
||||
* @property int $state_id
|
||||
* @property int $district_id
|
||||
* @property string $postcode
|
||||
* @property string $street_one
|
||||
* @property string $street_two
|
||||
* @property int $billing_type
|
||||
*
|
||||
* @property \App\Models\Country $country
|
||||
* @property \App\Models\State $state
|
||||
* @property \App\Models\District $district
|
||||
*/
|
||||
class Address extends AbstractModel implements Contactable, Remarkable
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $table = 'addresses';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
protected $fillable = ['default'];
|
||||
|
||||
|
||||
+15
-10
@@ -16,13 +16,13 @@ use Staudenmeir\EloquentHasManyDeep\HasRelationships;
|
||||
* Class Company
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Country country_id
|
||||
* @property \App\Models\State state_id
|
||||
* @property \App\Models\District district_id
|
||||
* @property string postcode
|
||||
* @property string street_one
|
||||
* @property string street_two
|
||||
* @property integer billing_type
|
||||
* @property int $country_id
|
||||
* @property int $state_id
|
||||
* @property int $district_id
|
||||
* @property string $postcode
|
||||
* @property string $street_one
|
||||
* @property string $street_two
|
||||
* @property int $billing_type
|
||||
*/
|
||||
class Company extends AbstractModel implements Documentable, Contactable
|
||||
{
|
||||
@@ -31,7 +31,12 @@ class Company extends AbstractModel implements Documentable, Contactable
|
||||
|
||||
protected $table = 'companies';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphMany
|
||||
@@ -63,8 +68,8 @@ class Company extends AbstractModel implements Documentable, Contactable
|
||||
$orders = [];
|
||||
|
||||
$this->CompanyModules->each(function ($companyModule) {
|
||||
$orders[] = $companyModule->orders->sortByDesc('id');
|
||||
});
|
||||
$orders[] = $companyModule->orders->sortByDesc('id');
|
||||
});
|
||||
|
||||
return collect($orders);
|
||||
}
|
||||
|
||||
@@ -20,12 +20,15 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use PhpParser\Node\Expr\AssignOp\Mod;
|
||||
|
||||
/**
|
||||
* Class CompanyModule
|
||||
* Class CompanyConnection
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Company company_id
|
||||
* @property integer type
|
||||
* @property integer status
|
||||
* @property int $inviter_id
|
||||
* @property int $invitee_id
|
||||
* @property string $inviter_reference
|
||||
* @property string $invitee_reference
|
||||
* @property int $status
|
||||
* @property bool $is_credit_term
|
||||
*/
|
||||
class CompanyConnection extends AbstractModel
|
||||
{
|
||||
@@ -33,7 +36,12 @@ class CompanyConnection extends AbstractModel
|
||||
|
||||
protected $table = 'company_connections';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
|
||||
@@ -9,10 +9,13 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
* Class CompanyEmployee
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\companyModule company_module_id
|
||||
* @property \App\Models\User user_id
|
||||
* @property integer role_id
|
||||
* @property integer status
|
||||
* @property int $company_module_id
|
||||
* @property int $user_id
|
||||
* @property int $role_id
|
||||
* @property int $status
|
||||
*
|
||||
* @property \App\Models\CompanyModule $companyModule
|
||||
* @property \App\Models\User $user
|
||||
*/
|
||||
class CompanyEmployee extends AbstractModel
|
||||
{
|
||||
|
||||
@@ -29,9 +29,11 @@ use App\Classes\General\Interfaces\Remarkable;
|
||||
* Class CompanyModule
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Company company_id
|
||||
* @property integer type
|
||||
* @property integer status
|
||||
* @property int $company_id
|
||||
* @property int $type
|
||||
* @property int $status
|
||||
*
|
||||
* @property \App\Models\Company $company
|
||||
*/
|
||||
class CompanyModule extends AbstractModel implements Addressable, Documentable, Contactable, ContainerOwner, Packable, Remarkable
|
||||
{
|
||||
@@ -40,7 +42,12 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
|
||||
|
||||
protected $table = 'company_modules';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
@@ -95,7 +102,7 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
|
||||
*/
|
||||
public function invites(): belongsToMany
|
||||
{
|
||||
return $this->belongsToMany(CompanyModule::class, CompanyConnection::class,'inviter_id', 'invitee_id');
|
||||
return $this->belongsToMany(CompanyModule::class, CompanyConnection::class, 'inviter_id', 'invitee_id');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,11 +110,12 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
|
||||
*/
|
||||
public function inviters(): belongsToMany
|
||||
{
|
||||
return $this->belongsToMany(CompanyModule::class, CompanyConnection::class,'invitee_id', 'inviter_id');
|
||||
return $this->belongsToMany(CompanyModule::class, CompanyConnection::class, 'invitee_id', 'inviter_id');
|
||||
}
|
||||
|
||||
|
||||
public function connections(): hasMany {
|
||||
public function connections(): hasMany
|
||||
{
|
||||
return $this->hasMany(CompanyConnection::class, 'invitee_id');
|
||||
}
|
||||
|
||||
@@ -125,29 +133,29 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
|
||||
return $this->HasMany(Order::class, 'company_module_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return belongsToMany
|
||||
*/
|
||||
public function segments(): belongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Segment::class, (new SegmentCompany())->getTable(), 'company_id', 'segment_id');
|
||||
}
|
||||
/**
|
||||
* @return belongsToMany
|
||||
*/
|
||||
public function segments(): belongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Segment::class, (new SegmentCompany())->getTable(), 'company_id', 'segment_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphMany
|
||||
*/
|
||||
public function documents(): morphMany
|
||||
{
|
||||
return $this->morphMany(Document::class, 'owner');
|
||||
}
|
||||
/**
|
||||
* @return MorphMany
|
||||
*/
|
||||
public function documents(): morphMany
|
||||
{
|
||||
return $this->morphMany(Document::class, 'owner');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasMany
|
||||
*/
|
||||
public function banks(): HasMany
|
||||
{
|
||||
return $this->HasMany(BankAccount::class, 'company_id');
|
||||
}
|
||||
/**
|
||||
* @return HasMany
|
||||
*/
|
||||
public function banks(): HasMany
|
||||
{
|
||||
return $this->HasMany(BankAccount::class, 'company_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphMany
|
||||
@@ -197,7 +205,7 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
|
||||
*/
|
||||
public function transactions(): hasManyDeep
|
||||
{
|
||||
return $this->hasManyDeep(Transaction::class, [Order::class], ['company_module_id', 'owner_id'], ['id', 'id']);
|
||||
return $this->hasManyDeep(Transaction::class, [Order::class], ['company_module_id', 'owner_id'], ['id', 'id']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,11 +6,11 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
/**
|
||||
* Class Segment
|
||||
* Class ConnectionSegment
|
||||
* @package App\Models
|
||||
*
|
||||
* @property string name
|
||||
* @property string reference
|
||||
* @property string $name
|
||||
* @property string $reference
|
||||
*/
|
||||
class ConnectionSegment extends AbstractModel
|
||||
{
|
||||
@@ -18,7 +18,12 @@ class ConnectionSegment extends AbstractModel
|
||||
|
||||
protected $table = 'connection_segments';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasMany
|
||||
|
||||
+16
-8
@@ -9,13 +9,16 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
* Class Contact
|
||||
* @package App\Models
|
||||
*
|
||||
* @property int owner_id
|
||||
* @property string owner_type
|
||||
* @property string reference
|
||||
* @property string phone
|
||||
* @property string email
|
||||
* @property string wechat_id
|
||||
* @property int default
|
||||
* @property int $id
|
||||
* @property int $owner_id
|
||||
* @property string $owner_type
|
||||
* @property string $reference
|
||||
* @property string $phone
|
||||
* @property string $email
|
||||
* @property string $wechat_id
|
||||
* @property int $default
|
||||
*
|
||||
* @property mixed $owner
|
||||
*/
|
||||
class Contact extends AbstractModel
|
||||
{
|
||||
@@ -23,7 +26,12 @@ class Contact extends AbstractModel
|
||||
|
||||
protected $table = 'contacts';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
||||
|
||||
@@ -21,7 +21,12 @@ class Container extends AbstractModel implements Transportable, Remarkable
|
||||
|
||||
protected $fillable = ['status'];
|
||||
|
||||
protected $dates = ['loading_date'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'loading_date' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
public function packingLists(): belongsToMany
|
||||
{
|
||||
|
||||
@@ -9,9 +9,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* Class Country
|
||||
* @package App\Models
|
||||
*
|
||||
* @property string name
|
||||
* @property string short_code
|
||||
* @property string phone_code
|
||||
* @property string $name
|
||||
* @property string $short_code
|
||||
* @property string $phone_code
|
||||
*/
|
||||
class Country extends AbstractModel
|
||||
{
|
||||
@@ -19,7 +19,12 @@ class Country extends AbstractModel
|
||||
|
||||
protected $table = 'countries';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
protected $fillable = ['name', 'short_code', 'phone_code'];
|
||||
|
||||
|
||||
+14
-5
@@ -12,10 +12,14 @@ use Illuminate\Database\Eloquent\Relations\hasMany;
|
||||
* Class Currency
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Country country_id
|
||||
* @property string name
|
||||
* @property string short_code
|
||||
* @property string symbol
|
||||
* @property int $id
|
||||
* @property int $country_id
|
||||
* @property string $name
|
||||
* @property string $short_code
|
||||
* @property string $symbol
|
||||
*
|
||||
* @property \App\Models\Country $country
|
||||
* @property \Illuminate\Database\Eloquent\Collection|\App\Models\CurrencyRate[] $rates
|
||||
*/
|
||||
|
||||
class Currency extends AbstractModel
|
||||
@@ -24,7 +28,12 @@ class Currency extends AbstractModel
|
||||
|
||||
protected $table = 'currencies';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
|
||||
@@ -12,5 +12,10 @@ class CurrencyRate extends AbstractModel
|
||||
|
||||
protected $fillable = ['currency_id', 'selling', 'payment_method_type'];
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
+13
-5
@@ -10,10 +10,13 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* Class District
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Country country_id
|
||||
* @property \App\Models\State state_id
|
||||
* @property string name
|
||||
* @property string postcode
|
||||
* @property int $country_id
|
||||
* @property int $state_id
|
||||
* @property string $name
|
||||
* @property string $postcode
|
||||
*
|
||||
* @property \App\Models\Country $country
|
||||
* @property \App\Models\State $state
|
||||
*/
|
||||
class District extends AbstractModel
|
||||
{
|
||||
@@ -21,7 +24,12 @@ class District extends AbstractModel
|
||||
|
||||
protected $table = 'districts';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
|
||||
+16
-11
@@ -14,15 +14,15 @@ use Illuminate\Database\Eloquent\Relations\hasMany;
|
||||
* @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 approver
|
||||
* @property timestamp issued_date
|
||||
* @property timestamp expired_date
|
||||
* @property timestamp approved_date
|
||||
* @property int $owner_id
|
||||
* @property string $owner_type
|
||||
* @property string $document_type
|
||||
* @property string $reference
|
||||
* @property int $status
|
||||
* @property int $approver
|
||||
* @property \Carbon\Carbon $issued_date
|
||||
* @property \Carbon\Carbon $expired_date
|
||||
* @property \Carbon\Carbon $approval_date
|
||||
*/
|
||||
class Document extends AbstractModel
|
||||
{
|
||||
@@ -30,7 +30,12 @@ class Document extends AbstractModel
|
||||
|
||||
protected $table = 'documents';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
||||
@@ -43,7 +48,7 @@ class Document extends AbstractModel
|
||||
/**
|
||||
* @return hasMany
|
||||
*/
|
||||
public function files(): hasMany
|
||||
public function files(): hasMany
|
||||
{
|
||||
return $this->hasMany(File::class, 'document_id');
|
||||
}
|
||||
|
||||
@@ -7,11 +7,15 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
|
||||
/**
|
||||
* Class CompanyEmployee
|
||||
* @package App\Models
|
||||
* Class Employee
|
||||
* @package App\Models\Exchange
|
||||
*
|
||||
* @property \App\Models\Company company_id
|
||||
* @property \App\Models\User user_id
|
||||
* @property int $id
|
||||
* @property int $company_id
|
||||
* @property int $user_id
|
||||
*
|
||||
* @property \Illuminate\Database\Eloquent\Collection|\App\Models\Exchange\Company[] $company
|
||||
* @property \App\Models\Exchange\User $user
|
||||
*/
|
||||
class Employee extends AbstractModel
|
||||
{
|
||||
|
||||
+9
-7
@@ -10,9 +10,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @package App\Models
|
||||
* @version August 4, 2020, 4:36 am
|
||||
*
|
||||
* @property \App\Models\Document document_id
|
||||
* @property text file
|
||||
* @property int file_type_id
|
||||
* @property int $document_id
|
||||
* @property array $file
|
||||
* @property int $file_type_id
|
||||
*/
|
||||
class File extends AbstractModel
|
||||
{
|
||||
@@ -22,10 +22,12 @@ class File extends AbstractModel
|
||||
|
||||
protected $fillable = ['file'];
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
public function getFileAttribute($value)
|
||||
protected function casts(): array
|
||||
{
|
||||
return $value ? json_decode($value) : [];
|
||||
return [
|
||||
'file' => 'array',
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,12 @@ class KeyValuePair extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
protected $table = 'key_value_pairs';
|
||||
|
||||
|
||||
+30
-18
@@ -27,7 +27,12 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable,
|
||||
|
||||
protected $table = 'orders';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@@ -97,26 +102,27 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable,
|
||||
|
||||
protected static function booted()
|
||||
{
|
||||
// if (auth()->user()->type === RoleTypes::USER) {
|
||||
// if (auth()->user()->type === RoleTypes::USER) {
|
||||
// static::addGlobalScope(new CustomerOrdersScope);
|
||||
// }
|
||||
}
|
||||
|
||||
public function addressesPendingVerification()
|
||||
{
|
||||
return $this->addresses()->where('status','=',ApprovalStatus::PENDING_VERIFICATION);
|
||||
return $this->addresses()->where('status', '=', ApprovalStatus::PENDING_VERIFICATION);
|
||||
}
|
||||
|
||||
public function addressesApproved()
|
||||
{
|
||||
return $this->addresses()->where('status','=',ApprovalStatus::APPROVED);
|
||||
return $this->addresses()->where('status', '=', ApprovalStatus::APPROVED);
|
||||
}
|
||||
|
||||
public function originWarehousePackages()
|
||||
{
|
||||
return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)
|
||||
->whereDoesntHave('shippingSchedules',
|
||||
function($schedule) {
|
||||
->whereDoesntHave(
|
||||
'shippingSchedules',
|
||||
function ($schedule) {
|
||||
return $schedule->dispatched()
|
||||
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
}
|
||||
@@ -126,28 +132,33 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable,
|
||||
public function inTransitPackages()
|
||||
{
|
||||
return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)->Shipping()
|
||||
->whereHas('shippingSchedules',
|
||||
function($schedule) {
|
||||
->whereHas(
|
||||
'shippingSchedules',
|
||||
function ($schedule) {
|
||||
return $schedule->dispatched()
|
||||
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
}
|
||||
)
|
||||
->whereDoesntHave('containers', function($container) {
|
||||
return $container->where('containers.status', ApprovalStatus::COMPLETED);
|
||||
}
|
||||
)->whereHas('packages');
|
||||
->whereDoesntHave(
|
||||
'containers',
|
||||
function ($container) {
|
||||
return $container->where('containers.status', ApprovalStatus::COMPLETED);
|
||||
}
|
||||
)->whereHas('packages');
|
||||
}
|
||||
|
||||
public function destinationWarehousePackages()
|
||||
{
|
||||
return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)
|
||||
->whereHas('containers',
|
||||
function($container) {
|
||||
->whereHas(
|
||||
'containers',
|
||||
function ($container) {
|
||||
return $container->where('containers.status', ApprovalStatus::COMPLETED);
|
||||
}
|
||||
)
|
||||
->whereDoesntHave('deliverySchedules',
|
||||
function($schedule) {
|
||||
->whereDoesntHave(
|
||||
'deliverySchedules',
|
||||
function ($schedule) {
|
||||
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
}
|
||||
)->whereHas('packages');
|
||||
@@ -156,8 +167,9 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable,
|
||||
public function deliveredPackages()
|
||||
{
|
||||
return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)
|
||||
->whereHas('deliverySchedules',
|
||||
function($schedule) {
|
||||
->whereHas(
|
||||
'deliverySchedules',
|
||||
function ($schedule) {
|
||||
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -12,7 +12,12 @@ class PermitsReminder extends Model
|
||||
|
||||
protected $table = 'permits_reminders';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
protected $fillable = ['model', 'expiry_date', 'reminder_date'];
|
||||
|
||||
|
||||
+11
-3
@@ -14,7 +14,13 @@ class Schedule extends AbstractModel
|
||||
|
||||
protected $table = 'schedules';
|
||||
|
||||
protected $dates = ['etd', 'eta'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'etd' => 'datetime',
|
||||
'eta' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
public function owner(): morphTo
|
||||
{
|
||||
@@ -30,7 +36,8 @@ class Schedule extends AbstractModel
|
||||
* @param $query
|
||||
* @return mixed
|
||||
*/
|
||||
public function scopeDispatched($query){
|
||||
public function scopeDispatched($query)
|
||||
{
|
||||
return $query->where('etd', '<', Carbon::now());
|
||||
}
|
||||
|
||||
@@ -38,7 +45,8 @@ class Schedule extends AbstractModel
|
||||
* @param $query
|
||||
* @return mixed
|
||||
*/
|
||||
public function scopeDropped($query){
|
||||
public function scopeDropped($query)
|
||||
{
|
||||
return $query->where('eta', '<', Carbon::now());
|
||||
}
|
||||
}
|
||||
|
||||
+16
-11
@@ -9,8 +9,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* Class Segment
|
||||
* @package App\Models
|
||||
*
|
||||
* @property string name
|
||||
* @property string reference
|
||||
* @property string $name
|
||||
* @property string $reference
|
||||
*/
|
||||
class Segment extends AbstractModel
|
||||
{
|
||||
@@ -18,7 +18,12 @@ class Segment extends AbstractModel
|
||||
|
||||
protected $table = 'segments';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasMany
|
||||
@@ -27,12 +32,12 @@ class Segment extends AbstractModel
|
||||
{
|
||||
return $this->HasMany(SegmentConstant::class, 'segment_id', 'id');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return belongsToMany
|
||||
*/
|
||||
public function companyConnections(): belongsToMany
|
||||
{
|
||||
return $this->belongsToMany(CompanyConnection::class, (new ConnectionSegment())->getTable(), 'segment_id', 'company_connection_id');
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @return belongsToMany
|
||||
// */
|
||||
// public function companyConnections(): belongsToMany
|
||||
// {
|
||||
// return $this->belongsToMany(CompanyConnection::class, (new ConnectionSegment())->getTable(), 'segment_id', 'company_connection_id');
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -10,18 +10,25 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* Class SegmentConstant
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Segment segment_id
|
||||
* @property string detail
|
||||
* @property int $id
|
||||
* @property int $segment_id
|
||||
* @property string $reference
|
||||
* @property array $detail
|
||||
* @property array $value
|
||||
*/
|
||||
class SegmentConstant extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
|
||||
protected $table = 'segment_constants';
|
||||
|
||||
public function getDetailAttribute($value)
|
||||
protected function casts(): array
|
||||
{
|
||||
return $value ? json_decode($value) : [];
|
||||
return [
|
||||
'detail' => 'array',
|
||||
'value' => 'array',
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -32,9 +39,4 @@ class SegmentConstant extends AbstractModel
|
||||
return $this->BelongsTo(Segment::class, 'segment_id', 'id');
|
||||
}
|
||||
|
||||
public function getValueAttribute($value)
|
||||
{
|
||||
$value = $value ? json_decode($value) : [];
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @package App\Models
|
||||
* @version February 16, 2021, 9:04 pm
|
||||
*
|
||||
* @property string name
|
||||
* @property string $name
|
||||
*/
|
||||
class ServiceType extends AbstractModel
|
||||
{
|
||||
@@ -25,10 +25,6 @@ class ServiceType extends AbstractModel
|
||||
|
||||
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
|
||||
|
||||
public $fillable = [
|
||||
'name'
|
||||
];
|
||||
@@ -38,9 +34,13 @@ class ServiceType extends AbstractModel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'name' => 'string'
|
||||
];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'string',
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Validation rules
|
||||
|
||||
@@ -9,8 +9,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* Class State
|
||||
* @package App\Models
|
||||
*
|
||||
* @property \App\Models\Country country_id
|
||||
* @property string name
|
||||
* @property int $country_id
|
||||
* @property string $name
|
||||
*/
|
||||
class State extends AbstractModel
|
||||
{
|
||||
@@ -18,7 +18,12 @@ class State extends AbstractModel
|
||||
|
||||
protected $table = 'states';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
|
||||
+7
-2
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class Step extends AbstractModel
|
||||
class Step extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
@@ -14,7 +14,12 @@ class Step extends AbstractModel
|
||||
|
||||
protected $fillable = ['status'];
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'deleted_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
public function owner(): morphTo
|
||||
{
|
||||
|
||||
@@ -23,9 +23,12 @@ class Transaction extends AbstractModel implements Documentable, Transactionable
|
||||
use SoftDeletes;
|
||||
use LogData;
|
||||
|
||||
protected $casts = [
|
||||
'type' => 'int'
|
||||
];
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'type' => 'int',
|
||||
];
|
||||
}
|
||||
|
||||
protected $table = 'transactions';
|
||||
|
||||
@@ -95,12 +98,12 @@ class Transaction extends AbstractModel implements Documentable, Transactionable
|
||||
*/
|
||||
public function groupsWithTrashed(): BelongsToMany
|
||||
{
|
||||
return $this->BelongsToMany(Group::class, GroupTransaction::class, 'transaction_id')->withTrashed();;
|
||||
return $this->BelongsToMany(Group::class, GroupTransaction::class, 'transaction_id')->withTrashed();
|
||||
}
|
||||
|
||||
public function convert_original_amount()
|
||||
{
|
||||
if($this->booking()->first()->fix_currency_id !== 1) {
|
||||
if ($this->booking()->first()->fix_currency_id !== 1) {
|
||||
$currency_rate = $this->currency()->first()->rates()->where('payment_method_type', $this->payment_method)->first();
|
||||
|
||||
return number_format($this->original_amount / $currency_rate->selling, 2);
|
||||
@@ -123,11 +126,11 @@ class Transaction extends AbstractModel implements Documentable, Transactionable
|
||||
*/
|
||||
public function scopeInComplete(Builder $query)
|
||||
{
|
||||
return $query->where(function(Builder $query){
|
||||
$query->where(function(Builder $query){
|
||||
return $query->where(function (Builder $query) {
|
||||
$query->where(function (Builder $query) {
|
||||
$query->where('status', ApprovalStatus::PENDING_SUBMISSION)
|
||||
->whereDate('expires_on', '>=', Carbon::now());
|
||||
})->orWhere(function(Builder $query){
|
||||
})->orWhere(function (Builder $query) {
|
||||
$query->where('status', ApprovalStatus::PENDING_VERIFICATION);
|
||||
});
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user