Ver código fonte

Added voucher system

AVMG20 4 anos atrás
pai
commit
ed553674b2

+ 205 - 0
resources/views/admin/vouchers/create.blade.php

@@ -0,0 +1,205 @@
+@extends('layouts.main')
+
+@section('content')
+    <!-- CONTENT HEADER -->
+    <section class="content-header">
+        <div class="container-fluid">
+            <div class="row mb-2">
+                <div class="col-sm-6">
+                    <h1>Products</h1>
+                </div>
+                <div class="col-sm-6">
+                    <ol class="breadcrumb float-sm-right">
+                        <li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
+                        <li class="breadcrumb-item"><a href="{{route('admin.products.index')}}">Products</a></li>
+                        <li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.products.create')}}">Create</a>
+                        </li>
+                    </ol>
+                </div>
+            </div>
+        </div>
+    </section>
+    <!-- END CONTENT HEADER -->
+
+    <!-- MAIN CONTENT -->
+    <section class="content">
+        <div class="container-fluid">
+
+            <div class="row">
+                <div class="col-lg-6">
+                    <div class="card">
+                        <div class="card-body">
+                            <form action="{{route('admin.products.store')}}" method="POST">
+                                @csrf
+                                <div class="d-flex flex-row-reverse">
+                                    <div class="custom-control custom-switch">
+                                        <input type="checkbox" name="disabled" class="custom-control-input custom-control-input-danger" id="switch1">
+                                        <label class="custom-control-label" for="switch1">Disabled <i data-toggle="popover" data-trigger="hover" data-content="Will hide this option from being selected" class="fas fa-info-circle"></i></label>
+                                    </div>
+                                </div>
+
+                                <div class="row">
+                                    <div class="col-lg-6">
+                                        <div class="form-group">
+                                            <label for="name">Name</label>
+                                            <input value="{{old('name')}}" id="name" name="name" type="text"
+                                                   class="form-control @error('name') is-invalid @enderror"
+                                                   required="required">
+                                            @error('name')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                        <div class="form-group">
+                                            <label for="price">Price in credits</label>
+                                            <input value="{{old('price')}}" id="price" name="price"
+                                                   type="number"
+                                                   class="form-control @error('price') is-invalid @enderror"
+                                                   required="required">
+                                            @error('price')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                        <div class="form-group">
+                                            <label for="memory">Memory</label>
+                                            <input value="{{old('memory')}}" id="memory" name="memory"
+                                                   type="number"
+                                                   class="form-control @error('memory') is-invalid @enderror"
+                                                   required="required">
+                                            @error('memory')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                        <div class="form-group">
+                                            <label for="cpu">Cpu</label>
+                                            <input value="{{old('cpu')}}" id="cpu" name="cpu"
+                                                   type="number"
+                                                   class="form-control @error('cpu') is-invalid @enderror"
+                                                   required="required">
+                                            @error('cpu')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                        <div class="form-group">
+                                            <label for="swap">Swap</label>
+                                            <input value="{{old('swap')}}" id="swap" name="swap"
+                                                   type="number"
+                                                   class="form-control @error('swap') is-invalid @enderror"
+                                                   required="required">
+                                            @error('swap')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                        <div class="form-group">
+                                            <label for="description">Description <i data-toggle="popover" data-trigger="hover" data-content="This is what the users sees" class="fas fa-info-circle"></i></label>
+                                            <textarea id="description" name="description"
+                                                      type="text"
+                                                      class="form-control @error('description') is-invalid @enderror"
+                                                      required="required">{{old('description')}}</textarea>
+                                            @error('description')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+
+                                    </div>
+                                    <div class="col-lg-6">
+                                        <div class="form-group">
+                                            <label for="disk">Disk</label>
+                                            <input value="{{old('disk') ?? 1000}}" id="disk" name="disk"
+                                                   type="number"
+                                                   class="form-control @error('disk') is-invalid @enderror"
+                                                   required="required">
+                                            @error('disk')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+                                        <div class="form-group">
+                                            <label for="io">IO</label>
+                                            <input value="{{old('io') ?? 500}}" id="io" name="io"
+                                                   type="number"
+                                                   class="form-control @error('io') is-invalid @enderror"
+                                                   required="required">
+                                            @error('io')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+                                        <div class="form-group">
+                                            <label for="databases">Databases</label>
+                                            <input value="{{old('databases') ?? 1}}" id="databases"
+                                                   name="databases"
+                                                   type="number"
+                                                   class="form-control @error('databases') is-invalid @enderror"
+                                                   required="required">
+                                            @error('databases')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+                                        <div class="form-group">
+                                            <label for="backups">Backups</label>
+                                            <input value="{{old('backups') ?? 1}}" id="backups"
+                                                   name="backups"
+                                                   type="number"
+                                                   class="form-control @error('backups') is-invalid @enderror"
+                                                   required="required">
+                                            @error('backups')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+                                        <div class="form-group">
+                                            <label for="allocations">Allocations</label>
+                                            <input value="{{old('allocations') ?? 0}}"
+                                                   id="allocations" name="allocations"
+                                                   type="number"
+                                                   class="form-control @error('allocations') is-invalid @enderror"
+                                                   required="required">
+                                            @error('allocations')
+                                            <div class="invalid-feedback">
+                                                {{$message}}
+                                            </div>
+                                            @enderror
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="form-group text-right">
+                                    <button type="submit" class="btn btn-primary">
+                                        Submit
+                                    </button>
+                                </div>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </section>
+    <!-- END CONTENT -->
+
+
+
+@endsection

+ 161 - 0
resources/views/admin/vouchers/edit.blade.php

@@ -0,0 +1,161 @@
+@extends('layouts.main')
+
+@section('content')
+    <!-- CONTENT HEADER -->
+    <section class="content-header">
+        <div class="container-fluid">
+            <div class="row mb-2">
+                <div class="col-sm-6">
+                    <h1>Vouchers</h1>
+                </div>
+                <div class="col-sm-6">
+                    <ol class="breadcrumb float-sm-right">
+                        <li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
+                        <li class="breadcrumb-item"><a href="{{route('admin.products.index')}}">Vouchers</a></li>
+                        <li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.products.create')}}">Create</a>
+                        </li>
+                    </ol>
+                </div>
+            </div>
+        </div>
+    </section>
+    <!-- END CONTENT HEADER -->
+
+    <!-- MAIN CONTENT -->
+    <section class="content">
+        <div class="container-fluid">
+
+            <div class="row">
+                <div class="col-lg-6">
+                    <div class="card">
+                        <div class="card-header">
+                            <h5 class="card-title">
+                                <i class="fas fa-money-check-alt mr-2"></i>Voucher details
+                            </h5>
+                        </div>
+                        <div class="card-body">
+                            <form action="{{route('admin.vouchers.store')}}" method="POST">
+                                @csrf
+
+                                <div class="form-group">
+                                    <label for="memo">Memo</label>
+                                    <input value="{{old('memo')}}" placeholder="Summer break voucher" id="memo"
+                                           name="memo" type="text"
+                                           class="form-control @error('memo') is-invalid @enderror">
+                                    @error('memo')
+                                    <div class="text-danger">
+                                        {{$message}}
+                                    </div>
+                                    @enderror
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="credits">Credits *</label>
+                                    <input value="{{old('credits')}}" placeholder="500" id="credits"
+                                           name="credits" type="number" step="any" min="0"
+                                           max="999999"
+                                           class="form-control @error('credits') is-invalid @enderror">
+                                    @error('credits')
+                                    <div class="text-danger">
+                                        {{$message}}
+                                    </div>
+                                    @enderror
+                                </div>
+
+
+                                <div class="form-group">
+                                    <label for="code">Code *</label>
+                                    <div class="input-group">
+                                        <input value="{{old('code')}}" placeholder="SUMMER" id="code" name="code"
+                                               type="text"
+                                               class="form-control @error('code') is-invalid @enderror"
+                                               required="required">
+                                        <div class="input-group-append">
+                                            <button class="btn btn-info" onclick="setRandomCode()" type="button">
+                                                Random
+                                            </button>
+                                        </div>
+                                    </div>
+                                    @error('code')
+                                    <div class="text-danger">
+                                        {{$message}}
+                                    </div>
+                                    @enderror
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="uses">Uses *</label>
+                                    <div class="input-group">
+                                        <input value="{{old('uses') ?? 1}}" id="uses" min="1" max="2147483647"
+                                               name="uses" type="number"
+                                               class="form-control @error('uses') is-invalid @enderror"
+                                               required="required">
+                                        <div class="input-group-append">
+                                            <button class="btn btn-info" onclick="setMaxUses()" type="button">Max
+                                            </button>
+                                        </div>
+                                    </div>
+                                    @error('uses')
+                                    <div class="text-danger">
+                                        {{$message}}
+                                    </div>
+                                    @enderror
+                                </div>
+
+
+                                <div class="form-group">
+                                    <label for="expires_at">Expires at</label>
+                                    <input value="{{old('expires_at')}}" id="expires_at" name="expires_at"
+                                           type="datetime-local"
+                                           class="form-control @error('expires_at') is-invalid @enderror">
+                                    @error('expires_at')
+                                    <div class="text-danger">
+                                        {{$message}}
+                                    </div>
+                                    @enderror
+                                </div>
+
+
+                                <div class="form-group text-right">
+                                    <button type="submit" class="btn btn-primary">
+                                        Submit
+                                    </button>
+                                </div>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </section>
+    <!-- END CONTENT -->
+
+
+    <script>
+        function setMaxUses() {
+            let element = document.getElementById('uses')
+            element.value = element.max;
+            console.log(element.max)
+        }
+
+
+        function setRandomCode() {
+            let element = document.getElementById('code')
+            element.value = getRandomCode(36)
+        }
+
+        function getRandomCode(length) {
+            let result = '';
+            let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-';
+            let charactersLength = characters.length;
+            for (let i = 0; i < length; i++) {
+                result += characters.charAt(Math.floor(Math.random() *
+                    charactersLength));
+            }
+            return result;
+        }
+    </script>
+
+
+@endsection

+ 108 - 0
resources/views/admin/vouchers/index.blade.php

@@ -0,0 +1,108 @@
+@extends('layouts.main')
+
+@section('content')
+    <!-- CONTENT HEADER -->
+    <section class="content-header">
+        <div class="container-fluid">
+            <div class="row mb-2">
+                <div class="col-sm-6">
+                    <h1>Products</h1>
+                </div>
+                <div class="col-sm-6">
+                    <ol class="breadcrumb float-sm-right">
+                        <li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
+                        <li class="breadcrumb-item"><a class="text-muted"
+                                                       href="{{route('admin.products.index')}}">Products</a></li>
+                    </ol>
+                </div>
+            </div>
+        </div>
+    </section>
+    <!-- END CONTENT HEADER -->
+
+    <!-- MAIN CONTENT -->
+    <section class="content">
+        <div class="container-fluid">
+
+            <div class="card">
+
+                <div class="card-header">
+                    <div class="d-flex justify-content-between">
+                        <h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>Products</h5>
+                        <a href="{{route('admin.products.create')}}" class="btn btn-sm btn-primary"><i
+                                class="fas fa-plus mr-1"></i>Create new</a>
+                    </div>
+                </div>
+
+                <div class="card-body table-responsive">
+
+                    <table id="datatable" class="table table-striped">
+                        <thead>
+                        <tr>
+                            <th>Active</th>
+                            <th>Name</th>
+                            <th>Price</th>
+                            <th>Memory</th>
+                            <th>Cpu</th>
+                            <th>Swap</th>
+                            <th>Disk</th>
+                            <th>IO</th>
+                            <th>Databases</th>
+                            <th>Backups</th>
+                            <th>Allocations</th>
+                            <th>Servers</th>
+                            <th>Created at</th>
+                            <th></th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+
+                </div>
+            </div>
+
+
+        </div>
+        <!-- END CUSTOM CONTENT -->
+
+    </section>
+    <!-- END CONTENT -->
+
+    <script>
+        function submitResult() {
+            return confirm("Are you sure you wish to delete?") !== false;
+        }
+
+        document.addEventListener("DOMContentLoaded", function () {
+            $('#datatable').DataTable({
+                processing: true,
+                serverSide: true,
+                stateSave: true,
+                ajax: "{{route('admin.products.datatable')}}",
+                columns: [
+                    {data: 'disabled'},
+                    {data: 'name'},
+                    {data: 'price'},
+                    {data: 'memory'},
+                    {data: 'cpu'},
+                    {data: 'swap'},
+                    {data: 'disk'},
+                    {data: 'io'},
+                    {data: 'databases'},
+                    {data: 'backups'},
+                    {data: 'allocations'},
+                    {data: 'servers', sortable: false},
+                    {data: 'created_at'},
+                    {data: 'actions', sortable: false},
+                ],
+                fnDrawCallback: function( oSettings ) {
+                    $('[data-toggle="popover"]').popover();
+                }
+            });
+        });
+    </script>
+
+
+
+@endsection

+ 240 - 0
resources/views/admin/vouchers/show.blade.php

@@ -0,0 +1,240 @@
+@extends('layouts.main')
+
+@section('content')
+    <!-- CONTENT HEADER -->
+    <section class="content-header">
+        <div class="container-fluid">
+            <div class="row mb-2">
+                <div class="col-sm-6">
+                    <h1>Products</h1>
+                </div>
+                <div class="col-sm-6">
+                    <ol class="breadcrumb float-sm-right">
+                        <li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
+                        <li class="breadcrumb-item"><a href="{{route('admin.users.index')}}">Products</a></li>
+                        <li class="breadcrumb-item"><a class="text-muted"
+                                                       href="{{route('admin.products.show' , $product->id)}}">Show</a>
+                        </li>
+                    </ol>
+                </div>
+            </div>
+        </div>
+    </section>
+    <!-- END CONTENT HEADER -->
+
+    <!-- MAIN CONTENT -->
+    <section class="content">
+        <div class="container-fluid">
+
+            <div class="card">
+                <div class="card-header d-flex justify-content-between">
+                    <h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>Product</h5>
+                    <div class="ml-auto">
+                        <a data-content="Edit" data-trigger="hover" data-toggle="tooltip" href="{{ route('admin.products.edit', $product->id) }}" class="btn btn-sm btn-info mr-1"><i class="fas fa-pen"></i></a>
+                        <form class="d-inline" onsubmit="return submitResult();" method="post" action="{{ route('admin.products.destroy', $product->id) }}">
+                            {{ csrf_field() }}
+                            {{ method_field("DELETE") }}
+                            <button data-content="Delete" data-trigger="hover" data-toggle="tooltip" class="btn btn-sm btn-danger mr-1"><i class="fas fa-trash"></i></button>
+                        </form>
+                    </div>
+                </div>
+                <div class="card-body">
+                    <div class="row">
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>ID</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->id}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Name</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->name}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Price</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           <i class="fas fa-coins mr-1"></i>{{$product->price}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Memory</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->memory}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>CPU</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->cpu}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Swap</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->swap}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Disk</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->disk}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>IO</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->io}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Databases</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->databases}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Allocations</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->allocations}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Created At</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->created_at ? $product->created_at->diffForHumans() : ''}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Description</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span class="d-inline-block text-truncate">
+                                           {{$product->description}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>Updated At</label>
+                                </div>
+                                <div class="col-lg-8">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           {{$product->updated_at ? $product->updated_at->diffForHumans() : ''}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+
+            <div class="card">
+                <div class="card-header">
+                    <h5 class="card-title"><i class="fas fa-server mr-2"></i>Servers</h5>
+                </div>
+                <div class="card-body table-responsive">
+
+                    @include('admin.servers.table' , ['filter' => '?product=' . $product->id])
+
+                </div>
+            </div>
+
+
+        </div>
+        <!-- END CUSTOM CONTENT -->
+        </div>
+    </section>
+    <!-- END CONTENT -->
+
+
+
+@endsection

+ 0 - 0
resources/views/models/redeem_voucher_modal.blade.php