Compare commits

...

112 Commits

Author SHA1 Message Date
azumiru fbb61f74b4 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-ui 2021-12-10 01:06:12 +08:00
azumiru 9398e981fe update css for overview container, detect top position for overview and update prgress timeline 2021-12-10 01:06:02 +08:00
omair saleh 0f0e99af35 fix announcement position 2021-12-08 15:53:47 +08:00
omair saleh da1c653570 debug loaded container job 2021-12-07 13:08:20 +08:00
omair saleh f86f129949 debug loaded container job 2021-12-07 13:06:47 +08:00
omair saleh ec24033209 debug loaded container job 2021-12-07 13:05:20 +08:00
omair saleh e3dd8440df debug loaded container job 2021-12-07 13:01:38 +08:00
omair saleh 7647dc0e23 debug loaded container job 2021-12-07 12:58:53 +08:00
omair saleh 3bfb67b55a debug loaded container job 2021-12-07 12:55:01 +08:00
omair saleh a26368b728 debug loaded container job 2021-12-07 12:36:59 +08:00
omair saleh a1a9ffa0aa debug loaded container job 2021-12-07 12:32:44 +08:00
omair saleh c3050445e1 debug loaded container job 2021-12-07 12:32:16 +08:00
omair saleh 3620e4c4b5 debug loaded container job 2021-12-07 12:30:39 +08:00
omair saleh 3dafe41c33 debug loaded container job 2021-12-07 12:04:38 +08:00
omair saleh e28cc43b18 debug loaded container job 2021-12-07 12:00:13 +08:00
omair saleh 80873a14e2 debug loaded container job 2021-12-07 11:56:32 +08:00
omair saleh 799936fd8b debug loaded container job 2021-12-07 11:55:05 +08:00
omair saleh c6d4a6ffae debug loaded container job 2021-12-07 11:49:35 +08:00
omair saleh bc5a8bce47 debug loaded container job 2021-12-07 11:47:27 +08:00
omair saleh 2c03e68242 update chinese new year announcment 2021-12-06 11:35:00 +08:00
omair saleh 857004a6a5 update chinese new year announcment 2021-12-06 10:37:05 +08:00
azumiru f155186718 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-ui 2021-12-03 18:28:44 +08:00
omair saleh 35b2d526ed list yiwu to sabah or srawak orders 2021-12-03 14:16:26 +08:00
omair saleh 7e7290acc5 list yiwu to sabah or srawak orders 2021-12-03 14:02:27 +08:00
omair saleh 5256d5b2f9 list yiwu to sabah or srawak orders 2021-12-03 14:00:50 +08:00
omair saleh e8c33e46c4 list yiwu to sabah or srawak orders 2021-12-03 13:55:58 +08:00
omair saleh 5afd37652c list yiwu to sabah or srawak orders 2021-12-03 13:55:28 +08:00
omair saleh aeb0dfb025 list yiwu to sabah or srawak orders 2021-12-03 13:54:16 +08:00
omair saleh 1a591c0404 list yiwu to sabah or srawak orders 2021-12-03 13:53:13 +08:00
omair saleh 22c07b19ad list yiwu to sabah or srawak orders 2021-12-03 13:52:10 +08:00
omair saleh 9d2dceab2e Merge remote-tracking branch 'origin/master' 2021-12-03 13:45:27 +08:00
omair saleh d00be021bc list yiwu to sabah or srawak orders 2021-12-03 13:45:12 +08:00
azumiru 45103f37fd adjust styling 2021-12-01 09:27:07 +08:00
azumiru 047f58b391 update button list styling 2021-11-29 20:07:05 +08:00
omair saleh 42883b3723 Merge branch 'remark-create-api' into 'master'
remark for order, container, packing list

See merge request CIEFWorldwideSdnBhd/shipping-portal!80
2021-11-26 07:23:42 +00:00
omair saleh 634d4b8b7d Merge branch 'master' into 'remark-create-api'
# Conflicts:
#   app/Models/Container.php
#   app/Models/PackingList.php
#   routes/order.php
#   routes/packing_list.php
2021-11-26 07:23:35 +00:00
omair saleh 6255936cd1 Merge branch 'container-profile-forms-ui' into 'master'
Container profile forms ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!86
2021-11-26 07:14:27 +00:00
omair saleh ac1fc3103b add customer to new warehouse list 2021-11-26 10:11:13 +08:00
omair saleh cf6bebcde2 Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!82
2021-11-26 01:56:02 +00:00
omair saleh a6fc5dd1a5 change warehouse address format 2021-11-25 17:08:44 +08:00
omair saleh fa88ffca49 add marking to new warehouse special list 2021-11-25 03:18:12 +08:00
omair saleh 2b6a2810e5 clean up company module un used dependencies 2021-11-25 03:11:20 +08:00
omair saleh c67ee25654 add new yd Guangzhou warehouse 2021-11-25 03:08:32 +08:00
omair saleh f1cde19261 hide login as exchange 2021-11-20 10:47:03 +08:00
omair saleh b7e5475014 hide login as exchange 2021-11-20 10:42:18 +08:00
omair saleh a75c05fdae update container shortage announcement 2021-11-09 23:58:17 +08:00
omair saleh 3327b8a4f5 update container shortage announcement 2021-11-09 23:54:39 +08:00
omair saleh 604413d978 update container shortage announcement 2021-11-09 23:54:14 +08:00
omair saleh a25feacf53 categorise containers 2021-11-03 20:42:35 +08:00
omair saleh 1090de9060 categorise containers 2021-11-02 23:08:41 +08:00
omair saleh 1c721f7f10 categorise containers 2021-11-02 23:05:42 +08:00
omair saleh 4813c54e6d categorise containers 2021-11-02 23:03:45 +08:00
omair saleh b79ecdc6a9 categorise containers 2021-11-02 22:41:39 +08:00
omair saleh 7fa70becde categorise containers 2021-11-02 22:39:24 +08:00
omair saleh 57a0ea535a categorise containers 2021-11-02 22:38:41 +08:00
omair saleh f84415ce89 categorise containers 2021-11-02 22:37:32 +08:00
omair saleh 0b79ff5521 categorise containers 2021-11-02 22:29:46 +08:00
omair saleh d0f209b006 categorise containers 2021-11-02 22:28:23 +08:00
omair saleh 8cec7b436f categorise containers 2021-11-02 22:25:59 +08:00
omair saleh d2468769df categorise containers 2021-11-02 22:24:39 +08:00
omair saleh 884f4b33d1 categorise containers 2021-11-02 22:20:47 +08:00
omair saleh c15f67e304 order container by loading date 2021-11-02 21:40:35 +08:00
omair saleh f5ea06e3fe show packages quantity loaded into container 2021-11-02 21:32:20 +08:00
edmondlang b0a2ab08c9 tody up container forms component 2021-10-31 19:10:16 +08:00
edmondlang feec49318b update container profile comment section with api 2021-10-30 17:11:28 +08:00
omair saleh 9977d516e1 fix order by arrival date 2021-10-30 12:49:22 +08:00
omair saleh c9131b3c3d order warehouse parcels by arrival date 2021-10-30 12:37:52 +08:00
omair saleh 2675fd8704 Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:30:58 +08:00
omair saleh 02c6825c4a Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:24:44 +08:00
omair saleh 908e0a49f9 Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:23:58 +08:00
edmondlang 9252134cc4 wip update container comments(remarks) section and implement api 2021-10-29 16:20:05 +08:00
omair saleh cf03a032e5 create container remark 2021-10-27 21:20:01 +08:00
omair saleh 2cb8f9f407 show change ratio for profit model calculator 2021-10-26 10:51:06 +08:00
omair saleh ef1759379e disable customer order scope to temp fix pdf download issue 2021-10-25 14:54:46 +08:00
omair saleh ad9b983325 optimise order queries 2021-10-25 14:29:24 +08:00
omair saleh fc36a193e9 optimise order queries 2021-10-25 14:28:55 +08:00
omair saleh 86d26edb72 Merge branch 'improve-responsive-ui' into 'master'
improve responsive ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!78
2021-10-25 05:56:44 +00:00
omair saleh 052218b621 Merge branch 'delivery-packing-list-ui' into 'master'
Delivery packing list ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!76
2021-10-25 05:54:58 +00:00
omair saleh da52ddd3ac Merge branch 'cross-login' into 'master'
Cross login

See merge request CIEFWorldwideSdnBhd/shipping-portal!75
2021-10-25 05:54:01 +00:00
omair saleh 6cfed45ffe Merge branch 'create-deliver-packing-list-api' into 'master'
create deliver packing list api

See merge request CIEFWorldwideSdnBhd/shipping-portal!74
2021-10-25 05:53:33 +00:00
omair saleh a048a79ca8 Merge branch 'cbm_calc' into 'master'
Shipping Cost Calculations

See merge request CIEFWorldwideSdnBhd/shipping-portal!70
2021-10-25 05:49:04 +00:00
ahmedsophyudden 3f73848c18 Create new filter to order by arrival dates 2021-10-18 11:22:56 +08:00
Fairuz 63aae14b28 Shipping Cost Calculations 2021-10-18 10:04:33 +08:00
glovetleong aae9f160e6 simplify order resource 2021-10-17 17:55:16 +08:00
ahmedsophyudden ba61f7f3ab add & delete segment api 2021-10-15 19:18:09 +08:00
edmondlang 04117754db Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into improve-responsive-ui 2021-10-13 20:33:18 +08:00
edmondlang 821a39e5ff improve responsive ui 2021-10-13 20:23:59 +08:00
glovetleong 05cb3dd35e cross login 2021-10-13 14:10:32 +08:00
ahmedsophyudden 5b5bf1bb06 add & delete segment api 2021-10-12 11:29:09 +08:00
glovetleong 3d7090758d Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login 2021-10-12 08:53:57 +08:00
ahmedsophyudden e546825520 New add & delete company connection to connection segment api 2021-10-11 22:28:11 +08:00
edmondlang f6af7c5f4f code review remove d-flex 2021-10-10 15:42:26 +08:00
edmondlang 6ea51d56c1 improve responsive ui
fix order status bar width problem
2021-10-10 15:38:48 +08:00
glovetleong b36313e24c remark for order, container, packing list 2021-10-10 15:22:49 +08:00
edmondlang f2422ea45c improve responsive ui 2021-10-09 20:59:23 +08:00
edmondlang d26c90136b improve responsive 2021-10-09 20:43:40 +08:00
edmondlang c10e78ad51 imporve respnsive ui 2021-10-09 17:32:44 +08:00
edmondlang e4c8c021ec implement api from create-delivery-packing-list-api 2021-10-07 20:02:56 +08:00
edmondlang 46891669f1 Merge branch 'create-deliver-packing-list-api' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into delivery-packing-list-ui 2021-10-07 10:58:09 +08:00
glovetleong c281beb87a create deliver packing list api 2021-10-07 09:20:04 +08:00
edmondlang 0d53a61f18 update select all packing list funtion 2021-10-05 20:40:48 +08:00
edmondlang 6d0e7dd51d delivery-packing-list-ui 2021-10-05 17:00:00 +08:00
glovetleong 592e8c489b env 2021-09-29 14:24:37 +08:00
glovetleong ee77fd236a cross login 2021-09-29 14:23:50 +08:00
glovetleong ee87443ca4 pull 2021-09-28 22:23:51 +08:00
glovetleong 31105cfcef Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login 2021-09-28 22:09:05 +08:00
glovetleong 5d34201579 pull 2021-09-28 22:07:19 +08:00
glovetleong f385407804 debug 2021-09-28 12:07:05 +08:00
glovetleong 0554cc895f checkout 2021-09-05 12:55:11 +08:00
glovetleong afcb1277f1 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login
# Conflicts:
#	routes/web.php
2021-09-01 20:30:08 +08:00
glovetleong 2d49f4aabf cross login 2021-08-25 10:01:32 +08:00
glovetleong 2095c18871 cross login 2021-08-22 13:55:51 +08:00
138 changed files with 4251 additions and 431 deletions
+2
View File
@@ -51,3 +51,5 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasPendingDelivery implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value ? $builder->whereHas('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
}) : $builder->whereDoesntHave('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
});
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.status', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.type', $value);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class WithArrivalDate implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->leftJoin('transport_arrangements', function ($join) {
$join->on('packing_lists.id', '=', 'transport_arrangements.owner_id')->where('transport_arrangements.owner_type', 'App\Models\PackingList');
})->addSelect(['packing_lists.*', DB::raw('transport_arrangements.drop_date as arrival_date')]);
}
}
@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Packable
{
public function packingLists(): morphMany;
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Modules\Accounts\Processors\CrossAuthenticationProcessor;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CrossAuthenticateUserLogic extends AbstractControllerLogic
{
protected function notification():array {
return [
'title' => 'Cross Authentication',
'message' => 'You have successfully logged in to your account'
];
}
/** @var CrossAuthenticationProcessor */
private $crossAuthenticationProcessor;
/**
* CrossAuthenticateUserLogic constructor.
* @param CrossAuthenticationProcessor $authenticationProcessor
*/
public function __construct(CrossAuthenticationProcessor $crossAuthenticationProcessor)
{
$this->crossAuthenticationProcessor = $crossAuthenticationProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function logic(Request $request): JsonResponse {
return $this->response($this->crossAuthenticationProcessor->execute($request));
}
}
@@ -27,7 +27,6 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
public function __construct(InvalidatesAuthenticationToken $invalidatesAuthenticationToken)
{
logger("logout user logic");
$this->invalidatesAuthenticationToken = $invalidatesAuthenticationToken;
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class CrossAuthenticationCredentialsObject implements DataTransferObject
{
/** @var string */
private $access_token;
/** @var string */
private $platform;
/**
* CrossAuthenticationCredentialsObject constructor.
* @param string $access_token
* @param string $platform
*/
public function __construct(string $access_token, int $platform)
{
$this->access_token = $access_token;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAccessToken(): string
{
return $this->access_token;
}
/**
* @return string
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\User;
class UserSocialAccountObject implements DataTransferObject
{
/** @var String */
private $app_id;
/** @var User */
private $user;
/** @var integer */
private $platform;
/**
* UserSocialAccountObject constructor.
* @param String $token
* @param String $app_id
*/
public function __construct(String $app_id, User $user, int $platform)
{
$this->app_id = $app_id;
$this->user = $user;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAppId(): String
{
return $this->app_id;
}
/**
* @return User
*/
public function getUser(): User
{
return $this->user;
}
/**
* @return int
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -0,0 +1,211 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Classes\Modules\Accounts\Services\CrossAuthenticatesUser;
use App\Classes\Modules\Accounts\Services\AuthenticationRedirect;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
use App\Classes\Modules\Accounts\Standards\Rules\CanCrossAuthenticateUser;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\Modules\Accounts\Services\CreatesUserSocialAccount;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Http\Request;
use App\Models\UserSocialAccount;
class CrossAuthenticationProcessor
{
/** @var CanCrossAuthenticateUser */
private $canCrossAuthenticateUser;
/** @var CrossAuthenticatesUser */
private $authenticatesUser;
/** @var GeneratesAuthenticationToken */
private $generatesAuthenticationToken;
/** @var FetchesUser */
private $fetchesUser;
/** @var AuthenticationRedirect */
private $authenticationRedirect;
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var CreatesUserSocialAccount */
private $createsUserSocialAccount;
/**
* CrossAuthenticationProcessor constructor.
* @param CanCrossAuthenticateUser $canCrossAuthenticateUser
* @param CrossAuthenticatesUser $crossAuthenticatesUser
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
* @param FetchesUser $fetchesUser
* @param AuthenticationRedirect $authenticationRedirect
* @param CreateUserProcessor $createUserProcessor
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param CreatesUserSocialAccount $createsUserSocialAccount
*/
public function __construct(
CanCrossAuthenticateUser $canCrossAuthenticateUser,
CrossAuthenticatesUser $crossAuthenticatesUser,
GeneratesAuthenticationToken $generatesAuthenticationToken,
FetchesUser $fetchesUser,
AuthenticationRedirect $authenticationRedirect,
CreateUserProcessor $createUserProcessor,
CreateCompanyProcessor $createCompanyProcessor,
CreateContactProcessor $createContactProcessor,
CreateCompanyModuleProcessor $createCompanyModuleProcessor,
CreatesCompanyConnection $createsCompanyConnection,
ApprovesCompanyConnection $approvesCompanyConnection,
AssignEmployeeProcessor $assignEmployeeProcessor,
UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor,
CreatesUserSocialAccount $createsUserSocialAccount
)
{
$this->canCrossAuthenticateUser = $canCrossAuthenticateUser;
$this->crossAuthenticatesUser = $crossAuthenticatesUser;
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
$this->fetchesUser = $fetchesUser;
$this->authenticationRedirect = $authenticationRedirect;
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->createsUserSocialAccount = $createsUserSocialAccount;
}
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request): array {
$object = new CrossAuthenticationCredentialsObject($request->input('access_token'), $request->input('platform'));
$this->canCrossAuthenticateUser->passes($object);
$cross = $this->crossAuthenticatesUser->execute($object);
$user_social_account = UserSocialAccount::where('app_id', $cross->token->user->id)->first();
if (!$user_social_account) {
$request->request->add([
'name' => $cross->token->user->name,
'email' => $cross->token->user->email,
'password' => 'pass123',
'password_confirmation' => 'pass123',
]);
$user = $this->createUserProcessor->execute(
$request,
RoleTypes::USER,
env('APP_ENV') != 'production' ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION
);
$company = $this->createCompanyProcessor->execute(
$cross->payload->data->name,
CompanyType::COMPANY_BUSINESS,
ApprovalStatus::PENDING_SUBMISSION
);
$contactObject = new ContactObject(
$cross->payload->data->contact->reference,
$cross->payload->data->contact->phone,
$cross->payload->data->contact->email,
$cross->payload->data->contact->wechat_id
);
$contact = $this->createContactProcessor->execute($contactObject, $company);
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject(
$companyModule, 'CIEF',
mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()
);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($object);
$request->request->add([
'files' => [$cross->document->src],
'identification_no' => $cross->payload->data->identification->reference,
]);
$this->uploadIdentityDocumentProcessor->execute($request, $company);
$object = new UserSocialAccountObject(
$cross->token->user->id,
$user,
$request->input('platform')
);
$this->createsUserSocialAccount->execute($object);
}
else {
$user = $user_social_account->user()->first();
}
return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)];
}
}
@@ -56,4 +56,4 @@ class GenerateEmailVerificationAttemptProcessor
}
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Models\UserSocialAccount;
class CreatesUserSocialAccount extends AbstractUpdateRecord
{
/**
* @param UserSocialAccountObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(UserSocialAccountObject $object) {
$model = new UserSocialAccount();
$model->user_id = $object->getUser()->id;
$model->app_id = $object->getAppId();
$model->platform = $object->getPlatform();
return $this->handler($model);
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use Illuminate\Support\Facades\Http;
use App\Classes\Exceptions\AccessUnauthorisedException;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\ValueObjects\Constants\PlatformType;
class CrossAuthenticatesUser
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return false|string
* @throws AccessUnauthorisedException
*/
public function execute(CrossAuthenticationCredentialsObject $object){
if ($object->getPlatform() == PlatformType::EXCHANGE) {
$token = $object->getAccessToken();
$tokenParts = explode(".", $token);
$tokenPayload = base64_decode($tokenParts[1]);
$jwtPayload = json_decode($tokenPayload);
$response = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/company/' . $jwtPayload->user->company_id . '/show')->object();
$response_document = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/storage/' . $response->payload->data->identification->files[0]->file->file_info[0]->original->file . '/fetch')->object();
$response->token = $jwtPayload;
$response->document = $response_document->payload;
}
return $response;
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\UserSocialAccount;
class FetchesUserSocialAccount extends AbstractFetchRecord
{
/** @var UserSocialAccount */
private $repository;
/**
* FetchesUser constructor.
* @param UserSocialAccount $repository
*/
public function __construct(UserSocialAccount $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
use App\Classes\Modules\Accounts\Standards\Validators\UserCrossAuthenticationValidation;
class CanCrossAuthenticateUser extends AbstractRule
{
/** @var UserCrossAuthenticationValidation */
private $userCrossAuthenticationValidation;
/**
* CanCrossAuthenticateUser constructor.
* @param UserCrossAuthenticationValidation $userCrossAuthenticationValidation
*/
public function __construct(UserCrossAuthenticationValidation $userCrossAuthenticationValidation)
{
$this->userCrossAuthenticationValidation = $userCrossAuthenticationValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
* @throws RequestValidationException
*/
protected function validators($object): bool
{
return $this->userCrossAuthenticationValidation->validate($object);
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
class UserCrossAuthenticationValidation extends AbstractValidation
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return array
*/
protected function data($object): array {
return [
'access_token' => $object->getAccesstoken(),
'platform' => $object->getPlatform()
];
}
/**
* @return array
*/
protected function rules(): array {
return [
'access_token' => 'required',
'platform' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array {
return [];
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\AssignConnectionSegmentProcessor;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignCompanyConnectionToConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Assign Company Connection To Connection Segment',
'message' => 'You have successfully assigned Company Connection to Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var AssignConnectionSegmentProcessor */
private $assignCompanyConnectionToConnectionSegmentProcessor;
/**
* AssignCompanyToSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->assignCompanyConnectionToConnectionSegmentProcessor = $assignCompanyConnectionToConnectionSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$this->assignCompanyConnectionToConnectionSegmentProcessor->execute($companyConnection, $request->input('segment_id'));
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Classes\Modules\Companies\Services\RemovesCompanyConnectionFromConnectionSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveCompanyConnectionFromConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Detach Company Connection From Connection Segment',
'message' => 'You have successfully detached Company Connection from Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var RemovesCompanyConnectionFromConnectionSegment */
private $removesCompanyConnectionFromConnectionSegment;
/**
* RemoveCompanyFromSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param FetchesSegment $fetchesSegment
* @param RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, FetchesSegment $fetchesSegment, RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->fetchesSegment = $fetchesSegment;
$this->removesCompanyConnectionFromConnectionSegment = $removesCompanyConnectionFromConnectionSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]);
$this->removesCompanyConnectionFromConnectionSegment->execute($companyConnection, $segment);
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -0,0 +1,56 @@
<?php
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Companies\Services\AssignsCompanyConnectionToConnectionSegment;
use App\Classes\Modules\Companies\Standards\Rules\CanAssignSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\CompanyConnection;
use Illuminate\Database\Eloquent\Model;
class AssignConnectionSegmentProcessor
{
/** @var CanAssignSegment */
private $canAssignSegment;
/** @var AssignsCompanyConnectionToConnectionSegment */
private $assignsCompanyConnectionToConnectionSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/**
* AssignCompanyToSegmentProcessor constructor.
* @param CanAssignSegment $canAssignSegment
* @param AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanAssignSegment $canAssignSegment, AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment, FetchesSegment $fetchesSegment)
{
$this->canAssignSegment = $canAssignSegment;
$this->assignsCompanyConnectionToConnectionSegment = $assignsCompanyConnectionToConnectionSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param CompanyConnection $companyConnection
* @param int|null $segmentId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(CompanyConnection $companyConnection, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model {
$segment = $this->fetchesSegment->execute(['id' => $segmentId]);
$this->canAssignSegment->passes();
return $this->assignsCompanyConnectionToConnectionSegment->execute($companyConnection, $segment);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class AssignsCompanyConnectionToConnectionSegment extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $companyConnection
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(CompanyConnection $companyConnection, Segment $segment)
{
try {
$companyConnection->segments()->attach($segment);
return $companyConnection;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyConnection;
class FetchesCompanyConnection extends AbstractFetchRecord
{
/** @var CompanyConnection */
private $repository;
/**
* FetchesCompanyConnection constructor.
* @param CompanyConnection $repository
*/
public function __construct(CompanyConnection $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class RemovesCompanyConnectionFromConnectionSegment extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $companyConnection
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(CompanyConnection $companyConnection, Segment $segment)
{
try {
$companyConnection->segments()->detach($segment);
return $companyConnection;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CreatesOrderRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignOrderRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Order Remark',
'message' => 'You have successfully created a new Order Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesOrderRemark */
private $createsOrderRemark;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesOrderRemark $createsOrderRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesOrderRemark $createsOrderRemark, FetchesOrder $fetchesOrder)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsOrderRemark = $createsOrderRemark;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsOrderRemark->execute($this->fetchesOrder->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -8,6 +8,7 @@ use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
@@ -63,6 +64,13 @@ class CreateOrderLogic extends AbstractControllerLogic
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->input('warehouse_id')]);
if($originWarehouse->reference === WarehouseReferences::VT_GUANG_ZHOU){
$marking = $company->companyModules()->importers()->first()->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
if(in_array($marking, ['2192KAA', '2353GFE', '6866DTR', '1905JYW', '1291NSC', '8288MIB'])){
$originWarehouse = $this->fetchesCompanyModule->execute(['reference' => WarehouseReferences::YD_GUANG_ZHOU]);
}
}
$order = $this->createOrderProcessor->execute($company, $originWarehouse, $address, $this->generatesOrderNumber->execute());
return $this->resourceResponse(new OrderResource($order));
@@ -19,6 +19,7 @@ use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use App\Models\PackingList;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
@@ -80,6 +81,9 @@ class CreateShippingPackingListLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
@@ -93,6 +97,8 @@ class CreateShippingPackingListLogic extends AbstractControllerLogic
PackingListType::SHIPPING_PACKING_LIST,
ApprovalStatus::PENDING_SUBMISSION
);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
$packages = $request->input('packages');
@@ -0,0 +1,103 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CalculatesCBM;
use App\Classes\Modules\Orders\Services\CalculatesBaseRate;
use App\Classes\Modules\Orders\Services\CalculatesSegmentRate;
use App\Classes\Modules\Orders\Services\CalculatesStateRate;
use App\Classes\Modules\Orders\Services\CalculatesWarehouseRate;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\Modules\Transactions\Processors\CreateShippingCostTransactionProcessor;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ShippingCostLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Order Shipping Cost',
'message' => 'Order shipping cost calculation done'
];
}
/** @var CalculateCBM */
private $calculateCBM;
/** @var CalculatesBaseRate */
private $calculateBaseRate;
/** @var CalculatesSegmentRate */
private $calculateSegmentRate;
/** @var CalculatesStateRate */
private $calculateStateRate;
/** @var CalculatesWarehouse */
private $calculateWarehouseRate;
/** @var FetchesOrder */
private $fetchesOrder;
/** @var ShippingCostTransactionProcessor */
private $shippingCostTransactionProcessor;
/**
* ShippingCostLogic constructor.
* @param CalculateCBM $calculateCBM
* @param FetchesOrder $fetchesOrder
*/
public function __construct(FetchesOrder $fetchesOrder, CalculatesCBM $calculateCBM, CalculatesBaseRate $calculateBaseRate, CalculatesSegmentRate $calculateSegmentRate, CalculatesStateRate $calculateStateRate, CalculatesWarehouseRate $calculateWarehouseRate, CreateShippingCostTransactionProcessor $shippingCostTransactionProcessor)
{
$this->fetchesOrder = $fetchesOrder;
$this->calculateCBM = $calculateCBM;
$this->calculatesBaseRate = $calculateBaseRate;
$this->calculatesSegmentRate = $calculateSegmentRate;
$this->calculatesStateRate = $calculateStateRate;
$this->calculateWarehouseRate = $calculateWarehouseRate;
$this->shippingCostTransactionProcessor = $shippingCostTransactionProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$order = $this->fetchesOrder->getRepository()->where(['id' => $request->route('id')])->first();
$baseRate = $this->calculatesBaseRate->execute($order);
$segmentRate = $this->calculatesSegmentRate->execute($order, SegmentConstants::STANDARD_SEGMENT) + $this->calculatesSegmentRate->execute($order, SegmentConstants::CUSTOM_SEGMENT);
$stateRate = $this->calculatesStateRate->execute($order, false) + $this->calculatesStateRate->execute($order, true);
$warehouseRate = $this->calculateWarehouseRate->execute($order);
$totalShippingCost = 0;
$totalCBM = 0;
$quantity = 0;
foreach($order->parcels as $parcel){
$cbm = $this->calculateCBM->execute($order, $parcel);
if($cbm > 0){
$totalCBM += $cbm;
$quantity ++;
$totalShippingCost += (($segmentRate + $stateRate + $warehouseRate) * $cbm);
}
}
$this->shippingCostTransactionProcessor->execute($order, $quantity, round($totalCBM,2), round($totalShippingCost,2));
return $this->resourceResponse(new OrderResource($order));
}
}
@@ -53,7 +53,7 @@ class CreateOrderRolesProcessor
$importer = $order->companyModule;
/** @var CompanyModule $destinationWarehouse */
$destinationWarehouse = $this->fetchesCompanyModule->execute(['reference' => WarehouseReferences::DESTINATION_WAREHOUSE[$address->state_id ]]);
$destinationWarehouse = $this->fetchesCompanyModule->execute(['reference' => $originWarehouse->reference === WarehouseReferences::YD_GUANG_ZHOU ? WarehouseReferences::YD_DESTINATION_WAREHOUSE : WarehouseReferences::VT_DESTINATION_WAREHOUSE[$address->state_id]]);
/** @var CompanyModule $freightForwarder */
$freightForwarder = $originWarehouse->company->companyModules()->freightForwarders()->first();
@@ -84,28 +84,5 @@ class CreateOrderRolesProcessor
$this->createsOrderRole->execute($roleObject);
return true;
$companies = $this->fetchesCompany->getRepository()->whereIn('id',[1, $request->get('warehouse_id')])->get();
$cief_company = $companies[0]->id == 1 ? $companies[0] : $companies[1];
$warehouse_company = $companies[0]->id != 1 ? $companies[0] : $companies[1];
$cief_company_module = $cief_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$cief_company_module->unity_hash_id]);
$contractEntities[0]->{"company_module_id"} = $cief_company_module->id;
$warehouse_company_module = $warehouse_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$warehouse_company_module->unity_hash_id]);
$contractEntities[1]->{"company_module_id"} = $warehouse_company_module->id;
foreach($contractEntities as $entity){
$order_role_object = new OrderRoleObject($orderId, $entity->company_module_id, $entity->hash_id, $entity->entity_signature_hash_id);
$this->canCreateOrderRole->passes($order_role_object);
$this->createsOrderRole->execute($order_role_object);
}
return $contractEntities;
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Order;
use Carbon\Carbon;
class CalculatesBaseRate
{
public function execute(Order $order){
return 300;
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Order;
use App\Models\Package;
use Carbon\Carbon;
class CalculatesCBM
{
public function execute(Order $order, Package $parcel){
return $parcel->length * $parcel->width * $parcel->height;
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\Order;
use Carbon\Carbon;
class CalculatesSegmentRate
{
public function execute(Order $order, int $segmentRates){
return ($segmentRates == SegmentConstants::STANDARD_SEGMENT) ? 300 : (
(($segmentRates == SegmentConstants::CUSTOM_SEGMENT) ? -20 : 0)
);
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Order;
use Carbon\Carbon;
class CalculatesStateRate
{
public function execute(Order $order, $isOutskirt=false){
return ($isOutskirt) ? 20 : 40;
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Order;
use Carbon\Carbon;
class CalculatesWarehouseRate
{
public function execute(Order $order){
return 0;
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Order;
class CreatesOrderRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $order, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($order->remarks(), $model);
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\CreatesPackingListRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignPackingListRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Packing List Remark',
'message' => 'You have successfully created a new Packing List Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesPackingListRemark */
private $createsPackingListRemark;
/** @var FetchesPackingList */
private $fetchesPackingList;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesPackingListRemark $createsPackingListRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesPackingListRemark $createsPackingListRemark, FetchesPackingList $fetchesPackingList)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsPackingListRemark = $createsPackingListRemark;
$this->fetchesPackingList = $fetchesPackingList;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsPackingListRemark->execute($this->fetchesPackingList->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\CreatesContainerRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignContainerRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Order Remark',
'message' => 'You have successfully created a new Order Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesContainerRemark */
private $createsContainerRemark;
/** @var FetchesContainer */
private $fetchesContainer;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesContainerRemark $createsContainerRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesContainerRemark $createsContainerRemark, FetchesContainer $fetchesContainer)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsContainerRemark = $createsContainerRemark;
$this->fetchesContainer = $fetchesContainer;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsContainerRemark->execute($this->fetchesContainer->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -4,16 +4,17 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Services\CreatesRemark;
use App\Models\Container;
use App\Models\Remark;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Http\Resources\ContainerResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateContainerRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
@@ -24,35 +25,41 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
];
}
/** @var CreatesRemark */
private $createsRemark;
/** @var FetchesContainer */
private $fetchesContainer;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateContainerRemarkLogic constructor.
* @param CreatesRemark $createsRemark
* @param FetchesContainer $fetchesContainer
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CreatesRemark $createsRemark)
public function __construct(FetchesContainer $fetchesContainer, CreateRemarkProcessor $createRemarkProcessor)
{
$this->createsRemark = $createsRemark;
$this->fetchesContainer = $fetchesContainer;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
// get the container
$container = Container::findOrFail($request->input('container_id'));
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$object = new RemarkObject($request->input('content'), 1);
$object = new RemarkObject($request->input('content'), auth()->user()->id);
$remark = $this->createsRemark->execute($container, $object);
$this->createRemarkProcessor->execute($container, $object);
return $remark;
return $this->resourceResponse(new ContainerResource($container));
}
@@ -0,0 +1,88 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Http\Resources\DeliverPackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateDeliverPackingListLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Deliver PackingList',
'message' => 'You have successfully created a new Deliver PackingList'
];
}
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var GeneratesPackingListReferenceNumber */
private $generatesPackingListReferenceNumber;
/** @var FetchesPackingList */
private $fetchesPackingList;
/**
* CreateDeliverPackingListLogic constructor.
* @param CreatePackingListProcessor $createPackingListProcessor
* @param FetchesCompanyModule $fetchesCompanyModule
*/
public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesCompanyModule $fetchesCompanyModule, GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber, FetchesPackingList $fetchesPackingList)
{
$this->createPackingListProcessor = $createPackingListProcessor;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber;
$this->fetchesPackingList = $fetchesPackingList;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$company_module = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]);
$packing_list_id = $request->input('packing_list_id');
$reference_number = $this->generatesPackingListReferenceNumber->execute();
$packingListObject = new PackingListObject(
$reference_number,
null,
PackingListType::DELIVERY_PACKING_LIST,
ApprovalStatus::PENDING_SUBMISSION
);
$deliverPackingList = $this->createPackingListProcessor->execute($packingListObject, $company_module);
foreach ($packing_list_id as $key => $row) {
$this->fetchesPackingList->execute(['id' => $row]);
}
$deliverPackingList->packing_list_owner()->sync($packing_list_id);
return $this->resourceResponse(new DeliverPackingListResource($deliverPackingList));
}
}
@@ -30,7 +30,7 @@ class PackingListObject implements DataTransferObject
* @param int $status
* @param null|string $contractReference
*/
public function __construct(string $reference, int $claimantId, int $type, int $status, ?string $contractReference = null)
public function __construct(string $reference, ?int $claimantId, int $type, int $status, ?string $contractReference = null)
{
$this->reference = $reference;
$this->claimantId = $claimantId;
@@ -50,7 +50,7 @@ class PackingListObject implements DataTransferObject
/**
* @return int
*/
public function getClaimantId(): int
public function getClaimantId(): ?int
{
return $this->claimantId;
}
@@ -66,6 +66,10 @@ class FetchDeliveryListFromVTPortalProcessor
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
if(!array_key_exists(0, $shippingPackingLists->Rows)){
continue;
}
$shippingPackingList = $shippingPackingLists->Rows[0];
if(!$shippingPackingList[9] && !$shippingPackingList[10]) {
@@ -87,6 +91,7 @@ class FetchDeliveryListFromVTPortalProcessor
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
} catch (GuzzleException $exception) {
dd($exception);
continue;
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\PackingLists\Services\Containers;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Container;
class CreatesContainerRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Container $container, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($container->remarks(), $model);
}
}
@@ -23,6 +23,7 @@ class CreatesPackingList extends AbstractUpdateRelationshipRecord
$model->claimant_id = $object->getClaimantId();
$model->type = $object->getType();
$model->status = $object->getStatus();
$model->reference_contract = $object->getContractReference();
return $this->handler($packable->packingLists(), $model);
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\PackingList;
class CreatesPackingListRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingList $packingList, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($packingList->remarks(), $model);
}
}
@@ -51,11 +51,13 @@ class UpdateRemarkLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new RemarkObject($request->input('content'), $request->input('commenter_id'));
$object = new RemarkObject($request->input('content'), auth()->user()->id);
$this->canUpdateRemark->passes($object);
@@ -0,0 +1,47 @@
<?php
namespace App\Classes\Modules\Remarks\Processors;
use App\Classes\General\Interfaces\Remarkable;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Services\CreatesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
class CreateRemarkProcessor
{
/** @var CreatesRemark */
private $createsRemark;
/** @var CanCreateRemark */
private $canCreateRemark;
/**
* CreateRemarkProcessor constructor.
* @param CreatesRemark $createsRemark
* @param CanCreateRemark $canCreateRemark
*/
public function __construct(CreatesRemark $createsRemark, CanCreateRemark $canCreateRemark)
{
$this->createsRemark = $createsRemark;
$this->canCreateRemark = $canCreateRemark;
}
/**
* @param Remarkable $remarkable
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Remarkable $remarkable, RemarkObject $object){
$this->canCreateRemark->passes($object);
return $this->createsRemark->execute($remarkable, $object);
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Processors\CreateSegmentProcessor;
use App\Http\Resources\SegmentResource;
use App\Models\Segment;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Segment',
'message' => 'You have successfully created a new Segment'
];
}
/** @var CreateSegmentProcessor */
private $createSegmentProcessor;
/**
* CreateSegmentLogic constructor.
* @param CreateSegmentProcessor $createSegmentProcessor
*/
public function __construct(CreateSegmentProcessor $createSegmentProcessor)
{
$this->createSegmentProcessor = $createSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Segment $segment */
$segment = $this->createSegmentProcessor->execute($request->input('name'));
return $this->resourceResponse(new SegmentResource($segment));
}
}
@@ -0,0 +1,69 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\DeletesSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Segments\Standards\Rules\CanDeleteSegment;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Deleted Segment',
'message' => 'You have successfully deleted a Segment'
];
}
/** @var CanDeleteSegment */
private $canDeleteSegment;
/** @var DeletesSegment */
private $deletesSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/**
* DeleteSegmentLogic constructor.
* @param CanDeleteSegment $canDeleteSegment
* @param DeletesSegment $deletesSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanDeleteSegment $canDeleteSegment, DeletesSegment $deletesSegment, FetchesSegment $fetchesSegment)
{
$this->canDeleteSegment = $canDeleteSegment;
$this->deletesSegment = $deletesSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canDeleteSegment->passes();
$query = $this->fetchesSegment->execute(['id' => $request->route('id')]);
$this->deletesSegment->execute($query);
return $this->response([]);
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Segments\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class SegmentObject implements DataTransferObject
{
/** @var string */
private $name;
/** @var int */
private $company_module_id;
/**
* ConstantObject constructor.
* @param string $name
* @param string $reference
* @param array $detail
*/
public function __construct(string $name, int $company_module_id)
{
$this->name = $name;
$this->company_module_id = $company_module_id;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string
*/
public function getCompanyModuleId(): string
{
return $this->company_module_id;
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Classes\Modules\Segments\Processors;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
use App\Classes\Modules\Segments\Services\CreatesSegment;
use App\Classes\Modules\Segments\Standards\Rules\CanCreateSegment;
use Illuminate\Database\Eloquent\Model;
class CreateSegmentProcessor
{
/** @var CanCreateSegment */
private $canCreateSegment;
/** @var CreatesSegment */
private $createsSegment;
/**
* CreateSegmentProcessor constructor.
* @param CanCreateSegment $canCreateSegment
* @param CreatesSegment $createsSegment
* @param GeneratesUniqueAccountNumber $generatesUniqueAccountNumber
*/
public function __construct(CanCreateSegment $canCreateSegment, CreatesSegment $createsSegment)
{
$this->canCreateSegment = $canCreateSegment;
$this->createsSegment = $createsSegment;
}
/**
* @param string $name
* @param int $companyModuleId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(string $name, int $companyModuleId =1): Model {
$segement_object = new SegmentObject($name, $companyModuleId);
$this->canCreateSegment->passes($segement_object);
return $this->createsSegment->execute($segement_object);
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Classes\Modules\Segments\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
use App\Models\Segment;
class CreatesSegment extends AbstractUpdateRecord
{
/**
* @param SegmentObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(SegmentObject $object)
{
$model = new Segment();
$model->name = $object->getName();
$model->company_module_id = $object->getCompanyModuleId();
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Segments\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Segment;
class DeletesSegment extends AbstractDeleteRecord
{
/**
* @param Segment $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Segment $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,51 @@
<?php
namespace App\Classes\Modules\Segments\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
use App\Classes\Modules\Segments\Standards\Validators\SegmentValidation;
class CanCreateSegment extends AbstractRule
{
/** @var SegmentValidation */
private $segmentValidation;
/**
* CanCreateSegment constructor.
* @param SegmentValidation $segmentValidation
*/
public function __construct(SegmentValidation $segmentValidation)
{
$this->segmentValidation = $segmentValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param SegmentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->segmentValidation->validate($object);
}
/**
* @param SegmentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Segments\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
class CanDeleteSegment extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Segments\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
class SegmentValidation extends AbstractValidation
{
/**
* @param SegmentObject $object
* @return array
*/
protected function data($object): array
{
return [
'name' => $object->getName(),
'company_module_id' => $object->getCompanyModuleId()
];
}
/**
* @param string $type
* @return array
*/
protected function rules(?string $type = 'POST'): array
{
if ($type == 'POST') {
return [
'name' => 'required',
'company_module_id' => 'required',
];
} elseif ($type == 'PUT') {
return [
];
}
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -7,7 +7,7 @@ use App\Classes\General\Interfaces\DataTransferObject;
class TransactionDetailObject implements DataTransferObject
{
/** @var string|null */
private $code;
private $reference;
/** @var string|null */
private $name;
@@ -20,14 +20,14 @@ class TransactionDetailObject implements DataTransferObject
/**
* TransactionDetailObject constructor.
* @param string $code
* @param string $reference
* @param string $name
* @param int $quantity
* @param float $price
*/
public function __construct(?string $code, ?string $name , ?int $quantity, ?float $price)
public function __construct(?string $reference, ?string $name , ?int $quantity, ?float $price)
{
$this->code = $code;
$this->reference = $reference;
$this->name = $name;
$this->quantity = $quantity;
$this->price = $price;
@@ -36,9 +36,9 @@ class TransactionDetailObject implements DataTransferObject
/**
* @return string
*/
public function getCode(): ?string
public function getReference(): ?string
{
return $this->code;
return $this->reference;
}
/**
@@ -70,4 +70,4 @@ class TransactionDetailObject implements DataTransferObject
return $this->getQuantity() * $this->getPrice();
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Transactions\Processors;
use App\Classes\Modules\Transactions\Services\CreatesShippingCostTransaction;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Models\Order;
class CreateShippingCostTransactionProcessor
{
/** @var CreatesShippingCostTransaction */
private $createsShippingCostTransaction;
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
public function __construct(CreatesShippingCostTransaction $createsShippingCostTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber)
{
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->createsShippingCostTransaction = $createsShippingCostTransaction;
}
/**
* @param Order $order
* @return void
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $order, int $quantity, float $totalCBM, float $totalShippingCost)
{
$billNumber = $this->generatesTransactionBillNumber->execute('SHP-');
$transactionObject = new TransactionObject(
$billNumber,
TransactionType::SHIPPING_COST,
1,
$order->companyModule->company_id,
1,
PaymentMethodType::BA,
$totalShippingCost,
$totalShippingCost,
1,
1,
0,
0,
0,
null,
ApprovalStatus::PENDING_SUBMISSION
);
$transactionDetailObject = new TransactionDetailObject(
TransactionType::SHIPPING_COST,
'Shipping Cost',
$quantity,
$totalShippingCost/$totalCBM
);
$shippingCostTransaction = $this->createsShippingCostTransaction->execute($order, $transactionObject, $transactionDetailObject);
}
}
@@ -0,0 +1,52 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
use App\Models\Order;
use App\Models\Transaction;
use App\Models\TransactionDetail;
class CreatesShippingCostTransaction extends AbstractUpdateRelationshipRecord
{
/**
* @param TransactionObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $order, TransactionObject $object, TransactionDetailObject $transactionDetailObject) {
$model = new Transaction();
$model->bill_no = $object->getBillNo();
$model->type = $object->getTransactionType();
$model->issuer = $object->getIssuer();
$model->receiver = $object->getReceiver();
$model->recipient_bank_account_id = $object->getRecipientBankAccountId();
$model->payment_method = $object->getPaymentMethod();
$model->amount = $object->getAmount();
$model->original_amount = $object->getOriginalAmount();
$model->currency_id = $object->getCurrencyId();
$model->original_currency_id = $object->getOriginalCurrencyId();
$model->currency_rate = $object->getCurrencyRate();
$model->tax = $object->getTax();
$model->service_charge = $object->getServiceCharge();
$model->expires_on = $object->getExpiresOn();
$model->status = $object->getStatus();
$transaction = $this->handler($order->transactions(), $model);
$model = new TransactionDetail();
$model->reference = $transactionDetailObject->getReference();
$model->name = $transactionDetailObject->getName();
$model->quantity = $transactionDetailObject->getQuantity();
$model->price = $transactionDetailObject->getPrice();
$model->amount = $transactionDetailObject->getAmount();
return $this->handler($transaction->transactionDetails(), $model);
}
}
@@ -22,7 +22,7 @@ class UpdatesContractObligation
$accessToken=$this->getAccessToken->execute();
$this->updateContractStatusEndpoint = str_replace('{hash}',$obligation_hash_id,$this->updateContractStatusEndpoint);
$this->updateContractStatusEndpoint = str_replace('{hash}', $obligation_hash_id, $this->updateContractStatusEndpoint);
$response = Http::withToken($accessToken)->put($this->updateContractStatusEndpoint,['entity_signature_id'=>$contract_entity_signature])->object();
@@ -16,6 +16,6 @@ final class BusinessType {
public const DRIVER = 5;
public const CURRENCY_VENDOR = 5;
public const CURRENCY_VENDOR = 6;
}
@@ -0,0 +1,9 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class PlatformType {
public const EXCHANGE = 1;
}
@@ -22,4 +22,6 @@ final class TransactionType {
public const SUPPLIER_DELIVER = 8;
public const SHIPPING_COST = 9;
}
@@ -4,34 +4,40 @@ namespace App\Classes\ValueObjects\Constants;
final class WarehouseReferences {
public const GUANG_ZHOU = 'GZ-V01';
public const VT_GUANG_ZHOU = 'GZ-V01';
public const YIWU = 'YW-V01';
public const YD_GUANG_ZHOU = 'GZ-V02';
public const KLANG = 'KL-V01';
public const VT_YIWU = 'YW-V01';
public const SABAH = 'SB-V01';
public const VT_KLANG = 'KL-V01';
public const SARAWAK = 'SRW-V01';
public const YD_KLANG = 'KL-V02';
public const DESTINATION_WAREHOUSE = [
1 => self::KLANG,
2 => self::KLANG,
3 => self::KLANG,
4 => self::KLANG,
5 => self::SABAH,
6 => self::KLANG,
7 => self::KLANG,
8 => self::KLANG,
9 => self::KLANG,
10 => self::KLANG,
11 => self::KLANG,
12 => self::KLANG,
13 => self::SABAH,
14 => self::KLANG,
15 => self::KLANG,
16 => self::KLANG,
public const VT_SABAH = 'SB-V01';
public const VT_SARAWAK = 'SRW-V01';
public const VT_DESTINATION_WAREHOUSE = [
1 => self::VT_KLANG,
2 => self::VT_KLANG,
3 => self::VT_KLANG,
4 => self::VT_KLANG,
5 => self::VT_SABAH,
6 => self::VT_KLANG,
7 => self::VT_KLANG,
8 => self::VT_KLANG,
9 => self::VT_KLANG,
10 => self::VT_KLANG,
11 => self::VT_KLANG,
12 => self::VT_KLANG,
13 => self::VT_SABAH,
14 => self::VT_SARAWAK,
15 => self::VT_KLANG,
16 => self::VT_KLANG,
];
public const YD_DESTINATION_WAREHOUSE = self::YD_KLANG;
}
@@ -15,7 +15,6 @@ class UserAuthenticationLogoutController
* @return JsonResponse
*/
public function logout(Request $request, LogoutUserLogic $logic): JsonResponse {
logger("logout controller");
return $logic->execute($request);
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Accounts;
use App\Classes\Modules\Accounts\ControllersLogic\CrossAuthenticateUserLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UserCrossAuthenticationController
{
/**
* @param Request $request
* @param CrossAuthenticateUserLogic $logic
* @return JsonResponse
*/
public function authenticate(Request $request, CrossAuthenticateUserLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Companies;
use App\Classes\Modules\Companies\ControllersLogic\AssignCompanyConnectionToConnectionSegmentLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignCompanyConnectionToConnectionSegmentController
{
/**
* @param Request $request
* @param AssignCompanyToSegmentLogic $logic
* @return JsonResponse
*/
public function assign(Request $request, AssignCompanyConnectionToConnectionSegmentLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Companies;
use App\Classes\Modules\Companies\ControllersLogic\RemoveCompanyConnectionFromConnectionSegmentLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveCompanyConnectionFromConnectionSegmentController
{
/**
* @param Request $request
* @param RemoveCompanyConnectionFromConnectionSegmentLogic $logic
* @return JsonResponse
*/
public function detach(Request $request, RemoveCompanyConnectionFromConnectionSegmentLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\AssignOrderRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignOrderRemarkController
{
/**
* @param Request $request
* @param AssignOrderRemarkLogic $logic
* @return JsonResponse
*/
public function create(Request $request, AssignOrderRemarkLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\ShippingCostLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ShippingCostController
{
/**
* @param Request $request
* @param ShippingCostLogic $logic
* @return JsonResponse
*/
public function calculate(Request $request, ShippingCostLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\AssignPackingListRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignPackingListRemarkController
{
/**
* @param Request $request
* @param AssignPackingListRemarkLogic $logic
* @return JsonResponse
*/
public function create(Request $request, AssignPackingListRemarkLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\AssignContainerRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignContainerRemarkController
{
/**
* @param Request $request
* @param AssignContainerRemarkLogic $logic
* @return JsonResponse
*/
public function create(Request $request, AssignContainerRemarkLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\CreateDeliverPackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateDeliverPackingListController
{
/**
* @param Request $request
* @param CreateDeliverPackingListLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateDeliverPackingListLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\CreateSegmentLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateSegmentController
{
/**
* @param Request $request
* @param CreateSegmentLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateSegmentLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\DeleteSegmentLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteSegmentController
{
/**
* @param Request $request
* @param DeleteSegmentLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteSegmentLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -35,6 +35,8 @@ class CompanyModuleResource extends JsonResource
return [
'id' => $this->id,
'type' => $this->type,
'name' => $this->name,
'reference' => $this->reference,
'address' => new AddressResource($defaultAddress),
'company' => new CompanyResource($this->whenLoaded('company')),
'marking' => $marking
+2
View File
@@ -3,6 +3,7 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ContainerTypes;
use App\Models\Remark;
use Illuminate\Http\Resources\Json\JsonResource;
class ContainerResource extends JsonResource
@@ -26,6 +27,7 @@ class ContainerResource extends JsonResource
'packing_lists' => PackingListResource::collection($this->whenLoaded('packingLists', function(){
return $this->packingLists()->whereHas('packages')->get();
})),
'remarks' => RemarkResource::collection($this->remarks),
'status' => $this->status
];
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class DeliverPackingListResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'claimant_id' => $this->claimant_id,
'reference' => $this->reference,
'status' => $this->status,
'transport' => new TransportResource($this->transports()->first()),
'packing_list' => PackingListResource::collection($this->packing_list_owner),
'company' => New CompanyModuleResource($this->owner)
];
}
}
+13 -17
View File
@@ -29,24 +29,20 @@ class OrderResource extends JsonResource
'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee),
'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()),
'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()),
'parcels' => $this->whenLoaded('packingLists', function(){
'parcels' => $this->whenLoaded('packingLists', function() {
return [
'origin_warehouse_packages' => PackageResource::collection($this->parcels()->shippingList()->whereDoesntHave('shippingSchedules', function($schedule){
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})->get()),
'in_transit_packages' => PackageResource::collection($this->parcels()->shippingList()->Shipping()->whereHas('shippingSchedules', function($schedule){
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})->whereDoesntHave('container', function($container){
return $container->where('containers.status', ApprovalStatus::COMPLETED);
})->get()),
'destination_warehouse_packages' => PackageResource::collection($this->parcels()->shippingList()->whereHas('container', function($container){
return $container->where('containers.status', ApprovalStatus::COMPLETED);
})->whereDoesntHave('deliverySchedules', function($schedule){
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})->get()),
'delivered_packages' => PackageResource::collection($this->parcels()->shippingList()->whereHas('deliverySchedules', function($schedule){
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})->get()),
'origin_warehouse_packages' => PackageResource::collection(
$this->originWarehousePackages()->get()
),
'in_transit_packages' => PackageResource::collection(
$this->inTransitPackages()->get()
),
'destination_warehouse_packages' => PackageResource::collection(
$this->destinationWarehousePackages()->get()
),
'delivered_packages' => PackageResource::collection(
$this->deliveredPackages()->get()
),
'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()),
];
}),
+4 -1
View File
@@ -16,8 +16,11 @@ class RemarkResource extends JsonResource
{
return [
'id' => $this->id,
'commenter_id' => $this->commenter_id,
'commenter' => new UserResource($this->commenter),
'owner_id' => $this->owner_id,
'content' => $this->content,
'created_at' => $this->created_at->format('d-m-Y H:i'),
'long_ago' => $this->created_at->diffForHumans()
];
}
}
+4 -4
View File
@@ -18,10 +18,10 @@ class SegmentResource extends JsonResource
return [
'id' => $this->id,
'name' => $this->name,
'time_limit' => $this->when($this->whereHas('constants', function($query){
$query->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT);
}), $this->constants->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT)->first()),
'services' => CustomServiceTypeResource::collection($this->constants->where('reference', SegmentConstants::CUSTOM_SERVICE_TYPE))
// 'time_limit' => $this->when($this->whereHas('constants', function($query){
// $query->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT);
// }), $this->constants->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT)->first()),
// 'services' => CustomServiceTypeResource::collection($this->constants->where('reference', SegmentConstants::CUSTOM_SERVICE_TYPE))
];
}
}
-7
View File
@@ -4,18 +4,11 @@ namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\ServiceTypes\DataTransferObjects\ServiceConfigurationsObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection;
use Staudenmeir\EloquentHasManyDeep\HasManyDeep;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
+9
View File
@@ -60,4 +60,13 @@ class CompanyConnection extends AbstractModel
return $query->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
/**
* @return belongsToMany
*/
public function segments(): belongsToMany
{
return $this->belongsToMany(Segment::class, (new ConnectionSegment())->getTable(), 'company_connection_id', 'segment_id');
}
}
+11 -1
View File
@@ -6,6 +6,8 @@ use App\Classes\General\Interfaces\Addressable;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\General\Interfaces\ContainerOwner;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Packable;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use Illuminate\Database\Eloquent\Builder;
@@ -28,7 +30,7 @@ use PhpParser\Node\Expr\AssignOp\Mod;
* @property integer type
* @property integer status
*/
class CompanyModule extends AbstractModel implements Addressable, Documentable, Contactable, ContainerOwner
class CompanyModule extends AbstractModel implements Addressable, Documentable, Contactable, ContainerOwner, Packable
{
use SoftDeletes;
@@ -60,6 +62,14 @@ class CompanyModule extends AbstractModel implements Addressable, Documentable,
return $this->morphMany(Address::class, 'owner');
}
/**
* @return MorphMany
*/
public function packingLists(): morphMany
{
return $this->morphMany(PackingList::class, 'owner');
}
/**
* @return belongsToMany
*/
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class Segment
* @package App\Models
*
* @property string name
* @property string reference
*/
class ConnectionSegment extends AbstractModel
{
use SoftDeletes;
protected $table = 'connection_segments';
protected $dates = ['deleted_at'];
/**
* @return HasMany
*/
public function segments(): HasMany
{
return $this->HasMany(Segment::class, 'segment_id', 'id');
}
/**
* @return HasMany
*/
public function companyConnections(): HasMany
{
return $this->HasMany(CompanyConnection::class, 'company_connection_id', 'id');
}
}
-1
View File
@@ -65,5 +65,4 @@ class Container extends AbstractModel implements Transportable, Remarkable
{
return $this->morphMany(Remark::class, 'owner');
}
}
+67
View File
@@ -55,6 +55,14 @@ class Order extends AbstractModel implements Addressable, Packable
return $this->morphMany(PackingList::class, 'owner');
}
/**
* @return MorphMany
*/
public function remarks(): morphMany
{
return $this->morphMany(Remark::class, 'owner');
}
/**
* @return HasManyThrough
*/
@@ -88,4 +96,63 @@ class Order extends AbstractModel implements Addressable, Packable
{
return $this->addresses()->where('status','=',ApprovalStatus::APPROVED);
}
public function originWarehousePackages()
{
return $this->parcels()->shippingList()
->whereDoesntHave('shippingSchedules',
function($schedule) {
return $schedule->dispatched()
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
public function inTransitPackages()
{
return $this->parcels()->shippingList()->Shipping()
->whereHas('shippingSchedules',
function($schedule) {
return $schedule->dispatched()
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
)
->whereDoesntHave('container', function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
);
}
public function destinationWarehousePackages()
{
return $this->parcels()->shippingList()
->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)
->whereDoesntHave('deliverySchedules',
function($schedule) {
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
public function deliveredPackages()
{
return $this->parcels()->shippingList()
->whereHas('deliverySchedules',
function($schedule) {
return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
/**
* @return morphMany
*/
public function transactions(): morphMany
{
return $this->morphMany(Transaction::class, 'owner');
}
}
+15
View File
@@ -56,4 +56,19 @@ class PackingList extends AbstractModel implements Transportable, Steppable
return $this->morphMany(Transport::class, 'owner');
}
/**
* @return MorphMany
*/
public function remarks(): morphMany
{
return $this->morphMany(Remark::class, 'owner');
}
/**
* @return belongsToMany
*/
public function packing_list_owner()
{
return $this->BelongsToMany(PackingList::class, 'packing_list_owner', 'owner_packing_list_id', 'packing_list_id');
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PackingListOwner extends Model
{
use HasFactory;
}
+9
View File
@@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Remark extends AbstractModel
{
@@ -15,4 +16,12 @@ class Remark extends AbstractModel
{
return $this->morphTo();
}
/**
* @return BelongsTo
*/
public function commenter(): BelongsTo
{
return $this->BelongsTo(User::class, 'commenter_id', 'id');
}
}
+8
View File
@@ -27,4 +27,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');
}
}
+10 -5
View File
@@ -16,12 +16,17 @@ class Transaction extends AbstractModel implements Documentable
{
protected $table = 'transactions';
/**
* @return BelongsTo
*/
public function booking(): BelongsTo
public function owner(): morphTo
{
return $this->BelongsTo( Booking::class, 'booking_id', 'id');
return $this->morphTo();
}
/**
* @return MorphMany
*/
public function order(): morphMany
{
return $this->morphMany(Order::class, 'owner');
}
/**
+1 -1
View File
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
class TransactionDetail extends AbstractModel
{
protected $table = 'transaction_detail';
protected $table = 'transaction_details';
/**
* @return BelongsTo
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class District
* @package App\Models
*
* @property \App\Models\User user_id
* @property string app_id
* @property int platform
*/
class UserSocialAccount extends AbstractModel
{
use SoftDeletes;
protected $table = 'user_social_accounts';
protected $dates = ['deleted_at'];
/**
* @return BelongsTo
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
}
@@ -19,6 +19,8 @@ class CreateSegmentsTable extends Migration
$table->id();
$table->foreignId('company_module_id');
$table->string('name', '45');
$table->softDeletes();
$table->timestamps();
});
}
@@ -18,6 +18,8 @@ class CreateSegmentConstantsTable extends Migration
$table->foreignId('segment_id');
$table->string('reference','45');
$table->json('value');
$table->softDeletes();
$table->timestamps();
});
}
@@ -17,6 +17,8 @@ class CreateConnectionSegmentsTable extends Migration
$table->id();
$table->foreignId('company_connection_id');
$table->foreignId('segment_id');
$table->softDeletes();
$table->timestamps();
});
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserSocialAccountsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_social_accounts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id');
$table->string('app_id')->nullable();
$table->integer('platform')->default(0);
$table->softDeletes();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_social_accounts');
}
}
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePackingListOwnersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packing_list_owners', function (Blueprint $table) {
$table->foreignId('owner_packing_list_id');
$table->foreignId('packing_list_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packing_list_owners');
}
}
@@ -0,0 +1,63 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
class CreateTransactionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('transactions', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->string('type')->default(TransactionType::PAYMENT);
$table->foreignId('issuer')->unsigned();
$table->foreignId('receiver')->unsigned();
$table->foreignId('recipient_bank_account_id')->unsigned();
$table->string('payment_method')->nullable();
$table->string('payment_reference')->nullable();
$table->string('bill_no')->unique();
$table->decimal('amount', 25, 5)->default(0.00);
$table->decimal('original_amount', 25, 5)->default(0.00);
$table->foreignId('currency_id')->unsigned();
$table->foreignId('original_currency_id')->unsigned();
$table->decimal('currency_rate', 14, 5)->default(0.00);
$table->decimal('tax', 14, 5)->default(0.00);
$table->decimal('service_charge', 14, 5)->default(0.00);
$table->timestamp('expires_on')->nullable();
$table->integer('status')->default(ApprovalStatus::PENDING_SUBMISSION);
$table->softDeletes();
$table->timestamps();
$table->foreign('currency_id')->references('id')->on('currencies');
$table->foreign('issuer')->references('id')->on('companies');
$table->foreign('receiver')->references('id')->on('companies');
$table->foreign('original_currency_id')->references('id')->on('currencies');
});
//In-case the model name lengthy
Schema::table('transactions', function (Blueprint $table) {
$table->string('owner_type', 250)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('transactions');
}
}
@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTransactionDetailsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('transaction_details', function (Blueprint $table) {
$table->id();
$table->foreignId('transaction_id')->unsigned();
$table->string('reference');
$table->string('name');
$table->integer('quantity')->default(0);
$table->decimal('price', 25, 5)->default(0.00);
$table->decimal('amount', 25, 5)->default(0.00);
$table->softDeletes();
$table->timestamps();
$table->foreign('transaction_id')->references('id')->on('transactions');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('transaction_details');
}
}
+2 -2
View File
@@ -23,7 +23,7 @@ class DatabaseSeeder extends Seeder
$this->call(CountriesTableSeeder::class);
$this->call(CurrenciesTableSeeder::class);
$this->call(CompaniesTableSeeder::class);
$this->call(OrdersTableSeeder::class);
// $this->call(CompaniesTableSeeder::class);
// $this->call(OrdersTableSeeder::class);
}
}

Some files were not shown because too many files have changed in this diff Show More