jfrugone1970 / proyectolaravel

Sistema de Compras y Ventas en Laravel 5.7, Vue.js y Bootstrap
https://github.com/jfrugone1970/proyectolaravel
7 stars 3 forks source link

Controllers (Sistema de Compra y Venta de productos Proyecto en Laravel 5.7) #7

Open jfrugone1970 opened 4 years ago

jfrugone1970 commented 4 years ago

Para poder describir cada uno de los controladores que se usan en el sistema de compra y venta de productos en Laravel 5.7, Vue.js y Bootstrap 4.0 vamos con la teoría al respecto de los controladores:

Controladores Introducción Controladores básicos Definiendo Controladores Controladores y espacios de nombres Controladores de acción única Controlador Middleware Controladores de recursos Rutas de recursos parciales Nombramiento de rutas de recursos Nombrar parámetros de ruta de recursos Localización de URI de recursos Complementando Controladores de Recursos Inyección de dependencia y controladores Almacenamiento en caché de ruta

Introducción

En lugar de definir toda su lógica de manejo de solicitudes como Cierres en archivos de ruta, es posible que desee organizar este comportamiento utilizando clases de Controlador. Los controladores pueden agrupar la lógica de manejo de solicitudes relacionadas en una sola clase. Los controladores se almacenan en el directorio.app/Http/Controllers

Controladores básicos Definiendo controladores

A continuación se muestra un ejemplo de una clase de controlador básico. Tenga en cuenta que el controlador extiende la clase de controlador base incluida con Laravel. La clase base proporciona algunos métodos convenientes, como el middlewaremétodo, que se puede usar para adjuntar middleware a las acciones del controlador:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

Puede definir una ruta a esta acción del controlador de la siguiente manera:

`Route::get('user/{id}', 'UserController@show');

Ahora, cuando una solicitud coincide con el URI de ruta especificado, se ejecutará el showmétodo en la UserControllerclase. Los parámetros de ruta también se pasarán al método.

Controladores de única acción

Si desea definir un controlador que solo maneja una sola acción, puede colocar un __invokemétodo único en el controlador:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class ShowProfile extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function __invoke($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

Al registrar rutas para controladores de acción única, no necesita especificar un método:

Route::get('user/{id}', 'ShowProfile');

Controlador Usando para el módulo de Categoría

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Categoria;

class CategoriaController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');

        $buscar= $request->buscar;
        $criterio= $request->criterio;

        if($buscar==''){

            $categorias= Categoria::orderBy('id','desc')->paginate(3);

        } else{

            $categorias= Categoria::where($criterio,'like','%'.$buscar.'%')->orderBy('id','desc')->paginate(3);
        }

        return[

            'pagination' => [
            'total'            => $categorias->total(),
            'current_page'     => $categorias->currentPage(),
            'per_page'         => $categorias->perPage(),
            'last_page'        => $categorias->lastPage(),
            'from'             => $categorias->firstItem(),
            'to'               => $categorias->lastItem(),

            ],

            'categorias' =>$categorias

        ];

    }

    public function listarPDF(){

        $categorias= Categoria::orderBy('id','desc')->get();

        $cont=Categoria::count();

        $pdf= \PDF::loadView('pdf.categoriaspdf',['categorias'=>$categorias,'cont'=>$cont]);
        return $pdf->download('categorias.pdf');
    }

    public function selectCategoria(Request $request){

        if(!$request->ajax()) return redirect('/');
        $categorias = Categoria::where('condicion','=','1')
        ->select('id','nombre')->orderBy('nombre','asc')->get(); 

        return ['categorias' => $categorias];
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $categoria= new Categoria();
        $categoria->nombre= $request->nombre;
        $categoria->descripcion= $request->descripcion;
        $categoria->condicion= '1';

        //inicio registrar imagen
        $exploded = explode(',',$request->imagen);
        $decoded = base64_decode($exploded[1]);

        if(str_contains($exploded[0],'jpeg')){

            $extension = 'jpg';

        } else {
            $extension = 'png';

        }

        $fileName = str_random().'.'.$extension;

        $path = public_path().'/img/categoria/'.$fileName;

        file_put_contents($path,$decoded);

        $categoria->imagen = $fileName;

        //fin registro imagen
        $categoria->save();
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $categoria= Categoria::findOrFail($request->id);
        $categoria->nombre= $request->nombre;
        $categoria->descripcion= $request->descripcion;
        $categoria->condicion= '1';

         //Editar imagen

         $currentPhoto = $categoria->imagen;

         if($request->imagen != $currentPhoto){

          $exploded = explode(',',$request->imagen);
             $decoded = base64_decode($exploded[1]);

             if(str_contains($exploded[0],'jpeg')){

                $extension = 'jpg';

             } else{

                $extension = 'png';

             }

             $fileName = str_random().'.'.$extension;

             $path = public_path().'/img/categoria/'.$fileName;

             file_put_contents($path,$decoded);

             /*Inicio eliminar del servidor*/
             $categoriaImagen = public_path('/img/categoria/').$currentPhoto;
             if(file_exists($categoriaImagen)){
                 @unlink($categoriaImagen);

             }

             $categoria->imagen = $fileName;

             /*fin eliminal del servidor*/

         }

        $categoria->save();
    }

    public function desactivar(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $categoria= Categoria::findOrFail($request->id);
        $categoria->condicion= '0';
        $categoria->save();
    }

    public function activar(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $categoria= Categoria::findOrFail($request->id);
        $categoria->condicion= '1';
        $categoria->save();
    }

}

Controlador Usado para el módulo de productos

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Producto;

class ProductoController extends Controller
{
    //
    public function index(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');

        $buscar= $request->buscar;
        $criterio= $request->criterio;

        if($buscar==''){

            $productos= Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->orderBy('productos.id', 'desc')->paginate(3);

        } else{

            $productos = Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->where('productos.'.$criterio, 'like', '%'. $buscar . '%')
            ->orderBy('productos.id', 'desc')->paginate(3);
        }

        return[

            'pagination' => [
            'total'            => $productos->total(),
            'current_page'     => $productos->currentPage(),
            'per_page'         => $productos->perPage(),
            'last_page'        => $productos->lastPage(),
            'from'             => $productos->firstItem(),
            'to'               => $productos->lastItem(),

            ],

            'productos' =>$productos

        ];

    }

    public function listarProductos(Request $request){

        //
        if(!$request->ajax()) return redirect('/');

        $buscar= $request->buscar;
        $criterio= $request->criterio;

        if($buscar==''){

            $productos= Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->orderBy('productos.id', 'desc')->paginate(3);

        } else{

            $productos = Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->where('productos.'.$criterio, 'like', '%'. $buscar . '%')
            ->orderBy('productos.id', 'desc')->paginate(3);
        }

        return['productos' =>$productos];

    }

    Public function listarProductoVenta(Request $request){

        if(!$request->ajax()) return redirect('/');

        $buscar= $request->buscar;
        $criterio= $request->criterio;

        if($buscar==''){

            $productos= Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->where('productos.stock','>','0')
            ->orderBy('productos.id', 'desc')->paginate(10);

        } else{

            $productos = Producto::join('categorias','productos.idcategoria','=','categorias.id')
            ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion','productos.imagen')
            ->where('productos.'.$criterio, 'like', '%'. $buscar . '%')
            ->where('productos.stock','>','0')
            ->orderBy('productos.id', 'desc')->paginate(10);
        }

        return['productos' =>$productos];

    }

    public function listarPDF(){

        $productos = Producto::join('categorias','productos.idcategoria','=','categorias.id')
        ->select('productos.id','productos.idcategoria','productos.codigo','productos.nombre','categorias.nombre as nombre_categoria','productos.precio_venta','productos.stock','productos.condicion')
        ->orderBy('productos.nombre', 'desc')->get();

        $cont=Producto::count();

        $pdf= \PDF::loadView('pdf.productospdf',['productos'=>$productos,'cont'=>$cont]);
        return $pdf->download('productos.pdf');

    }

    public function buscarProducto(Request $request){

        if (!$request->ajax()) return redirect('/');

        $filtro = $request->filtro;
        $productos = Producto::where('codigo','=', $filtro)
        ->select('id','nombre')->orderBy('nombre', 'asc')->take(1)->get();

        return ['productos' => $productos];

    }

    public function buscarProductoVenta(Request $request){
        if (!$request->ajax()) return redirect('/');

        $filtro = $request->filtro;
        $productos = Producto::where('codigo','=', $filtro)
        ->select('id','nombre','stock','precio_venta')
        ->where('stock','>','0')
        ->orderBy('nombre', 'asc')
        ->take(1)->get();

        return ['productos' => $productos];

    }

    public function store(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $producto= new Producto();
        $producto->idcategoria = $request->idcategoria;
        $producto->codigo = $request->codigo;
        $producto->nombre = $request->nombre;
        $producto->precio_venta = $request->precio_venta;
        $producto->stock = $request->stock;
        $producto->condicion = '1';

        //inicio registrar imagen
           $exploded = explode(',',$request->imagen);
           $decoded = base64_decode($exploded[1]);

           if(str_contains($exploded[0],'jpeg')){

               $extension = 'jpg';

           } else {
               $extension = 'png';

           }

           $fileName = str_random().'.'.$extension;

           $path = public_path().'/img/producto/'.$fileName;

           file_put_contents($path,$decoded);

           $producto->imagen = $fileName;

           //fin registro imagen

        $producto->save();
    }

    public function update(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $producto= Producto::findOrFail($request->id);
        $producto->idcategoria = $request->idcategoria;
        $producto->codigo = $request->codigo;
        $producto->nombre = $request->nombre;
        $producto->precio_venta = $request->precio_venta;
        $producto->stock = $request->stock;
        $producto->condicion = '1';

           //Editar imagen

           $currentPhoto = $producto->imagen;

           if($request->imagen != $currentPhoto){

            $exploded = explode(',',$request->imagen);
               $decoded = base64_decode($exploded[1]);

               if(str_contains($exploded[0],'jpeg')){

                  $extension = 'jpg';

               } else{

                  $extension = 'png';

               }

               $fileName = str_random().'.'.$extension;

               $path = public_path().'/img/producto/'.$fileName;

               file_put_contents($path,$decoded);

               /*Inicio eliminar del servidor*/
               $productoImagen = public_path('/img/producto/').$currentPhoto;
               if(file_exists($productoImagen)){
                   @unlink($productoImagen);

               }

               $producto->imagen = $fileName;

               /*fin eliminal del servidor*/

           }

           /*fin editar imagen*/

        $producto->save();
    }

    public function desactivar(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $producto= Producto::findOrFail($request->id);
        $producto->condicion= '0';
        $producto->save();
    }

    public function activar(Request $request)
    {
        //
        if(!$request->ajax()) return redirect('/');
        $producto= Producto::findOrFail($request->id);
        $producto->condicion= '1';
        $producto->save();
    }

}
AnaliaElianaSolisInchausty commented 4 years ago

cual es la contraseña para acceder al sistema

jfrugone1970 commented 4 years ago

El Usuario y contraseña para acceso al sistema es: Usuario: Admin1970 Contraseña: Josue2019 pero si se tiene el proyecto laravel cargado en xampp tiene que estar en el directorio c:/xampp/htdocs/proyectolaravel

De donde se puede descargar mi proyecto es en el siguiente link del repositorio de mi proyecto que es:

https://github.com/jfrugone1970/proyectolaravel

La base de mysql del proyecto laravel a descargar esta en el siguiente link o enlace:

https://github.com/jfrugone1970/base_proyectolaravel

jfrugone1970 commented 4 years ago

Estimada amiga Analia Eliana Solis Inchausty, ¡Buenas tardes!; soy propietario del proyecto Laravel, e indicaste que lo descargaste lo que te propongo algo que me contribuyas con un valor de $100 dólares por el uso de mi proyecto si es que no te molesta o podemos negociar la misma, o también te propongo que juntos si tienes conocidos para promocionar mi proyecto lo podamos venderlo y podemos tener una ganancia por la venta de la misma. Espero de que no te moleste.