diff --git a/Gruntfile.js b/Gruntfile.js index 7fe30cee..ef54fe49 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -18,6 +18,7 @@ var jsMain = [ // 'node_modules/jQuery-QueryBuilder/dist/js/jquery-builder.standalone.min.js', /* 'node_modules/jQuery-QueryBuilder/dist/i18n/query-builder.fr.js', */ /* 'node_modules/isotope-layout/dist/isotope.pkgd.min.js', */ + 'node_modules/jquery-serializejson/jquery.serializejson.min.js', 'node_modules/bootstrap4-toggle/js/bootstrap4-toggle.min.js', 'node_modules/wew.js/dist/wew.min.js', 'node_modules/jquery.are-you-sure/jquery.are-you-sure.js', diff --git a/app/DataTables/ParentDataTable.php b/app/DataTables/ParentDataTable.php index 2a546aea..b7d145e8 100644 --- a/app/DataTables/ParentDataTable.php +++ b/app/DataTables/ParentDataTable.php @@ -10,6 +10,10 @@ use Yajra\DataTables\Services\DataTable; class ParentDataTable extends DataTable { + public $rowReorder; + public $colReorder; // ['selector' => 'tr'] + public $fixedColumns; // ['leftColumns' => 1, 'rightColumns' => 1] + /** * Build DataTable class. * @@ -18,7 +22,12 @@ class ParentDataTable extends DataTable */ public function dataTable($query) { - return $this->addButtons(datatables()->eloquent($query)); + return $this->modifier(datatables()->eloquent($query)); + } + + public function modifier($datatables) + { + return $this->addButtons($datatables); } /** @@ -46,11 +55,11 @@ class ParentDataTable extends DataTable public function makeColumnButtons() { return Column::computed('action') + ->title('') ->exportable(false) ->printable(false) ->searchable(false) - ->width(120) - ->addClass('text-center'); + ->addClass('text-center text-nowrap'); } /** @@ -86,19 +95,30 @@ class ParentDataTable extends DataTable ->setTableId($id) ->parameters($this->getParameters()) ->columns($this->getColumns()) - ->minifiedAjax() + ->ajax(['data' => "function(d) { d.filters = $('#filters').serializeJSON(); }"]) ->dom($this->getDom()) ->orderBy(0,'asc') - ->buttons( - Button::make('export'), - Button::make('print') - ); + ->buttons($this->getButtons()); + } + + public function getButtons() { + return [ + Button::make('export'), + Button::make('print'), + Button::make('colvis'), + Button::make('columnsToggle') + ]; } public function getParameters() { return [ - 'pageLength' => 10 + 'pageLength' => 5, + 'scrollX' => true, + 'scrollCollapse' => true, + 'colReorder' => $this->colReorder, + 'rowReorder' => $this->rowReorder, + 'fixedColumns' => $this->fixedColumns, ]; } @@ -106,7 +126,7 @@ class ParentDataTable extends DataTable { $dom = ''; // $dom .= $this->getDatatablesHeaderDefault(); - $dom .= "tr"; + $dom .= "<'overlay-block'r>"; $dom .= $this->getDatatablesFooterDefault(); return $dom; } @@ -136,7 +156,7 @@ class ParentDataTable extends DataTable } public function getDatatablesFooterDefault() { - return "<'row dt-toolbar-footer'<'col-md-6'i><'col-md-6'p>>"; + return "<'row pt-3 dt-toolbar-footer'<'col-md-6'i><'col-md-6'p>>"; } /** @@ -154,8 +174,8 @@ class ParentDataTable extends DataTable * * @return string */ - protected function buildFilename($models_name) + protected function buildFilename($name) { - return $models_name . '_' . date('YmdHis'); + return $name . '_' . date('YmdHis'); } } \ No newline at end of file diff --git a/app/DataTables/Shop/CategoriesDataTable.php b/app/DataTables/Shop/CategoriesDataTable.php index 2eb3d2e9..30d528bd 100644 --- a/app/DataTables/Shop/CategoriesDataTable.php +++ b/app/DataTables/Shop/CategoriesDataTable.php @@ -12,6 +12,7 @@ class CategoriesDataTable extends DataTable public function query(Category $model) { + $model = $model::withCount('articles'); return self::buildQuery($model); } @@ -19,6 +20,7 @@ class CategoriesDataTable extends DataTable { return [ Column::make('name')->title('Nom'), + Column::make('articles_count')->title('Nb Articles')->class('text-right')->searchable(false), self::makeColumnButtons(), ]; } diff --git a/app/DataTables/Shop/TagsDataTable.php b/app/DataTables/Shop/TagsDataTable.php index 3ceaafbc..2cec0db2 100644 --- a/app/DataTables/Shop/TagsDataTable.php +++ b/app/DataTables/Shop/TagsDataTable.php @@ -9,6 +9,7 @@ use App\Models\Shop\Tag; class TagsDataTable extends DataTable { public $model_name = 'Tags'; + public $rowReorder = ['selector' => 'tr']; public function query(Tag $model) { diff --git a/app/Http/Controllers/Shop/Admin/CategoryController.php b/app/Http/Controllers/Shop/Admin/CategoryController.php index 14dc9157..b8180a76 100644 --- a/app/Http/Controllers/Shop/Admin/CategoryController.php +++ b/app/Http/Controllers/Shop/Admin/CategoryController.php @@ -72,4 +72,12 @@ class CategoryController extends Controller return Categories::deleteImage($id, $index); } + public function moveTree(Request $request) + { + $node_id = $request->input('node_id'); + $target_id = $request->input('target_id'); + $type = $request->input('type'); + return Categories::moveTree($node_id, $target_id, $type); + } + } diff --git a/app/Models/Shop/Category.php b/app/Models/Shop/Category.php index 72c575c9..facf8140 100644 --- a/app/Models/Shop/Category.php +++ b/app/Models/Shop/Category.php @@ -5,7 +5,7 @@ namespace App\Models\Shop; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; -use Rinvex\Categories\Traits\Categorizable; +// use Rinvex\Categories\Traits\Categorizable; use Rinvex\Tags\Traits\Taggable; // use Conner\Tagging\Taggable; use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin; @@ -18,14 +18,9 @@ class Category extends Model protected $guarded = ['id']; protected $table = 'shop_categories'; - public function Category() + public function Articles() { - return $this->hasMany('App\Models\Category'); - } - - public function Products() - { - return $this->hasMany('App\Models\Shop\Product'); + return $this->morphedByMany('App\Models\Shop\Article', 'categorizable'); } } \ No newline at end of file diff --git a/app/Repositories/Shop/Categories.php b/app/Repositories/Shop/Categories.php index 90333749..47985913 100644 --- a/app/Repositories/Shop/Categories.php +++ b/app/Repositories/Shop/Categories.php @@ -99,6 +99,11 @@ class Categories return "1"; } + public static function moveTree($node_id, $target_id, $type) + { + return CategoryTrees::moveTree($node_id, $target_id, $type); + } + public static function create($data) { $node = CategoryTrees::create($data); diff --git a/app/Repositories/Shop/CategoryTrees.php b/app/Repositories/Shop/CategoryTrees.php index 474ed98c..9460afca 100644 --- a/app/Repositories/Shop/CategoryTrees.php +++ b/app/Repositories/Shop/CategoryTrees.php @@ -8,7 +8,7 @@ class CategoryTrees { public static function getTree() { - $categories = app('rinvex.categories.category')->get()->toTree()->toArray(); + $categories = app('rinvex.categories.category')->orderBy('_lft','asc')->get()->toTree()->toArray(); return self::getChildren($categories[0]['children']); } @@ -29,6 +29,25 @@ class CategoryTrees return $tree; } + public static function moveTree($node_id, $target_id, $type) + { + $category = self::getNode($node_id); + $category_target = self::getNode($target_id); + + switch ($type) { + case 'after': + dump("$node_id After $target_id"); + $category->afterNode($category_target); + break; + case 'inside': + dump("$node_id inside $target_id"); + $category_target->appendNode($category); + break; + } + $category->save(); + return "1"; + } + public static function create($data) { diff --git a/resources/views/Shop/Admin/Categories/partials/tree.blade.php b/resources/views/Shop/Admin/Categories/partials/tree.blade.php index 7421714a..f33b16a6 100644 --- a/resources/views/Shop/Admin/Categories/partials/tree.blade.php +++ b/resources/views/Shop/Admin/Categories/partials/tree.blade.php @@ -13,12 +13,58 @@ @push('scripts') @endpush diff --git a/resources/views/load/fancytree.blade.php b/resources/views/load/fancytree.blade.php index 79011672..08df351e 100644 --- a/resources/views/load/fancytree.blade.php +++ b/resources/views/load/fancytree.blade.php @@ -7,7 +7,7 @@