Inicio » Cursos » App para Pizzería con delivery

Empezando el Proyecto

Panel de Administración

FrontEnd Diseño

Carrito de Compra

API Rest

Diseño de la App Android

Autenticación Android

Catálogo de Productos

Carrito de Compra Android

Extras

Curso App para Pizzería con delivery

Lección: 7 ➜ Implementación CRUD Pedidos

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

Lección 7: Implementación CRUD Pedidos

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

 


328 visitas

Descarga el código del proyecto

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

Descargar ahora

Más cursos que pueden interesarte

Más cursos

Codea Codea App

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

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023