1
I have a Collection in the variable $paymentMethods
with forms of payment:
And I have another Collection in the $timelines variable that has a Many to Many relationship with payment methods. I need to list in the view in a select the available payment methods and mark the selected ones. With what I did the available payment methods are repeated and are marked the payment methods of all timelines.
Controller:
namespace App\Http\Controllers;
use App\Timeline;
use App\Order;
use App\PaymentMethod;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class TimelineController extends Controller
{
public function indexCustomer($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();
return view('customer.order.timeline')
->with('order', $order)
->with('paymentMethods', $paymentMethods)
->with('paymentMethodsOrder', $paymentMethodsOrder)
->with('timelines', $timelines)
->with('supplier', $supplier);
}
public function storeCustomer(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 = new Timeline;
$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();
return view('customer.order.timeline')
->with('order', $order)
->with('paymentMethods', $paymentMethods)
->with('paymentMethodsOrder', $paymentMethodsOrder)
->with('timelines', $timelines)
->with('supplier', $supplier);
}
public function indexSupplier($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();
return view('supplier.order.timeline')
->with('order', $order)
->with('paymentMethods', $paymentMethods)
->with('paymentMethodsOrder', $paymentMethodsOrder)
->with('timelines', $timelines);
}
public function storeSupplier(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 = new Timeline;
$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_methods as $paymentMethodId) {
$timeline->paymentMethods()->attach($paymentMethodId);
}
$timelines = Timeline::where('order_id', $order->id)->where('supplier_id', $user->userable->id)->get();
return view('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')
<div class="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 selected payment options for all timelines:
How would you look without the Canon?
– Marcelo
Another thing, I want to compare $paymentsMethods with $timelines each of which has a Many to Many with the Paymentmethods class and not with $paymentsMethodsOrder
– Marcelo
installation Collective: https://laravelcollective.com/docs/5.3/html#installation for use in Formulars, already bindings for vc
– Sotnas Leunam Pina
so your timeline has to have a relationship with Paymentmethod
– Sotnas Leunam Pina
I’ve used Windows and I don’t like it. Timeline has a relationship with Paymentmethod. I believe that this way will not have how to do, in the case when I click on a button that has the data opens a modal that has this view. I have to pass the data already on the card to that modal.
– Marcelo
I put the whole view.
– Marcelo
is in modal q has select, right? but, $timelines ta off...
– Sotnas Leunam Pina
Let’s go continue this discussion in chat.
– Marcelo
you need to extract the id from the Timeline relationship with Paymentmethod and then use it in Form::select. cara vc don’t like Collective, but it’s the easiest way to mount html/Formularios
– Sotnas Leunam Pina