Capitulo 7 del Módulo 2 Panel de Administración

➜ Implementación CRUD Pedidos

Implementación de la 7 | Implementación de la Sección administrativa para Pedidos, Modelo Pedido y Detalle, Controlador, Vistas y rutas

Implementación de la Sección administrativa para Pedidos, Modelo Pedido y Detalle, Controlador, Vistas y rutas

Model Pedido.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Pedido extends Model
{
    use HasFactory;
    protected $fillable = [
        'subtotal',
        'impuesto',
        'total',
        'fechapedido',
        'procedencia',
        'estado',
        'user_id'
    ];
    public function detalles(){
        return $this->hasMany(Detalle::class);
    }
    
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

 

Migración

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('pedidos', function (Blueprint $table) {
            $table->id();
            $table->decimal('subtotal',7,2);
            $table->decimal('impuesto',7,2);
            $table->decimal('total',7,2);            
            $table->datetime('fechapedido');
            $table->enum('procedencia',["web","app"])->default("app");
            $table->enum('estado',["nuevo","proceso","entregado"])->default("nuevo");
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('pedidos');
    }
};

 

Controlador

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Pedido;

class PedidoController extends Controller
{
    public function index(){
        $pedidos = Pedido::orderByDesc("updated_at")->get();
        return view('admin.pedido.index', compact("pedidos") );
    }

    public function edit($id){
        $pedido = Pedido::find($id);
        return view('admin.pedido.edit', compact("pedido") );
    }

    public function update(Request $request, $id){
        $pedido =Pedido::findOrFail($id);
        $pedido->fill($request->all());
        $pedido->save();
        return redirect('admin/pedido');
    }
    
}

 

 

Vista index.blade.php

@extends('layouts.admin')
@section('content')
<div class="container">
    <div class="row justify-content-center">
    @include("admin.menu")
        <div class="col-sm-8">   
            <h1 class="mt-3 mb-3 fs-4">SECCIÓN PEDIDOS</h1>
            @if ($pedidos->count())
            <table class="table table-bordered">
                <tr>
                    <th>ID</th>
                    <th>CLIENTE</th>
                    <th>FECHA PEDIDO</th>
                    <th>PROCEDENCIA</th>
                    <th>TOTAL USD</th>                    
                    <th>ESTADO</th>
                    <th>ACCIÓN</th>
                </tr>
                @forelse ($pedidos as $c)
                <tr>
                    <td>{{$c->id}}</td>
                    <td>{{$c->user->name}}</td>
                    <td>{{$c->fechapedido}}</td>
                    <td>{{$c->procedencia}}</td>
                    <td>{{$c->total}}</td>
                    <td>{{$c->estado}}</td>
                    <td>
                        <a href="{{route("admin.pedido.edit",$c->id)}}" class="btn btn-success">Ver detalle</a>
                    </td>
                </tr>
                @empty
                    <tr><td></td></tr>
                @endforelse
            </table>
                
            @endif
        </div>
    </div>
</div>
@endsection

 

Vista edit.blade.php

@extends('layouts.admin')
@section('content')
<div class="container">
    <div class="row justify-content-center">
    @include("admin.menu")
        <div class="col-sm-8"> 
            <div class="card">
                <div class="card-header">
                    <div class="row">
                        <div class="col-sm-6">
                            <h1 class="fs-4" >PEDIDO N: {{$pedido->id}} {{strtoupper($pedido->estado)}}</h1>
                        </div>
                        <div class="col-sm-6">
                            {!! Form::open(['route'=>['admin.pedido.update',$pedido],'method'=>'PUT']) !!}
                            <div class="row">
                                <div class="col-6">
                                    {!! Form::select('estado',["nuevo"=>"Nuevo","proceso"=>"Proceso","entregado"=>"Entregado"],$pedido->estado,['class'=>'form-control','required']) !!}
                                </div>
                                <div class="col-6">
                                    {{ Form::submit('ACTUALIZAR',['class'=>'btn btn-success w-100']) }}
                                </div>
                            </div>
                            {!! Form::close() !!}
                        </div>
                    </div>
                </div>
                <div class="card-body">
                    <ul class="list-group">
                        <li class="list-group-item">Cliente: {{$pedido->user->name}}</li>
                        <li class="list-group-item">Celular: {{$pedido->user->celular}}</li>
                        <li class="list-group-item">Email: {{$pedido->user->email}}</li>
                        <li class="list-group-item">Dirección: {{$pedido->user->direccion}}</li>
                        <li class="list-group-item">Fecha Pedido: {{$pedido->fechapedido}}</li>
                    </ul>
                </div>

                <table class="table table-striped">
                    <thead>
                        <th>Producto</th>
                        <th>Cantidad</th>
                        <th>Precio</th>
                        <th>Importe</th>
                    </thead>
                    <tbody>
                        @forelse ($pedido->detalles as $item)
                        <tr>
                            <td>{{$item->producto->nombre}}</td>
                            <td>{{$item->cantidad}}</td>
                            <td>{{$item->precio}}</td>
                            <td>{{$item->importe}}</td>
                        </tr>    
                        @empty
                            
                        @endforelse
                        <tr><td colspan="4" class="text-end">SubTotal: {{$pedido->subtotal}}</td></tr>
                        <tr><td colspan="4" class="text-end">Impuesto 18%: {{$pedido->impuesto}}</td></tr>
                        <tr><td colspan="4" class="text-end">Total: {{$pedido->total}}</td></tr>
                        
                    </tbody>
                </table>

            </div>
        </div>
        <a href="javascript: history.go(-1)" class="btn btn-outline-primary">Regresar</a>
    </div>
</div>
@endsection

 


1161 visitas

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú