]> _ Git - fluidbook-toolbox.git/commitdiff
wip #3753 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 26 Nov 2020 18:08:30 +0000 (19:08 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 26 Nov 2020 18:08:30 +0000 (19:08 +0100)
app/Http/Controllers/Admin/FluidbookQuoteCrudController.php
app/Http/Controllers/Admin/Operations/FluidbookQuote/AssignOperation.php
app/Http/Controllers/Admin/Operations/FluidbookQuote/ConfirmAssignmentOperation.php [new file with mode: 0644]
app/Mail/FluidbookQuoteAssign.php [new file with mode: 0644]
app/Models/FluidbookQuote.php
resources/views/vendor/backpack/crud/buttons/fluidbook_quote/assign.blade.php
resources/views/vendor/backpack/crud/buttons/fluidbook_quote/confirm_assignment.blade.php [new file with mode: 0644]

index 5816c71dd6826b20d42f6073e923bc3d127c97eb..90f63b8acef6f494eaec74fdcf9735722449cd76 100644 (file)
@@ -6,7 +6,6 @@ class FluidbookQuoteCrudController extends \Cubist\Backpack\app\Magic\Controller
 {
     use \App\Http\Controllers\Admin\Operations\FluidbookQuote\AssignOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookQuote\CreateFromWebsite;
-       use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
        use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
        use \Cubist\Backpack\app\Http\Controllers\Operations\BulkPublishOperation;
        use \Backpack\ReviseOperation\ReviseOperation;
index dc747147b9d08d12442067e364bf91e6fd1704ed..517a6cec40e40e4a8f08beba3ece39643600861d 100644 (file)
@@ -2,13 +2,18 @@
 
 namespace App\Http\Controllers\Admin\Operations\FluidbookQuote;
 
+use App\Mail\FluidbookQuoteAssign;
+use App\Mail\FluidbookQuoteReceived;
+use App\Models\FluidbookQuote;
+use App\Models\User;
+use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Facades\Route;
 
 trait AssignOperation
 {
     protected function setupAssignRoutes($segment, $routeName, $controller)
     {
-        Route::match(['get'], $segment . '/{id}/assign', $controller . '@assign');
+        Route::match(['post'], $segment . '/{id}/assign', $controller . '@assign');
     }
 
     protected function setupAssignDefaults()
@@ -18,6 +23,16 @@ trait AssignOperation
 
     protected function assign($id)
     {
+        $quote = FluidbookQuote::where('id', $id)->first();
+        $quote->reseller = request()->get('reseller');
+        $quote->status = 1;
+        $quote->admin = backpack_user()->id;
+        $quote->save();
 
+        if ($quote->reseller != $quote->admin) {
+            $quoteMail = new FluidbookQuoteAssign();
+            $quoteMail->setQuote($quote);
+            Mail::send($quoteMail);
+        }
     }
 }
diff --git a/app/Http/Controllers/Admin/Operations/FluidbookQuote/ConfirmAssignmentOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookQuote/ConfirmAssignmentOperation.php
new file mode 100644 (file)
index 0000000..4af77b6
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookQuote;
+
+use App\Mail\FluidbookQuoteAssign;
+use App\Mail\FluidbookQuoteReceived;
+use App\Models\FluidbookQuote;
+use App\Models\User;
+use Illuminate\Support\Facades\Mail;
+use Illuminate\Support\Facades\Redirect;
+use Illuminate\Support\Facades\Route;
+use Prologue\Alerts\Facades\Alert;
+
+trait ConfirmAssignmentOperation
+{
+    protected function setupConfirmassignmentRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['get'], $segment . '/{id}/confirm-assignment/{reseller}', $controller . '@confirmAssignment');
+    }
+
+    protected function setupConfirmassignmentDefaults()
+    {
+        $this->crud->addButtonFromView('line', 'confirm_assignment', 'fluidbook_quote.confirm_assignment', 'end');
+    }
+
+    protected function confirmAssignment($id, $resseler)
+    {
+        $quote = FluidbookQuote::where('id', $id)->first();
+        if ($quote->status == 1 && $quote->reseller === $resseler && $resseler === backpack_user()->id) {
+            $quote->status = 2;
+            $quote->save();
+            Alert::add('success', 'La prise en charge de la demande de devis a été prise en compte')->flash();
+        } else {
+            Alert::add('error', 'Une erreur s\'est produite.')->flash();
+        }
+        return Redirect::to('/');
+    }
+}
diff --git a/app/Mail/FluidbookQuoteAssign.php b/app/Mail/FluidbookQuoteAssign.php
new file mode 100644 (file)
index 0000000..7402a16
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+namespace App\Mail;
+
+use App\Models\FluidbookQuote;
+use App\Models\User;
+use Cubist\Locale\Country;
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class FluidbookQuoteAssign extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this;
+    }
+
+    public function setQuote(FluidbookQuote $quote)
+    {
+        $this->from('tech@fluidbook.com');
+        $reseller = User::where('id', $quote->reseller)->first();
+        $user = User::where('id', $quote->user)->first();
+        //$this->to($reseller->email);
+        $this->to('vincent+' . $quote->reseller . '@fluidbook.com');
+        $this->bcc('tech@fluidbook.com');
+        $this->subject('[Fluidbook Workshop] Demande de devis');
+
+        $confirmURL = 'http://toolbox.fluidbook.com/fluidbook-quote/' . $quote->id . '/confirm-assignment/' . $quote->reseller;
+
+        $this->html('<html><body><h3>---- Demande ----</h3>
+<p>' . nl2br($quote->message) . '<p>
+<h3>---- Coordonnées ----</h3>
+<ul>
+<li>Email : <a href="mailto:' . $user->email . '">' . $user->email . '</a></li>
+<li>Prenom : ' . $user->name . '</li>
+<li>Nom : ' . $user->lastname . '</li>
+<li>Entreprise : ' . $user->companyName . '</li>
+<li>Téléphone : ' . $user->phone . '</li>
+<li>Pays : ' . $user->address['country'] . '</li>
+</ul>
+<p>
+Afin de nous confirmer que vous prenez en compte cette demande, veuillez cliquer sur le lien ci-dessous :
+<a href="' . $confirmURL . '">' . $confirmURL . '</a>
+
+</p>
+<p>Si dans un délai de deux jours ouvrés, vous n\'avez pas accepté cette demande, nous nous réservons le droit de la prendre en charge.</p></body></html>');
+    }
+}
index b0bbeae86b01c7856a05563de9a50208d307ec98..65bac0462c3b2129911abc94bf6c935bc5f5e13f 100644 (file)
@@ -3,9 +3,8 @@
 
 namespace App\Models;
 
-
-use App\Http\Controllers\Admin\Base\FluidbookQuoteController;
 use App\Http\Controllers\Admin\Operations\FluidbookQuote\AssignOperation;
+use App\Http\Controllers\Admin\Operations\FluidbookQuote\ConfirmAssignmentOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookQuote\CreateFromWebsite;
 use Cubedesigners\UserDatabase\User;
 use Cubist\Backpack\app\Magic\Models\CubistMagicAbstractModel;
@@ -17,9 +16,10 @@ class FluidbookQuote extends CubistMagicAbstractModel
         'singular' => 'demande de devis',
         'plural' => 'demandes de devis'];
 
-    protected $_operations = [AssignOperation::class, CreateFromWebsite::class];
+    protected $_operations = [AssignOperation::class, CreateFromWebsite::class, ConfirmAssignmentOperation::class];
     protected $_enableClone = false;
     protected $_enableDeletion = false;
+    protected $_enableCreation = false;
 
     public function setFields()
     {
@@ -30,7 +30,7 @@ class FluidbookQuote extends CubistMagicAbstractModel
         $this->addField('links', 'Hidden');
         $this->addField('langs', 'Hidden');
 
-        $this->addField('user', 'SelectFromModel', 'Utilisateur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true]);
+        $this->addField('user', 'SelectFromModel', 'Utilisateur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true,]);
 
         $this->addField(['name' => 'created_at',
             'label' => 'Date',
@@ -39,22 +39,18 @@ class FluidbookQuote extends CubistMagicAbstractModel
             'column_type' => 'date',
             'column_format' => null]);
 
-        $this->addField(['name' => 'updated_at',
-            'label' => 'Mise à jour',
-            'type' => 'Hidden',
-            'column' => true,
-            'column_type' => 'date',
-            'column_format' => null]);
-
         $this->addField('message', 'Textarea', 'Message');
 
         $this->addField('gclid', 'Text', 'Google Adwords ID (gclid)');
 
         $this->addField('coupon', 'Text', 'Coupon');
 
-        $this->addField('admin', 'SelectFromModel', 'Administrateur', ['optionsmodel' => User::class, 'attribute' => 'firstname', 'column' => true]);
+        $this->addField('admin', 'SelectFromModel', 'Administrateur',
+            ['optionsmodel' => User::class, 'allows_null' => true, 'attribute' => 'nameWithCompany', 'column_attribute' => 'firstname', 'column' => true]
+        );
 
-        $this->addField('reseller', 'SelectFromModel', 'Revendeur', ['optionsmodel' => User::class, 'attribute' => 'companyName', 'column' => true]);
+        $this->addField('reseller', 'SelectFromModel', 'Confiée à',
+            ['optionsmodel' => User::class, 'allows_null' => true, 'attribute' => 'nameWithCompany', 'column_attribute' => 'companyName', 'column' => true]);
 
         $this->addField('status', 'SelectFromArray', 'Status', ['options' => [
             0 => 'Non traitée',
@@ -71,7 +67,7 @@ class FluidbookQuote extends CubistMagicAbstractModel
         ], 'column' => true]);
 
         $this->addField('origin_column', 'ModelAttribute', 'Origine', ['column' => true, 'attribute' => 'origin']);
-        $this->addField('fluidbooks', 'ModelAttribute', 'Fluidbooks', ['column' => true, 'attribute' => 'user.e1_ws_count']);
+        $this->addField('fluidbooks', 'ModelAttribute', 'Fluidbooks', ['column' => true, 'column_label' => '<img width="20" src="/images/icons/icon-fluidbook.svg">', 'attribute' => 'user.e1_ws_count']);
     }
 
     public function getOriginAttribute()
index 9777e7668d2711f5440f3d500fbb4d97e8a9ef19..45e21cc976bdea8124a9c6cc7feaf8f371c137af 100644 (file)
@@ -1,2 +1,83 @@
-<a class="btn btn-sm btn-link" href="{{$crud->route}}/{{$entry->getKey()}}/assign" data-toggle="tooltip"
-   title="Assign to"><i class="la la-arrow-circle-down"></i> Confier</a>
+@once
+    @php
+        $showjs=false;
+        if($crud->getValue('seenAssignJS')===null){
+           $showjs =true;
+           $crud->setValue('seenAssignJS',true);
+        }
+    @endphp
+    @if($showjs)
+        <style>
+            a.assignto {
+                position: relative;
+            }
+
+            select.assign {
+                opacity: 0;
+                width: 100%;
+                height: 100%;
+                position: absolute;
+                top: 0;
+                left: 0;
+                cursor: pointer;
+            }
+        </style>
+        <script>
+            jQuery(document).ready(function ($) {
+                $('select.assign').on('change', function () {
+                    var val = $(this).val();
+                    if (val <= 0 || val == null || val == 'null') {
+                        return;
+                    }
+                    var option = $(this).find('option[value="' + val + '"]').text();
+                    var id = $(this).data('id');
+                    console.log(id);
+                    swal({
+                        title: "Confier la demande de devis",
+                        text: "Vous avez choisi l'option \"" + option + "\"",
+                        icon: "info",
+                        buttons: {
+                            cancel: {
+                                text: "Annuler",
+                                value: null,
+                                visible: true,
+                                className: "bg-secondary",
+                                closeModal: true,
+                            },
+                            delete: {
+                                text: "Confirmer",
+                                value: true,
+                                visible: true,
+                                className: "bg-success",
+                            }
+                        },
+                    }).then((value) => {
+                        if (value) {
+                            $.ajax({
+                                url: '/fluidbook-quote/' + id + '/assign',
+                                type: 'POST',
+                                data: {reseller: val},
+                                success: function (result) {
+                                    window.location = '';
+                                }
+                            });
+                        }
+                    });
+
+                });
+            });
+        </script>
+    @endif
+@endonce
+
+@if($entry->status==0)
+    <a class="btn btn-sm btn-link assignto" href="#" data-toggle="tooltip"
+       title="Assign to"><i class="la la-user-check"></i> Confier
+        <select class="assign" data-id="{{$entry->getKey()}}">
+            <option value="null">-</option>
+            <option value="{{backpack_user()->id}}">Je vais traiter la demander</option>
+            <option value="94">Confier à Kadreo</option>
+        </select>
+    </a>
+
+@endif
diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/confirm_assignment.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/confirm_assignment.blade.php
new file mode 100644 (file)
index 0000000..7677974
--- /dev/null
@@ -0,0 +1,7 @@
+@if($entry->status==1 && $entry->reseller==backpack_user()->id)
+    <a class="btn btn-sm btn-link" href="/fluidbook-quote/{{$entry->id}}/confirm-assignment/{{$entry->reseller}}"
+       data-toggle="tooltip"
+       title="Confirmer le traitement de la demande"><i class="la la-user-check"></i> Demande traitée
+    </a>
+
+@endif