244 lines
18 KiB
PHP
244 lines
18 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', $mission->title)
|
|
|
|
@section('content')
|
|
@include('maintenance::layouts.nav')
|
|
|
|
@php $util = app(\Modules\Maintenance\Utils\MaintenanceUtil::class); @endphp
|
|
|
|
<section class="content no-print mt-page">
|
|
<div class="mt-page-header">
|
|
<h1>
|
|
<code>{{ $mission->mission_number }}</code> — {{ $mission->title }}
|
|
<small class="text-muted">{{ $statuses[$mission->status] ?? $mission->status }}</small>
|
|
</h1>
|
|
<div>
|
|
@if($can_issue && in_array($mission->status, ['draft', 'planned']))
|
|
<form method="post" action="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'dispatchMission'], [$mission->id]) }}" style="display:inline;" onsubmit="return confirm('{{ __('messages.are_you_sure') }}')">
|
|
@csrf
|
|
<button type="submit" class="btn btn-success"><i class="fa fa-truck"></i> @lang('maintenance::lang.fm_dispatch')</button>
|
|
</form>
|
|
@endif
|
|
@if($can_manage && $mission->activeMission())
|
|
<form method="post" action="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'closeMission'], [$mission->id]) }}" style="display:inline;" onsubmit="return confirm('{{ __('messages.are_you_sure') }}')">
|
|
@csrf
|
|
<button type="submit" class="btn btn-default"><i class="fa fa-check"></i> @lang('maintenance::lang.fm_close_mission')</button>
|
|
</form>
|
|
@endif
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'index']) }}" class="btn btn-default">@lang('maintenance::lang.back')</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div class="mt-card">
|
|
<div class="mt-card-header"><h3 class="mt-card-title">@lang('maintenance::lang.basic_info')</h3></div>
|
|
<div class="mt-card-body">
|
|
<table class="table table-bordered">
|
|
<tr><th width="200">@lang('maintenance::lang.status')</th><td>{{ $statuses[$mission->status] ?? $mission->status }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_mission_type')</th><td>{{ $mission_types[$mission->mission_type] ?? $mission->mission_type }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.equipment')</th><td>{{ $mission->equipment?->name ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_lead')</th><td>{{ $mission->leadUser ? trim($mission->leadUser->first_name.' '.($mission->leadUser->last_name ?? '')) : '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_destination')</th><td>{{ $mission->destinationLocation?->name ?? $mission->destination_site ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_planned_departure')</th><td>{{ $util->formatDateTime($mission->planned_departure_at) ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_planned_return')</th><td>{{ $util->formatDateTime($mission->planned_return_at) ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_actual_departure')</th><td>{{ $util->formatDateTime($mission->actual_departure_at) ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_actual_return')</th><td>{{ $util->formatDateTime($mission->actual_return_at) ?? '—' }}</td></tr>
|
|
<tr><th>@lang('maintenance::lang.fm_total_cost')</th><td>{{ $util->formatMoney($mission->total_cost) }}</td></tr>
|
|
</table>
|
|
@if($mission->description)<p><strong>@lang('maintenance::lang.description'):</strong> {{ $mission->description }}</p>@endif
|
|
</div>
|
|
</div>
|
|
|
|
@includeIf('maintenance::field_missions.partial.tms_shipment')
|
|
|
|
<div class="mt-card" style="margin-top:20px;">
|
|
<div class="mt-card-header"><h3 class="mt-card-title">@lang('maintenance::lang.fm_tab_crew')</h3></div>
|
|
<div class="mt-card-body">
|
|
<table class="table table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>@lang('maintenance::lang.name')</th>
|
|
<th>@lang('maintenance::lang.fm_role')</th>
|
|
<th>@lang('maintenance::lang.fm_labor_hours')</th>
|
|
<th>@lang('maintenance::lang.fm_hourly_rate')</th>
|
|
<th>@lang('maintenance::lang.fm_per_diem')</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($mission->crewMembers as $member)
|
|
<tr>
|
|
<td>{{ $member->displayName() }} @if($member->is_lead)<span class="label label-primary">@lang('maintenance::lang.fm_lead')</span>@endif</td>
|
|
<td>{{ $role_labels[$member->role] ?? $member->role }}</td>
|
|
<td>{{ $member->labor_hours }}</td>
|
|
<td>{{ $util->formatMoney($member->hourly_rate) }}</td>
|
|
<td>{{ $util->formatMoney($member->per_diem) }}</td>
|
|
<td>
|
|
@if($can_manage && $mission->activeMission())
|
|
<form method="post" action="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'destroyCrew'], [$member->id]) }}" style="display:inline;" onsubmit="return confirm('{{ __('messages.are_you_sure') }}')">
|
|
@csrf @method('DELETE')
|
|
<button type="submit" class="btn btn-xs btn-danger"><i class="fa fa-trash"></i></button>
|
|
</form>
|
|
@endif
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="6" class="text-muted text-center">—</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
@if($can_manage && $mission->activeMission())
|
|
{!! Form::open(['url' => action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'storeCrew'], [$mission->id]), 'method' => 'post']) !!}
|
|
<div class="row">
|
|
<div class="col-md-3">{!! Form::select('user_id', $users, null, ['class' => 'form-control select2', 'placeholder' => __('maintenance::lang.linked_user'), 'style' => 'width:100%']) !!}</div>
|
|
<div class="col-md-2">{!! Form::text('person_name', null, ['class' => 'form-control', 'placeholder' => __('maintenance::lang.fm_person_name')]) !!}</div>
|
|
<div class="col-md-2">{!! Form::select('role', $role_labels, 'technician', ['class' => 'form-control']) !!}</div>
|
|
<div class="col-md-2">{!! Form::number('labor_hours', 0, ['class' => 'form-control', 'min' => 0, 'step' => '0.5', 'placeholder' => __('maintenance::lang.fm_labor_hours')]) !!}</div>
|
|
<div class="col-md-2">{!! Form::number('hourly_rate', 0, ['class' => 'form-control', 'min' => 0, 'placeholder' => __('maintenance::lang.fm_hourly_rate')]) !!}</div>
|
|
<div class="col-md-1"><button type="submit" class="btn btn-success"><i class="fa fa-plus"></i></button></div>
|
|
</div>
|
|
<div class="row" style="margin-top:8px;">
|
|
<div class="col-md-2">{!! Form::number('per_diem', 0, ['class' => 'form-control', 'min' => 0, 'placeholder' => __('maintenance::lang.fm_per_diem')]) !!}</div>
|
|
<div class="col-md-2"><label class="checkbox-inline" style="margin-top:8px;">{!! Form::checkbox('is_lead', 1) !!} @lang('maintenance::lang.fm_is_lead')</label></div>
|
|
</div>
|
|
{!! Form::close() !!}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-card" style="margin-top:20px;">
|
|
<div class="mt-card-header"><h3 class="mt-card-title">@lang('maintenance::lang.fm_tab_items')</h3></div>
|
|
<div class="mt-card-body">
|
|
<table class="table table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>@lang('maintenance::lang.name')</th>
|
|
<th>@lang('maintenance::lang.fm_qty_issued')</th>
|
|
<th>@lang('maintenance::lang.fm_qty_returned')</th>
|
|
<th>@lang('maintenance::lang.fm_qty_lost')</th>
|
|
<th>@lang('maintenance::lang.status')</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($mission->items as $item)
|
|
<tr>
|
|
<td>{{ $item->displayName() }}</td>
|
|
<td>{{ $item->quantity_issued }}</td>
|
|
<td>{{ $item->quantity_returned }}</td>
|
|
<td>{{ $item->quantity_lost }}</td>
|
|
<td>{{ $item->status }}</td>
|
|
<td>
|
|
@if($can_issue && !$item->stock_deducted && $mission->activeMission())
|
|
<form method="post" action="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'destroyItem'], [$item->id]) }}" style="display:inline;" onsubmit="return confirm('{{ __('messages.are_you_sure') }}')">
|
|
@csrf @method('DELETE')
|
|
<button type="submit" class="btn btn-xs btn-danger"><i class="fa fa-trash"></i></button>
|
|
</form>
|
|
@endif
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="6" class="text-muted text-center">—</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
|
|
@if($can_issue && $mission->activeMission() && in_array($mission->status, ['draft', 'planned']))
|
|
{!! Form::open(['url' => action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'storeItem'], [$mission->id]), 'method' => 'post', 'id' => 'fm_show_item_form']) !!}
|
|
<div class="row">
|
|
<div class="col-md-2">{!! Form::select('item_type', ['spare_part' => __('maintenance::lang.fm_item_spare_part'), 'tool' => __('maintenance::lang.fm_item_tool')], 'spare_part', ['class' => 'form-control', 'id' => 'fm_show_item_type']) !!}</div>
|
|
<div class="col-md-3" id="fm_show_spare_field">{!! Form::select('spare_part_id', $spare_parts, null, ['class' => 'form-control select2', 'placeholder' => __('maintenance::lang.select_spare_part'), 'style' => 'width:100%']) !!}</div>
|
|
<div class="col-md-3" id="fm_show_tool_field" style="display:none;">{!! Form::select('tool_id', $tools, null, ['class' => 'form-control select2', 'placeholder' => __('maintenance::lang.select'), 'style' => 'width:100%']) !!}</div>
|
|
<div class="col-md-2">{!! Form::select('location_id', $locations->pluck('name', 'id'), null, ['class' => 'form-control select2', 'placeholder' => __('maintenance::lang.select'), 'style' => 'width:100%']) !!}</div>
|
|
<div class="col-md-1">{!! Form::number('quantity_issued', 1, ['class' => 'form-control', 'min' => '0.001', 'step' => '0.001']) !!}</div>
|
|
<div class="col-md-1"><button type="submit" class="btn btn-success"><i class="fa fa-plus"></i></button></div>
|
|
</div>
|
|
{!! Form::close() !!}
|
|
@endif
|
|
|
|
@if($can_issue && in_array($mission->status, ['dispatched', 'on_site', 'returning']) && $mission->items->isNotEmpty())
|
|
<hr>
|
|
<h4>@lang('maintenance::lang.fm_record_returns')</h4>
|
|
{!! Form::open(['url' => action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'recordReturns'], [$mission->id]), 'method' => 'post']) !!}
|
|
@foreach($mission->items as $idx => $item)
|
|
<div class="row" style="margin-bottom:8px;">
|
|
<div class="col-md-4"><strong>{{ $item->displayName() }}</strong> ({{ __('maintenance::lang.fm_qty_issued') }}: {{ $item->quantity_issued }})</div>
|
|
<div class="col-md-3">
|
|
{!! Form::hidden("lines[{$idx}][item_id]", $item->id) !!}
|
|
{!! Form::number("lines[{$idx}][quantity_returned]", $item->quantity_returned, ['class' => 'form-control', 'min' => 0, 'step' => '0.001', 'placeholder' => __('maintenance::lang.fm_qty_returned')]) !!}
|
|
</div>
|
|
<div class="col-md-3">
|
|
{!! Form::number("lines[{$idx}][quantity_lost]", $item->quantity_lost, ['class' => 'form-control', 'min' => 0, 'step' => '0.001', 'placeholder' => __('maintenance::lang.fm_qty_lost')]) !!}
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
<button type="submit" class="btn btn-warning">@lang('maintenance::lang.fm_record_returns')</button>
|
|
{!! Form::close() !!}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<div class="mt-card">
|
|
<div class="mt-card-header"><h3 class="mt-card-title">@lang('maintenance::lang.fm_tab_expenses')</h3></div>
|
|
<div class="mt-card-body">
|
|
<p>
|
|
<strong>@lang('maintenance::lang.fm_total_labor'):</strong> {{ $util->formatMoney($mission->total_labor_cost) }}<br>
|
|
<strong>@lang('maintenance::lang.fm_total_expenses'):</strong> {{ $util->formatMoney($mission->total_expense_cost) }}<br>
|
|
<strong>@lang('maintenance::lang.fm_total_cost'):</strong> {{ $util->formatMoney($mission->total_cost) }}
|
|
</p>
|
|
<ul class="list-unstyled">
|
|
@foreach($mission->expenses as $expense)
|
|
<li style="margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #eee;">
|
|
<strong>{{ $expense_types[$expense->expense_type] ?? $expense->expense_type }}</strong>
|
|
— {{ $util->formatMoney($expense->amount) }}
|
|
@if($expense->description)<br><small>{{ $expense->description }}</small>@endif
|
|
@if($can_expense && $mission->activeMission())
|
|
<form method="post" action="{{ action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'destroyExpense'], [$expense->id]) }}" style="display:inline;" onsubmit="return confirm('{{ __('messages.are_you_sure') }}')">
|
|
@csrf @method('DELETE')
|
|
<button type="submit" class="btn btn-xs btn-link text-danger"><i class="fa fa-trash"></i></button>
|
|
</form>
|
|
@endif
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
|
|
@if($can_expense && $mission->activeMission())
|
|
{!! Form::open(['url' => action([\Modules\Maintenance\Http\Controllers\FieldMissionController::class, 'storeExpense'], [$mission->id]), 'method' => 'post']) !!}
|
|
<div class="form-group">{!! Form::select('expense_type', $expense_types, 'transport', ['class' => 'form-control']) !!}</div>
|
|
<div class="form-group">{!! Form::text('description', null, ['class' => 'form-control', 'placeholder' => __('maintenance::lang.description')]) !!}</div>
|
|
<div class="form-group">{!! Form::number('amount', null, ['class' => 'form-control', 'min' => 0, 'required', 'placeholder' => __('maintenance::lang.fm_amount')]) !!}</div>
|
|
<div class="form-group">{!! Form::text('expense_date', null, ['class' => 'form-control', 'placeholder' => __('maintenance::lang.fm_expense_date')]) !!}</div>
|
|
<div class="form-group">{!! Form::text('vendor_name', null, ['class' => 'form-control', 'placeholder' => __('maintenance::lang.fm_vendor')]) !!}</div>
|
|
<div class="form-group">{!! Form::select('paid_by', ['company' => __('maintenance::lang.fm_paid_company'), 'employee' => __('maintenance::lang.fm_paid_employee')], 'company', ['class' => 'form-control']) !!}</div>
|
|
<button type="submit" class="btn btn-success btn-block">@lang('maintenance::lang.fm_add_expense')</button>
|
|
{!! Form::close() !!}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
@endsection
|
|
|
|
@section('javascript')
|
|
<script>
|
|
$(function() {
|
|
$('.select2').select2();
|
|
$('#fm_show_item_type').on('change', function() {
|
|
var t = $(this).val();
|
|
$('#fm_show_spare_field').toggle(t === 'spare_part');
|
|
$('#fm_show_tool_field').toggle(t === 'tool');
|
|
});
|
|
$('#fm_mission_panel .fm_item_type').on('change', function() {
|
|
var t = $(this).val();
|
|
$('#fm_mission_panel .fm_field_spare').toggle(t === 'spare_part');
|
|
$('#fm_mission_panel .fm_field_tool').toggle(t === 'tool');
|
|
});
|
|
});
|
|
</script>
|
|
@endsection
|