Display options with multiple select and check the options chosen in Laravel

1

I have a collection in the variable $paymentMethods with forms of payment:

AndIhaveanothercollectioninthe$timelinesvariablethathasaManytoManyrelationshipwiththepaymentmethods.Ineedtolistintheviewinaselecttheformsofpaymentavailableandmarktheselectedones.WithwhatIhavemadetheformsofpaymentavailablearerepeatedandaremarkedthepaymentmethodsofalltimelines.

Controller:

namespaceApp\Http\Controllers;useApp\Timeline;useApp\Order;useApp\PaymentMethod;useIlluminate\Http\Request;useIlluminate\Support\Facades\Auth;classTimelineControllerextendsController{publicfunctionindexCustomer($order,$supplier){$user=Auth::user();$typeUser=$user->userable_type;$order=Order::find($order);$paymentMethods=PaymentMethod::all();$paymentMethodsOrder=$order->paymentMethods->map(function($item,$key){return$item['name'];})->toArray();$timelines=Timeline::where('order_id',$order->id)->where('supplier_id',$supplier)->get();returnview('customer.order.timeline')->with('order',$order)->with('paymentMethods',$paymentMethods)->with('paymentMethodsOrder',$paymentMethodsOrder)->with('timelines',$timelines)->with('supplier',$supplier);}publicfunctionstoreCustomer(Request$request,$order,$supplier){$user=Auth::user();$typeUser=$user->userable_type;$order=Order::find($order);$paymentMethods=PaymentMethod::all();$paymentMethodsOrder=$order->paymentMethods->map(function($item,$key){return$item['name'];})->toArray();$timeline=newTimeline;$timeline->user_id=$user->id;$timeline->order_id=$order->id;$timeline->customer_id=$user->userable->id;$timeline->supplier_id=$supplier;$timeline->status=$request->status;$priceAverage=str_replace('.','',$request->price_average);$priceAverage=str_replace(',','.',$priceAverage);$priceAverage=floatval($priceAverage);$timeline->price_average=$priceAverage;$timeline->description=$request->description;$timeline->save();$timelines=Timeline::where('order_id',$order->id)->where('supplier_id',$supplier)->get();returnview('customer.order.timeline')->with('order',$order)->with('paymentMethods',$paymentMethods)->with('paymentMethodsOrder',$paymentMethodsOrder)->with('timelines',$timelines)->with('supplier',$supplier);}publicfunctionindexSupplier($order){$user=Auth::user();$typeUser=$user->userable_type;$order=Order::find($order);$paymentMethods=PaymentMethod::all();$paymentMethodsOrder=$order->paymentMethods->map(function($item,$key){return$item['id'];})->toArray();$timelines=Timeline::where('order_id',$order->id)->where('supplier_id',$user->userable->id)->get();returnview('supplier.order.timeline')->with('order',$order)->with('paymentMethods',$paymentMethods)->with('paymentMethodsOrder',$paymentMethodsOrder)->with('timelines',$timelines);}publicfunctionstoreSupplier(Request$request,$order){$user=Auth::user();$typeUser=$user->userable_type;$order=Order::find($order);if(Timeline::activeSupplierOrder($user->userable->id)->count()==0){$order->suppliers()->attach($user->userable->id);}$paymentMethods=PaymentMethod::all();$paymentMethodsOrder=$order->paymentMethods->map(function($item,$key){return$item['name'];})->toArray();$timeline=newTimeline;$timeline->user_id=$user->id;$timeline->order_id=$order->id;$timeline->supplier_id=$user->userable->id;$timeline->customer_id=$order->user->userable->id;$timeline->status=$request->status;$priceAverage=str_replace('.','',$request->price_average);$priceAverage=str_replace(',','.',$priceAverage);$priceAverage=floatval($priceAverage);$timeline->price_average=$priceAverage;$timeline->description=$request->description;$timeline->save();foreach($request->payment_methodsas$paymentMethodId){$timeline->paymentMethods()->attach($paymentMethodId);}$timelines=Timeline::where('order_id',$order->id)->where('supplier_id',$user->userable->id)->get();returnview('supplier.order.timeline')->with('timelines',$timelines)->with('order',$order)->with('paymentMethods',$paymentMethods)->with('paymentMethodsOrder',$paymentMethodsOrder);}}

View:

@extends('customer.app')@section('title','Histórico')@section('content')<divclass="row">
<div class="col-sm-12">
    <div class="timeline">

        <article class="timeline-item alt">
            <div class="text-right">
                <div class="time-show">
                    <a href="#" class="btn btn-custom w-lg">Histórico</a>
                </div>
            </div>
        </article>

        @foreach($timelines as $timeline)
            <article class="timeline-item @if($timeline->user_id == Auth::user()->id) alt @else "" @endif">
                <div class="timeline-desk">
                    <div class="panel m-t-20 m-b-20">
                        <div class="panel-body">
                            <span class="arrow-alt"></span>
                            <span class="timeline-icon bg-info"><i class="zmdi zmdi-circle"></i></span>
                            <p class="timeline-date text-muted"><small>{{ date( 'd/m/Y H:i' , strtotime($timeline->created_at)) }}</small></p>
                            <p class="m-t-10">Status: {{ $timeline->status }}</p>
                            @isset($timeline->price_average)
                                <p class="m-t-10">Valor: R$ {{ number_format($timeline->price_average, 2, ',', '.') }}</p>
                            @endisset
                            @isset($timeline->price_average)
                                @foreach($timeline->paymentMethods as $paymentMethod)
                                    <p class="m-t-10">{{ $paymentMethod['name'] }}</p>
                                @endforeach
                            @endisset
                            <p class="m-t-10">{{ $timeline->description }}</p>
                            <div class="btn-group dropup @if($timeline->user_id == Auth::user()->id) pull-right @else pull-left @endif m-t-10">
                                <a type="button" class="btn btn-primary" href="#" data-toggle="modal" data-target="#con-close-modal">Responder</a>
                            </div>
                        </div>
                    </div>
                </div>
            </article>
        @endforeach
    </div>
</div>
</div>

<!-- Modal -->
<div id="con-close-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<form class="form-horizontal" method="POST" action="{{ route('customer.timelines.store', ['order' => $order, 'supplier' => $supplier]) }}">
    {{ csrf_field() }}
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h4 class="modal-title">{{ $order->category->name }}</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-md-12">
                        <div class="form-group">
                            <label class="control-label m-b-10" style="text-align: left">Você aprova o valor de R$ {{ number_format($timeline->price_average, 2, ',', '.') }} e as condições de pagamento proposto pela banda ou quer fazer uma contraproposta?</label>
                            <select class="form-control" id="status" name="status">
                                <option value="">Selecione</option>
                                <option value="Aprovado">Aprovado</option>
                                <option value="Contraproposta">Contraproposta</option>
                            </select>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div id="price-average-div">
                        <div class="col-md-12">
                            <div class="form-group">
                                <label class="control-label">Informe um valor em reais para contraproposta:</label>
                                <input type="text" class="form-control" id="price-average" name="price_average" value="{{ $timeline->price_average }}">
                            </div>
                        </div>
                        <div class="form-group{{ $errors->has('payment_methods') ? ' has-error' : '' }}">
                            <div class="col-md-9">
                                <label for="payment_methods">Formas de Pagamento<h6>Selecione as formas de pagamento oferecidas.</h6></label>
                                <select multiple class="form-control" name="payment_methods[]" required>
                                    @foreach($paymentMethods as $paymentMethod)
                                        <option {{ $paymentMethod->id == 3 ? 'selected' : '' }} value="{{ $paymentMethod->id }}">{{ $paymentMethod->name }}</option>
                                    @endforeach
                                </select>
                                @if ($errors->has('payment_methods'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('payment_methods') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>
                    </div>
                    <div class="col-md-12">
                        <div class="form-group no-margin">
                            <label class="control-label">Observações:</label>
                            <textarea name="description" class="form-control autogrow" style="overflow: hidden; word-wrap: break-word; resize: horizontal; height: 104px;">{{ $timeline->description }}</textarea>
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default waves-effect" data-dismiss="modal">Fechar</button>
                <button type="submit" class="btn btn-primary waves-effect waves-light warning-alert-interest">Enviar</button>
            </div>
        </div>
    </div>
</form>
</div>
@endsection

@push('scripts')
<script src="{{ asset('assets/js/jquery.mask.js') }}"></script>
<script>
$(document).ready(function(){
    $('#price-average').mask('000.000,00', {reverse: true});
});
</script>
@endpush

View with repeated payment methods and select payment options for all timelines:

    
asked by anonymous 12.12.2017 / 22:57

1 answer

1

easy:

1.

change the excerpts: $paymentMethods = PaymentMethod::all(); $paymentMethodsOrder = $order->paymentMethods->map(function ($item, $key) { return $item['id']; })->toArray();

by: $paymentMethods = PaymentMethod::pluck('name', 'id'); $paymentMethodsOrder = $order->paymentMethods->pluck('id')->toArray();

2.

using ( link ) exchange your < select > per: Form::select('payment_methods[]', $paymentMethods, $paymentMethodsOrder, ['multiple', 'class' => 'form-control', 'required']);

NOTE: something else takes a look at ( link ) to clean this code, it also gives a look over the ->fill() .

    
13.12.2017 / 01:11