diff --git a/app/Classes/General/Helper.php b/app/Classes/General/Helper.php index cad68208..2474624e 100644 --- a/app/Classes/General/Helper.php +++ b/app/Classes/General/Helper.php @@ -2,6 +2,7 @@ namespace App\Classes\General; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; @@ -24,4 +25,21 @@ class Helper return array_slice(get_class_methods($className), 1); } -} \ No newline at end of file + /** + * @param $log + * @return array + */ + static function debugLoggerForPerfexCRM($log){ + if($log){ + $message = $log['message']; + $substring = 'No data were found'; + if (isset($message)) { + if (strpos($message, $substring) !== false) { + // Log::info('Message exist'); + } else { + Log::info($log['message']); + } + } + } + } +} diff --git a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php index 3cfbcd20..0d7b093e 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php +++ b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php @@ -19,6 +19,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Carbon\Carbon; use Illuminate\Support\Facades\Log; +use App\Classes\General\Helper; class UpdatePerfexCRMInvoice implements ShouldQueue { @@ -60,7 +61,12 @@ class UpdatePerfexCRMInvoice implements ShouldQueue if(is_null($invoice)){ $result = (App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($transaction, null, null, $this->updatePerfexCRMInvoiceObject->getIsPaid()); - $invoiceId = $result->payload['id']; + if ($result) { + $invoiceId = $result->payload['id']; + } else { + // Log::error(json_encode('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed')); + Helper::debugLoggerForPerfexCRM('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'); + } } else{ $invoiceId = $invoice->id; diff --git a/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php index 9c740601..319931bf 100644 --- a/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php +++ b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php @@ -11,7 +11,7 @@ use App\Classes\Modules\Announcements\Services\CreatesAnnouncement; use App\Classes\Modules\Announcements\Processors\AssignAnnouncementToSegmentProcessor; use App\Http\Resources\AnnouncementResource; - +use Carbon\Carbon; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -67,8 +67,8 @@ class CreateAnnouncementLogic extends AbstractControllerLogic $annoucement_object = new AnnouncementObject( $request->input('title'), $request->input('description'), - $request->input('starting_on'), - $request->input('ending_on') + Carbon::createFromFormat('d-m-Y', $request->input('starting_on'))->format('Y-m-d H:i:s'), + Carbon::createFromFormat('d-m-Y', $request->input('ending_on'))->format('Y-m-d H:i:s') ); $this->canCreateAnnouncement->passes($annoucement_object); diff --git a/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php index 4fac4144..fc1f4359 100644 --- a/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php +++ b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php @@ -10,7 +10,7 @@ use App\Classes\Modules\Announcements\Services\FetchesAnnouncement; use App\Classes\Modules\Announcements\Services\UpdatesAnnouncement; use App\Http\Resources\AnnouncementResource; - +use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -66,8 +66,8 @@ class UpdateAnnouncementLogic extends AbstractControllerLogic $annoucement_object = new AnnouncementObject( $request->input('title'), $request->input('description'), - $request->input('starting_on'), - $request->input('ending_on') + Carbon::createFromFormat('d-m-Y', $request->input('starting_on'))->format('Y-m-d H:i:s'), + Carbon::createFromFormat('d-m-Y', $request->input('ending_on'))->format('Y-m-d H:i:s') ); $this->canUpdateAnnouncement->passes($annoucement_object); diff --git a/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php b/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php index a6c0b7fd..a9beb2d0 100644 --- a/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php +++ b/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php @@ -91,7 +91,7 @@ class CallbackBillplzLogic $status = $billplzXSignatureObject->getStatus() === 'failed' ? ApprovalStatus::REJECTED : ApprovalStatus::PENDING_VERIFICATION; } - if($transaction->status !== ApprovalStatus::COMPLETED){ + if($transaction->status !== ApprovalStatus::COMPLETED && $transaction->status !== ApprovalStatus::APPROVED){ if($transaction->owner instanceof Wallet && $transaction->status !== ApprovalStatus::APPROVED && $status === ApprovalStatus::APPROVED) { $this->updatesWalletBalance->execute($transaction->owner, $transaction->amount); diff --git a/app/Classes/Modules/Billplzs/Services/CreatesBillplzBill.php b/app/Classes/Modules/Billplzs/Services/CreatesBillplzBill.php index 1bed083c..a2947e82 100644 --- a/app/Classes/Modules/Billplzs/Services/CreatesBillplzBill.php +++ b/app/Classes/Modules/Billplzs/Services/CreatesBillplzBill.php @@ -4,6 +4,7 @@ namespace App\Classes\Modules\Billplzs\Services; use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Log; class CreatesBillplzBill @@ -26,7 +27,7 @@ class CreatesBillplzBill $response = Http::withBasicAuth(config('billplz.api_key').':', '')->post(config('billplz.base_url').'/api/v3/bills', [ 'collection_id' => $wallet ? config('billplz.wallet_collection_id') : config('billplz.collection_id'), 'name' => $name, - 'email' => $email, + 'email' => App::environment('production') ? $email : 'development@cief-malaysia.com', 'description' => $description, 'amount' => $this->finalizeAmount($amount), 'redirect_url' => route('online_payment.redirect'), diff --git a/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/AutoPurchaseOrderFillLogic.php index 1983952e..bc837878 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('service_id', '!=', 4)->where(function($query){ - return $query->whereMonth('created_at', '>', 07)->whereYear('created_at', 2022); + return $query->whereMonth('created_at', '<', 03)->whereYear('created_at', 2023); })->whereDoesntHave('transactions', function($q){ $q->where('type', TransactionType::PURCHASE_ORDER); $q->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED]); diff --git a/app/Classes/Modules/Imports/Services/GenericImport.php b/app/Classes/Modules/Imports/Services/GenericImport.php new file mode 100644 index 00000000..b2ffdb8f --- /dev/null +++ b/app/Classes/Modules/Imports/Services/GenericImport.php @@ -0,0 +1,23 @@ +rows = $collection; + } +} diff --git a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php index 6848705f..acdf1a89 100644 --- a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php +++ b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php @@ -5,6 +5,7 @@ namespace App\Classes\Modules\PerfexCRM\Services; use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Log; +use App\Classes\General\Helper; class FetchesPerfexCRMTask { @@ -38,7 +39,8 @@ class FetchesPerfexCRMTask return (object) $data; }else{ - Log::error($response); + // Log::error($response); + Helper::debugLoggerForPerfexCRM($response); return null; } }catch(\Exception $exception){ diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php index fd13bc3f..27ff3165 100644 --- a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php +++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMCustomer.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Log; use App\Classes\ValueObjects\Constants\PerfexCRMCustomFields; +use App\Classes\General\Helper; class UpdatesPerfexCRMCustomer { @@ -37,7 +38,8 @@ class UpdatesPerfexCRMCustomer $data = $response->json(); return (object) $data; }else{ - Log::error($response); + // Log::error($response); + Helper::debugLoggerForPerfexCRM($response); return null; } }catch(\Exception $exception){ diff --git a/app/Http/Controllers/Bookings/DeleteBookingController.php b/app/Http/Controllers/Bookings/DeleteBookingController.php index a5629052..dfbd8a01 100644 --- a/app/Http/Controllers/Bookings/DeleteBookingController.php +++ b/app/Http/Controllers/Bookings/DeleteBookingController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Bookings; -use App\Classes\Modules\Accounts\ControllersLogic\DeleteBookingLogic; +use App\Classes\Modules\Bookings\ControllersLogic\DeleteBookingLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Imports/ImportHoneyTrapController.php b/app/Http/Controllers/Imports/ImportHoneyTrapController.php new file mode 100644 index 00000000..81ef237b --- /dev/null +++ b/app/Http/Controllers/Imports/ImportHoneyTrapController.php @@ -0,0 +1,116 @@ +input('files'), '', ApprovalStatus::APPROVED, 'imports'); + $file = json_decode($object->getFiles()[0])->file_info->original->file; + + $import = new GenericImport(); + Excel::import($import, $file); + $excelRows = $import->rows; + $excelRows = $excelRows->toArray(); + + $returnArray = []; + + $segment_id = Segment::where('name', 'honey trap platinum')->first()->id; + + foreach ($excelRows as $row) { + + if (is_null($row['email']) || empty($row['email'])) { + continue; + } + + if (is_null($row['end_date']) || empty($row['end_date'])) { + // use csv import must have an end_date + $row['status'] = 'failed'; + $row['message'] = 'End Date is required'; + $returnArray[] = $row; + continue; + } + + $row['end_date'] = $end_date = $this->changeExcelDate($row['end_date']); + $start_date = $row['start_date'] ? $this->changeExcelDate($row['start_date']) : Carbon::now(); + $row['start_date'] = $start_date; + + $end_date = Carbon::parse($end_date); + // Check if the end_date is in the past + if ($end_date->isPast()) { + // end_date must be after today's date + $row['status'] = 'failed'; + $row['message'] = "End Date must be after today's date"; + $returnArray[] = $row; + continue; + } + + $user = User::where('email', $row['email'])->first(); + if (!$user) { + // if user not found + $row['status'] = 'failed'; + $row['message'] = 'Email not found'; + $returnArray[] = $row; + continue; + } + + $company = $user->company->first(); + if (!$company) { + // if company not found + $row['status'] = 'failed'; + $row['message'] = 'Company not found'; + $returnArray[] = $row; + continue; + } + + $company_seasonal_honey_trap_count = SeasonalSegment::where('company_id', $company->id)->where('segment_id', $segment_id)->get(); + if (count($company_seasonal_honey_trap_count)) { + // seasonal segment already exists + $row['status'] = 'failed'; + $row['message'] = 'Company is already in the Honey Trap Segment'; + $returnArray[] = $row; + continue; + } + + $seasonalSegmentObject = new SeasonalSegmentObject($company->id, $segment_id, $start_date, $end_date ?? null); + + (App()->make(createsSeasonalSegment::class))->execute($seasonalSegmentObject); + (App()->make(assignSegmentProcessor::class))->execute($company, $segment_id); + + // success added honey trap seasonal segment + $row['status'] = 'success'; + $row['message'] = ''; + $returnArray[] = $row; + continue; + } + + return response()->json($returnArray); + } + + public function changeExcelDate($date) + { + $unixTime = (($date - 25569) * 86400); + $date = new DateTime("@$unixTime"); + return $date->format('d/m/Y'); + } +} diff --git a/app/Http/Resources/AnnouncementResource.php b/app/Http/Resources/AnnouncementResource.php index 26e1c2f9..2e6048e0 100644 --- a/app/Http/Resources/AnnouncementResource.php +++ b/app/Http/Resources/AnnouncementResource.php @@ -20,8 +20,8 @@ class AnnouncementResource extends JsonResource 'title' => $this->title, 'description' => $this->description, 'segments' => $this->segments, - 'starting_on' => Carbon::parse($this->starting_on)->format('Y-m-d'), - 'ending_on' => Carbon::parse($this->ending_on)->format('Y-m-d'), + 'starting_on' => Carbon::parse($this->starting_on)->format('d-m-Y'), + 'ending_on' => Carbon::parse($this->ending_on)->format('d-m-Y'), 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), ]; } diff --git a/resources/assets/sass/modules/_buttons.scss b/resources/assets/sass/modules/_buttons.scss index 3a9879eb..e7b281f8 100644 --- a/resources/assets/sass/modules/_buttons.scss +++ b/resources/assets/sass/modules/_buttons.scss @@ -123,7 +123,11 @@ button:focus{ button:disabled { cursor: not-allowed; -} +} + +.not-allowed { + cursor: not-allowed; +} /* Alternate buttons -------------------------------------------------- diff --git a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue index 4ce30e7d..d9c009b5 100644 --- a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue @@ -128,7 +128,7 @@
| {{ key }} | +
|---|
| + {{ col }} + | +