diff --git a/app/Classes/General/Traits/LogData.php b/app/Classes/General/Traits/LogData.php
new file mode 100644
index 00000000..e7c6c08b
--- /dev/null
+++ b/app/Classes/General/Traits/LogData.php
@@ -0,0 +1,55 @@
+table).'_logs';
+ $relationshipColumn = Str::singular($model->table).'_id';
+
+ $originalData = $model->getRawOriginal();
+
+ $originalData[$relationshipColumn] = $originalData['id'];
+ unset($originalData['id']);
+
+ // remove pivot columns
+ foreach($originalData as $key => $row){
+ if(str::startsWith($key, 'pivot_')){
+ unset($originalData[$key]);
+ }
+ }
+
+ if (!Schema::hasTable($tableName)) {
+ DB::statement('CREATE TABLE '.$tableName.' LIKE '.$model->table);
+
+ $indexs = DB::select('SHOW INDEX FROM '.$tableName.';');
+
+ $removedIndexes = [];
+ foreach ($indexs as $index){
+ if($index->Column_name === 'id' || in_array($index->Key_name, $removedIndexes)) continue;
+ DB::statement('ALTER TABLE '.$tableName.' drop index '.$index->Key_name);
+ $removedIndexes[] = $index->Key_name;
+ }
+
+ DB::statement('ALTER TABLE '.$tableName.' ADD COLUMN `'.$relationshipColumn.'` BIGINT NOT NULL AFTER `id`');
+ }
+
+ DB::table($tableName)->insert($originalData);
+
+ });
+ }
+}
diff --git a/app/Classes/Modules/Accounts/ControllersLogic/FetchUserByEmailLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/FetchUserByEmailLogic.php
new file mode 100644
index 00000000..5db3fab4
--- /dev/null
+++ b/app/Classes/Modules/Accounts/ControllersLogic/FetchUserByEmailLogic.php
@@ -0,0 +1,61 @@
+ 'Retrieved User',
+ 'message' => 'You have successfully retrieved a User by email'
+ ];
+ }
+
+ /** @var CanFetchUser */
+ private $canFetchUser;
+
+ /** @var FetchesUser */
+ private $fetchesUser;
+
+ /**
+ * FetchUserByEmailLogic constructor.
+ * @param CanFetchUser $canFetchUser
+ * @param FetchesUser $fetchesUser
+ */
+ public function __construct(CanFetchUser $canFetchUser, FetchesUser $fetchesCompany)
+ {
+ $this->canFetchUser = $canFetchUser;
+ $this->fetchesUser = $fetchesCompany;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ $this->canFetchUser->passes();
+
+ $query = $this->fetchesUser->execute(['email' => $request->route('email')]);
+
+ return $this->resourceResponse(new UserCompanyResource($query));
+
+ }
+
+}
diff --git a/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingOwnerLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingOwnerLogic.php
new file mode 100644
index 00000000..90b3fb98
--- /dev/null
+++ b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingOwnerLogic.php
@@ -0,0 +1,87 @@
+ 'Update Booking Owner',
+ 'message' => "You have successfully updated booking's owner"
+ ];
+ }
+
+ /** @var CanUpdateBooking */
+ private $canUpdateBooking;
+
+ /** @var UpdatesBookingOwner */
+ private $updatesBookingOwner;
+
+ /** @var FetchesBooking */
+ private $fetchesBooking;
+
+ /** @var CanFetchBooking */
+ private $canFetchBooking;
+
+ /** @var FetchesCompany */
+ private $fetchesCompany;
+
+ /**
+ * UpdateBookingLogic constructor.
+ * @param CanUpdateBooking $canUpdateBooking
+ * @param UpdatesBookingOwner $updatesBookingOwner
+ * @param CanFetchBooking $canFetchBooking
+ * @param FetchesBooking $fetchesBooking
+ * @param FetchesCompany $fetchesCompany
+ */
+ public function __construct(
+ CanUpdateBooking $canUpdateBooking,
+ UpdatesBookingOwner $updatesBookingOwner,
+ CanFetchBooking $canFetchBooking,
+ FetchesBooking $fetchesBooking,
+ FetchesCompany $fetchesCompany
+ ) {
+ $this->canUpdateBooking = $canUpdateBooking;
+ $this->updatesBookingOwner = $updatesBookingOwner;
+ $this->canFetchBooking = $canFetchBooking;
+ $this->fetchesBooking = $fetchesBooking;
+ $this->fetchesCompany = $fetchesCompany;
+ }
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws ErrorException
+ */
+ public function logic(Request $request): JsonResponse
+ {
+ $this->canFetchBooking->passes();
+
+ $booking = $this->fetchesBooking->execute([
+ 'id' => $request->route('id'),
+ ]);
+
+ $newCompanyId = Company::where('reference', $request->input('newMarking'))->first()->id;
+
+ $this->updatesBookingOwner->execute($booking, $newCompanyId);
+
+ return $this->resourceResponse(new BookingResource($booking));
+ }
+}
diff --git a/app/Classes/Modules/Bookings/Services/UpdatesBookingOwner.php b/app/Classes/Modules/Bookings/Services/UpdatesBookingOwner.php
new file mode 100644
index 00000000..1fd094e4
--- /dev/null
+++ b/app/Classes/Modules/Bookings/Services/UpdatesBookingOwner.php
@@ -0,0 +1,22 @@
+company_id = $id;
+ return $this->handler($model);
+ }
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/Companies/Services/FetchesCompanyServiceSettings.php b/app/Classes/Modules/Companies/Services/FetchesCompanyServiceSettings.php
index 55a63803..5f84b81d 100644
--- a/app/Classes/Modules/Companies/Services/FetchesCompanyServiceSettings.php
+++ b/app/Classes/Modules/Companies/Services/FetchesCompanyServiceSettings.php
@@ -29,7 +29,7 @@ class FetchesCompanyServiceSettings
$constants= $service->constants()->whereIn('segment_id', $company->segments->pluck('id'))->get();
- $standardConfigurations = $constants->firstWhere('reference', SegmentConstants::SERVICE_TYPE);
+ $standardConfigurations = $constants->where('reference', '=', SegmentConstants::SERVICE_TYPE)->first();
$rate = Currency::find($object->getCurrencyId())->rates->where('payment_method_type', $object->getPaymentMethod())
->where('service_id', $object->getServiceId())->first();
@@ -105,4 +105,4 @@ class FetchesCompanyServiceSettings
-}
\ No newline at end of file
+}
diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php
index b495cc35..2dcbd0f7 100644
--- a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php
+++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php
@@ -10,13 +10,12 @@ use App\Models\Group;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
-use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
diff --git a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php
index e1875f0a..09dfddb8 100644
--- a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php
+++ b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php
@@ -6,9 +6,8 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\Modules\Transactions\Processors\CreateSupplierTransactionProcessor;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\Modules\Companies\Services\FetchesCompany;
-use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
class DownloadMockUpWhiteFormPdfLogic
{
diff --git a/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php
index 34efe196..aa432aea 100644
--- a/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php
+++ b/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php
@@ -24,7 +24,7 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use ErrorException;
use Illuminate\Support\Facades\DB;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
class UpdateGroupLogic extends AbstractControllerLogic
{
@@ -106,20 +106,20 @@ class UpdateGroupLogic extends AbstractControllerLogic
$serviceCharge = $this->calculatesTransactionServiceCharge->execute($transaction->original_amount, $rate, $constant);
$object = new TransactionObject(
- $transaction->bill_no,
- TransactionType::BILL,
- $supplier->id,
+ $transaction->bill_no,
+ TransactionType::BILL,
+ $supplier->id,
1,
- $supplier->banks()->where('default', true)->first()->id,
+ $supplier->banks()->where('default', true)->first()->id,
PaymentMethodType::CASH,
- $transaction->original_amount * (1 / $rate),
- $transaction->original_amount,
- 1,
+ $transaction->original_amount * (1 / $rate),
+ $transaction->original_amount,
+ 1,
$transaction->original_currency_id,
- $rate,
- 0,
- $serviceCharge,
- null,
+ $rate,
+ 0,
+ $serviceCharge,
+ null,
ApprovalStatus::PENDING_VERIFICATION
);
@@ -130,20 +130,20 @@ class UpdateGroupLogic extends AbstractControllerLogic
$transferFee = $this->calculatesTransactionTransferFee->execute($billTransaction->original_amount, $constant);
$object = new TransactionObject(
- $transferTransaction->bill_no,
+ $transferTransaction->bill_no,
TransactionType::TRANSFER_FEE,
$supplier->id,
1,
- $supplier->banks()->where('default', true)->first()->id,
+ $supplier->banks()->where('default', true)->first()->id,
PaymentMethodType::CASH,
- $transaction->original_amount,
- $transaction->original_amount,
- $transaction->original_currency_id,
+ $transaction->original_amount,
+ $transaction->original_amount,
$transaction->original_currency_id,
- 1,
- 0,
- $transferFee,
- null,
+ $transaction->original_currency_id,
+ 1,
+ 0,
+ $transferFee,
+ null,
ApprovalStatus::PENDING_VERIFICATION
);
@@ -182,4 +182,4 @@ class UpdateGroupLogic extends AbstractControllerLogic
return $this->resourceResponse(new GroupResource($group));
}
-}
\ No newline at end of file
+}
diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php
index ae57a626..b0af2cbf 100644
--- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php
+++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php
@@ -8,7 +8,7 @@ use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Models\Document;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
use Webklex\PDFMerger\Facades\PDFMergerFacade as PDFMerger;
class CreateInvoiceDocumentProcessor
diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php
index 0129ab32..0c89b13f 100644
--- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php
+++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php
@@ -2,6 +2,7 @@
namespace App\Classes\Modules\Transactions\Processors;
+use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Modules\Bookings\Services\CalculatesBookingPayableAmount;
use App\Classes\Modules\Bookings\Services\CalculatesBookingTransferredAmount;
use App\Classes\Modules\ServiceTypes\Services\FetchesServiceConfigurations;
@@ -23,8 +24,6 @@ use App\Models\SegmentConstant;
class CreateInvoiceTransactionProcessor
{
- /** @var ListsTransactions */
- private $listsTransactions;
/** @var CreatesTransaction */
private $createsTransaction;
@@ -41,9 +40,6 @@ class CreateInvoiceTransactionProcessor
/** @var CalculatesBookingTransferredAmount */
private $calculatesBookingTransferredAmount;
- /** @var FetchesServiceConfigurations */
- private $fetchesServiceConfigurations;
-
/** @var CalculatesBookingCurrencyAverageRate */
private $calculatesBookingCurrencyAverageRate;
@@ -76,13 +72,11 @@ class CreateInvoiceTransactionProcessor
*/
public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, UpdatesBookingStatus $updatesBookingStatus, CreateInvoiceDocumentProcessor $invoiceDocumentProcessor, CreatePerfexCRMInvoiceProcessor $createPerfexCRMInvoiceProcessor)
{
- $this->listsTransactions = $listsTransactions;
$this->createsTransaction = $createsTransaction;
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->calculatesBookingPaidAmount = $calculatesBookingPaidAmount;
$this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount;
$this->calculatesBookingTransferredAmount = $calculatesBookingTransferredAmount;
- $this->fetchesServiceConfigurations = $fetchesServiceConfigurations;
$this->calculatesBookingCurrencyAverageRate = $calculatesBookingCurrencyAverageRate;
$this->fetchesCompany = $fetchesCompany;
$this->updatesBookingStatus = $updatesBookingStatus;
@@ -95,7 +89,7 @@ class CreateInvoiceTransactionProcessor
/**
* @param Booking $booking
* @return void
- * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @throws MalformedRequestException
*/
public function execute(Booking $booking)
{
diff --git a/app/Classes/Modules/Transactions/Processors/CreateProformaInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateProformaInvoiceTransactionProcessor.php
index 0a42bcfc..8dab2d24 100644
--- a/app/Classes/Modules/Transactions/Processors/CreateProformaInvoiceTransactionProcessor.php
+++ b/app/Classes/Modules/Transactions/Processors/CreateProformaInvoiceTransactionProcessor.php
@@ -24,7 +24,7 @@ use App\Classes\ValueObjects\Constants\DocumentType;
use App\Models\Booking;
use App\Models\Document;
use Carbon\Carbon;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
class CreateProformaInvoiceTransactionProcessor
{
diff --git a/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsPurchaseOrder.php b/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsPurchaseOrder.php
index 80f218a6..91267ff2 100644
--- a/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsPurchaseOrder.php
+++ b/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsPurchaseOrder.php
@@ -13,7 +13,7 @@ use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Document;
use App\Models\Group;
use App\Models\Transaction;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
class GeneratesGroupTransactionsPurchaseOrder
{
diff --git a/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsWhiteForm.php b/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsWhiteForm.php
index 53d5c176..2b66b478 100644
--- a/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsWhiteForm.php
+++ b/app/Classes/Modules/Transactions/Processors/GeneratesGroupTransactionsWhiteForm.php
@@ -13,7 +13,7 @@ use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Document;
use App\Models\Group;
use App\Models\Transaction;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
class GeneratesGroupTransactionsWhiteForm
{
diff --git a/app/Classes/Modules/Transactions/Services/UpdatesTransaction.php b/app/Classes/Modules/Transactions/Services/UpdatesTransaction.php
index aba7b07a..d1c5065f 100644
--- a/app/Classes/Modules/Transactions/Services/UpdatesTransaction.php
+++ b/app/Classes/Modules/Transactions/Services/UpdatesTransaction.php
@@ -2,19 +2,21 @@
namespace App\Classes\Modules\Transactions\Services;
+use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Models\Booking;
use App\Models\Transaction;
+use Illuminate\Database\Eloquent\Model;
class UpdatesTransaction extends AbstractUpdateRecord
{
/**
* @param Transaction $transaction
* @param TransactionObject $object
- * @return \Illuminate\Database\Eloquent\Model
- * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @return Model
+ * @throws MalformedRequestException
*/
public function execute(Transaction $transaction, TransactionObject $object) {
$transaction->recipient_bank_account_id = $object->getRecipientBankAccountId();
@@ -30,4 +32,4 @@ class UpdatesTransaction extends AbstractUpdateRecord
return $this->handler($transaction);
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/Accounts/FetchUserByEmailController.php b/app/Http/Controllers/Accounts/FetchUserByEmailController.php
new file mode 100644
index 00000000..0a60d4c7
--- /dev/null
+++ b/app/Http/Controllers/Accounts/FetchUserByEmailController.php
@@ -0,0 +1,19 @@
+execute($request);
+ }
+}
diff --git a/app/Http/Controllers/Bookings/UpdateBookingOwnerController.php b/app/Http/Controllers/Bookings/UpdateBookingOwnerController.php
new file mode 100644
index 00000000..1ced189c
--- /dev/null
+++ b/app/Http/Controllers/Bookings/UpdateBookingOwnerController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Http/Resources/GroupResource.php b/app/Http/Resources/GroupResource.php
index faae5b43..abd017ec 100644
--- a/app/Http/Resources/GroupResource.php
+++ b/app/Http/Resources/GroupResource.php
@@ -22,6 +22,9 @@ class GroupResource extends JsonResource
public function toArray($request)
{
+ if(!$this->issuerCompany){
+ dd($this->id);
+ }
return [
'id' => $this->id,
'original_amount' => (float) $this->original_amount,
diff --git a/app/Http/Resources/UserCompanyResource.php b/app/Http/Resources/UserCompanyResource.php
new file mode 100644
index 00000000..09e9f2b7
--- /dev/null
+++ b/app/Http/Resources/UserCompanyResource.php
@@ -0,0 +1,25 @@
+ $this->id,
+ 'name' => $this->name,
+ 'reference' => $this->company()->first()->reference,
+ 'type' => (int) $this->type,
+ 'status' => (int) $this->status
+ ];
+ }
+}
diff --git a/app/Models/Booking.php b/app/Models/Booking.php
index 2dfd945a..ca80d0c3 100644
--- a/app/Models/Booking.php
+++ b/app/Models/Booking.php
@@ -4,6 +4,7 @@ namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Transactionable;
+use App\Classes\General\Traits\LogData;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Scopes\CustomerBookingsScope;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -28,6 +29,7 @@ class Booking extends AbstractModel implements Documentable, Transactionable
{
use HasRelationships;
use SoftDeletes;
+ use LogData;
protected $table = 'bookings';
diff --git a/app/Models/Group.php b/app/Models/Group.php
index 1fc6ca48..01dd257e 100644
--- a/app/Models/Group.php
+++ b/app/Models/Group.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use App\Classes\General\Traits\LogData;
use Illuminate\Database\Eloquent\Model;
use App\Classes\General\Interfaces\Documentable;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php
index 429449a6..0df23186 100644
--- a/app/Models/Transaction.php
+++ b/app/Models/Transaction.php
@@ -4,6 +4,7 @@ namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Transactionable;
+use App\Classes\General\Traits\LogData;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use Carbon\Carbon;
@@ -22,6 +23,7 @@ class Transaction extends AbstractModel implements Documentable, Transactionable
{
use HasTableAlias;
use SoftDeletes;
+ use LogData;
protected $table = 'transactions';
@@ -102,6 +104,14 @@ class Transaction extends AbstractModel implements Documentable, Transactionable
return $this->HasMany(TransactionDetail::class, 'transaction_id', 'id');
}
+ /**
+ * @return HasOne
+ */
+ public function groupTransaction(): HasOne
+ {
+ return $this->HasOne(GroupTransaction::class, 'transaction_id');
+ }
+
public function convert_original_amount()
{
if($this->booking()->first()->fix_currency_id !== 1) {
diff --git a/app/Models/Wallet.php b/app/Models/Wallet.php
index 8c3114fd..00677513 100644
--- a/app/Models/Wallet.php
+++ b/app/Models/Wallet.php
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Classes\General\Interfaces\Transactionable;
+use App\Classes\General\Traits\LogData;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -12,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
class Wallet extends AbstractModel implements Transactionable
{
use SoftDeletes;
+ use LogData;
protected $table = 'wallets';
/**
diff --git a/composer.json b/composer.json
index 421d9248..349234b1 100644
--- a/composer.json
+++ b/composer.json
@@ -22,6 +22,7 @@
"laravel/framework": "^8.0",
"laravel/tinker": "^2.0",
"maatwebsite/excel": "^3.1",
+ "mpdf/mpdf": "^8.1",
"rinvex/countries": "^6.1",
"smalot/pdfparser": "^2.2",
"spatie/laravel-activitylog": "^3.14",
diff --git a/config/app.php b/config/app.php
index d48e24c6..fd0bbe8f 100644
--- a/config/app.php
+++ b/config/app.php
@@ -178,7 +178,7 @@ return [
// Third Parties
Spatie\Permission\PermissionServiceProvider::class,
Barryvdh\DomPDF\ServiceProvider::class,
- Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class,
+ Mccarlosen\LaravelMpdf\LaravelMpdfServiceProvider::class,
TimeHunter\LaravelGoogleReCaptchaV3\Providers\GoogleReCaptchaV3ServiceProvider::class,
Webklex\PDFMerger\Providers\PDFMergerServiceProvider::class
@@ -234,7 +234,7 @@ return [
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
- 'MPDF' => Meneses\LaravelMpdf\Facades\LaravelMpdf::class,
+ 'MPDF' => Mccarlosen\LaravelMpdf\Facades\LaravelMpdf::class,
'GoogleReCaptchaV3'=> TimeHunter\LaravelGoogleReCaptchaV3\Facades\GoogleReCaptchaV3::class,
'PDFMerger' => Webklex\PDFMerger\Facades\PDFMergerFacade::class
diff --git a/database/migrations/2020_11_29_212614_create_companies_wallet_table.php b/database/migrations/2020_11_29_212614_create_companies_wallet_table.php
index 7a7ade13..3837a0e1 100644
--- a/database/migrations/2020_11_29_212614_create_companies_wallet_table.php
+++ b/database/migrations/2020_11_29_212614_create_companies_wallet_table.php
@@ -15,15 +15,13 @@ class CreateCompaniesWalletTable extends Migration
{
Schema::create('wallets', function (Blueprint $table) {
$table->id();
-
- $table->foreignId('company_id')->unsigned();
+ $table->morphs('owner');
$table->string('code');
$table->foreignId('currency_id')->unsigned();
$table->decimal('amount', 20, 5)->default(0.00);
$table->softDeletes();
$table->timestamps();
- $table->foreign('company_id')->references('id')->on('companies');
$table->foreign('currency_id')->references('id')->on('currencies');
});
}
diff --git a/database/migrations/2020_12_01_102314_create_transactions_table.php b/database/migrations/2020_12_01_102314_create_transactions_table.php
index a07bf413..366b9a27 100644
--- a/database/migrations/2020_12_01_102314_create_transactions_table.php
+++ b/database/migrations/2020_12_01_102314_create_transactions_table.php
@@ -17,7 +17,7 @@ class CreateTransactionsTable extends Migration
{
Schema::create('transactions', function (Blueprint $table) {
$table->id();
- $table->foreignId('booking_id')->unsigned();
+ $table->morphs('owner');
$table->string('type')->default(TransactionType::PAYMENT);
$table->foreignId('issuer')->unsigned();
$table->foreignId('receiver')->unsigned();
@@ -37,13 +37,12 @@ class CreateTransactionsTable extends Migration
$table->softDeletes();
$table->timestamps();
- $table->foreign('booking_id')->references('id')->on('bookings');
$table->foreign('currency_id')->references('id')->on('currencies');
$table->foreign('issuer')->references('id')->on('companies');
$table->foreign('receiver')->references('id')->on('companies');
$table->foreign('recipient_bank_account_id')->references('id')->on('banks');
$table->foreign('original_currency_id')->references('id')->on('currencies');
-
+
});
}
diff --git a/database/migrations/2020_12_01_212314_create_wallet_transaction_table.php b/database/migrations/2020_12_01_212314_create_wallet_transaction_table.php
deleted file mode 100644
index f87780c7..00000000
--- a/database/migrations/2020_12_01_212314_create_wallet_transaction_table.php
+++ /dev/null
@@ -1,51 +0,0 @@
-id();
-
- $table->foreignId('wallet_id')->unsigned();
- $table->foreignId('transaction_id')->unsigned()->nullable();
- $table->foreignId('bill_no')->unsigned();
- $table->integer('type')->default(TransactionType::PAYMENT);
- $table->decimal('amount', 14, 5)->default(0.00);
- $table->foreignId('currency_id')->unsigned();
- $table->decimal('original_amount', 14, 5)->default(0.00);
- $table->foreignId('original_currency_id')->unsigned();
- $table->decimal('currency_rate', 14, 5)->default(0.00);
- $table->integer('status')->default(ApprovalStatus::PENDING_SUBMISSION);
- $table->softDeletes();
- $table->timestamps();
-
- $table->foreign('transaction_id')->references('id')->on('transactions');
- $table->foreign('wallet_id')->references('id')->on('wallets');
- $table->foreign('currency_id')->references('id')->on('currencies');
- $table->foreign('original_currency_id')->references('id')->on('currencies');
-
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::dropIfExists('wallet_transaction');
- }
-}
diff --git a/database/migrations/2020_12_02_131122_create_receipts_table.php b/database/migrations/2020_12_02_131122_create_receipts_table.php
deleted file mode 100644
index 16ec2684..00000000
--- a/database/migrations/2020_12_02_131122_create_receipts_table.php
+++ /dev/null
@@ -1,50 +0,0 @@
-id();
- $table->foreignId('transaction_id')->unsigned();
- $table->string('bill_no')->unique();
- $table->decimal('amount', 14, 5)->default(0.00);
- $table->decimal('original_amount', 14, 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('transaction_date')->useCurrent();
- $table->integer('status')->default(ApprovalStatus::COMPLETED);
- $table->softDeletes();
- $table->timestamps();
-
- $table->foreign('transaction_id')->references('id')->on('transactions');
- $table->foreign('currency_id')->references('id')->on('currencies');
- $table->foreign('original_currency_id')->references('id')->on('currencies');
-
- });
-
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::dropIfExists('receipt');
- }
-}
diff --git a/database/migrations/2020_12_02_131123_create_receipt_details_table.php b/database/migrations/2020_12_02_131123_create_receipt_details_table.php
deleted file mode 100644
index 0a008293..00000000
--- a/database/migrations/2020_12_02_131123_create_receipt_details_table.php
+++ /dev/null
@@ -1,38 +0,0 @@
-id();
- $table->foreignId('receipt_id')->unsigned();
- $table->decimal('price', 14, 5)->default(0.00);
- $table->decimal('amount', 14, 5)->default(0.00);
- $table->timestamps();
-
- $table->foreign('receipt_id')->references('id')->on('receipts');
-
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::dropIfExists('receipt_detail');
- }
-}
diff --git a/database/migrations/2021_10_02_082211_drop_wallet_transactions_table.php b/database/migrations/2021_10_02_082211_drop_wallet_transactions_table.php
deleted file mode 100644
index f16eeba3..00000000
--- a/database/migrations/2021_10_02_082211_drop_wallet_transactions_table.php
+++ /dev/null
@@ -1,28 +0,0 @@
-dropForeign('wallets_company_id_foreign');
- $table->dropColumn('company_id');
- });
- }
-
- if (!Schema::hasColumn('wallets', 'owner_id')) {
- Schema::table('wallets', function (Blueprint $table) {
- $table->morphs('owner');
- });
-
- //In-case the model name lengthy
- Schema::table('wallets', function (Blueprint $table) {
- $table->string('owner_type', 250)->change();
- });
- }
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- //
- }
-}
diff --git a/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php b/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php
deleted file mode 100644
index a37da4e4..00000000
--- a/database/migrations/2021_10_02_083144_alter_transaction_booking_id.php
+++ /dev/null
@@ -1,45 +0,0 @@
-morphs('owner');
- });
-
- //In-case the model name lengthy
- Schema::table('transactions', function (Blueprint $table) {
- $table->string('owner_type', 250)->change();
- });
-
- DB::statement("UPDATE transactions SET owner_type='App\\\\Models\\\\Booking', owner_id = booking_id");
-
- Schema::table('transactions', function (Blueprint $table) {
- $table->dropForeign('transactions_booking_id_foreign');
- $table->dropColumn('booking_id');
- });
- }
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- //
- }
-}
diff --git a/database/seeds/CompaniesTableSeeder.php b/database/seeds/CompaniesTableSeeder.php
index 5e665a9e..51122432 100644
--- a/database/seeds/CompaniesTableSeeder.php
+++ b/database/seeds/CompaniesTableSeeder.php
@@ -25,5 +25,15 @@ class CompaniesTableSeeder extends Seeder
$company->save();
+ $bank = new \App\Models\Bank();
+ $bank->company_id = $company->id;
+ $bank->bank_name = 'Maybank';
+ $bank->holder_name = 'CIEF Worldwide Snd Bhd';
+ $bank->account_no = '63465345345';
+ $bank->country_id = 1;
+ $bank->status = ApprovalStatus::APPROVED;
+ $bank->type = \App\Classes\ValueObjects\Constants\BankAccountType::PERSONAL;
+ $bank->save();
+
}
}
diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php
index a1928a7a..87d72f71 100644
--- a/database/seeds/DatabaseSeeder.php
+++ b/database/seeds/DatabaseSeeder.php
@@ -4,6 +4,7 @@ use Database\Seeders\BanksTableDevelopmentSeeder;
use Database\Seeders\CompaniesTableDevelopmentSeeder;
use Database\Seeders\CurrenciesTableDevelopmentSeeder;
use Database\Seeders\CurrencyRatesTableDevelopmentSeeder;
+use Database\Seeders\DummyDataSeeder;
use Database\Seeders\SegmentConstantsTableDevelopmentSeeder;
use Database\Seeders\SegmentsTableDevelopmentSeeder;
use Database\Seeders\ServiceTypesTableDevelopmentSeeder;
@@ -34,16 +35,17 @@ class DatabaseSeeder extends Seeder
$this->call(CompaniesTableSeeder::class);
// Admin
- $this->call(AdminUserTableSeeder::class);
+// $this->call(AdminUserTableSeeder::class);
$this->call(AdminUserPermissionsTableSeeder::class);
if(App()->environment('local')){
- $this->call(CompaniesTableDevelopmentSeeder::class);
- $this->call(BanksTableDevelopmentSeeder::class);
+// $this->call(CompaniesTableDevelopmentSeeder::class);
+// $this->call(BanksTableDevelopmentSeeder::class);
$this->call(ServiceTypesTableDevelopmentSeeder::class);
$this->call(SegmentsTableDevelopmentSeeder::class);
$this->call(SegmentConstantsTableDevelopmentSeeder::class);
$this->call(CurrencyRatesTableDevelopmentSeeder::class);
+ $this->call(DummyDataSeeder::class);
}
DB::commit();
diff --git a/database/seeds/DummyDataSeeder.php b/database/seeds/DummyDataSeeder.php
index 47196db2..76378265 100644
--- a/database/seeds/DummyDataSeeder.php
+++ b/database/seeds/DummyDataSeeder.php
@@ -12,72 +12,56 @@ use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Classes\Modules\Banks\Services\CreatesBank;
+use App\Classes\Modules\Banks\Services\SetsBankToDefault;
use App\Classes\Modules\Bookings\DataTransferObjects\BookingObject;
use App\Classes\Modules\Bookings\Services\CreatesBooking;
+use App\Classes\Modules\Bookings\Services\FetchesBookingQuotation;
use App\Classes\Modules\Bookings\Services\GeneratesBookingMarking;
-use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
-use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
-use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
+use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Classes\Modules\Companies\Services\CreatesCompany;
-use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
-use App\Classes\Modules\Companies\Services\CreatesCompanyModule;
-use App\Classes\Modules\Companies\Services\GeneratesUniqueAccountNumber;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\CreatesContact;
+use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyConversionObject;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
+use App\Classes\Modules\Documents\Services\ApprovesDocument;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
-use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
-use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
-use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
-use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
-use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
-use App\Classes\Modules\PackingLists\Processors\CreateContainerProcessor;
-use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor;
-use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
-use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
-use App\Classes\Modules\Schedules\Services\CreatesSchedule;
+use App\Classes\Modules\Documents\Services\RejectsDocument;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
+use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
+use App\Classes\Modules\Transactions\Processors\CreatePurchaseOrderTransactionProcessor;
+use App\Classes\Modules\Transactions\Processors\CreateSupplierTransactionProcessor;
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
-use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
-use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Wallets\DataTransferObjects\WalletObject;
use App\Classes\Modules\Wallets\Services\CreatesWallet;
use App\Classes\Modules\Wallets\Services\GeneratesWalletCode;
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
-use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
-use App\Classes\ValueObjects\Constants\BankAccountType;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
-use App\Classes\ValueObjects\Constants\ContainerTypes;
use App\Classes\ValueObjects\Constants\DocumentType;
-use App\Classes\ValueObjects\Constants\PackageType;
-use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Classes\ValueObjects\Constants\TransactionType;
-use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\Address;
use App\Models\Company;
-use App\Models\CompanyModule;
-use App\Models\Container;
use App\Models\Document;
-use App\Models\PackingList;
+use App\Models\Group;
use App\Models\ServiceType;
use App\Models\Transaction;
-use App\Models\Transport;
use App\Models\User;
use App\Models\Wallet;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Faker\Generator as Faker;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
+use Mpdf\MpdfException;
class DummyDataSeeder extends Seeder
{
@@ -133,9 +117,29 @@ class DummyDataSeeder extends Seeder
/** @var CreatesBooking */
public $createsBooking;
+ /** @var FetchesBookingQuotation */
+ public $fetchBookingQuotation;
+ /** @var ApprovesDocument */
+ public $approvesDocument;
+ /** @var RejectsDocument */
+ public $rejectsDocument;
+ /** @var CreatePurchaseOrderTransactionProcessor */
+ public $createPurchaseOrderTransactionProcessor;
+
+ /** @var CreateInvoiceTransactionProcessor */
+ public $createInvoiceTransactionProcessor;
+
+ /** @var CreateSupplierTransactionProcessor */
+ public $createSupplierTransactionProcessor;
+
+ /** @var AssignSegmentProcessor */
+ private $assignSegmentProcessor;
+
+ /** @var SetsBankToDefault*/
+ private $setsBankToDefault ;
/**
* @param Faker $faker
@@ -146,8 +150,25 @@ class DummyDataSeeder extends Seeder
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param CreatesDocument $createsDocument
* @param CreatesFiles $createsFiles
+ * @param GeneratesWalletCode $generatesWalletCode
+ * @param CreatesWallet $createsWallet
+ * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
+ * @param CreatesTransaction $createsTransaction
+ * @param UpdatesTransactionStatus $updatesTransactionStatus
+ * @param UpdatesWalletBalance $updatesWalletBalance
+ * @param CreatesBank $createsBank
+ * @param GeneratesBookingMarking $generatesBookingMarking
+ * @param CreatesBooking $createsBooking
+ * @param FetchesBookingQuotation $fetchBookingQuotation
+ * @param ApprovesDocument $approvesDocument
+ * @param RejectsDocument $rejectsDocument
+ * @param CreatePurchaseOrderTransactionProcessor $createPurchaseOrderTransactionProcessor
+ * @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
+ * @param CreateSupplierTransactionProcessor $createSupplierTransactionProcessor
+ * @param AssignSegmentProcessor $assignSegmentProcessor
+ * @param SetsBankToDefault $setsBankToDefault
*/
- public function __construct(Faker $faker, CreatesUser $createsUser, CreatesCompany $createsCompany, CreatesContact $createsContact, CreatesAddress $createsAddress, AssignEmployeeProcessor $assignEmployeeProcessor, CreatesDocument $createsDocument, CreatesFiles $createsFiles)
+ public function __construct(Faker $faker, CreatesUser $createsUser, CreatesCompany $createsCompany, CreatesContact $createsContact, CreatesAddress $createsAddress, AssignEmployeeProcessor $assignEmployeeProcessor, CreatesDocument $createsDocument, CreatesFiles $createsFiles, GeneratesWalletCode $generatesWalletCode, CreatesWallet $createsWallet, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesWalletBalance $updatesWalletBalance, CreatesBank $createsBank, GeneratesBookingMarking $generatesBookingMarking, CreatesBooking $createsBooking, FetchesBookingQuotation $fetchBookingQuotation, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, CreatePurchaseOrderTransactionProcessor $createPurchaseOrderTransactionProcessor, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor, CreateSupplierTransactionProcessor $createSupplierTransactionProcessor, AssignSegmentProcessor $assignSegmentProcessor, SetsBankToDefault $setsBankToDefault)
{
$this->faker = $faker;
$this->createsUser = $createsUser;
@@ -157,6 +178,23 @@ class DummyDataSeeder extends Seeder
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->createsDocument = $createsDocument;
$this->createsFiles = $createsFiles;
+ $this->generatesWalletCode = $generatesWalletCode;
+ $this->createsWallet = $createsWallet;
+ $this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
+ $this->createsTransaction = $createsTransaction;
+ $this->updatesTransactionStatus = $updatesTransactionStatus;
+ $this->updatesWalletBalance = $updatesWalletBalance;
+ $this->createsBank = $createsBank;
+ $this->generatesBookingMarking = $generatesBookingMarking;
+ $this->createsBooking = $createsBooking;
+ $this->fetchBookingQuotation = $fetchBookingQuotation;
+ $this->approvesDocument = $approvesDocument;
+ $this->rejectsDocument = $rejectsDocument;
+ $this->createPurchaseOrderTransactionProcessor = $createPurchaseOrderTransactionProcessor;
+ $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
+ $this->createSupplierTransactionProcessor = $createSupplierTransactionProcessor;
+ $this->assignSegmentProcessor = $assignSegmentProcessor;
+ $this->setsBankToDefault = $setsBankToDefault;
}
@@ -164,9 +202,10 @@ class DummyDataSeeder extends Seeder
* Run the database seeds.
*
* @return void
- * @throws MalformedRequestException
* @throws AccessForbiddenException
+ * @throws MalformedRequestException
* @throws RequestValidationException
+ * @throws MpdfException
*/
public function run()
{
@@ -189,11 +228,13 @@ class DummyDataSeeder extends Seeder
// =============================================== //
// create super admin
- $userObject = new RegistrationObject($this->faker->name, 'super_admin@izyim.com', $password, $password,RoleTypes::SUPER_ADMIN, ApprovalStatus::APPROVED);
+ $userObject = new RegistrationObject($this->faker->name, 'super_admin@exchange.com', $password, $password,RoleTypes::SUPER_ADMIN, ApprovalStatus::APPROVED);
$this->createsUser->execute($userObject);
+ Auth()->login(User::find(1), true);
+
// create admin
- $userObject = new RegistrationObject($this->faker->name, 'admin@izyim.com', $password, $password,RoleTypes::ADMIN, ApprovalStatus::APPROVED);
+ $userObject = new RegistrationObject($this->faker->name, 'admin@exchange.com', $password, $password,RoleTypes::ADMIN, ApprovalStatus::APPROVED);
$this->createsUser->execute($userObject);
// create CIEF
@@ -211,37 +252,17 @@ class DummyDataSeeder extends Seeder
$supplierName = $this->faker->company;
$supplierReference = $this->faker->bothify('??-????');
- $company_object = new CompanyObject($supplierName, $supplierReference,CompanyType::COMPANY_BUSINESS,ApprovalStatus::APPROVED);
+ $company_object = new CompanyObject($supplierName, $supplierReference,BusinessType::CURRENCY_VENDOR, CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED);
/** @var Company $company */
$company = $this->createsCompany->execute($company_object);
+ $bank_object = new BankObject($company->id, $this->faker->numberBetween(2, 3),
+ $this->faker->company, $this->faker->name, $this->faker->bankAccountNumber,
+ $this->faker->city, null, null,
+ 2, $this->faker->company);
- $companyModuleObject = new CompanyModuleObject($supplierName, $supplierReference, '', '', BusinessType::FREIGHT_FORWARDER, ApprovalStatus::APPROVED);
- $this->createsCompanyModule->execute($company, $companyModuleObject);
+ $bank = $this->createsBank->execute($bank_object);
+ $this->setsBankToDefault->execute($bank);
- // create supplier warehouses
- foreach(['Guangzhou', 'Yiwu', 'Klang', 'Sabah', 'Sarawak'] as $name){
-
- $warehouseReference = '';
- $isChina = false;
-
- switch($name) {
- case 'Guangzhou': $warehouseReference = 'GZ-V0'.$i; $isChina = true; break;
- case 'Yiwu': $warehouseReference = 'YY-V0'.$i; $isChina = true; break;
- case 'Klang': $warehouseReference = 'KL-V0'.$i; break;
- case 'Sabah': $warehouseReference = 'SB-V0'.$i; break;
- case 'Sarawak':$warehouseReference = 'SRW-V0'.$i; break;
- }
-
- $companyModuleObject = new CompanyModuleObject($name, $warehouseReference, '', '', BusinessType::WAREHOUSE, ApprovalStatus::APPROVED);
- /** @var CompanyModule $companyModule */
- $companyModule = $this->createsCompanyModule->execute($company, $companyModuleObject);
-
- $address = new AddressObject( $this->faker->streetAddress, $this->faker->streetAddress, $isChina ? 2 : 1, $isChina ? 35 : 15, $isChina ? 633 : 412, $isChina ? 510450 : 41400, AddressType::DELIVERY, ApprovalStatus::APPROVED);
- $this->createsAddress->execute($companyModule, $address);
-
- $contact = new ContactObject($this->faker->name, $this->faker->phoneNumber, '', '');
- $this->createsContact->execute($companyModule, $contact);
- }
}
@@ -253,6 +274,7 @@ class DummyDataSeeder extends Seeder
// 3. Attach Employee
// 4. create contact
+ //
// 5. create Address
// 6. identification verification
@@ -278,7 +300,7 @@ class DummyDataSeeder extends Seeder
// 16. generate invoice
// generate random number of users
- for($userLoop=1; $userLoop <= rand(20, 50); $userLoop++) {
+ for($userLoop=1; $userLoop <= 20; $userLoop++) {
// === //
// 1 // ========== //
@@ -315,6 +337,8 @@ class DummyDataSeeder extends Seeder
/** @var Company $company */
$company = $this->createsCompany->execute($company_object);
+ $this->assignSegmentProcessor->execute($company);
+
// === //
// 3 // ===========//
@@ -329,7 +353,7 @@ class DummyDataSeeder extends Seeder
// Create Contact //
// ================= //
// Contacts uses eloquent polymorphic relationship to declare its owner. and for this use case it will be attached to the company not the company module.
- $contactObject = new ContactObject($company->id, $customerName, $this->faker->phoneNumber, $customerEmail, null, $this->faker->bothify('??#####'));
+ $contactObject = new ContactObject($company->id, $customerName, (int) $this->faker->randomNumber(7), $customerEmail, null, 1);
$this->createsContact->execute($contactObject);
// === //
@@ -342,7 +366,7 @@ class DummyDataSeeder extends Seeder
// AddressType::BILLING : for the invoice billing address
// create delivery address
- $addressObject = new AddressObject($this->faker->streetAddress, '', 1, $this->faker->numberBetween(1, 15), $this->faker->numberBetween(1, 442), $this->faker->postcode);
+ $addressObject = new AddressObject($this->faker->streetAddress, '', 1, $this->faker->numberBetween(1, 15), $this->faker->numberBetween(1, 100), $this->faker->postcode);
/** @var Address $address */
$address = $this->createsAddress->execute($company, $addressObject);
@@ -373,7 +397,7 @@ class DummyDataSeeder extends Seeder
// TransactionType::TOP_UP : represent a top-up amount to a wallet;
// TransactionType::PAYMENT : represent payment out of the wallet;
// TransactionType::CREDIT_NOTE : represent a manual top-up to a wallet, and can only be performed by super admin;
- // TransactionType::CREDIT_NOTE : represent a deduction from a wallet, and can only be performed by super admin;
+ // TransactionType::DEBDIT_NOTE : represent a deduction from a wallet, and can only be performed by super admin;
// TransactionType::WITHDRAW : represent a customer withdrawing credit out of a wallet to a bank account (refund);
@@ -419,7 +443,7 @@ class DummyDataSeeder extends Seeder
// 2. AliPay Transfer (EXTERNAL) (the account the customer is requesting to transfer funds to when bank type is ALIPAY)
// 3. Refund bank (PERSONAL) (the account the customer is requesting his order refunds to be transferred to)
$bank_object = new BankObject($company->id, $this->faker->numberBetween(2, 3),
- $this->faker->bank, $this->faker->name, $this->faker->bankAccountNumber,
+ $this->faker->company, $this->faker->name, $this->faker->bankAccountNumber,
$this->faker->city, null, null,
2, $this->faker->company);
@@ -427,8 +451,8 @@ class DummyDataSeeder extends Seeder
$bank = $this->createsBank->execute($bank_object);
// generate random number of bookings
- for($orderLoop=1; $orderLoop <= rand(1, 30); $orderLoop++) {
-
+ for($orderLoop=1; $orderLoop <= rand(1, 5); $orderLoop++) {
+ echo 'booking created';
// === //
// 9 // ========= //
// Create Booking //
@@ -452,15 +476,15 @@ class DummyDataSeeder extends Seeder
// and can be used to place different type of transfer orders (e.g. 1 day transfer, 3 days transfer, 1688 Payment)
// randomly selects a service type
- $service = ServiceType::where('reference', $this->faker->numberBetween(1, 3))->first();
+ $service = ServiceType::inRandomOrder()->first();
// Booking human readable id
$reference = $this->generatesBookingMarking->execute();
// random currency booking (CNY, USD)
- $bookedCurrency = $this->faker->numberBetween(2, 3);
+ $bookedCurrency = 2;
+ $bank = $company->banks()->inRandomOrder()->first();
$object = new BookingObject($service->id, $bank->id, $reference, $this->faker->numberBetween(10, 300000), $bookedCurrency, $bookedCurrency, 1);
-
$booking = $this->createsBooking->execute($company, $object);
@@ -474,33 +498,190 @@ class DummyDataSeeder extends Seeder
// TransactionType::TRANSFER_FEE : is to represent the transfer fee charged by CIEF currency supplier is attached to a transaction type TransactionType::BILL;
// TransactionType::REFUND : is to represent a request for refund on a payment, and is attached to a transaction type TransactionType::PAYMENT;
- // todo make payment
- // todo approve payment
+ $numberOfPayments = $this->faker->numberBetween(0, 3);
- // todo create supplier order
- // when processing a customer order, we will place an order with one of our currency supplier which will generate a transaction type TransactionType::BILL
- // and attach it to the customer payment TransactionType::PAYMENT, and it will update the TransactionType::PAYMENT status to ApprovalStatus::COMPLETED
+ for ($paymentLoop=0; $paymentLoop <= $numberOfPayments; $paymentLoop++) {
+ echo 'payment created';
+ $shouldSubmit = $this->faker->numberBetween(0, 1);
+ $shouldApprove = $this->faker->numberBetween(0, 1);
+ if ($numberOfPayments > 1){
- // todo upload china payment proof
- // when our currency supplier completes the transfer they will send us the bank slip as proof of payment, then the admin user
- // will upload the bank slip document and attaching it to transaction type TransactionType::BILL
+ $amount = $booking->fix_amount / $numberOfPayments;
+
+ $conversionObject = new CurrencyConversionObject(floatval(str_replace(',', '', $amount)), $booking->convertible_currency_id, $booking->service_id, $booking->fix_currency_id === 1 ? 0:1, PaymentMethodType::PAYMENT_METHODS['cash']);
+
+ $configurations = $this->fetchBookingQuotation->execute($booking->company, $conversionObject);
+
+ $billNumber = $this->generatesTransactionBillNumber->execute('PYMT-');
+
+ $object = new TransactionObject($billNumber, TransactionType::PAYMENT, 1, $booking->company->id,
+ $configurations->getConfigurations()->getBankId(), $configurations->getConversionObject()->getPaymentMethod(),
+ $configurations->getTotal(), $configurations->getForeignTotal(), 1,
+ $configurations->getConversionObject()->getCurrencyId(), $configurations->getConfigurations()->getRate(),
+ $configurations->getTax(), $configurations->getServiceCharge(), Carbon::now()->addMinutes(10), ApprovalStatus::PENDING_SUBMISSION, [], null);
+
+ /** @var Transaction $transaction */
+ $transaction = $this->createsTransaction->execute($booking, $object);
+
+ if($shouldSubmit || $shouldApprove) {
+ $object = new DocumentObject( DocumentType::CUSTOMER_PAYMENT_PROOF, ['data:image/png;base64,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'],
+ '', ApprovalStatus::PENDING_VERIFICATION, 'payments');
+ /** @var Document $document */
+ $document = $this->createsDocument->execute($transaction, $object);
+ $this->createsFiles->execute($document, $object);
+ $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::PENDING_SUBMISSION);
+ }
+
+ if($shouldApprove) {
+ $this->approvesDocument->execute($document);
+ $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
+
+ $shouldReject = $this->faker->numberBetween(0, 1);
+ if($shouldReject){
+ $this->rejectsDocument->execute($document);
+ $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::REJECTED);
+ }
+ }
+ }
+
+ }
- // todo create purchase order
// creating the purchase order can happen before or after the payment is made, the customer needs to fill up the list of product
// they are buying and attaching it to the booking, a purchase order is a transaction of type TransactionType::PURCHASE_ORDER
- // todo approve purchase order
+ $billNumber = $this->generatesTransactionBillNumber->execute('PO-');
+
+
+ $shouldSubmit = $this->faker->numberBetween(0, 1);
+ $shouldApprove = $this->faker->numberBetween(0, 1);
+
+ if($shouldSubmit){
+ $completeSubmission = $this->faker->numberBetween(0, 1);
+
+ $quantity = $this->faker->numberBetween(5, 200);
+ $unitPrice = $booking->fix_amount / $quantity;
+
+ $products = collect([[
+ 'stockCode' => $this->faker->numerify('#####'),
+ 'description' => $this->faker->text,
+ 'quantity' => $completeSubmission ? $quantity : $quantity - $this->faker->numberBetween(1, 4),
+ 'unit_price' => (string) round($unitPrice, 5)
+ ]]);
+
+ $total = $products->first()['quantity'] * (float) $products->first()['unit_price'];
+
+ $object = new TransactionObject($billNumber, TransactionType::PURCHASE_ORDER, $booking->company->id, 1,
+ 1, PaymentMethodType::CASH,
+ $total, $total, $booking->fix_currency_id, $booking->fix_currency_id,
+ 1, 0, 0, null, ApprovalStatus::PENDING_SUBMISSION, $products->toArray());
+
+ $transaction = $this->createPurchaseOrderTransactionProcessor->execute($booking, $object);
+ }
+
+ if($transaction->status === ApprovalStatus::PENDING_VERIFICATION) {
+ $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
+ }
- // todo generate invoice
- // the invoicing documents will be generated once they 2 conditions are met:
- // 1. Full payment completed (completed is flagged when the china payment proof is uploaded)
- // 2. The purchase order is filled and approved (when the purchase order is not filled for more than 2 months the system will automatically generate a random products for Purchase order to close the order)
- // once the invoice is generated the transaction table will include 2 new transaction type TransactionType::INVOICE, TransactionType::SUPPLIER_DELIVERY
- // and for documents will be generated and attached to the booking.
- // once this process is complete the booking status will update to ApprovalStatus::COMPLETED
}
+ // when processing a customer order, we will place an order with one of our currency supplier which will generate a transaction type TransactionType::BILL
+ // and attach it to the customer payment TransactionType::PAYMENT, and it will update the TransactionType::PAYMENT status to ApprovalStatus::COMPLETED
+ $totalApprovedPayments = Transaction::where('type', TransactionType::PAYMENT)->where('status', 2)->count();
+ $totalWhiteForms = round($totalApprovedPayments / $this->faker->numberBetween(2, 5));
+ $perWhiteForm = $totalApprovedPayments / (round($totalWhiteForms / 2) ?: 1);
+
+ for($orderLoop=1; $orderLoop <= ($totalWhiteForms / 2); $orderLoop++) {
+ $supplier = Company::where('business_type', BusinessType::CURRENCY_VENDOR)->inRandomOrder()->first();
+ $rate = $this->faker->randomFloat(5, 1.3, 1.6);
+ $payments = Transaction::where('type', TransactionType::PAYMENT)->where('status', ApprovalStatus::APPROVED)->inRandomOrder()->limit($perWhiteForm)->get();
+
+ $this->createSupplierTransactionProcessor->execute($supplier, $rate, $payments->toArray());
+
+ $group = new Group();
+ $group->save();
+
+ $issuer = '';
+ $receiver = '';
+ $amount = 0;
+ $original_amount = 0;
+ $currency_id = 0;
+ $original_currency_id = '';
+ $currency_rate = '';
+ $tax = 0;
+ $service_charge = 0;
+
+ foreach ($this->createSupplierTransactionProcessor->getBills() as $key => $row) {
+ $group->transactions()->sync($row->id, false);
+ $issuer = $row->issuer;
+ $receiver = $row->receiver;
+ $amount += $row->amount;
+ $original_amount += $row->original_amount;
+ $currency_id = $row->currency_id;
+ $original_currency_id = $row->original_currency_id;
+ $currency_rate = $row->currency_rate;
+ $tax += $row->tax;
+ $service_charge += $row->service_charge;
+ }
+
+ $group->issuer = $issuer;
+ $group->receiver = $receiver;
+ $group->reference = $this->generatesTransactionBillNumber->execute('SPO-');
+ $group->amount = $amount;
+ $group->original_amount = $original_amount;
+ $group->currency_id = $currency_id;
+ $group->original_currency_id = $original_currency_id;
+ $group->currency_rate = $currency_rate;
+ $group->tax = $tax;
+ $group->service_charge = $service_charge;
+
+ $group->update();
+
+ $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $this->createSupplierTransactionProcessor->getBills(), 'transferFeeTransactions' => $this->createSupplierTransactionProcessor->getTransferTransactions(), 'supplier' => $supplier]);
+
+ $object = new DocumentObject(
+ DocumentType::CURRENCY_VENDOR_ORDER,
+ [chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))],
+ '',
+ ApprovalStatus::COMPLETED,
+ 'currency_vendor_order'
+ );
+
+ /** @var Document $document */
+ $document = $this->createsDocument->execute($group, $object);
+ $this->createsFiles->execute($document, $object);
+
+
+ foreach ($payments as $payment) {
+ $chinaBankSlipUploaded = $this->faker->numberBetween(0, 1);
+
+ if($chinaBankSlipUploaded){
+ $bill = $payment->transactions()->where('type', TransactionType::BILL)->first();
+
+ // when our currency supplier completes the transfer they will send us the bank slip as proof of payment, then the admin user
+ // will upload the bank slip document and attaching it to transaction type TransactionType::BILL
+ $object = new DocumentObject( DocumentType::CUSTOMER_PAYMENT_PROOF, ['data:image/png;base64,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'],
+ '', ApprovalStatus::APPROVED, 'china_bank_slip');
+ /** @var Document $document */
+ $document = $this->createsDocument->execute($bill, $object);
+ $this->createsFiles->execute($document, $object);
+
+ $this->updatesTransactionStatus->execute($bill, ApprovalStatus::APPROVED);
+
+ // the invoicing documents will be generated once they 2 conditions are met:
+ // 1. Full payment completed (completed is flagged when the china payment proof is uploaded)
+ // 2. The purchase order is filled and approved (when the purchase order is not filled for more than 2 months the system will automatically generate a random products for Purchase order to close the order)
+
+ // once the invoice is generated the transaction table will include 2 new transaction type TransactionType::INVOICE, TransactionType::SUPPLIER_DELIVERY
+ // and for documents will be generated and attached to the booking.
+ // once this process is complete the booking status will update to ApprovalStatus::COMPLETED
+ $this->createInvoiceTransactionProcessor->execute($booking);
+
+ }
+ }
+
+
+ }
}
}
diff --git a/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue b/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue
index 7d686b70..b87ac20e 100644
--- a/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue
+++ b/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue
@@ -219,6 +219,29 @@
+
Request Refund
diff --git a/resources/assets/vue/components/bookings/forms/ChangeBookingOwnerFormComponent.vue b/resources/assets/vue/components/bookings/forms/ChangeBookingOwnerFormComponent.vue
new file mode 100644
index 00000000..8034fcdc
--- /dev/null
+++ b/resources/assets/vue/components/bookings/forms/ChangeBookingOwnerFormComponent.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
Change Booking Owner
+
+
+
+
+
+
+ Customer Marking
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue
index 7128d7ba..fe2826e4 100644
--- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue
+++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue
@@ -270,7 +270,7 @@
-
+
@@ -426,6 +426,14 @@
+
+
+
Change Booking Owner
+
+
+
+
+
@@ -467,6 +475,9 @@
});
return complete;
+ },
+ companySegmentIds() {
+ return this.booking.company.segments.map(obj => parseInt(obj.id));
}
},
watch: {
diff --git a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue
index 6225a43e..fd36e8a2 100644
--- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue
+++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue
@@ -47,8 +47,8 @@
style=" fill:#000000;">
-
-
+
+
{{segment.name}}
diff --git a/resources/assets/vue/components/companies/elements/UserCompanyComponent.vue b/resources/assets/vue/components/companies/elements/UserCompanyComponent.vue
new file mode 100644
index 00000000..4985f8ed
--- /dev/null
+++ b/resources/assets/vue/components/companies/elements/UserCompanyComponent.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
{{this.item.reference}}
+
+
+
+
+
+
+
diff --git a/resources/assets/vue/components/companies/sections/CustomerSectionTwoComponent.vue b/resources/assets/vue/components/companies/sections/CustomerSectionTwoComponent.vue
new file mode 100644
index 00000000..c8cc4c99
--- /dev/null
+++ b/resources/assets/vue/components/companies/sections/CustomerSectionTwoComponent.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
diff --git a/resources/views/pages/customer_support.blade.php b/resources/views/pages/customer_support.blade.php
new file mode 100644
index 00000000..bebb4a15
--- /dev/null
+++ b/resources/views/pages/customer_support.blade.php
@@ -0,0 +1,179 @@
+@extends('layouts.base_portal')
+@section('inner_content')
+
+
+
+
+ @if($company)
+ @php
+ $employees = $company->employees;
+ $primaryEmployee = $employees->first();
+ $identification = $company->documents->whereIn('document_type', \App\Classes\ValueObjects\Constants\DocumentType::IDENTIFICATION_DOCUMENTS)->first()
+ @endphp
+
+ Customer Account
+ Marking: {{$company->reference}}
+ Account Type: {{$company->type === 1 ? 'Business' : 'Personal'}}
+ @if($company->type === 1)Company's Name: {{$company->name}}
@endif
+ Customer's Name: {{$employees->pluck('name')->implode(', ')}}
+ Email: {{$employees->pluck('email')->implode(', ')}}
+ Phone: {{$company->contacts->pluck('phone')->implode(', ')}}
+ Registration Date: {{$company->created_at->format('d-m-Y')}}
+
+
+ Customer Verification
+ Email Verification Status: {{ $primaryEmployee->status === 2 ? 'Verified' : 'Pending Verification'}}
+ Identification Verification Status: {{$identification ? ($identification->status === 2 ? 'Verified' : 'Pending Verification') : 'Not Submitted'}}
+
+ @if(!$booking)
+
+ Customer Bookings
+ @php
+ $bookings = $company->bookings()->whereIn('status', [2, 3])->get();
+ @endphp
+
+ @foreach($bookings as $booking)
+ @php
+ $payments = $booking->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::PAYMENT)->get();
+ $purchaseOrder = $booking->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::PURCHASE_ORDER)->first();
+ @endphp
+
+ Booking Reference: {{$booking->marking}}
+ Amount: {{$booking->fix_amount.' '.$booking->fixedCurrency->short_code}}
+ Status: {{$booking->status === 3 ? 'Complete' : 'In Progress'}}
+ Purchase Order Status: {{$purchaseOrder ? ($purchaseOrder->status === 3 ? 'Approved' : ($purchaseOrder->status === 1 ? 'Pending Approval' : 'Incomplete Submission')) : 'Pending Submission'}}
+ @if($payments)Payment History:
@endif
+ @php $i = 1; @endphp
+ @foreach($payments as $payment)
+ @php
+ $bill = $payment->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::BILL)->first();
+ $transferProof = null;
+ $status = 'Pending Submission';
+
+ if($payment->status === 1) {
+ $status = 'Pending Approval';
+ }
+
+ if($payment->status === 2) {
+ $status = 'Pending Confirmation';
+ }
+
+ if(in_array($payment->status, [4, 5])) {
+ $status = 'Rejected/Failed Payment';
+ }
+
+ if($bill) {
+ if($bill->status === 1) {
+ $status = 'Pending Transfer Proof';
+ }
+
+ if(in_array($bill->status, [2, 3])) {
+ $status = 'Transfer Complete';
+ $transferProof = $bill->documents()->first();
+ }
+ }
+
+ @endphp
+
+ {{$i++}}.
+ Amount: {{$payment->original_amount.' '.$payment->original_currency->short_code}}
+ Status: {{$status}}
+ Payment Date: {{$payment->created_at->format('d-m-Y')}}
+ @if($bill)
+ Supplier: {{$bill->issuerCompany->name}}
+ Supplier Order Date: {{$bill->created_at->format('d-m-Y')}}
+ @if($transferProof)Transfer Proof Upload Date: {{$transferProof->created_at->format('d-m-Y')}}
@endif
+ @endif
+
+ @endforeach
+
+ @endforeach
+
+
+ @endif
+ @endif
+ @if($booking)
+ @php
+ $payments = $booking->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::PAYMENT)->get();
+ $purchaseOrder = $booking->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::PURCHASE_ORDER)->first();
+ @endphp
+
+ Booking Reference: {{$booking->marking}}
+ Amount: {{$booking->fix_amount.' '.$booking->fixedCurrency->short_code}}
+ Status: {{$booking->status === 3 ? 'Complete' : 'In Progress'}}
+ Purchase Order Status: {{$purchaseOrder ? ($purchaseOrder->status === 3 ? 'Approved' : ($purchaseOrder->status === 1 ? 'Pending Approval' : 'Incomplete Submission')) : 'Pending Submission'}}
+ @if($payments)Payment History:
@endif
+ @php $i = 1; @endphp
+ @foreach($payments as $payment)
+ @php
+ $bill = $payment->transactions()->where('type', \App\Classes\ValueObjects\Constants\TransactionType::BILL)->first();
+ $transferProof = null;
+
+ $status = 'Pending Submission';
+
+ if($payment->status === 1) {
+ $status = 'Pending Approval';
+ }
+
+ if($payment->status === 2) {
+ $status = 'Pending Confirmation';
+ }
+
+ if(in_array($payment->status, [4, 5])) {
+ $status = 'Rejected/Failed Payment';
+ }
+
+ if($bill) {
+ if($bill->status === 1) {
+ $status = 'Pending Transfer Proof';
+ }
+
+ if(in_array($bill->status, [2, 3])) {
+ $status = 'Transfer Complete';
+ $transferProof = $bill->documents()->first();
+ }
+ }
+
+ @endphp
+
+ {{$i++}}.
+ Amount: {{$payment->original_amount.' '.$payment->original_currency->short_code}}
+ Status: {{$status}}
+ Payment Date: {{$payment->created_at->format('d-m-Y')}}
+ @if($bill)
+ Supplier: {{$bill->issuerCompany->name}}
+ Supplier Order Date: {{$bill->created_at->format('d-m-Y')}}
+ @if($transferProof)Transfer Proof Upload Date: {{$transferProof->created_at->format('d-m-Y')}}
@endif
+ @endif
+
+ @endforeach
+
+ @endif
+
+
+
+@endsection
diff --git a/resources/views/pages/customers/index.blade.php b/resources/views/pages/customers/index.blade.php
index dc22b5b8..e5d694d8 100644
--- a/resources/views/pages/customers/index.blade.php
+++ b/resources/views/pages/customers/index.blade.php
@@ -5,6 +5,7 @@
+
@@ -77,10 +78,10 @@
-@endsection
\ No newline at end of file
+@endsection
diff --git a/resources/views/pages/pdfs/deliver_order.blade.php b/resources/views/pages/pdfs/deliver_order.blade.php
index ec1a34d7..f91a179a 100644
--- a/resources/views/pages/pdfs/deliver_order.blade.php
+++ b/resources/views/pages/pdfs/deliver_order.blade.php
@@ -34,7 +34,7 @@
REF: {{ $transaction->booking->marking }}
-
Date: {{ $po_order_transaction->created_at }}
+
Date: {{ $supplier->segments->whereIn('id', [23])->first() ? \Carbon\Carbon::now() : $po_order_transaction->created_at }}
diff --git a/resources/views/pages/pdfs/invoice.blade.php b/resources/views/pages/pdfs/invoice.blade.php
index 99785ef8..0df3cb98 100644
--- a/resources/views/pages/pdfs/invoice.blade.php
+++ b/resources/views/pages/pdfs/invoice.blade.php
@@ -33,7 +33,7 @@
Ref# {{ $po_order_transaction->booking->marking }}
-
Date: {{ $po_order_transaction->booking->created_at }}
+
Date: {{ $supplier->segments->whereIn('id', [23])->first() ? \Carbon\Carbon::now() : $po_order_transaction->booking->created_at }}
diff --git a/resources/views/pages/pdfs/purchase_order.blade.php b/resources/views/pages/pdfs/purchase_order.blade.php
index 9f72b531..c3ac5e8a 100644
--- a/resources/views/pages/pdfs/purchase_order.blade.php
+++ b/resources/views/pages/pdfs/purchase_order.blade.php
@@ -14,7 +14,7 @@
PO#: {{ $po_order_transaction->bill_no }}
Ref#: {{ $po_order_transaction->booking->marking }}
- Date: {{ $po_order_transaction->booking->created_at }}
+ Date: {{ $supplier->segments->whereIn('id', [23])->first() ? \Carbon\Carbon::now() : $po_order_transaction->booking->created_at }}
diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php
index 876a3833..787c1616 100644
--- a/resources/views/pages/settings.blade.php
+++ b/resources/views/pages/settings.blade.php
@@ -31,6 +31,29 @@
+
-
+
+
+
+
+
+
+
+
+
+
+ Create Label
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- Create Label
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/routes/account.php b/routes/account.php
index 1a05eb0d..84a7c85b 100644
--- a/routes/account.php
+++ b/routes/account.php
@@ -34,6 +34,7 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account
});
Route::group(['prefix' => 'user', 'as' => 'user.', 'middleware' => 'valid.token'], function () {
+ Route::get('/{email}', 'FetchUserByEmailController@fetch')->name('company');
Route::post('/show', 'FetchUserController@fetch')->name('show');
Route::get('/list', 'ListUsersController@list')->name('list');
Route::put('/update/{id}', 'UpdateUserController@update')->name('update');
@@ -44,4 +45,4 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account
-});
\ No newline at end of file
+});
diff --git a/routes/booking.php b/routes/booking.php
index 0cbeca76..b645345c 100644
--- a/routes/booking.php
+++ b/routes/booking.php
@@ -12,6 +12,8 @@ Route::group(['prefix' => 'booking', 'as' => 'booking.', 'namespace' => 'Booking
Route::delete('/delete/{id}', 'DeleteBookingController@delete')->name('delete');
Route::post('/regenerate/invoice/{id}', 'RegenerateInvoiceBookingController@regenerate')->name('regenerate.invoice');
+ Route::put('/owner/update/{id}', 'UpdateBookingOwnerController@update')->name('owner.update');
+
Route::group(['prefix' => '{id}/payment', 'as' => 'payment.'], function () {
Route::post('quotation', 'FetchBookingPaymentQuotationController@fetch')->name('quotation');
Route::post('create', 'CreateBookingPaymentController@create')->name('create');
diff --git a/routes/web.php b/routes/web.php
index a177dc5c..411a0e71 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -19,7 +19,7 @@ use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Maatwebsite\Excel\Excel;
-use Meneses\LaravelMpdf\Facades\LaravelMpdf;
+use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf;
use Webklex\PDFMerger\Facades\PDFMergerFacade as PDFMerger;
/*
@@ -103,6 +103,50 @@ Route::get('/purchase_orders', function () {
return view('pages.purchase_orders');
})->name('purchase_orders');
+Route::get('/support', function () {
+ return view('pages.customer_support', [
+ 'marking' => null,
+ 'email' => null,
+ 'bookingReference' => null,
+ 'company' => null,
+ 'booking' => null
+ ]);
+})->name('support');
+
+Route::post('/support', function (Request $request) {
+
+ $marking = $request->input('marking');
+ $email = $request->input('customer_email');
+ $bookingReference = $request->input('booking_reference');
+
+ $company = null;
+ $booking = null;
+
+ if($email) {
+ $company = Company::whereHas('Employees', function($user) use($email) {
+ return $user->where('email', $email);
+ })->first();
+ }
+
+ if($marking) {
+ $company = Company::where('reference', $marking)->first();
+ }
+
+ if($bookingReference) {
+ $booking = Booking::where('marking', $bookingReference)->first();
+ $company = $booking->company;
+ }
+
+ return view('pages.customer_support', [
+ 'marking' => $marking,
+ 'email' => $email,
+ 'bookingReference' => $bookingReference,
+ 'company' => $company,
+ 'booking' => $booking,
+ ]);
+
+})->name('support');
+
Route::get('/online_payment/redirect', 'Billplz\CallbackBillplzController@callback')->name('online_payment.redirect');
Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export');