From d315c47bcac9e540521ec62a40f29f592e51e493 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 10 May 2023 01:41:30 +0800 Subject: [PATCH] upload-honey-trap --- .../Imports/Services/GenericImport.php | 23 ++++ .../Imports/ImportHoneyTrapController.php | 106 ++++++++++++++++++ .../elements/UploadHoneyTrapCsvComponent.vue | 35 +++++- resources/views/pages/honey_trap.blade.php | 12 ++ resources/views/pages/settings.blade.php | 5 - routes/api.php | 1 + routes/web.php | 3 + 7 files changed, 175 insertions(+), 10 deletions(-) create mode 100644 app/Classes/Modules/Imports/Services/GenericImport.php create mode 100644 app/Http/Controllers/Imports/ImportHoneyTrapController.php create mode 100644 resources/views/pages/honey_trap.blade.php 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/Http/Controllers/Imports/ImportHoneyTrapController.php b/app/Http/Controllers/Imports/ImportHoneyTrapController.php new file mode 100644 index 00000000..a4dbc858 --- /dev/null +++ b/app/Http/Controllers/Imports/ImportHoneyTrapController.php @@ -0,0 +1,106 @@ +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')->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; + } + + $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/resources/assets/vue/components/companies/elements/UploadHoneyTrapCsvComponent.vue b/resources/assets/vue/components/companies/elements/UploadHoneyTrapCsvComponent.vue index 9daf132c..6b3a6569 100644 --- a/resources/assets/vue/components/companies/elements/UploadHoneyTrapCsvComponent.vue +++ b/resources/assets/vue/components/companies/elements/UploadHoneyTrapCsvComponent.vue @@ -4,7 +4,7 @@
-
+
@@ -32,6 +32,19 @@
+
+
Uploaded Customer
+ + + + + + + +
{{ key }}
+ {{ col }} +
+
@@ -45,7 +58,8 @@ data(){ return { files: [], - parameters: {} + parameters: {}, + returnData: null } }, validations: { @@ -53,14 +67,25 @@ required } }, + computed: { + returnDataKeys() { + return Object.keys(Object.assign({}, this.returnData[0])) + }, + }, methods: { submitForm(){ - this.parameters = { files: this.files }; - - this.submit(this.route('api.debtor.import'), 'post', this.section, true, false) + this.submit(this.route('api.honey_trap.upload'), 'post', this.section, true, false); + }, + errorHandler(error){ + console.log(error); + }, + successHandler(response) { + console.log(response); + this.returnData = response; + console.log(this.returnDataKeys); }, }, mixins: [ModalFromHandler] diff --git a/resources/views/pages/honey_trap.blade.php b/resources/views/pages/honey_trap.blade.php new file mode 100644 index 00000000..69c28f15 --- /dev/null +++ b/resources/views/pages/honey_trap.blade.php @@ -0,0 +1,12 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+
+
+ +
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index a7f735cb..100fb380 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -321,11 +321,6 @@
-
-
- -
-
diff --git a/routes/api.php b/routes/api.php index 6c17a107..b3e0002c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,6 +29,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import'); + Route::post('/import/upload-honey-trap', 'Imports\ImportHoneyTrapController@import')->name('honey_trap.upload'); require __DIR__ . '/company.php'; diff --git a/routes/web.php b/routes/web.php index 1e9c3d00..2547d087 100644 --- a/routes/web.php +++ b/routes/web.php @@ -598,3 +598,6 @@ Route::get('/po/outsource/check', function(){ }); +Route::get('/upload-honey-trap', function () { + return view('pages.honey_trap'); +})->name('upload_honey_trap'); \ No newline at end of file