diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index 3fe7b382..2c732126 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -14,6 +14,7 @@ use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject; use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; 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 App\Models\Company; use App\Models\User; @@ -91,7 +92,7 @@ class CreateCustomerLogic extends AbstractControllerLogic $user = $this->createUserProcessor->execute($request, RoleTypes::USER, App::environment(['local']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION); /** @var Company $company */ - $company = $this->createCompanyProcessor->execute($request, BusinessType::IMPORTER, $request->input('type'), ApprovalStatus::PENDING_SUBMISSION); + $company = $this->createCompanyProcessor->execute($request, BusinessType::IMPORTER, $request->input('type') === CompanyType::COMPANY_BUSINESS ? CompanyType::COMPANY_BUSINESS : CompanyType::PERSONAL_BUSINESS, ApprovalStatus::PENDING_SUBMISSION); $this->createContactProcessor->execute($request, $company); diff --git a/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php index 73751cfb..5e65c6a4 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php @@ -65,7 +65,7 @@ class AutoPurchaseOrderFillLogic extends AbstractControllerLogic public function logic(Request $request) : JsonResponse { $bookings = Booking::where(function($query){ - return $query->whereMonth('created_at', 11)->orWhereMonth('created_at', 12); + return $query->whereMonth('created_at', 01)->orWhereMonth('created_at', 02); })->whereDoesntHave('transactions', function($q){ $q->where('type', TransactionType::PURCHASE_ORDER); $q->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED]); diff --git a/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php index de4b59f1..ff9427fe 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php @@ -45,7 +45,9 @@ class DownloadBookingDocumentLogic })->get(); - if (!count($bookings)) throw new MalformedRequestException('No available file to download'); + if (!count($bookings)) { + return response()->json(['no file to download']); + } foreach ($bookings as $booking) { diff --git a/app/Classes/Modules/Exports/Services/ExportsAnalyticBookingTransactions.php b/app/Classes/Modules/Exports/Services/ExportsAnalyticBookingTransactions.php new file mode 100644 index 00000000..791c0de3 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsAnalyticBookingTransactions.php @@ -0,0 +1,104 @@ +request = $request; + } + + public function headings(): array + { + return [ + 'TransID', + 'Company ID', + 'Type Of User', + 'Group Control / Experiment', + 'Payment Date', + 'Completed Purchase OrderDate', + 'DayTo Closed', + 'IsCompleted Purchase Order (1 or 0)', + 'Final Payment', + 'Discount Amount', + 'PaymentType', + 'RowUpdateDate' + ]; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + return Booking::query(); + } + + /** + * @param $booking + * @return array + */ + public function map($booking): array + { + $companyType = []; + $companyType[companyType::COMPANY_BUSINESS] = 'COMPANY_BUSINESS'; + $companyType[companyType::PERSONAL_BUSINESS] = 'PERSONAL_BUSINESS'; + + $payments = $booking->transactions()->where('type', 1)->whereIn('status', [2, 3]); + + $paymentmethondArray = PaymentMethodType::PAYMENT_METHODS_ID; + $paymentmethondArray[0] = 'Hybrid'; + $paymentMethod = ''; + foreach ($payments->get() as $payment) { + if ( $paymentMethod == '' ) { + $paymentMethod = $payment->payment_method; + } else if ( $payment->payment_method != $paymentMethod ) { + $paymentMethod = 0; // set it to Hybrid + } + } + $paymentMethod === '' ? '' : $paymentMethod = $paymentmethondArray[$paymentMethod]; + + $firstPayment = $payments->first(); + + $CompletedPurchaseOrders = $booking->transactions()->where('type', 7)->whereIn('status', [1, 2]); + + $FirstCompletedPurchaseOrder = $CompletedPurchaseOrders->first(); + + $lastPayment = $booking->transactions()->where('type', 1)->whereIn('status', [2, 3])->orderBy('id', 'desc')->first(); + + return [ + $booking->id, + $booking->company_id, + $companyType[$booking->company->type], + '', + $firstPayment == null ? '' : $firstPayment->created_at, + $FirstCompletedPurchaseOrder == null ? '' : $FirstCompletedPurchaseOrder->created_at, + '', + $CompletedPurchaseOrders->count() > 0 ? '1' : '0', + $lastPayment == null ? '' : $lastPayment->amount, + '', + $paymentMethod, + '', + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsBookingTransactions.php b/app/Classes/Modules/Exports/Services/ExportsBookingTransactions.php new file mode 100644 index 00000000..aed106ea --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsBookingTransactions.php @@ -0,0 +1,74 @@ +request = $request; + } + + public function headings(): array + { + return [ + 'Ref No', + 'Creted Date', + 'Amount', + 'Rate', + 'Supplier' + ]; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + $supplierIds = array_map(function($value){ + return ['id' => $value]; + }, json_decode($this->request->input('supplierIds'))); + + $dateFrom =Carbon::parse($this->request->input('startDate'))->format('Y-m-d'); + $dateTo =Carbon::parse($this->request->input('endDate'))->format('Y-m-d'); + + return Transaction::where('type', 3)->whereIn('issuer', $supplierIds)->whereBetween('created_at', [$dateFrom, $dateTo]); + } + + /** + * @param $transaction + * @return array + */ + public function map($transaction): array + { + $supplierName = Company::where('id', $transaction->issuer)->get()->first()->name; + $refNo = $transaction->owner->owner == null ? $transaction->owner->marking : $transaction->owner->owner->marking; + + $createdAt = $transaction->created_at->format('d-m-Y'); + $amount = $transaction->amount; + $rate = $transaction->currency_rate; + + return [ + $refNo, + $createdAt, + $amount, + $rate, + $supplierName + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsTransactions.php b/app/Classes/Modules/Exports/Services/ExportsTransactions.php index 9e328cca..b7f0e5ad 100644 --- a/app/Classes/Modules/Exports/Services/ExportsTransactions.php +++ b/app/Classes/Modules/Exports/Services/ExportsTransactions.php @@ -5,8 +5,10 @@ namespace App\Classes\Modules\Exports\Services; use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\TransactionType; +use App\Models\Booking; use App\Models\Company; use App\Models\Transaction; +use App\Models\Wallet; use Maatwebsite\Excel\Concerns\Exportable; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithHeadingRow; @@ -24,7 +26,7 @@ class ExportsTransactions implements FromQuery, WithHeadingRow, WithMapping, Sho */ public function query() { - return Transaction::query(); + return Transaction::whereIn('type', [TransactionType::PAYMENT, TransactionType::BILL])->where('owner_type', '!=',Wallet::class); } /** @@ -59,26 +61,24 @@ class ExportsTransactions implements FromQuery, WithHeadingRow, WithMapping, Sho 6 => 'EXPIRED' ]; - switch ($transaction->owner_type) { - case "App\Models\Booking": - $marking = $transaction->booking->company->reference; - break; - case "App\Models\Transaction": - $marking = $transaction->transactions()->first()->booking->company->reference; - break; - case "App\Models\Wallet": - $marking = $transaction->owner->owner->reference; - break; - default: - $marking = ''; - } + + $booking = $transaction->owner; + if(!($booking instanceof Booking)){ + $booking = $booking->owner; + } + + $company = $booking->company; + + if(!$company instanceof Company) dd($transaction); return [ + $company->reference, + $booking ? $booking->marking : '', $transaction->bill_no, $transaction->owner_id, $transaction->owner_type, $transactionTypes[$transaction->type], - $transaction->issuer, + $transaction->issuerCompany->name, $transaction->reciver, $transaction->currency_id === 1 ? 'MYR' : 'RMB', $transaction->amount, diff --git a/app/Classes/ValueObjects/Constants/TransactionType.php b/app/Classes/ValueObjects/Constants/TransactionType.php index 29f5e946..026f25ba 100644 --- a/app/Classes/ValueObjects/Constants/TransactionType.php +++ b/app/Classes/ValueObjects/Constants/TransactionType.php @@ -24,10 +24,10 @@ final class TransactionType { public const CREDIT_NOTE = 9; - public const WITHDRAW = 10; - public const DEBIT_NOTE = 11; + public const WITHDRAW = 10; + public const TRANSFER_FEE = 12; public const CASH_BACK = 13; diff --git a/app/Http/Controllers/Bookings/DownloadBookingDocumentController.php b/app/Http/Controllers/Bookings/DownloadBookingDocumentController.php index d2a7d85c..95427363 100644 --- a/app/Http/Controllers/Bookings/DownloadBookingDocumentController.php +++ b/app/Http/Controllers/Bookings/DownloadBookingDocumentController.php @@ -15,7 +15,7 @@ class DownloadBookingDocumentController * @throws \App\Classes\Exceptions\MalformedRequestException */ public function download(Request $request, DownloadBookingDocumentLogic $logic) { - $logic->execute($request); + return $logic->execute($request); } } \ No newline at end of file diff --git a/app/Http/Controllers/Exports/ExportAnalyticToExcelController.php b/app/Http/Controllers/Exports/ExportAnalyticToExcelController.php new file mode 100644 index 00000000..135e570d --- /dev/null +++ b/app/Http/Controllers/Exports/ExportAnalyticToExcelController.php @@ -0,0 +1,30 @@ +headers->set('Authorization', 'Bearer '.$token); + } + + public function bookingData(ExportsAnalyticBookingTransactions $exportsAnalyticBookingTransactions, Request $request){ + $response = $exportsAnalyticBookingTransactions->download('bookingData.csv', Excel::CSV, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php index 39ea3dc5..8563f78a 100644 --- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Exports; use App\Classes\Modules\Exports\Services\ExportsCustomers; use App\Classes\Modules\Exports\Services\ExportsTransactions; +use App\Classes\Modules\Exports\Services\ExportsBookingTransactions; use App\Classes\Modules\Exports\Services\ExportsNullDebtors; use App\Classes\Modules\Exports\Services\ExportsPaymentTransactions; @@ -54,4 +55,10 @@ class ExportCustomersToExcelController ob_end_clean(); return $response; } + + public function bookingTransactions(ExportsBookingTransactions $exportsBookingTransactions, Request $request){ + $response = $exportsBookingTransactions->download('bookingTransactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } } \ No newline at end of file diff --git a/app/Models/Booking.php b/app/Models/Booking.php index 69b8a745..2dfd945a 100644 --- a/app/Models/Booking.php +++ b/app/Models/Booking.php @@ -38,7 +38,7 @@ class Booking extends AbstractModel implements Documentable, Transactionable */ public function company(): BelongsTo { - return $this->BelongsTo(Company::class, 'company_id'); + return $this->BelongsTo(Company::class, 'company_id')->withTrashed(); } /** diff --git a/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue index e436960a..429d0b9a 100644 --- a/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue @@ -121,16 +121,18 @@
- + +
diff --git a/resources/assets/vue/components/bookings/forms/ExportBookingTransactionFormComponent.vue b/resources/assets/vue/components/bookings/forms/ExportBookingTransactionFormComponent.vue new file mode 100644 index 00000000..889ea3e7 --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/ExportBookingTransactionFormComponent.vue @@ -0,0 +1,96 @@ + + + diff --git a/resources/assets/vue/components/bookings/forms/PurchaseOrderFormComponent.vue b/resources/assets/vue/components/bookings/forms/PurchaseOrderFormComponent.vue index cde4d84d..76a202a1 100644 --- a/resources/assets/vue/components/bookings/forms/PurchaseOrderFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/PurchaseOrderFormComponent.vue @@ -7,7 +7,14 @@
2
Purchase Order
-

In order for us to process your order, you will need to provide us with your purchase order information.

+

In order for us to process your order, you will need to provide us with your purchase order information.

+
+
+
+
+
+

Any Purchase Orders that aren't submitted within 60 days will be closed for editing.

+
diff --git a/resources/assets/vue/components/bookings/forms/SelectIndividualSupplierFormComponent.vue b/resources/assets/vue/components/bookings/forms/SelectIndividualSupplierFormComponent.vue new file mode 100644 index 00000000..56b86b86 --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/SelectIndividualSupplierFormComponent.vue @@ -0,0 +1,43 @@ + + + diff --git a/resources/assets/vue/components/bookings/forms/SelectSupplierFormComponent.vue b/resources/assets/vue/components/bookings/forms/SelectSupplierFormComponent.vue new file mode 100644 index 00000000..2895d76e --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/SelectSupplierFormComponent.vue @@ -0,0 +1,59 @@ + + + diff --git a/resources/assets/vue/general/mixins/guards.js b/resources/assets/vue/general/mixins/guards.js index 3b39baad..3e5aaea5 100644 --- a/resources/assets/vue/general/mixins/guards.js +++ b/resources/assets/vue/general/mixins/guards.js @@ -5,7 +5,7 @@ export default { (this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& !this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : ''; }, isProtectedRoute(){ - const unprotectedRoutes = [this.route('login'), this.route('account.email.verification')]; + const unprotectedRoutes = [this.route('login'), this.route('signup'), this.route('account.email.verification')]; return !unprotectedRoutes.includes(window.location.href); }, isWithTokenRoute(){ diff --git a/resources/views/pages/accounts/login.blade.php b/resources/views/pages/accounts/login.blade.php index 88296371..990eb4cc 100644 --- a/resources/views/pages/accounts/login.blade.php +++ b/resources/views/pages/accounts/login.blade.php @@ -64,7 +64,7 @@ diff --git a/resources/views/pages/accounts/sign_up.blade.php b/resources/views/pages/accounts/sign_up.blade.php new file mode 100644 index 00000000..05b4d9a9 --- /dev/null +++ b/resources/views/pages/accounts/sign_up.blade.php @@ -0,0 +1,43 @@ +@extends('layouts.base_login') + +@section('inner_content') + +
+
+
+
+
+
+
+
+
+
+
+
We Are Glad
+
You've Decided To join Us
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/pages/currency_orders.blade.php b/resources/views/pages/currency_orders.blade.php index 269591e1..daf804cf 100644 --- a/resources/views/pages/currency_orders.blade.php +++ b/resources/views/pages/currency_orders.blade.php @@ -2,6 +2,7 @@ @section('inner_content')
+
diff --git a/routes/web.php b/routes/web.php index 1b45cbd7..db739cc4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -30,6 +30,10 @@ Route::get('', function () { return view('pages.accounts.login'); })->name('login'); +Route::get('/signup', function () { + return view('pages.accounts.sign_up'); +})->name('signup'); + Route::get('/account/email/verification/{token}', function ($token) { return view('pages.accounts.email_verified', ['token' => $token]); })->name('account.email.verification'); @@ -92,6 +96,7 @@ Route::get('/online_payment/redirect', 'Billplz\CallbackBillplzController@callba Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@transactions'); +Route::get('/export/analytic/booking', 'Exports\ExportAnalyticToExcelController@bookingData'); Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) { return $exportsProducts->download('products.csv', Excel::CSV, ['Content-Type' => 'text/csv']); @@ -151,6 +156,7 @@ Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\Exp Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@nullDebtor')->name('newDebtor.export'); Route::get('/export/payment-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@paymentTransactions')->name('paymentTransactions.export'); Route::get('/export/wallet-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@walletTransactions')->name('walletTransactions.export'); +Route::get('/export/booking-transactions', 'Exports\ExportCustomersToExcelController@bookingTransactions')->name('export.transactions.booking'); Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) { $bookings = Booking::where(function($query){