Commit 16652d11 by Aung Khant Kyaw

auth and more data clean process

parent 748dac49
<?php
namespace App\Exports;
use App\Models\Data;
use Maatwebsite\Excel\Concerns\FromCollection;
class DatasExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Data::all('phone', 'service', 'operator', 'date');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}
...@@ -7,13 +7,20 @@ use Illuminate\Support\Facades\DB; ...@@ -7,13 +7,20 @@ use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use App\Imports\DataImport; use App\Imports\DataImport;
use Yajra\Datatables\Datatables; use Yajra\Datatables\Datatables;
use App\Exports\DatasExport;
use App\Models\Data;
use App\Models\Service;
use Illuminate\Support\Facades\Auth;
class DataController extends Controller class DataController extends Controller
{ {
public function index() public function __construct()
{ {
$this->middleware('auth');
}
public function index()
{
return view('home'); return view('home');
} }
...@@ -32,37 +39,131 @@ class DataController extends Controller ...@@ -32,37 +39,131 @@ class DataController extends Controller
if (!$request->all()) { if (!$request->all()) {
return redirect('data-import'); return redirect('data-import');
} }
$checkService = Service::select('service_name')->where('user_id', Auth::id())->groupBy('service_name')->get();
$checkServiceCount = $checkService->count();
if ($checkServiceCount < 2 && $checkServiceCount > 0) {
if ($request->sname == $checkService[0]->service_name) {
$import = new DataImport($request->sname);
$data = Excel::import($import, $request->file('importfile'));
$row = $import->getRowCount();
$service = new Service;
$service->service_name = $request->sname;
$service->user_id = Auth::id();
$service->save();
return redirect('data-dirty')->with('row', $row);
} else {
return redirect('data-import')->with('alert', 'You need to finish your existing service when it done Delete it!');
}
} elseif ($checkServiceCount < 1) {
$import = new DataImport($request->sname); $import = new DataImport($request->sname);
$data = Excel::import($import, $request->file('importfile')); $data = Excel::import($import, $request->file('importfile'));
$row = $import->getRowCount(); $row = $import->getRowCount();
$service = new Service;
$service->service_name = $request->sname;
$service->user_id = Auth::id();
$service->save();
return redirect('data-dirty')->with('row', $row); return redirect('data-dirty')->with('row', $row);
} else {
return redirect('data-import')->with('alert', 'Something went wrong!');
}
} }
public function dataCleaning() public function dataCleaning()
{ {
DB::select(DB::raw(" DB::select(DB::raw("
update data set phone = right(phone, length(phone)-1) where SUBSTRING(phone, 1, 1) = '0'
"));
update data SET phone = SUBSTR(phone,4,LENGTH(phone)) where SUBSTRING(phone, 1, 3) = '959' ; DB::select(DB::raw("
update data set phone = REGEXP_REPLACE(phone, '[^0-9]+', '');
"));
DB::select(DB::raw("
update data set phone = SUBSTR(phone,2) where SUBSTR(phone, 1, 1) = '0' ;
")); "));
DB::select(DB::raw(" DB::select(DB::raw("
update data SET phone = SUBSTR(phone,4,LENGTH(phone)) where SUBSTRING(phone, 1, 3) = '959' ;
"));
DB::select(DB::raw("
update data SET phone = SUBSTR(phone,3,LENGTH(phone)) where SUBSTRING(phone, 1, 2) = '95' and length(phone)=11 ; update data SET phone = SUBSTR(phone,3,LENGTH(phone)) where SUBSTRING(phone, 1, 2) = '95' and length(phone)=11 ;
"));
DB::select(DB::raw("
update data SET phone = SUBSTR(phone,2,LENGTH(phone)) where SUBSTRING(phone, 1, 1) = '9' and length(phone)=10 ;
")); "));
DB::select(DB::raw(" DB::select(DB::raw("
delete from data where length(phone) > 13
"));
update data SET phone = SUBSTR(phone,2,LENGTH(phone)) where SUBSTRING(phone, 1, 1) = '9' and length(phone)=10 ; DB::select(DB::raw("
delete from data where length(phone) < 6
"));
DB::select(DB::raw("
update data set date = '2020-01-01' where date = '';
")); "));
} }
public function getDirtyData() public function getDirtyData()
{ {
$data = DB::table('data')->get(); $data = DB::table('data')
// ->where('operator', '=', null)
// ->orWhere('operator', '=', "")
// ->whereRaw('length(phone) > 9')
->get();
return DataTables::of($data)->make(true); return DataTables::of($data)->make(true);
} }
public function dataExport()
{
$filename = 'phone_' . date("Y-m-d s") . '.csv';
return Excel::download(new DatasExport, '' . $filename . '');
}
public function removeData()
{
Service::where('user_id', Auth::id())->delete();
Data::truncate();
}
public function getOperator()
{
DB::select(DB::raw("
update data set operator = 'telenor' where SUBSTRING(phone, 1, 2) >= '74' and SUBSTRING(phone, 1, 2) <= '79'
"));
DB::select(DB::raw("
update data set operator = 'ooredoo' where SUBSTRING(phone, 1, 2) >= '90' and SUBSTRING(phone, 1, 2) <= '99'
"));
DB::select(DB::raw("
update data set operator = 'mytel' where SUBSTRING(phone, 1, 2) >= '60' and SUBSTRING(phone, 1, 2) <= '69'
"));
DB::select(DB::raw("
update data set operator = 'mec' where SUBSTRING(phone, 1, 2) in ('93','73')
"));
DB::select(DB::raw("
update data set operator = 'mec' where SUBSTRING(phone, 1, 2) >= '30' and SUBSTRING(phone, 1, 2) <= '39'
"));
DB::select(DB::raw("
update data set operator = 'mpt' where operator is null
"));
}
} }
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
...@@ -4,8 +4,11 @@ namespace App\Imports; ...@@ -4,8 +4,11 @@ namespace App\Imports;
use App\Models\Data; use App\Models\Data;
use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use PhpOffice\PhpSpreadsheet\Shared\Date;
class DataImport implements ToModel class DataImport implements ToModel, WithBatchInserts, WithChunkReading
{ {
/** /**
* @param array $row * @param array $row
...@@ -23,9 +26,18 @@ class DataImport implements ToModel ...@@ -23,9 +26,18 @@ class DataImport implements ToModel
public function model(array $row) public function model(array $row)
{ {
++$this->rows; ++$this->rows;
if (!isset($row[1])) {
$date = "";
} else {
$date = Date::excelToDateTimeObject($row[1])->format('Y-m-d');
}
return new Data([ return new Data([
'phone' => $row[0], 'phone' => $row[0],
'service' => $this->sname, 'service' => $this->sname,
// 'date' => $row[1]
'date' => $date
]); ]);
} }
...@@ -33,4 +45,14 @@ class DataImport implements ToModel ...@@ -33,4 +45,14 @@ class DataImport implements ToModel
{ {
return $this->rows; return $this->rows;
} }
public function batchSize(): int
{
return 1000;
}
public function chunkSize(): int
{
return 1000;
}
} }
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Model;
class Data extends Pivot class Data extends Model
{ {
protected $fillable = ['phone', 'service', 'operator']; protected $fillable = ['phone', 'service', 'operator', 'date'];
} }
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
protected $fillable = ['service_name', 'user_id'];
}
...@@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider ...@@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider
* *
* @var string * @var string
*/ */
public const HOME = '/home'; public const HOME = '/';
/** /**
* The controller namespace for the application. * The controller namespace for the application.
......
...@@ -18,6 +18,7 @@ class CreateDataTable extends Migration ...@@ -18,6 +18,7 @@ class CreateDataTable extends Migration
$table->string('phone'); $table->string('phone');
$table->string('service'); $table->string('service');
$table->string('operator')->nullable(); $table->string('operator')->nullable();
$table->string('date')->nullable()->default('2020-01-01');
$table->timestamps(); $table->timestamps();
}); });
} }
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateServiceTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('services', function (Blueprint $table) {
$table->id();
$table->string('service_name');
$table->string('user_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('service');
}
}
...@@ -21,7 +21,5 @@ ...@@ -21,7 +21,5 @@
"sass": "^1.32.11", "sass": "^1.32.11",
"sass-loader": "^11.0.1" "sass-loader": "^11.0.1"
}, },
"dependencies": { "dependencies": []
}
} }
window._ = require("lodash"); window._ = require('lodash');
/** /**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support * We'll load jQuery and the Bootstrap jQuery plugin which provides support
...@@ -7,10 +7,10 @@ window._ = require("lodash"); ...@@ -7,10 +7,10 @@ window._ = require("lodash");
*/ */
try { try {
window.Popper = require("popper.js").default; window.Popper = require('popper.js').default;
window.$ = window.jQuery = require("jquery"); window.$ = window.jQuery = require('jquery');
require("bootstrap"); require('bootstrap');
} catch (e) {} } catch (e) {}
/** /**
...@@ -19,9 +19,9 @@ try { ...@@ -19,9 +19,9 @@ try {
* CSRF token as a header based on the value of the "XSRF" token cookie. * CSRF token as a header based on the value of the "XSRF" token cookie.
*/ */
window.axios = require("axios"); window.axios = require('axios');
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/** /**
* Echo exposes an expressive API for subscribing to channels and listening * Echo exposes an expressive API for subscribing to channels and listening
......
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Confirm Password') }}</div>
<div class="card-body">
{{ __('Please confirm your password before continuing.') }}
<form method="POST" action="{{ route('password.confirm') }}">
@csrf
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Confirm Password') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<form method="POST" action="{{ route('password.email') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Send Password Reset Link') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Reset Password') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Register') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('register') }}">
@csrf
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Verify Your Email Address') }}</div>
<div class="card-body">
@if (session('resent'))
<div class="alert alert-success" role="alert">
{{ __('A fresh verification link has been sent to your email address.') }}
</div>
@endif
{{ __('Before proceeding, please check your email for a verification link.') }}
{{ __('If you did not receive the email') }},
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
@csrf
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
<th>Id</th> <th>Id</th>
<th>Phone</th> <th>Phone</th>
<th>Service</th> <th>Service</th>
<th>Operator</th>
<th>Date</th>
<th>Created At</th> <th>Created At</th>
<th>Updated At</th> <th>Updated At</th>
</tr> </tr>
...@@ -47,18 +49,46 @@ ...@@ -47,18 +49,46 @@
dom: "<'row'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-4'B><'col-sm-12 col-md-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", dom: "<'row'<'col-sm-12 col-md-2'l><'col-sm-12 col-md-4'B><'col-sm-12 col-md-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]], lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]],
buttons: [ buttons: [
{ extend: 'excel', className: 'mr-3 mydtbtn' }, // { extend: 'excel', className: 'mr-3 mydtbtn' },
{ extend: 'csv', className: 'mr-3 mydtbtn' }, // { extend: 'csv',text: 'Export CSV', className: 'mr-3 mydtbtn' },
{ {
text: 'Clean', text: 'Clean',
className: 'mr-2 mydtbtn',
action: function ( e, dt, node, config ) { action: function ( e, dt, node, config ) {
axios.get('{!! url('dataCleaning') !!}') axios.get('{!! url('dataCleaning') !!}')
.then(({data}) => { .then(({data}) => {
this.ajax.reload(); this.ajax.reload();
}) })
}, },
className: 'mydtbtn' },
} {
text: 'Get Operator',
className: 'mr-2 mydtbtn',
action: function ( e, dt, node, config ) {
axios.get('{!! url('getOperator') !!}')
.then(({data}) => {
this.ajax.reload();
})
},
},
{
text: 'CSV(phone)',
className: 'mr-2 mydtbtn',
action: function ( e, dt, node, config ) {
window.open('{!! url('dataExport') !!}')
},
},
{
text: 'Del',
className: 'mydtbtn',
action: function ( e, dt, node, config ) {
axios.get('{!! url('removeData') !!}')
.then(({data}) => {
this.ajax.reload();
})
},
},
], ],
responsive: true, responsive: true,
processing: true, processing: true,
...@@ -68,6 +98,8 @@ ...@@ -68,6 +98,8 @@
{ data: 'id', name: 'id' }, { data: 'id', name: 'id' },
{ data: 'phone', name: 'phone' }, { data: 'phone', name: 'phone' },
{ data: 'service', name: 'service' }, { data: 'service', name: 'service' },
{ data: 'operator', name: 'operator' },
{ data: 'date', name: 'date' },
{ data: 'created_at', name: 'created_at' }, { data: 'created_at', name: 'created_at' },
{ data: 'updated_at', name: 'updated_at' } { data: 'updated_at', name: 'updated_at' }
] ]
......
@extends('welcome') @extends('welcome')
@section('content') @section('content')
<div class="mt-5"> <div class="my-3">
@if(session('alert'))
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>{{ session('alert') }} </strong>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
@endif
</div>
<div class="mt-3">
<form action="{{ route('toimport') }}" method="post" enctype="multipart/form-data"> <form action="{{ route('toimport') }}" method="post" enctype="multipart/form-data">
@csrf @csrf
...@@ -15,8 +25,10 @@ ...@@ -15,8 +25,10 @@
</div> </div>
<div class="custom-file mb-3"> <div class="custom-file mb-3">
<input type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" class="custom-file-input" name="importfile" id="file" required> {{-- <input type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" class="custom-file-input" name="importfile" id="file" required>
<label class="custom-file-label" for="file">Choose File</label> <label class="custom-file-label" for="file">Choose File</label> --}}
<input type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" name="importfile" required>
</div> </div>
<button class="btn btn-primary">Upload</button> <button class="btn btn-primary">Upload</button>
......
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav mr-auto">
</ul>
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
@if (Route::has('login'))
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav>
<main class="py-4">
@yield('content')
</main>
</div>
</body>
</html>
...@@ -33,6 +33,20 @@ ...@@ -33,6 +33,20 @@
<li class="nav-item {{ (request()->is('data-dirty')) ? 'active' : '' }}"> <li class="nav-item {{ (request()->is('data-dirty')) ? 'active' : '' }}">
<a class="nav-link" href="{{ url('data-dirty') }}">To Data Clean</a> <a class="nav-link" href="{{ url('data-dirty') }}">To Data Clean</a>
</li> </li>
<li class="nav-item active">
<a class="nav-link text-warning" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</li>
</ul> </ul>
</div> </div>
...@@ -46,12 +60,12 @@ ...@@ -46,12 +60,12 @@
<script src="{{ asset('js/datatable/dataTables.bootstrap4.min.js') }}"></script> <script src="{{ asset('js/datatable/dataTables.bootstrap4.min.js') }}"></script>
<script src="{{ asset('js/datatable/dataTables.buttons.min.js') }}"></script> <script src="{{ asset('js/datatable/dataTables.buttons.min.js') }}"></script>
<script src="{{ asset('js/datatable/buttons.bootstrap4.min.js') }}"></script> <script src="{{ asset('js/datatable/buttons.bootstrap4.min.js') }}"></script>
<script src="{{ asset('js/datatable/jszip.min.js') }}"></script> {{-- <script src="{{ asset('js/datatable/jszip.min.js') }}"></script> --}}
<script src="{{ asset('js/datatable/pdfmake.min.js') }}"></script> {{-- <script src="{{ asset('js/datatable/pdfmake.min.js') }}"></script> --}}
<script src="{{ asset('js/datatable/vfs_fonts.js') }}"></script> <script src="{{ asset('js/datatable/vfs_fonts.js') }}"></script>
<script src="{{ asset('js/datatable/buttons.html5.min.js') }}"></script> <script src="{{ asset('js/datatable/buttons.html5.min.js') }}"></script>
<script src="{{ asset('js/datatable/buttons.print.min.js') }}"></script> {{-- <script src="{{ asset('js/datatable/buttons.print.min.js') }}"></script> --}}
<script src="{{ asset('js/datatable/buttons.colVis.min.js') }}"></script> {{-- <script src="{{ asset('js/datatable/buttons.colVis.min.js') }}"></script> --}}
......
<?php <?php
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DataController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Web Routes | Web Routes
...@@ -13,12 +14,25 @@ use Illuminate\Support\Facades\Route; ...@@ -13,12 +14,25 @@ use Illuminate\Support\Facades\Route;
| |
*/ */
Route::get('/', [App\Http\Controllers\DataController::class, 'index']); Auth::routes();
Route::middleware('auth')->group(function () {
Route::get('/', [DataController::class, 'index']);
Route::get('data-import', [DataController::class, 'import'])->name('import');
Route::post('toimport', [DataController::class, 'toimport'])->name('toimport');
Route::get('toimport', [DataController::class, 'toimport'])->name('toimport');
Route::get('data-dirty', [DataController::class, 'dirtyData']);
Route::get('getDirtyData', [DataController::class, 'getDirtyData']);
Route::get('dataCleaning', [DataController::class, 'dataCleaning']);
Route::get('dataExport', [DataController::class, 'dataExport']);
// Route::get('serviceExport', [DataController::class, 'serviceExport']);
Route::get('getOperator', [DataController::class, 'getOperator']);
Route::get('data-import', [App\Http\Controllers\DataController::class, 'import'])->name('import');
Route::post('toimport', [App\Http\Controllers\DataController::class, 'toimport'])->name('toimport');
Route::get('toimport', [App\Http\Controllers\DataController::class, 'toimport'])->name('toimport');
Route::get('data-dirty', [App\Http\Controllers\DataController::class, 'dirtyData']); Route::get('removeData', [DataController::class, 'removeData']);
Route::get('getDirtyData', [App\Http\Controllers\DataController::class, 'getDirtyData']); });
Route::get('dataCleaning', [App\Http\Controllers\DataController::class, 'dataCleaning']);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment