arcadiasuite/plus/app/Http/Controllers/API/PdvMoboController.php

798 lines
31 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Nfe;
use App\Models\ItemNfe;
use App\Models\FaturaNfe;
use App\Models\Nfce;
use App\Models\ItemNfce;
use App\Models\Caixa;
use App\Models\Cliente;
use App\Models\Produto;
use App\Models\CategoriaProduto;
use App\Models\Garantia;
use App\Models\ItemPizzaNfce;
use App\Models\Empresa;
use App\Models\ContaReceber;
use App\Models\Pedido;
use App\Models\FaturaNfce;
use App\Models\ItemPedido;
use App\Models\VendaSuspensa;
use App\Models\ItemAdicional;
use App\Models\ItemAdicionalNfce;
use App\Models\ItemVendaSuspensa;
use App\Models\ItemPizzaPedido;
use App\Models\UsuarioEmissao;
use App\Models\TamanhoPizza;
use Illuminate\Support\Facades\DB;
use App\Utils\EstoqueUtil;
use App\Utils\FilaEnvioUtil;
use App\Models\ConfigGeral;
use App\Models\ImpressoraPedidoProduto;
class PdvMoboController extends Controller
{
protected $util;
protected $filaEnvioUtil;
public function __construct(EstoqueUtil $util, FilaEnvioUtil $filaEnvioUtil)
{
$this->util = $util;
$this->filaEnvioUtil = $filaEnvioUtil;
}
public function store(Request $request){
try {
$venda = DB::transaction(function () use ($request) {
$empresa = $config = Empresa::find($request->empresa_id);
$caixa = Caixa::where('usuario_id', $request->usuario_id)
->where('status', 1)
->first();
$config = __objetoParaEmissao($config, $caixa->local_id);
$numero_nfce = $config->numero_ultima_nfce_producao;
if ($config->ambiente == 2) {
$numero_nfce = $config->numero_ultima_nfce_homologacao;
}
$numeroSerieNfce = $config->numero_serie_nfce ? $config->numero_serie_nfce : 1;
$configUsuarioEmissao = UsuarioEmissao::where('usuario_empresas.empresa_id', request()->empresa_id)
->join('usuario_empresas', 'usuario_empresas.usuario_id', '=', 'usuario_emissaos.usuario_id')
->select('usuario_emissaos.*')
->where('usuario_emissaos.usuario_id', $request->usuario_id)
->first();
if($configUsuarioEmissao != null){
$numeroSerieNfce = $configUsuarioEmissao->numero_serie_nfce;
$numero_nfce = $configUsuarioEmissao->numero_ultima_nfce;
}
$tipoPagamento = $request->tipo_pagamento;
if($request->fatura && sizeof($request->fatura) > 1){
$tipoPagamento = '99';
}
$cliente = null;
if($request->cliente_id){
$cliente = Cliente::findOrFail($request->cliente_id);
}
$dataVenda = [
'natureza_id' => $empresa->natureza_id_pdv,
'emissor_nome' => $config->nome,
'emissor_cpf_cnpj' => $config->cpf_cnpj,
'ambiente' => $config->ambiente,
'chave' => '',
'cliente_id' => $request->cliente_id,
'numero_serie' => $numeroSerieNfce,
'numero' => $numero_nfce + 1,
'cliente_nome' => $cliente ? $cliente->razao_social : '',
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
'estado' => 'novo',
'total' => ($request->valor_total),
'desconto' => $request->desconto ? ($request->desconto) : 0,
'valor_cashback' => 0,
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
'valor_produtos' => ($request->valor_total) ?? 0,
'caixa_id' => $caixa->id,
'local_id' => $caixa->local_id,
'observacao' => $request->observacao,
'dinheiro_recebido' => 0,
'troco' => $request->troco,
'tipo_pagamento' => $tipoPagamento,
'cnpj_cartao' => $request->cnpj_cartao ?? '',
'bandeira_cartao' => $request->bandeira_cartao ?? '',
'cAut_cartao' => $request->cAut_cartao ?? '',
'user_id' => $request->usuario_id,
'empresa_id' => $request->empresa_id,
'valor_entrega' => 0,
'numero_sequencial' => $this->getLastNumero($request->empresa_id)
];
if($request->frete){
$frete = $request->frete;
$dataVenda['valor_frete'] = __convert_value_bd($frete['valor']);
$dataVenda['qtd_volumes'] = $frete['qtd_volumes'];
$dataVenda['numeracao_volumes'] = $frete['numeracao_volumes'];
$dataVenda['peso_bruto'] = $frete['peso_bruto'];
$dataVenda['peso_liquido'] = $frete['peso_liquido'];
$dataVenda['especie'] = $frete['especie'];
$dataVenda['transportadora_id'] = $frete['transportadora_id'];
$dataVenda['tipo'] = $frete['tipo'] ?? 9;
$dataVenda['placa'] = $frete['placa'];
$dataVenda['uf'] = $frete['uf'];
}
$nfce = Nfce::create($dataVenda);
foreach($request->itens as $i){
$i = (object)$i;
$product = Produto::findOrFail($i->id);
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
$variacao_id = null;
$cfop = $product->cfop_estadual;
if($cliente && $cliente->cidade->uf != $config->cidade->uf){
$cfop = $product->cfop_outro_estado;
}
$itemNfce = ItemNfce::create([
'nfce_id' => $nfce->id,
'produto_id' => $product->id,
'quantidade' => (float)str_replace(",", ".", $i->quantidade),
'valor_unitario' => $i->valor_unitario,
'sub_total' => $i->subtotal,
'observacao' => $i->observacao ?? '',
'perc_icms' => __convert_value_bd($product->perc_icms),
'perc_pis' => __convert_value_bd($product->perc_pis),
'perc_cofins' => __convert_value_bd($product->perc_cofins),
'perc_ipi' => __convert_value_bd($product->perc_ipi),
'cst_csosn' => $product->cst_csosn,
'cst_pis' => $product->cst_pis,
'cst_cofins' => $product->cst_cofins,
'cst_ipi' => $product->cst_ipi,
'cfop' => $cfop,
'ncm' => $product->ncm,
'variacao_id' => $variacao_id,
]);
if ($product->gerenciar_estoque) {
$this->util->reduzEstoque($product->id, __convert_value_bd($i->quantidade), $variacao_id, $caixa->local_id);
$tipo = 'reducao';
$codigo_transacao = $nfce->id;
$tipo_transacao = 'venda_nfce';
$this->util->movimentacaoProduto($product->id, __convert_value_bd($i->quantidade), $tipo, $codigo_transacao, $tipo_transacao, $request->usuario_id, $variacao_id);
}
if(isset($i->adicionais_escolhidos)){
foreach($i->adicionais_escolhidos as $add){
$add = trim($add);
if($add){
ItemAdicionalNfce::create([
'item_nfce_id' => $itemNfce->id,
'adicional_id' => $add
]);
}
}
}
if(isset($i->sabores_escolhidos)){
foreach($i->sabores_escolhidos as $add){
$add = trim($add);
ItemPizzaNfce::create([
'item_nfce_id' => $itemNfce->id,
'produto_id' => $add
]);
}
}
if($product->prazo_garantia > 0 && $nfce->cliente_id != null){
Garantia::create([
'empresa_id' => $request->empresa_id,
'cliente_id' => $nfce->cliente_id,
'produto_id' => $product->id,
'nfce_id' => $nfce->id,
'usuario_id' => $request->usuario_id,
'prazo_garantia' => $product->prazo_garantia,
'data_venda' => date('Y-m-d')
]);
}
}
if ($request->fatura && $request->fatura[0]['valor'] > 0) {
foreach($request->fatura as $key => $f){
$f = (object)$f;
$dataAtual = date('Y-m-d');
$vencimento = $f->data;
if($f->data && strtotime($vencimento) > strtotime($dataAtual)){
ContaReceber::create([
'nfe_id' => null,
'nfce_id' => $nfce->id,
'cliente_id' => $request->cliente_id,
'data_vencimento' => $vencimento,
'data_recebimento' => $vencimento,
'valor_integral' => __convert_value_bd($f->valor),
'valor_recebido' => 0,
'status' => 0,
// 'descricao' => "Parcela $i+1 da venda código $nfce->id",
'descricao' => 'Venda PDV #' . $nfce->numero_sequencial . " Parcela " . ($key+1) . " de " . sizeof($request->fatura),
'empresa_id' => $request->empresa_id,
'juros' => 0,
'multa' => 0,
'observacao' => $request->obs_row[$i] ?? '',
'tipo_pagamento' => $f->forma,
'local_id' => $caixa->local_id,
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
]);
}
FaturaNfce::create([
'nfce_id' => $nfce->id,
'tipo_pagamento' => $f->forma,
'data_vencimento' => $f->data ? $f->data : date('Y-m-d'),
'valor' => __convert_value_bd($f->valor)
]);
}
} else {
FaturaNfce::create([
'nfce_id' => $nfce->id,
'tipo_pagamento' => $tipoPagamento,
'data_vencimento' => date('Y-m-d'),
'valor' => $nfce->total
]);
}
if ($request->venda_suspensa_id > 0) {
$vendaSuspensa = VendaSuspensa::findOrfail($request->venda_suspensa_id);
$vendaSuspensa->itens()->delete();
$vendaSuspensa->delete();
}
if ($request->pedido_id > 0) {
$pedido = Pedido::findOrfail($request->pedido_id);
$pedido->status = 0;
$pedido->em_atendimento = 0;
$pedido->nfce_id = $nfce->id;
$mesa = $pedido->_mesa;
if($mesa){
$mesa->ocupada = 0;
$mesa->save();
}
$pedido->save();
// $comandaFinalizada = ItemPedido::where('pedido_id', $pedido->id)
// ->where('finalizado_pdv', 0)->first();
// if($comandaFinalizada == null){
// $pedido->status = 0;
// $pedido->em_atendimento = 0;
// $pedido->nfce_id = $nfce->id;
// $mesa = $pedido->_mesa;
// $mesa->ocupada = 0;
// $mesa->save();
// $pedido->save();
// }
}
$this->filaEnvioUtil->adicionaVendaFila($nfce);
return $nfce;
});
return response()->json($venda, 200);
} catch (\Exception $e) {
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
}
}
private function getLastNumero($empresa_id){
$last = Nfce::where('empresa_id', $empresa_id)
->orderBy('numero_sequencial', 'desc')
->where('numero_sequencial', '>', 0)->first();
$numero = $last != null ? $last->numero_sequencial : 0;
$numero++;
return $numero;
}
public function suspender(Request $request)
{
try {
$venda = DB::transaction(function () use ($request) {
$config = Empresa::find($request->empresa_id);
$caixa = Caixa::where('usuario_id', $request->usuario_id)
->where('status', 1)
->first();
$venda = VendaSuspensa::create([
'empresa_id' => $request->empresa_id,
'cliente_id' => $request->cliente_id,
'total' => ($request->valor_total),
'desconto' => $request->desconto ? ($request->desconto) : 0,
'acrescimo' => $request->acrescimo ? ($request->acrescimo) : 0,
'observacao' => $request->observacao,
'tipo_pagamento' => $request->tipo_pagamento ?? '',
'local_id' => $caixa->local_id,
'user_id' => $request->usuario_id
]);
foreach($request->itens as $i){
$i = (object)$i;
$product = Produto::findOrFail($i->id);
ItemVendaSuspensa::create([
'venda_id' => $venda->id,
'produto_id' => $product->id,
'quantidade' => $i->quantidade,
'valor_unitario' => $i->valor_unitario,
'sub_total' => $i->subtotal,
'variacao_id' => null,
]);
}
});
return response()->json($venda, 200);
} catch (\Exception $e) {
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
}
}
public function vendasSuspensa(Request $request){
$data = VendaSuspensa::where('empresa_id', $request->empresa_id)
->orderBy('id', 'desc')
->get();
return view('pdv_mobo.partials.vendas_suspensas', compact('data'))->render();
}
public function vendasDiaria(Request $request){
$data = Nfce::where('empresa_id', $request->empresa_id)
->where('user_id', $request->usuario_id)
->orderBy('id', 'desc')
->whereDate('created_at', date('Y-m-d'))
->get();
return view('pdv_mobo.partials.vendas_diaria', compact('data'))->render();
}
public function vendasDiariaNfe(Request $request){
$data = Nfe::where('empresa_id', $request->empresa_id)
->where('user_id', $request->usuario_id)
->orderBy('id', 'desc')
->whereDate('created_at', date('Y-m-d'))
->get();
return view('pdv_mobo.partials.vendas_diaria_nfe', compact('data'))->render();
}
public function produtosCategoria(Request $request)
{
$categoria_id = $request->categoria_id;
$pesquisa = $request->pesquisa;
if($categoria_id != 0){
$categoria = CategoriaProduto::findOrfail($categoria_id);
}
$mes = date('m');
$ano = date('Y');
$query = Produto::where('produtos.empresa_id', $request->empresa_id)
->leftJoin('item_nfces', function($join) use ($mes, $ano){
$join->on('item_nfces.produto_id', '=', 'produtos.id')
->whereMonth('item_nfces.created_at', $mes)
->whereYear('item_nfces.created_at', $ano);
})
->when(!empty($pesquisa), function ($q) use ($pesquisa) {
return $q->where('produtos.nome', 'LIKE', "%$pesquisa%");
})
->leftJoin('estoques', 'estoques.produto_id', '=', 'produtos.id')
->select(
'produtos.id',
DB::raw('COALESCE(FLOOR(estoques.quantidade), 0) as estoque_atual'),
'produtos.numero_sequencial',
'produtos.codigo_barras',
'produtos.referencia',
'produtos.referencia_balanca',
'produtos.valor_unitario',
'produtos.nome',
'produtos.categoria_id',
'produtos.imagem',
'produtos.gerenciar_estoque',
'produtos.valor_atacado',
'produtos.valor_minimo_venda',
'produtos.quantidade_atacado',
DB::raw('COALESCE(SUM(item_nfces.quantidade), 0) as total_vendido_mes')
)
->where('produtos.status', 1)
->groupBy(
'produtos.id',
'produtos.numero_sequencial',
'produtos.codigo_barras',
'produtos.referencia',
'produtos.referencia_balanca',
'produtos.valor_unitario',
'produtos.nome',
'produtos.categoria_id',
'produtos.imagem',
'produtos.gerenciar_estoque',
'produtos.valor_atacado',
'produtos.valor_minimo_venda',
'produtos.quantidade_atacado'
)
->with('adicionais', 'categoria')
->orderByDesc('total_vendido_mes')
->orderBy('produtos.nome');
if ($categoria_id != 0) {
$query->where('produtos.categoria_id', $categoria_id);
}
return response()->json($query->get());
}
public function produtosCodigoBarras(Request $request){
$produto = Produto::where('produtos.empresa_id', $request->empresa_id)
->leftJoin('estoques', 'estoques.produto_id', '=', 'produtos.id')
->select(
'produtos.id',
DB::raw('COALESCE(FLOOR(estoques.quantidade), 0) as estoque_atual'),
'produtos.numero_sequencial',
'produtos.codigo_barras',
'produtos.referencia',
'produtos.referencia_balanca',
'produtos.valor_unitario',
'produtos.nome',
'produtos.categoria_id',
'produtos.imagem',
'produtos.gerenciar_estoque',
'produtos.valor_atacado',
'produtos.valor_minimo_venda',
'produtos.quantidade_atacado',
)
->where('produtos.status', 1)
->where(function ($q) use ($request) {
$q->where('produtos.codigo_barras', $request->codigo_barras)
->orWhere('produtos.codigo_barras2', $request->codigo_barras)
->orWhere('produtos.codigo_barras3', $request->codigo_barras);
})
->with('adicionais')
->first();
if (!$produto) {
return response()->json(['erro' => 'Produto não encontrado'], 404);
}
return response()->json($produto, 200);
}
public function comandas(Request $request){
$data = Pedido::
where('empresa_id', $request->empresa_id)
->where('status', 1)
->orderBy('created_at', 'desc')
->orderBy('comanda')
->get();
$abertas = $data->pluck('comanda')->toArray();
$comandasFechadas = [];
$config = ConfigGeral::where('empresa_id', $request->empresa_id)->first();
$comandasConfiguradas = 1;
if($config == null || $config->numero_inicial_comanda == null || $config->numero_final_comanda == null){
$comandasConfiguradas = 0;
}else{
for($i=$config->numero_inicial_comanda; $i<=$config->numero_final_comanda; $i++){
if(!in_array($i, $abertas)){
$comandasFechadas[] = [
'numero' => $i,
'total' => 0,
];
}
}
}
return view('pdv_mobo.partials.comandas', compact('data', 'comandasConfiguradas', 'comandasFechadas'));
}
public function updateComanda(Request $request){
$item = Pedido::findOrFail($request->pedido_id);
$item->cliente_id = $request->cliente_id;
$item->total = $request->total;
if($request->cliente_id){
$cliente = Cliente::findOrFail($request->cliente_id);
$item->cliente_nome = $cliente->razao_social;
$item->cliente_fone = $cliente->telefone;
}
if($request->itens && sizeof($request->itens) > 0){
$itensAnterior = $item->itens;
foreach($item->itens as $it){
$it->adicionais()->delete();
$it->pizzas()->delete();
$it->delete();
}
foreach($request->itens as $i){
$impresso = $this->validaItemImpressao($i['id'], $item['subtotal'], $item['quantidade'], $item['observacao'], $itensAnterior);
$dataItem = [
'pedido_id' => $item->id,
'produto_id' => $i['id'],
'observacao' => $i['observacao'] ?? '',
'quantidade' => $i['quantidade'],
'valor_unitario' => $i['valor_unitario'],
'sub_total' => $i['subtotal'],
'estado' => 0,
'tamanho_id' => null,
'impresso' => $impresso
];
$itemPedido = ItemPedido::create($dataItem);
$adicionais = $i['adicionais_escolhidos'] ?? [];
if(sizeof($adicionais) > 0){
foreach($adicionais as $add){
$add = trim($add);
if($add){
ItemAdicional::create([
'item_pedido_id' => $itemPedido->id,
'adicional_id' => $add
]);
}
}
}
$sabores = $i['sabores_escolhidos'] ?? [];
if(sizeof($sabores) > 0){
foreach($sabores as $add){
$add = trim($add);
if($add){
ItemPizzaPedido::create([
'item_pedido_id' => $itemPedido->id,
'produto_id' => $add
]);
}
}
}
}
}
$item->save();
return response()->json("ok", 200);
}
private function validaItemImpressao($produto_id, $sub_total, $quantidade, $observacao, $itensAnterior){
$imprime = ImpressoraPedidoProduto::where('produto_id', $produto_id)->first();
if($imprime == null) return 1;
foreach($itensAnterior as $i){
// if($i->produto_id == $produto_id && $i->sub_total == (float)$sub_total && $i->quantidade == (float)$quantidade){
if($i->produto_id == $produto_id && $i->sub_total == (float)$sub_total && $i->quantidade == (float)$quantidade && $i->observacao == $observacao){
return 1;
}
}
return 0;
}
public function saboresTamanhos(Request $request){
$tamanhosPizza = TamanhoPizza::where('empresa_id', $request->empresa_id)
->where('status', 1)
->get();
$produtoPrincipal = Produto::with('pizzaValores')
->where('id', $request->produto_id)
->first();
$outrosProdutos = Produto::with('pizzaValores')
->whereHas('categoria', function ($q) {
$q->where('tipo_pizza', 1);
})
->where('id', '!=', $request->produto_id)
->get();
$produtos = collect([$produtoPrincipal])->merge($outrosProdutos);
$sabores_escolhidos = json_decode($request->sabores_escolhidos);
$sabores = [];
foreach($produtos as $p){
$sabores[] = [
'id' => $p->id,
'nome' => $p->nome,
'img' => $p->img ?? null,
'valores' => $p->pizzaValores ?? [],
'selecionado' => in_array($p->id, $sabores_escolhidos)
];
}
return view('pdv_mobo.partials.sabores', compact('tamanhosPizza', 'sabores'));
}
public function storeNfe(Request $request){
try {
$venda = DB::transaction(function () use ($request) {
$empresa = $config = Empresa::find($request->empresa_id);
$caixa = Caixa::where('usuario_id', $request->usuario_id)
->where('status', 1)
->first();
$config = __objetoParaEmissao($config, $caixa->local_id);
$numero_nfe = $config->numero_ultima_nfe_producao;
if ($config->ambiente == 2) {
$numero_nfe = $config->numero_ultima_nfe_homologacao;
}
$numeroSerieNfe = $config->numero_serie_nfe ? $config->numero_serie_nfe : 1;
$tipoPagamento = $request->tipo_pagamento;
if($request->fatura && sizeof($request->fatura) > 1){
$tipoPagamento = '99';
}
$cliente = null;
if(!$request->cliente_id){
return response()->json("Selecione o cliente!", 401);
}
$cliente = Cliente::findOrFail($request->cliente_id);
$dataVenda = [
'natureza_id' => $request->natureza_id ? $request->natureza_id : $empresa->natureza_id_pdv,
'emissor_nome' => $config->nome,
'emissor_cpf_cnpj' => $config->cpf_cnpj,
'ambiente' => $config->ambiente,
'chave' => '',
'cliente_id' => $request->cliente_id,
'numero_serie' => $numeroSerieNfe,
'numero' => $numero_nfe + 1,
'cliente_nome' => $cliente ? $cliente->razao_social : '',
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
'estado' => 'novo',
'total' => ($request->valor_total),
'desconto' => $request->desconto ? ($request->desconto) : 0,
'valor_cashback' => 0,
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
'valor_produtos' => ($request->valor_total) ?? 0,
'caixa_id' => $caixa->id,
'local_id' => $caixa->local_id,
'observacao' => $request->observacao,
'dinheiro_recebido' => 0,
'troco' => $request->troco,
'tipo_pagamento' => $tipoPagamento,
'cnpj_cartao' => $request->cnpj_cartao ?? '',
'bandeira_cartao' => $request->bandeira_cartao ?? '',
'cAut_cartao' => $request->cAut_cartao ?? '',
'user_id' => $request->usuario_id,
'empresa_id' => $request->empresa_id,
'valor_entrega' => 0,
'numero_sequencial' => $this->getLastNumero($request->empresa_id)
];
$nfe = Nfe::create($dataVenda);
foreach($request->itens as $i){
$i = (object)$i;
$product = Produto::findOrFail($i->id);
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
$cfop = $product->cfop_estadual;
if($cliente->cidade->uf != $config->cidade->uf){
$cfop = $product->cfop_outro_estado;
}
$variacao_id = null;
$itemNfce = ItemNfe::create([
'nfe_id' => $nfe->id,
'produto_id' => $product->id,
'quantidade' => (float)str_replace(",", ".", $i->quantidade),
'valor_unitario' => $i->valor_unitario,
'sub_total' => $i->subtotal,
'observacao' => $i->observacao ?? '',
'perc_icms' => __convert_value_bd($product->perc_icms),
'perc_pis' => __convert_value_bd($product->perc_pis),
'perc_cofins' => __convert_value_bd($product->perc_cofins),
'perc_ipi' => __convert_value_bd($product->perc_ipi),
'cst_csosn' => $product->cst_csosn,
'cst_pis' => $product->cst_pis,
'cst_cofins' => $product->cst_cofins,
'cst_ipi' => $product->cst_ipi,
'cfop' => $cfop,
'ncm' => $product->ncm,
'variacao_id' => $variacao_id,
]);
if ($product->gerenciar_estoque) {
$this->util->reduzEstoque($product->id, __convert_value_bd($i->quantidade), $variacao_id, $caixa->local_id);
$tipo = 'reducao';
$codigo_transacao = $nfe->id;
$tipo_transacao = 'venda_nfe';
$this->util->movimentacaoProduto($product->id, __convert_value_bd($i->quantidade), $tipo, $codigo_transacao, $tipo_transacao, $request->usuario_id, $variacao_id);
}
if($product->prazo_garantia > 0 && $nfce->cliente_id != null){
Garantia::create([
'empresa_id' => $request->empresa_id,
'cliente_id' => $nfe->cliente_id,
'produto_id' => $product->id,
'nfe_id' => $nfe->id,
'usuario_id' => $request->usuario_id,
'prazo_garantia' => $product->prazo_garantia,
'data_venda' => date('Y-m-d')
]);
}
}
if ($request->fatura && $request->fatura[0]['valor'] > 0) {
foreach($request->fatura as $key => $f){
$f = (object)$f;
$dataAtual = date('Y-m-d');
$vencimento = $f->data;
if($f->data && strtotime($vencimento) > strtotime($dataAtual)){
ContaReceber::create([
'nfce_id' => null,
'nfe_id' => $nfe->id,
'cliente_id' => $request->cliente_id,
'data_vencimento' => $vencimento,
'data_recebimento' => $vencimento,
'valor_integral' => __convert_value_bd($f->valor),
'valor_recebido' => 0,
'status' => 0,
'descricao' => 'Venda Pedido #' . $nfce->numero_sequencial . " Parcela " . ($key+1) . " de " . sizeof($request->fatura),
'empresa_id' => $request->empresa_id,
'juros' => 0,
'multa' => 0,
'observacao' => $request->obs_row[$i] ?? '',
'tipo_pagamento' => $f->forma,
'local_id' => $caixa->local_id,
'referencia' => "Pedido " . $nfce->numero_sequencial
]);
}
FaturaNfe::create([
'nfe_id' => $nfe->id,
'tipo_pagamento' => $f->forma,
'data_vencimento' => $f->data ? $f->data : date('Y-m-d'),
'valor' => __convert_value_bd($f->valor)
]);
}
}
return $nfe;
});
return response()->json($venda, 200);
} catch (\Exception $e) {
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
}
}
}