arcadiasuite/plus/resources/views/ordem_separacao/show.blade.php

328 lines
9.4 KiB
PHP

@extends('layouts.app', ['title' => 'Ordem de Separação'])
@section('css')
<style type="text/css">
.swal-button--confirm {
background-color: #28a745 !important;
}
.swal-button--confirm:hover {
background-color: #218838 !important;
}
.item-encontrado {
background-color: #d1e7dd !important;
transition: background-color 0.4s;
}
</style>
@endsection
@section('content')
<div class="card mt-1">
<div class="card-body">
<div class="pl-lg-4">
<div style="text-align: right; margin-top: 5px;">
<a href="{{ route('ordem-separacao.index') }}" class="btn btn-danger btn-sm px-3">
<i class="ri-arrow-left-double-fill"></i>Voltar
</a>
</div>
<div class="col-12">
<div class="ca">
<div class="card-header bg-white border-bottom d-flex justify-content-between align-items-center flex-wrap">
<div>
<h5 class="mb-1 fw-semibold">
Ordem de Separação <strong class="text-primary">#{{ $item->numero_sequencial }}</strong>
</h5>
<small class="text-primary">
{{ $item->cliente->info }}
</small>
</div>
{{-- STATUS --}}
@php
$statusMap = [
'em_separacao' => ['label' => 'Em Separação', 'class' => 'warning'],
'finalizado' => ['label' => 'Finalizado', 'class' => 'success'],
'cancelado' => ['label' => 'Cancelado', 'class' => 'danger'],
];
$status = $statusMap[$item->status] ?? ['label'=>'Indefinido','class'=>'secondary'];
@endphp
<span class="badge bg-{{ $status['class'] }} p-1">
{{ $status['label'] }}
</span>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-3">
<label class="text-muted small">Código do orçamento</label>
<div class="fw-semibold">
#{{ $item->orcamento->numero_sequencial }}
</div>
</div>
<div class="col-md-3">
<label class="text-muted small">Funcionário</label>
<div class="fw-semibold">
{{ $item->funcionario->nome ?? 'Não informado' }}
</div>
</div>
<div class="col-md-3">
<label class="text-muted small">Data de criação</label>
<div class="fw-semibold">
{{ __data_pt($item->created_at) }}
</div>
</div>
<div class="col-md-3">
<label class="text-muted small">Prioridade</label>
<div class="fw-semibold">
@if($item->prioridade == 'normal')
<span class="badge bg-primary p-1">Normal</span>
@else
<span class="badge bg-danger p-1">Urgente</span>
@endif
</div>
</div>
<div class="col-md-3">
<label class="text-muted small">Usuário de criação</label>
<div class="fw-semibold">
{{ $item->usuarioInicia->name }}
</div>
</div>
<div class="col-md-3">
<label class="text-muted small">Usuário de finalização</label>
<div class="fw-semibold">
{{ $item->usuarioFinaliza ? $item->usuarioFinaliza->name : '--' }}
</div>
</div>
<div class="col-12">
<label class="text-muted small">Observação</label>
<div class="border rounded p-2 bg-light">
{{ $item->observacao ?? '—' }}
</div>
</div>
@if($item->status === 'cancelado' && $item->motivo_cancelado)
<div class="col-12">
<label class="text-muted small text-danger">Motivo do Cancelamento</label>
<div class="border border-danger rounded p-2 bg-danger-subtle">
{{ $item->motivo_cancelado }}
</div>
</div>
@endif
</div>
<div class="col-md-4 mt-3">
<label class="text-muted small">Buscar por código de barras</label>
<input type="text"
id="buscarCodigo"
class="form-control"
placeholder="Escaneie o código de barras"
autofocus>
</div>
<div class="row mt-3">
<div class="table-responsive">
<table class="table">
<thead class="table-dark">
<tr>
<th>Produto</th>
<th>Código de barras</th>
<th>Quantidade</th>
<th>Status</th>
<th>Observação</th>
<th>Ações</th>
</tr>
</thead>
<tbody>
@foreach($item->itens as $p)
<tr class="@if($p->status == 'separado') item-encontrado @endif">
<td>{{ $p->produto->nome }}</td>
<td class="codigo-barras" data-codigo="{{ $p->produto->codigo_barras }}">
{{ $p->produto->codigo_barras }}
</td>
<td>
@if(!$p->produto->unidadeDecimal())
{{ number_format($p->quantidade, 0, '.', '') }}
@else
{{ number_format($p->quantidade, 3, '.', '') }}
@endif
</td>
<td>{!! $p->estadoItem() !!}</td>
<td>{{ $p->observacao_item ?? '--' }}</td>
<td>
@if($p->status != 'separado')
<form action="{{ route('ordem-separacao.update-item', [$p->id]) }}" method="post" id="form-{{$p->id}}">
@method('put')
@csrf
<input type="hidden" name="status" value="separado">
<button type="button" class="btn btn-success btn-sm btn-confirma">
Separado
</button>
</form>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<div class="card-footer bg-light border-top d-flex justify-content-end gap-2 flex-wrap">
<a class="btn btn-secondary" target="_blank" href="{{ route('ordem-separacao.imprimir', $item->id) }}">
<i class="ri-printer-line"></i> Imprimir
</a>
@can('ordem_separacao_edit')
@if($item->status !== 'cancelado')
<button type="button" class="btn btn-warning" onclick="alterarStatus()">
<i class="ri-refresh-line"></i> Alterar Status
</button>
@endif
@endcan
@can('nfe_create')
@if($item->status === 'finalizado' && $item->orcamento->orcamento == 1)
<a href="{{ route('orcamentos.gerar-venda', $item->orcamento->id) }}"
title="Gerar venda"
class="btn btn-success btn-gerar-venda">
<i class="ri-shopping-cart-line"></i> Gerar Venda
</a>
@endif
@endcan
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal-alterar-estado" tabindex="-1">
<div class="modal-dialog">
<form method="post" action="{{ route('ordem-separacao.update', [$item->id]) }}">
@csrf
@method('put')
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Alterar estado</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body mt-1">
<div class="row">
<div class="col-md-12">
<label>Status</label>
<select name="status" class="form-select">
<option @if($item->status == 'em_separacao') selected @endif value="em_separacao">Em separação</option>
<option @if($item->status == 'finalizado') selected @endif value="finalizado">Finalizado</option>
<option @if($item->status == 'cancelado') selected @endif value="cancelado">Cancelado</option>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<div class="text-end">
<button type="button" class="btn btn-light me-1" data-bs-dismiss="modal">Sair</button>
<button type="submit" class="btn btn-success">Salvar</button>
</div>
</div>
</div>
</form>
</div>
</div>
@section('js')
<script type="text/javascript">
$(document).on("click", ".btn-gerar-venda", function (e) {
e.preventDefault();
let url = $(this).attr("href");
swal({
title: "Confirmar ação",
text: "Deseja realmente gerar a venda a partir deste orçamento?",
icon: "warning",
buttons: ["Cancelar", "Confirmar"],
dangerMode: false,
}).then((confirm) => {
if (confirm) {
window.location.href = url;
} else {
swal("Cancelado", "A venda não foi gerada.", "info");
}
});
});
function alterarStatus(){
$('#modal-alterar-estado').modal('show')
}
$(".btn-confirma").on("click", function (e) {
e.preventDefault();
var form = $(this).parents("form").attr("id");
swal({
title: "Você está certo?",
text: "Deseja confirmar separação do item?",
icon: "success",
buttons: true,
buttons: ["Cancelar", "Confirmar"],
dangerMode: true,
}).then((isConfirm) => {
if (isConfirm) {
document.getElementById(form).submit();
} else {
swal("", "Este item não foi confirmado!", "info");
}
});
});
$('#buscarCodigo').on('keyup', function (e) {
if (e.key !== 'Enter') return;
let codigo = $(this).val().trim();
let encontrado = false;
$('tr').removeClass('item-encontrado');
$('.codigo-barras').each(function () {
if ($(this).data('codigo') == codigo) {
let linha = $(this).closest('tr');
// linha.addClass('item-encontrado');
// scroll até o item
$('html, body').animate({
scrollTop: linha.offset().top - 150
}, 400);
linha.find('.btn-confirma').click();
encontrado = true;
}
});
if (!encontrado) {
swal("Não encontrado", "Produto não localizado nesta ordem", "warning");
}
$(this).val('').focus();
});
</script>
@endsection
@endsection