2943 lines
125 KiB
PHP
2943 lines
125 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Caixa;
|
|
use App\Models\ComissaoVenda;
|
|
use App\Models\ContaReceber;
|
|
use App\Models\Empresa;
|
|
use App\Models\PdvLog;
|
|
use App\Models\CreditoCliente;
|
|
use App\Models\User;
|
|
use App\Models\SuprimentoCaixa;
|
|
use App\Models\SangriaCaixa;
|
|
use App\Models\FaturaNfce;
|
|
use App\Models\ItemAdicionalNfce;
|
|
use App\Models\ItemAdicional;
|
|
use App\Models\MargemComissao;
|
|
use App\Models\ItemServicoNfce;
|
|
use App\Models\CategoriaAdicional;
|
|
use App\Models\ConfiguracaoCardapio;
|
|
use App\Models\ItemNfce;
|
|
use App\Models\ItemPedido;
|
|
use App\Models\TamanhoPizza;
|
|
use App\Models\Mesa;
|
|
use App\Models\VendaSuspensa;
|
|
use App\Models\ItemPizzaNfce;
|
|
use App\Models\ItemPizzaPedido;
|
|
use App\Models\CarrinhoCardapio;
|
|
use App\Models\ItemVendaSuspensa;
|
|
use App\Models\Localizacao;
|
|
use App\Models\Agendamento;
|
|
use App\Models\CashBackCliente;
|
|
use App\Models\Cliente;
|
|
use App\Models\Estoque;
|
|
use App\Models\Pedido;
|
|
use App\Models\ItemListaPreco;
|
|
use App\Models\PedidoDelivery;
|
|
use App\Models\MotoboyComissao;
|
|
use App\Models\ItemPedidoDelivery;
|
|
use App\Models\Nfce;
|
|
use App\Models\Nfe;
|
|
use App\Models\ItemNfe;
|
|
use App\Models\FaturaNfe;
|
|
use App\Models\ImpressoraPedidoProduto;
|
|
use App\Models\ConfigGeral;
|
|
use App\Models\ProdutoVariacao;
|
|
use App\Models\Produto;
|
|
use App\Models\CategoriaProduto;
|
|
use App\Models\Marca;
|
|
use App\Models\UsuarioAcesso;
|
|
use App\Models\CashBackConfig;
|
|
use App\Models\ProdutoTributacaoLocal;
|
|
use App\Models\Funcionario;
|
|
use App\Models\UsuarioEmissao;
|
|
use App\Utils\EstoqueUtil;
|
|
use Dflydev\DotAccessData\Util;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Utils\WhatsAppUtil;
|
|
use App\Models\RegistroTef;
|
|
use Illuminate\Support\Str;
|
|
use App\Utils\FilaEnvioUtil;
|
|
use App\Models\Garantia;
|
|
use App\Utils\Fiscal\FiscalValidator;
|
|
|
|
class FrontBoxController extends Controller
|
|
{
|
|
protected $util;
|
|
protected $utilWhatsApp;
|
|
protected $filaEnvioUtil;
|
|
|
|
public function __construct(EstoqueUtil $util, WhatsAppUtil $utilWhatsApp, FilaEnvioUtil $filaEnvioUtil)
|
|
{
|
|
$this->util = $util;
|
|
$this->utilWhatsApp = $utilWhatsApp;
|
|
$this->filaEnvioUtil = $filaEnvioUtil;
|
|
}
|
|
|
|
public function faturaPadraoCliente(Request $request){
|
|
try {
|
|
$cliente = Cliente::findOrFail($request->cliente_id);
|
|
$total = $request->total;
|
|
|
|
$data = [];
|
|
$somaLoop = 0;
|
|
$dataAtual = date('Y-m-d');
|
|
if($cliente->fatura){
|
|
$valorParcela = (float)number_format($total/sizeof($cliente->fatura), 2, '.', '');
|
|
|
|
foreach($cliente->fatura as $key => $f){
|
|
|
|
$vencimento = date('Y-m-d', strtotime($dataAtual. " + $f->dias_vencimento days"));
|
|
|
|
$temp['tipo_pagamento'] = $f->tipo_pagamento;
|
|
$temp['vencimento'] = $vencimento;
|
|
|
|
if($key+1 == sizeof($cliente->fatura)){
|
|
$temp['valor'] = $total - $somaLoop;
|
|
|
|
}else{
|
|
$somaLoop += $valorParcela;
|
|
$temp['valor'] = $valorParcela;
|
|
}
|
|
|
|
$data[] = $temp;
|
|
}
|
|
}
|
|
|
|
return view('front_box.partials.row_fatura_cliente', compact('data'))->render();
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function pdvLog(Request $request){
|
|
try{
|
|
PdvLog::create($request->all());
|
|
return response()->json("ok", 200);
|
|
}catch(\Exception $e){
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function faturaPadraoClientePdv(Request $request){
|
|
try {
|
|
$cliente = Cliente::findOrFail($request->cliente_id);
|
|
$total = $request->total;
|
|
|
|
$data = [];
|
|
$somaLoop = 0;
|
|
$dataAtual = date('Y-m-d');
|
|
if($cliente->fatura){
|
|
$valorParcela = (float)number_format($total/sizeof($cliente->fatura), 2, '.', '');
|
|
|
|
foreach($cliente->fatura as $key => $f){
|
|
|
|
$vencimento = date('Y-m-d', strtotime($dataAtual. " + $f->dias_vencimento days"));
|
|
|
|
$temp['tipo_pagamento'] = $f->tipo_pagamento;
|
|
$temp['vencimento'] = $vencimento;
|
|
|
|
if($key+1 == sizeof($cliente->fatura)){
|
|
$temp['valor'] = $total - $somaLoop;
|
|
|
|
}else{
|
|
$somaLoop += $valorParcela;
|
|
$temp['valor'] = $valorParcela;
|
|
}
|
|
$data[] = $temp;
|
|
}
|
|
}
|
|
|
|
return view('front_box.partials.row_fatura_cliente_pdv', compact('data'))->render();
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function gerarFatura(Request $request){
|
|
try {
|
|
|
|
$entrada_fatura = $request->entrada_fatura;
|
|
$tipo_pagamento = $request->tipo_pagamento_fatura;
|
|
$parcelas_fatura = $request->parcelas_fatura;
|
|
$intervalo_fatura = $request->intervalo_fatura;
|
|
$primeiro_vencimento_fatura = $request->primeiro_vencimento_fatura;
|
|
$total = $request->total;
|
|
|
|
if($primeiro_vencimento_fatura == ''){
|
|
$primeiro_vencimento_fatura = date('Y-m-d');
|
|
}
|
|
|
|
$somaFatura = $total;
|
|
if($request->entrada_fatura){
|
|
$somaFatura -= __convert_value_bd($entrada_fatura);
|
|
$parcelas_fatura--;
|
|
}
|
|
|
|
$valorParcela = $somaFatura/$parcelas_fatura;
|
|
$valorParcela = (float)number_format($valorParcela, 2, '.', '');
|
|
if($request->entrada_fatura){
|
|
$parcelas_fatura++;
|
|
}
|
|
|
|
$data = [];
|
|
$somaLoop = 0;
|
|
for($i=0; $i<$parcelas_fatura; $i++){
|
|
if($i == 0){
|
|
$vencimento = $primeiro_vencimento_fatura;
|
|
}else{
|
|
$vencimento = date('Y-m-d', strtotime($vencimento. " + $intervalo_fatura days"));
|
|
}
|
|
|
|
$p['vencimento'] = $vencimento;
|
|
|
|
if($request->entrada_fatura > 0 && $i == 0){
|
|
$p['valor'] = __convert_value_bd($request->entrada_fatura);
|
|
$somaLoop += __convert_value_bd($request->entrada_fatura);
|
|
|
|
}else{
|
|
|
|
if($i == $parcelas_fatura-1){
|
|
$p['valor'] = $total - $somaLoop;
|
|
}else{
|
|
$p['valor'] = $valorParcela;
|
|
$somaLoop += $valorParcela;
|
|
}
|
|
}
|
|
|
|
|
|
array_push($data, $p);
|
|
}
|
|
// return response()->json($tipo_pagamento, 401);
|
|
|
|
return view('front_box.partials.row_fatura', compact('data', 'tipo_pagamento'))->render();
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function gerarFaturaPdv(Request $request){
|
|
try {
|
|
|
|
$entrada_fatura = $request->entrada_fatura;
|
|
$tipo_pagamento = $request->tipo_pagamento_fatura;
|
|
$parcelas_fatura = $request->parcelas_fatura;
|
|
$intervalo_fatura = $request->intervalo_fatura;
|
|
$primeiro_vencimento_fatura = $request->primeiro_vencimento_fatura;
|
|
$total = $request->total;
|
|
|
|
if($primeiro_vencimento_fatura == ''){
|
|
$primeiro_vencimento_fatura = date('Y-m-d');
|
|
}
|
|
|
|
$somaFatura = $total;
|
|
if($request->entrada_fatura){
|
|
$somaFatura -= __convert_value_bd($entrada_fatura);
|
|
$parcelas_fatura--;
|
|
}
|
|
|
|
$valorParcela = $somaFatura/$parcelas_fatura;
|
|
// $valorParcela = __convert_value_bd($valorParcela);
|
|
$valorParcela = (float)number_format($valorParcela, 2, '.', '');
|
|
// $parcelas_fatura++;
|
|
if($request->entrada_fatura){
|
|
$parcelas_fatura++;
|
|
}
|
|
|
|
$data = [];
|
|
$somaLoop = 0;
|
|
for($i=0; $i<$parcelas_fatura; $i++){
|
|
if($i == 0){
|
|
$vencimento = $primeiro_vencimento_fatura;
|
|
}else{
|
|
$vencimento = date('Y-m-d', strtotime($vencimento. " + $intervalo_fatura days"));
|
|
}
|
|
|
|
$p['vencimento'] = $vencimento;
|
|
|
|
if($request->entrada_fatura && $i == 0){
|
|
$p['valor'] = __convert_value_bd($request->entrada_fatura);
|
|
$somaLoop += __convert_value_bd($request->entrada_fatura);
|
|
|
|
}else{
|
|
if($i == $parcelas_fatura-1){
|
|
$p['valor'] = $total - $somaLoop;
|
|
}else{
|
|
$p['valor'] = $valorParcela;
|
|
$somaLoop += $valorParcela;
|
|
}
|
|
}
|
|
|
|
|
|
array_push($data, $p);
|
|
}
|
|
return response()->json($data, 200);
|
|
|
|
// return view('front_box.partials.row_fatura_pdv', compact('data', 'tipo_pagamento'))->render();
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function gerarFaturaPdv2(Request $request){
|
|
try {
|
|
|
|
$entrada_fatura = $request->entrada_fatura;
|
|
$tipo_pagamento = $request->tipo_pagamento_fatura;
|
|
$parcelas_fatura = $request->parcelas_fatura;
|
|
$intervalo_fatura = $request->intervalo_fatura;
|
|
$primeiro_vencimento_fatura = $request->primeiro_vencimento_fatura;
|
|
$total = $request->total;
|
|
|
|
if($primeiro_vencimento_fatura == ''){
|
|
$primeiro_vencimento_fatura = date('Y-m-d');
|
|
}
|
|
|
|
$somaFatura = $total;
|
|
if($request->entrada_fatura){
|
|
$somaFatura -= __convert_value_bd($entrada_fatura);
|
|
$parcelas_fatura--;
|
|
}
|
|
|
|
$valorParcela = $somaFatura/$parcelas_fatura;
|
|
// $valorParcela = (float)number_format($valorParcela, 2, '.');
|
|
$valorParcela = (float)number_format($valorParcela, 2, '.', '');
|
|
if($request->entrada_fatura){
|
|
$parcelas_fatura++;
|
|
}
|
|
|
|
$data = [];
|
|
$somaLoop = 0;
|
|
for($i=0; $i<$parcelas_fatura; $i++){
|
|
if($i == 0){
|
|
$vencimento = $primeiro_vencimento_fatura;
|
|
}else{
|
|
$vencimento = date('Y-m-d', strtotime($vencimento. " + $intervalo_fatura days"));
|
|
}
|
|
|
|
$p['vencimento'] = $vencimento;
|
|
|
|
if($request->entrada_fatura && $i == 0){
|
|
$p['valor'] = __convert_value_bd($request->entrada_fatura);
|
|
$somaLoop += __convert_value_bd($request->entrada_fatura);
|
|
|
|
}else{
|
|
if($i == $parcelas_fatura-1){
|
|
$p['valor'] = $total - $somaLoop;
|
|
}else{
|
|
$p['valor'] = $valorParcela;
|
|
$somaLoop += $valorParcela;
|
|
}
|
|
}
|
|
|
|
|
|
array_push($data, $p);
|
|
}
|
|
// return response()->json($tipo_pagamento, 401);
|
|
$config = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
$tiposPagamento = Nfce::tiposPagamento();
|
|
// dd($tiposPagamento);
|
|
if($config != null){
|
|
$config->tipos_pagamento_pdv = $config != null && $config->tipos_pagamento_pdv ? json_decode($config->tipos_pagamento_pdv) : [];
|
|
$temp = [];
|
|
if(sizeof($config->tipos_pagamento_pdv) > 0){
|
|
foreach($tiposPagamento as $key => $t){
|
|
if(in_array($t, $config->tipos_pagamento_pdv)){
|
|
$temp[$key] = $t;
|
|
}
|
|
}
|
|
$tiposPagamento = $temp;
|
|
}
|
|
}
|
|
return view('front_box.partials_form2.row_fatura_pdv2', compact('data', 'tipo_pagamento', 'tiposPagamento'))->render();
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function linhaProdutoVenda(Request $request)
|
|
{
|
|
try {
|
|
|
|
$qtd = __convert_value_bd($request->qtd);
|
|
$value_unit = __convert_value_bd($request->value_unit);
|
|
$sub_total = __convert_value_bd($request->sub_total);
|
|
$product_id = $request->product_id;
|
|
$variacao_id = $request->variacao_id;
|
|
$key = $request->key;
|
|
$local_id = $request->local_id;
|
|
|
|
$variacao = null;
|
|
if($variacao_id){
|
|
$variacao = ProdutoVariacao::findOrfail($variacao_id);
|
|
}
|
|
|
|
$product = Produto::findOrFail($product_id);
|
|
if ($product->gerenciar_estoque == true) {
|
|
if($product->combo){
|
|
$estoqueMsg = $this->util->verificaEstoqueCombo($product, (float)$qtd);
|
|
if($estoqueMsg != ""){
|
|
return response()->json($estoqueMsg, 401);
|
|
}
|
|
}else{
|
|
$estoque = Estoque::where('produto_id', $product->id)
|
|
->when($variacao_id != null, function ($q) use ($variacao_id) {
|
|
return $q->where('produto_variacao_id', $variacao_id);
|
|
})
|
|
->where('local_id', $local_id)->first();
|
|
if ($estoque == null) {
|
|
return response()->json("Produto sem estoque", 401);
|
|
} else if ($estoque->quantidade < $qtd) {
|
|
return response()->json("Produto com estoque insuficiente" . $qtd, 401);
|
|
}
|
|
}
|
|
}
|
|
return view('front_box.partials.row_frontBox',
|
|
compact('product', 'qtd', 'value_unit', 'sub_total', 'key', 'variacao_id', 'variacao'));
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function linhaProdutoVendaAdd(Request $request)
|
|
{
|
|
$product = Produto::findOrFail($request->id);
|
|
$lista_id = $request->lista_id;
|
|
$local_id = $request->local_id;
|
|
|
|
if($product->variacao_modelo_id){
|
|
return response("produto com variação", 402);
|
|
}
|
|
$qtd = __convert_value_bd($request->qtd);
|
|
try{
|
|
$qtd = (float)$qtd+1;
|
|
}catch(\Exception $e){
|
|
|
|
}
|
|
try {
|
|
|
|
$product = __tributacaoProdutoLocalVenda($product, $local_id);
|
|
if($lista_id){
|
|
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
|
|
->where('produto_id', $product->id)
|
|
->first();
|
|
if($itemLista != null){
|
|
$product->valor_unitario = $itemLista->valor;
|
|
}
|
|
}
|
|
|
|
if($product->precoComPromocao()){
|
|
$product->valor_unitario = $product->precoComPromocao()->valor;
|
|
}
|
|
|
|
$value_unit = $product->valor_unitario;
|
|
$sub_total = $product->valor_unitario;
|
|
$variacao_id = $request->variacao_id;
|
|
$product_id = $product->id;
|
|
|
|
// $key = $request->key;
|
|
if ($product->gerenciar_estoque == true) {
|
|
if($product->combo){
|
|
$estoqueMsg = $this->util->verificaEstoqueCombo($product, (float)$qtd);
|
|
if($estoqueMsg != ""){
|
|
return response()->json($estoqueMsg, 401);
|
|
}
|
|
}else{
|
|
|
|
$estoque = Estoque::where('produto_id', $product->id)
|
|
->where('local_id', $local_id)->first();
|
|
if ($estoque == null) {
|
|
return response()->json("Produto sem estoque", 401);
|
|
} else if ($estoque->quantidade < $qtd) {
|
|
return response()->json("Produto com estoque insuficiente", 401);
|
|
}
|
|
}
|
|
}
|
|
$variacao = null;
|
|
|
|
$qtd = __moeda($qtd);
|
|
return view('front_box.partials.row_frontBox',
|
|
compact('product', 'qtd', 'value_unit', 'sub_total', 'variacao_id', 'variacao'));
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function linhaParcelaVenda(Request $request)
|
|
{
|
|
try {
|
|
$tipo_pagamento_row = $request->tipo_pagamento_row;
|
|
$data_vencimento_row = $request->data_vencimento_row;
|
|
$valor_integral_row = $request->valor_integral_row;
|
|
$quantidade = $request->quantidade;
|
|
$obs_row = $request->obs_row;
|
|
|
|
$tipo = Nfce::getTipoPagamento($tipo_pagamento_row);
|
|
return view('front_box.partials.row_pagamento_multiplo', compact(
|
|
'valor_integral_row',
|
|
'data_vencimento_row',
|
|
'quantidade',
|
|
'tipo',
|
|
'obs_row',
|
|
'tipo_pagamento_row'
|
|
));
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
private function rateioCashBack($valor_cashback, $nfce){
|
|
$data = CashBackCliente::where('empresa_id', $nfce->empresa_id)
|
|
->where('status', 1)
|
|
->where('cliente_id', $nfce->cliente_id)
|
|
->get();
|
|
|
|
$cliente = Cliente::findOrFail($nfce->cliente_id);
|
|
$cliente->valor_cashback -= $valor_cashback;
|
|
$cliente->save();
|
|
|
|
$soma = 0;
|
|
foreach($data as $i){
|
|
if($soma < $valor_cashback){
|
|
$valorCredito = $i->valor_credito;
|
|
if($valorCredito <= $valor_cashback){
|
|
$i->status = 0;
|
|
$i->valor_credito = 0;
|
|
$i->save();
|
|
$soma += $valorCredito;
|
|
}else{
|
|
$i->valor_credito -= ($valor_cashback - $soma);
|
|
$i->save();
|
|
$soma = $valor_cashback;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function rateioCredito($valorCredito, $nfce){
|
|
$data = CreditoCliente::where('status', 1)
|
|
->where('cliente_id', $nfce->cliente_id)
|
|
->get();
|
|
|
|
$valorCredito = __convert_value_bd($valorCredito);
|
|
|
|
$soma = 0;
|
|
foreach($data as $i){
|
|
if($soma < $valorCredito){
|
|
if($i->valor <= $valorCredito){
|
|
$i->status = 0;
|
|
$i->save();
|
|
$soma += $i->valor;
|
|
}else{
|
|
$i->valor -= ($valorCredito - $soma);
|
|
$i->save();
|
|
$soma = $valorCredito;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function saveCashBack($venda){
|
|
$config = CashBackConfig::where('empresa_id', $venda->empresa_id)
|
|
->first();
|
|
if($venda->cliente && $config != null){
|
|
|
|
if($venda->total >= $config->valor_minimo_venda){
|
|
$valor_percentual = $config->valor_percentual;
|
|
$dias_expiracao = $config->dias_expiracao;
|
|
|
|
$valor_credito = $venda->total * ($valor_percentual/100);
|
|
$data = [
|
|
'empresa_id' => $venda->empresa_id,
|
|
'cliente_id' => $venda->cliente_id,
|
|
'tipo' => 'pdv',
|
|
'venda_id' => $venda->id,
|
|
'valor_venda' => $venda->total,
|
|
'valor_credito' => $valor_credito,
|
|
'valor_percentual' => $valor_percentual,
|
|
'status' => 1,
|
|
'data_expiracao' => date('Y-m-d', strtotime("+$dias_expiracao days"))
|
|
];
|
|
$cashBackCliente = CashBackCliente::create($data);
|
|
|
|
$cliente = $venda->cliente;
|
|
$cliente->valor_cashback = $cliente->valor_cashback + $valor_credito;
|
|
$cliente->save();
|
|
|
|
$this->sendWhatsMessage($cashBackCliente, $venda->local_id);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function sendWhatsMessage($cashBackCliente, $local_id){
|
|
|
|
if($cashBackCliente->cliente->telefone != ''){
|
|
$config = CashBackConfig::where('empresa_id', $cashBackCliente->cliente->empresa_id)
|
|
->first();
|
|
|
|
$message = $config->mensagem_padrao_whatsapp;
|
|
$telefone = "55".preg_replace('/[^0-9]/', '', $cashBackCliente->cliente->telefone);
|
|
|
|
$nomeCliente = $cashBackCliente->cliente->razao_social;
|
|
if($cashBackCliente->cliente->nome_fantasia != ''){
|
|
$nomeCliente = $cashBackCliente->cliente->nome_fantasia;
|
|
}
|
|
|
|
$message = str_replace("{credito}", __moeda($cashBackCliente->valor_credito), $message);
|
|
$message = str_replace("{expiracao}", __data_pt($cashBackCliente->data_expiracao, 0), $message);
|
|
$message = str_replace("{nome}", $nomeCliente, $message);
|
|
|
|
// $retorno = $this->utilWhatsApp->sendMessage($telefone, $message, $cashBackCliente->cliente->empresa_id);
|
|
$retorno = $this->utilWhatsApp->sendMessageWithLocal($telefone, $message, $local_id);
|
|
}
|
|
}
|
|
|
|
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' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'observacao' => $request->observacao,
|
|
'tipo_pagamento' => $request->tipo_pagamento ?? '',
|
|
'local_id' => $caixa->local_id,
|
|
'user_id' => $request->usuario_id
|
|
]);
|
|
|
|
if($request->produto_id){
|
|
for ($i = 0; $i < sizeof($request->produto_id); $i++) {
|
|
$variacao_id = isset($request->variacao_id[$i]) ? $request->variacao_id[$i] : null;
|
|
ItemVendaSuspensa::create([
|
|
'venda_id' => $venda->id,
|
|
'produto_id' => (int)$request->produto_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario[$i]),
|
|
'sub_total' => __convert_value_bd($request->subtotal_item[$i]),
|
|
'variacao_id' => $variacao_id,
|
|
]);
|
|
}
|
|
}
|
|
|
|
});
|
|
return response()->json($venda, 200);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function suspenderUpdate(Request $request)
|
|
{
|
|
|
|
try {
|
|
|
|
$venda = DB::transaction(function () use ($request) {
|
|
$config = Empresa::find($request->empresa_id);
|
|
|
|
$data = [
|
|
'cliente_id' => $request->cliente_id,
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'observacao' => $request->observacao,
|
|
'tipo_pagamento' => $request->tipo_pagamento ?? '',
|
|
];
|
|
|
|
$item = VendaSuspensa::findOrfail($request->venda_suspensa_id);
|
|
if($item){
|
|
$item->fill($data)->save();
|
|
$item->itens()->delete();
|
|
if($request->produto_id){
|
|
for ($i = 0; $i < sizeof($request->produto_id); $i++) {
|
|
$variacao_id = isset($request->variacao_id[$i]) ? $request->variacao_id[$i] : null;
|
|
ItemVendaSuspensa::create([
|
|
'venda_id' => $item->id,
|
|
'produto_id' => (int)$request->produto_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario[$i]),
|
|
'sub_total' => __convert_value_bd($request->subtotal_item[$i]),
|
|
'variacao_id' => $variacao_id,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|
|
return response()->json($venda, 200);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function vendasSuspensas(Request $request){
|
|
$data = VendaSuspensa::where('empresa_id', $request->empresa_id)
|
|
->orderBy('id', 'desc')
|
|
->get();
|
|
|
|
return view('front_box.partials.vendas_suspensas', compact('data'))->render();
|
|
}
|
|
|
|
public function orcamentos(Request $request){
|
|
$data = Nfe::where('empresa_id', $request->empresa_id)
|
|
->where('tpNF', 1)->where('orcamento', 1)
|
|
->orderBy('id', 'desc')
|
|
->get();
|
|
|
|
return view('front_box.partials.orcamentos', compact('data'))->render();
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
private function getLastNumeroNfe($empresa_id){
|
|
$last = Nfe::where('empresa_id', $empresa_id)
|
|
->orderBy('numero_sequencial', 'desc')
|
|
->where('numero_sequencial', '>', 0)->first();
|
|
$numero = $last != null ? $last->numero_sequencial : 0;
|
|
$numero++;
|
|
return $numero;
|
|
}
|
|
|
|
private function validaCreditoCliente($request){
|
|
if($request->cliente_id == null){
|
|
return 0;
|
|
}
|
|
|
|
$config = ConfigGeral::where('empresa_id', $request->empresa_id)->first();
|
|
if($config == null || $config->limitar_credito_cliente == 0){
|
|
return 0;
|
|
}
|
|
|
|
if(!isset($request->tipo_pagamento_row) && $request->tipo_pagamento != '06'){
|
|
return 0;
|
|
}
|
|
$cliente = Cliente::findOrFail($request->cliente_id);
|
|
$faturaPrazo = 0;
|
|
$total = 0;
|
|
|
|
if($request->tipo_pagamento_row){
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
$vencimento = $request->data_vencimento_row[$i];
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
$faturaPrazo = 1;
|
|
$total += __convert_value_bd($request->valor_integral_row[$i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if($faturaPrazo == 0 && $request->tipo_pagamento == '06'){
|
|
$faturaPrazo = 1;
|
|
}
|
|
|
|
if($faturaPrazo == 0){
|
|
return 0;
|
|
}
|
|
|
|
if($cliente->limite_credito == null || $cliente->limite_credito == 0){
|
|
return "Cliente sem limite de crédito definido!";
|
|
}
|
|
|
|
$somaPendente = ContaReceber::where('cliente_id', $cliente->id)
|
|
->where('status', 0)->sum('valor_integral');
|
|
if($total == 0){
|
|
$total = __convert_value_bd($request->valor_total);
|
|
}
|
|
$somaPendente += $total;
|
|
if($somaPendente > $cliente->limite_credito){
|
|
return "Limite de crédito do cliente ultrapassou em R$ " . __moeda($somaPendente-$cliente->limite_credito) .
|
|
"\nTotal de crédito definido para este cliente R$ " . __moeda($cliente->limite_credito);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
try {
|
|
|
|
$retornoCredito = $this->validaCreditoCliente($request);
|
|
if($retornoCredito != 0){
|
|
return response()->json($retornoCredito, 401);
|
|
}
|
|
|
|
$nfce = DB::transaction(function () use ($request) {
|
|
// $caixa = __isCaixaAberto();
|
|
$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;
|
|
}
|
|
|
|
if(isset($request->valor_cashback) && $request->valor_cashback > 0){
|
|
// $request->desconto = __convert_value_bd($request->valor_cashback);
|
|
}
|
|
|
|
$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;
|
|
}
|
|
if(isset($request->tipo_pagamento_row)){
|
|
$tipoPagamentoPrincipal = $request->tipo_pagamento_row ? '99' : $request->tipo_pagamento;
|
|
}
|
|
|
|
$pagamentos = null;
|
|
if(isset($request->pagamentos)){
|
|
//novo modelo de pdv
|
|
$pagamentos = $request->pagamentos;
|
|
$tipoPagamentoPrincipal = $pagamentos[0]['tipo'];
|
|
}
|
|
|
|
$request->merge([
|
|
'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,
|
|
'lista_id' => $request->lista_id,
|
|
'numero' => $numero_nfce + 1,
|
|
'cliente_nome' => $request->cliente_nome ?? '',
|
|
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'valor_cashback' => $request->valor_cashback ? __convert_value_bd($request->valor_cashback) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'valor_frete' => $request->valor_frete ? __convert_value_bd($request->valor_frete) : 0,
|
|
'caixa_id' => $caixa->id,
|
|
'local_id' => $caixa->local_id,
|
|
'observacao' => $request->observacao ?? '',
|
|
'dinheiro_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0,
|
|
'troco' => $request->troco ? __convert_value_bd($request->troco) : 0,
|
|
'tipo_pagamento' => $tipoPagamentoPrincipal,
|
|
'cnpj_cartao' => $request->cnpj_cartao ?? '',
|
|
'bandeira_cartao' => $request->bandeira_cartao ?? '',
|
|
'cAut_cartao' => $request->cAut_cartao ?? '',
|
|
'user_id' => $request->usuario_id,
|
|
'valor_entrega' => isset($request->valor_entrega) ? $request->valor_entrega : 0,
|
|
'numero_sequencial' => $this->getLastNumero($request->empresa_id)
|
|
]);
|
|
$nfce = Nfce::create($request->all());
|
|
if($request->produto_id){
|
|
for ($i = 0; $i < sizeof($request->produto_id); $i++) {
|
|
$product = Produto::findOrFail($request->produto_id[$i]);
|
|
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
|
|
$variacao_id = isset($request->variacao_id[$i]) ? $request->variacao_id[$i] : null;
|
|
$itemNfce = ItemNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'produto_id' => (int)$request->produto_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario[$i]),
|
|
'sub_total' => __convert_value_bd($request->subtotal_item[$i]),
|
|
'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' => $product->cfop_estadual,
|
|
'ncm' => $product->ncm,
|
|
'variacao_id' => $variacao_id,
|
|
]);
|
|
|
|
if(isset($request->adicionais[$i])){
|
|
$adicionais = explode(",", $request->adicionais[$i]);
|
|
foreach($adicionais as $add){
|
|
|
|
if($add){
|
|
ItemAdicionalNfce::create([
|
|
'item_nfce_id' => $itemNfce->id,
|
|
'adicional_id' => $add
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($product->gerenciar_estoque) {
|
|
$this->util->reduzEstoque($product->id, __convert_value_bd($request->quantidade[$i]), $variacao_id, $caixa->local_id);
|
|
|
|
$tipo = 'reducao';
|
|
$codigo_transacao = $nfce->id;
|
|
$tipo_transacao = 'venda_nfce';
|
|
|
|
$this->util->movimentacaoProduto($product->id, __convert_value_bd($request->quantidade[$i]), $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' => $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->servico_id){
|
|
for ($i = 0; $i < sizeof($request->servico_id); $i++) {
|
|
ItemServicoNfce::create(
|
|
[
|
|
'nfce_id' => $nfce->id,
|
|
'servico_id' => $request->servico_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade_servico[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario_servico[$i]),
|
|
'sub_total' => __convert_value_bd($request->valor_unitario_servico[$i]) * __convert_value_bd($request->quantidade_servico[$i]),
|
|
'observacao' => ''
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
if($request->agendamento_id){
|
|
$agendamento = Agendamento::findOrFail($request->agendamento_id);
|
|
$agendamento->status = 1;
|
|
$agendamento->nfce_id = $nfce->id;
|
|
$agendamento->save();
|
|
}
|
|
|
|
if(isset($request->tef_hash) && $request->tef_hash){
|
|
$registroTef = RegistroTef::where('hash', $request->tef_hash)->first();
|
|
if($registroTef){
|
|
$registroTef->nfce_id = $nfce->id;
|
|
$registroTef->save();
|
|
}
|
|
}
|
|
|
|
|
|
if(isset($request->pagamentos)){
|
|
//novo modelo de pdv
|
|
$pagamentos = $request->pagamentos;
|
|
if($pagamentos){
|
|
foreach($pagamentos as $p){
|
|
$vencimento = isset($p['dataVencimento']) ? $p['dataVencimento'] : date('Y-m-d');
|
|
$dataAtual = date('Y-m-d');
|
|
if(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' => $p['valor'],
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'descricao' => 'Venda PDV #' . $nfce->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($pagamentos),
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => '',
|
|
'tipo_pagamento' => $p['tipo'],
|
|
'local_id' => $caixa->local_id,
|
|
'caixa_id' => $caixa->id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $p['tipo'],
|
|
'data_vencimento' => $vencimento,
|
|
'valor' => $p['valor'],
|
|
'codigo_autorizacao' => isset($p['codAutorizacao']) ? $p['codAutorizacao'] : null,
|
|
'detalhes' => isset($p['detalhes']) ? $p['detalhes'] : null,
|
|
'bandeira' => isset($p['bandeira']) ? Nfce::getBandeira($p['bandeira']) : null
|
|
]);
|
|
}
|
|
}
|
|
|
|
}else{
|
|
if ($request->tipo_pagamento == '06') {
|
|
ContaReceber::create([
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'data_vencimento' => date('Y-m-d', strtotime('+30 days')),
|
|
'data_recebimento' => date('Y-m-d', strtotime('+30 days')),
|
|
'descricao' => 'Venda PDV ' . $nfce->numero_sequencial,
|
|
'valor_integral' => __convert_value_bd($request->valor_total),
|
|
'valor_recebido' => 0,
|
|
'descricao' => 'Venda PDV #' . $nfce->numero_sequencial,
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'observacao' => $request->observacao,
|
|
'local_id' => $caixa->local_id,
|
|
'caixa_id' => $caixa->id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
if ($request->tipo_pagamento_row) {
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
$vencimento = $request->data_vencimento_row[$i];
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
ContaReceber::create([
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'data_recebimento' => $request->data_vencimento_row[$i],
|
|
'valor_integral' => __convert_value_bd($request->valor_integral_row[$i]),
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'descricao' => 'Venda PDV #' . $nfce->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($request->tipo_pagamento_row),
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => $request->obs_row[$i] ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'local_id' => $caixa->local_id,
|
|
'caixa_id' => $caixa->id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
}
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
if ($request->tipo_pagamento_row[$i]) {
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'valor' => __convert_value_bd($request->valor_integral_row[$i])
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'data_vencimento' => date('Y-m-d'),
|
|
'valor' => __convert_value_bd($request->valor_total)
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->funcionario_id != null) {
|
|
$funcionario = Funcionario::findOrFail($request->funcionario_id);
|
|
$comissao = $funcionario->comissao;
|
|
$valorRetorno = $this->calcularComissaoVenda($nfce, $comissao, $request->empresa_id);
|
|
|
|
if($valorRetorno > 0){
|
|
ComissaoVenda::create([
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'tabela' => 'nfce',
|
|
'valor' => $valorRetorno,
|
|
'valor_venda' => __convert_value_bd($request->valor_total),
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id
|
|
]);
|
|
}
|
|
}
|
|
if(isset($request->valor_cashback) && $request->valor_cashback == 0 && $request->permitir_credito){
|
|
$this->saveCashBack($nfce);
|
|
}else{
|
|
if(isset($request->valor_cashback) && $request->valor_cashback > 0){
|
|
// $cliente = $nfce->cliente;
|
|
// if($cliente != null){
|
|
// $cliente->valor_cashback -= $request->valor_cashback;
|
|
// $cliente->save();
|
|
// }
|
|
$this->rateioCashBack($request->valor_cashback, $nfce);
|
|
|
|
}
|
|
}
|
|
|
|
if($request->valor_credito){
|
|
$cliente = $nfce->cliente;
|
|
$this->rateioCredito($request->valor_credito, $nfce);
|
|
|
|
$cliente->valor_credito -= __convert_value_bd($request->valor_credito);
|
|
$cliente->save();
|
|
}
|
|
|
|
if (isset($request->pedido_id)) {
|
|
if(isset($request->itens_cliente)){
|
|
$pedido = Pedido::findOrfail($request->pedido_id);
|
|
|
|
$itens_cliente = json_decode($request->itens_cliente);
|
|
foreach($itens_cliente as $ic){
|
|
$itemPedido = ItemPedido::find($ic);
|
|
if($itemPedido){
|
|
$itemPedido->finalizado_pdv = 1;
|
|
$itemPedido->estado = 'finalizado';
|
|
$itemPedido->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;
|
|
if($mesa){
|
|
$mesa->ocupada = 0;
|
|
$mesa->save();
|
|
}
|
|
|
|
$pedido->save();
|
|
}
|
|
|
|
}else{
|
|
$pedido = Pedido::findOrfail($request->pedido_id);
|
|
$pedido->status = 0;
|
|
$pedido->em_atendimento = 0;
|
|
$pedido->nfce_id = $nfce->id;
|
|
|
|
Mesa::where('id', $pedido->mesa_id)->update(['ocupada' => 0]);
|
|
|
|
$carrinho = CarrinhoCardapio::where('session_cart_cardapio', $pedido->session_cart_cardapio)->first();
|
|
if($carrinho){
|
|
$carrinho->itens()->delete();
|
|
$carrinho->delete();
|
|
}
|
|
|
|
ItemPedido::where('pedido_id', $pedido->id)
|
|
->update([ 'estado' => 'finalizado' ]);
|
|
$pedido->save();
|
|
}
|
|
}
|
|
|
|
if (isset($request->pedido_delivery_id)) {
|
|
$pedido = PedidoDelivery::findOrfail($request->pedido_delivery_id);
|
|
$pedido->estado = 'finalizado';
|
|
$pedido->finalizado = 1;
|
|
$pedido->horario_entrega = date('H:i');
|
|
|
|
$pedido->nfce_id = $nfce->id;
|
|
|
|
if($pedido->motoboy_id){
|
|
MotoboyComissao::create([
|
|
'empresa_id' => $request->empresa_id,
|
|
'pedido_id' => $pedido->id,
|
|
'motoboy_id' => $pedido->motoboy_id,
|
|
'valor' => $pedido->comissao_motoboy,
|
|
'valor_total_pedido' => __convert_value_bd($request->valor_total),
|
|
'status' => 0
|
|
]);
|
|
}
|
|
$this->sendMessageWhatsApp($pedido, "Seu pedido foi concluído e logo sera entregue!", $nfce->local_id);
|
|
ItemPedidoDelivery::where('pedido_id', $pedido->id)
|
|
->update([ 'estado' => 'finalizado' ]);
|
|
$pedido->save();
|
|
}
|
|
|
|
|
|
if (isset($request->venda_suspensa_id)) {
|
|
$vendaSuspensa = VendaSuspensa::findOrfail($request->venda_suspensa_id);
|
|
$vendaSuspensa->itens()->delete();
|
|
$vendaSuspensa->delete();
|
|
}
|
|
|
|
if (isset($request->orcamento_id)) {
|
|
$orcamento = Nfe::findOrfail($request->orcamento_id);
|
|
|
|
$nfce->observacao .= " Referência orçamento #".$orcamento->numero_sequencial;
|
|
$nfce->save();
|
|
|
|
$orcamento->itens()->delete();
|
|
$orcamento->fatura()->delete();
|
|
$orcamento->delete();
|
|
|
|
}
|
|
|
|
$this->filaEnvioUtil->adicionaVendaFila($nfce);
|
|
return $nfce;
|
|
});
|
|
|
|
|
|
$result = app(FiscalValidator::class)
|
|
->validate($nfce, $nfce->empresa);
|
|
|
|
$nfce->update([
|
|
'fiscal_status' => $result['status'],
|
|
'fiscal_risco' => $result['risco'],
|
|
'fiscal_mensagens' => $result['mensagens']
|
|
]);
|
|
__createLog($request->empresa_id, 'PDV', 'cadastrar', "#$nfce->numero_sequencial - R$ " . __moeda($nfce->total));
|
|
|
|
return response()->json([
|
|
'id' => $nfce->id,
|
|
'numero_sequencial' => $nfce->numero_sequencial,
|
|
'total' => $nfce->total,
|
|
'fiscal_status' => $nfce->fiscal_status,
|
|
'fiscal_risco' => $nfce->fiscal_risco,
|
|
], 200);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function storePdv3(Request $request){
|
|
try {
|
|
|
|
$nfce = 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;
|
|
}
|
|
|
|
if(isset($request->valor_cashback) && $request->valor_cashback > 0){
|
|
// $request->desconto = __convert_value_bd($request->valor_cashback);
|
|
}
|
|
|
|
$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;
|
|
}
|
|
|
|
$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,
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'numero_serie' => $numeroSerieNfce,
|
|
'lista_id' => $request->lista_id,
|
|
'numero' => $numero_nfce + 1,
|
|
'cliente_nome' => $request->cliente_nome ?? '',
|
|
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'valor_cashback' => 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_frete' => $request->valor_frete ? __convert_value_bd($request->valor_frete) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'caixa_id' => $caixa->id,
|
|
'local_id' => $caixa->local_id,
|
|
'observacao' => isset($request->observacao) ? $request->observacao : '',
|
|
'dinheiro_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0,
|
|
'troco' => $request->troco ? __convert_value_bd($request->troco) : 0,
|
|
'tipo_pagamento' => $request->tipo_pagamento ?? '99',
|
|
'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)
|
|
];
|
|
|
|
$nfce = Nfce::create($dataVenda);
|
|
foreach($request->itens as $i){
|
|
$i = (object)$i;
|
|
$product = Produto::findOrFail($i->produto_id);
|
|
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
|
|
$variacao_id = null;
|
|
$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->sub_total,
|
|
'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' => $product->cfop_estadual,
|
|
'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($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->tipo_pagamento,
|
|
'local_id' => $caixa->local_id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $f->tipo_pagamento,
|
|
'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' => $nfce->tipo_pagamento,
|
|
'data_vencimento' => date('Y-m-d'),
|
|
'valor' => $nfce->total
|
|
]);
|
|
}
|
|
|
|
if ($request->funcionario_id != null) {
|
|
$funcionario = Funcionario::findOrFail($request->funcionario_id);
|
|
$comissao = $funcionario->comissao;
|
|
$valorRetorno = $this->calcularComissaoVenda($nfce, $comissao, $request->empresa_id);
|
|
|
|
if($valorRetorno > 0){
|
|
ComissaoVenda::create([
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'tabela' => 'nfce',
|
|
'valor' => $valorRetorno,
|
|
'valor_venda' => __convert_value_bd($request->valor_total),
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->venda_suspensa_id > 0) {
|
|
$vendaSuspensa = VendaSuspensa::findOrfail($request->venda_suspensa_id);
|
|
$vendaSuspensa->itens()->delete();
|
|
$vendaSuspensa->delete();
|
|
}
|
|
|
|
if (isset($request->orcamento_id)) {
|
|
$orcamento = Nfe::findOrfail($request->orcamento_id);
|
|
$orcamento->itens()->delete();
|
|
$orcamento->fatura()->delete();
|
|
$orcamento->delete();
|
|
}
|
|
|
|
$this->filaEnvioUtil->adicionaVendaFila($nfce);
|
|
return $nfce;
|
|
});
|
|
$result = app(FiscalValidator::class)
|
|
->validate($nfce, $nfce->empresa);
|
|
|
|
$nfce->update([
|
|
'fiscal_status' => $result['status'],
|
|
'fiscal_risco' => $result['risco'],
|
|
'fiscal_mensagens' => $result['mensagens']
|
|
]);
|
|
return response()->json([
|
|
'id' => $nfce->id,
|
|
'numero_sequencial' => $nfce->numero_sequencial,
|
|
'total' => $nfce->total,
|
|
'fiscal_status' => $nfce->fiscal_status,
|
|
'fiscal_risco' => $nfce->fiscal_risco,
|
|
], 200);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function updatePdv3(Request $request){
|
|
try {
|
|
|
|
$nfce = DB::transaction(function () use ($request) {
|
|
$nfce = Nfce::findOrFail($request->venda_id);
|
|
|
|
$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);
|
|
|
|
$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;
|
|
}
|
|
|
|
$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,
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'lista_id' => $request->lista_id,
|
|
'cliente_nome' => $request->cliente_nome ?? '',
|
|
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'valor_cashback' => 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'valor_frete' => 0,
|
|
'dinheiro_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0,
|
|
'troco' => $request->troco ? __convert_value_bd($request->troco) : 0,
|
|
'tipo_pagamento' => $request->tipo_pagamento ?? '99',
|
|
'cnpj_cartao' => $request->cnpj_cartao ?? '',
|
|
'bandeira_cartao' => $request->bandeira_cartao ?? '',
|
|
'cAut_cartao' => $request->cAut_cartao ?? '',
|
|
'valor_entrega' => 0,
|
|
];
|
|
|
|
$nfce->fill($dataVenda)->save();
|
|
foreach($nfce->itens as $i){
|
|
if ($i->produto->gerenciar_estoque) {
|
|
$this->util->incrementaEstoque($i->produto->id, $i->quantidade, $i->variacao_id, $nfce->local_id);
|
|
}
|
|
}
|
|
|
|
foreach($nfce->itens as $it){
|
|
$it->adicionais()->delete();
|
|
}
|
|
$nfce->itens()->delete();
|
|
foreach($request->itens as $i){
|
|
$i = (object)$i;
|
|
$product = Produto::findOrFail($i->produto_id);
|
|
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
|
|
$variacao_id = null;
|
|
$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->sub_total,
|
|
'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' => $product->cfop_estadual,
|
|
'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);
|
|
}
|
|
}
|
|
$nfce->fatura()->delete();
|
|
|
|
if ($request->fatura && $request->fatura[0]['valor'] > 0) {
|
|
|
|
$nfce->contaReceber()->delete();
|
|
foreach($request->fatura as $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' => 'Venda PDV #' . $nfce->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($request->fatura),
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => $request->obs_row[$i] ?? '',
|
|
'tipo_pagamento' => $f->tipo_pagamento,
|
|
'local_id' => $caixa->local_id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $f->tipo_pagamento,
|
|
'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' => $nfce->tipo_pagamento,
|
|
'data_vencimento' => date('Y-m-d'),
|
|
'valor' => $nfce->total
|
|
]);
|
|
}
|
|
|
|
if ($request->funcionario_id != null) {
|
|
|
|
$comissao = ComissaoVenda::where('empresa_id', $nfce->empresa_id)
|
|
->where('nfce_id', $nfce->id)->first();
|
|
if($comissao){
|
|
$comissao->delete();
|
|
}
|
|
$funcionario = Funcionario::findOrFail($request->funcionario_id);
|
|
$comissao = $funcionario->comissao;
|
|
$valorRetorno = $this->calcularComissaoVenda($nfce, $comissao, $request->empresa_id);
|
|
|
|
if($valorRetorno > 0){
|
|
ComissaoVenda::create([
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'tabela' => 'nfce',
|
|
'valor' => $valorRetorno,
|
|
'valor_venda' => __convert_value_bd($request->valor_total),
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->venda_suspensa_id > 0) {
|
|
$vendaSuspensa = VendaSuspensa::findOrfail($request->venda_suspensa_id);
|
|
$vendaSuspensa->itens()->delete();
|
|
$vendaSuspensa->delete();
|
|
}
|
|
|
|
if (isset($request->orcamento_id)) {
|
|
$orcamento = Nfe::findOrfail($request->orcamento_id);
|
|
$orcamento->itens()->delete();
|
|
$orcamento->fatura()->delete();
|
|
$orcamento->delete();
|
|
}
|
|
return $nfce;
|
|
});
|
|
|
|
$result = app(FiscalValidator::class)
|
|
->validate($nfce, $nfce->empresa);
|
|
|
|
$nfce->update([
|
|
'fiscal_status' => $result['status'],
|
|
'fiscal_risco' => $result['risco'],
|
|
'fiscal_mensagens' => $result['mensagens']
|
|
]);
|
|
return response()->json([
|
|
'id' => $nfce->id,
|
|
'numero_sequencial' => $nfce->numero_sequencial,
|
|
'total' => $nfce->total,
|
|
'fiscal_status' => $nfce->fiscal_status,
|
|
'fiscal_risco' => $nfce->fiscal_risco,
|
|
], 200);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function storeSuprimento(Request $request){
|
|
try {
|
|
|
|
$caixa = Caixa::where('usuario_id', $request->usuario_id)
|
|
->where('status', 1)
|
|
->first();
|
|
|
|
if($caixa != null){
|
|
$suprimento = SuprimentoCaixa::create([
|
|
'caixa_id' => $caixa->id,
|
|
'valor' => __convert_value_bd($request->valor),
|
|
'observacao' => $request->observacao ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'conta_empresa_id' => null
|
|
]);
|
|
return response()->json($suprimento, 200);
|
|
}else{
|
|
return response()->json("Nenhum caixa aberto para este usuário", 401);
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function storeSangria(Request $request){
|
|
try {
|
|
|
|
$caixa = Caixa::where('usuario_id', $request->usuario_id)
|
|
->where('status', 1)
|
|
->first();
|
|
if($caixa != null){
|
|
$sangria = SangriaCaixa::create([
|
|
'caixa_id' => $caixa->id,
|
|
'valor' => __convert_value_bd($request->valor),
|
|
'observacao' => $request->observacao ?? '',
|
|
'conta_empresa_id' => null
|
|
]);
|
|
return response()->json($sangria, 200);
|
|
}else{
|
|
return response()->json("Nenhum caixa aberto para este usuário", 401);
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage(), 401);
|
|
}
|
|
}
|
|
|
|
public function suspender3(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' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'observacao' => $request->observacao,
|
|
'tipo_pagamento' => $request->tipo_pagamento ?? '',
|
|
'local_id' => $caixa->local_id,
|
|
'user_id' => $request->usuario_id,
|
|
'funcionario_id' => $request->funcionario_id,
|
|
]);
|
|
|
|
foreach($request->itens as $i){
|
|
$i = (object)$i;
|
|
$variacao_id = null;
|
|
ItemVendaSuspensa::create([
|
|
'venda_id' => $venda->id,
|
|
'produto_id' => (int)$i->produto_id,
|
|
'quantidade' => ($i->quantidade),
|
|
'valor_unitario' => ($i->valor_unitario),
|
|
'sub_total' => ($i->sub_total),
|
|
'variacao_id' => $variacao_id,
|
|
]);
|
|
|
|
}
|
|
|
|
});
|
|
return response()->json($venda, 200);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function storeComanda(Request $request)
|
|
{
|
|
try {
|
|
|
|
$retornoCredito = $this->validaCreditoCliente($request);
|
|
if($retornoCredito != 0){
|
|
return response()->json($retornoCredito, 401);
|
|
}
|
|
|
|
$nfce = 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;
|
|
}
|
|
|
|
$pedido = Pedido::where('comanda', (int)$request->numero_comanda)
|
|
->where('empresa_id', $request->empresa_id)->where('status', 1)->first();
|
|
|
|
$request->merge([
|
|
'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,
|
|
'lista_id' => $request->lista_id,
|
|
'numero' => $numero_nfce + 1,
|
|
'cliente_nome' => $request->cliente_nome ?? '',
|
|
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'valor_cashback' => $request->valor_cashback ? __convert_value_bd($request->valor_cashback) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'valor_frete' => $request->valor_frete ? __convert_value_bd($request->valor_frete) : 0,
|
|
'caixa_id' => $caixa->id,
|
|
'local_id' => $caixa->local_id,
|
|
'observacao' => $request->observacao ?? '',
|
|
'dinheiro_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0,
|
|
'troco' => $request->troco ? __convert_value_bd($request->troco) : 0,
|
|
'tipo_pagamento' => $request->tipo_pagamento_row ? '99' : $request->tipo_pagamento,
|
|
'cnpj_cartao' => $request->cnpj_cartao ?? '',
|
|
'bandeira_cartao' => $request->bandeira_cartao ?? '',
|
|
'cAut_cartao' => $request->cAut_cartao ?? '',
|
|
'user_id' => $request->usuario_id,
|
|
'valor_entrega' => isset($request->valor_entrega) ? $request->valor_entrega : 0,
|
|
'numero_sequencial' => $this->getLastNumero($request->empresa_id)
|
|
]);
|
|
|
|
$nfce = Nfce::create($request->all());
|
|
foreach($pedido->itens as $itemPedido){
|
|
$product = $itemPedido->produto;
|
|
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
|
|
$itemNfce = ItemNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'produto_id' => $itemPedido->produto_id,
|
|
'quantidade' => $itemPedido->quantidade,
|
|
'valor_unitario' => $itemPedido->valor_unitario,
|
|
'sub_total' => $itemPedido->sub_total,
|
|
'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' => $product->cfop_estadual,
|
|
'ncm' => $product->ncm,
|
|
'tamanho_id' => $itemPedido->tamanho_id,
|
|
'observacao' => $itemPedido->observacao,
|
|
]);
|
|
|
|
foreach($itemPedido->adicionais as $a){
|
|
ItemAdicionalNfce::create([
|
|
'item_nfce_id' => $itemNfce->id,
|
|
'adicional_id' => $a->adicional_id
|
|
]);
|
|
}
|
|
|
|
foreach($itemPedido->pizzas as $a){
|
|
ItemPizzaNfce::create([
|
|
'item_nfce_id' => $itemNfce->id,
|
|
'produto_id' => $a->produto_id
|
|
]);
|
|
}
|
|
|
|
if ($product->gerenciar_estoque) {
|
|
$this->util->reduzEstoque($product->id, $itemPedido->quantidade, null, $caixa->local_id);
|
|
|
|
$tipo = 'reducao';
|
|
$codigo_transacao = $nfce->id;
|
|
$tipo_transacao = 'venda_nfce';
|
|
|
|
$this->util->movimentacaoProduto($product->id, $itemPedido->quantidade, $tipo, $codigo_transacao, $tipo_transacao, $request->usuario_id, null);
|
|
}
|
|
}
|
|
|
|
if ($request->tipo_pagamento_row) {
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
|
|
$vencimento = $request->data_vencimento_row[$i];
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
ContaReceber::create([
|
|
'nfe_id' => null,
|
|
'nfce_id' => $nfce->id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'data_recebimento' => $request->data_vencimento_row[$i],
|
|
'valor_integral' => __convert_value_bd($request->valor_integral_row[$i]),
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'descricao' => 'Venda PDV #' . $nfce->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($request->tipo_pagamento_row),
|
|
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => $request->obs_row[$i] ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'local_id' => $caixa->local_id,
|
|
'referencia' => "Pedido PDV " . $nfce->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
}
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
if ($request->tipo_pagamento_row[$i]) {
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'valor' => __convert_value_bd($request->valor_integral_row[$i])
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
FaturaNfce::create([
|
|
'nfce_id' => $nfce->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'data_vencimento' => date('Y-m-d'),
|
|
'valor' => __convert_value_bd($request->valor_total)
|
|
]);
|
|
}
|
|
|
|
$pedido->status = 0;
|
|
$pedido->em_atendimento = 0;
|
|
$pedido->nfce_id = $nfce->id;
|
|
|
|
Mesa::where('id', $pedido->mesa_id)->update(['ocupada' => 0]);
|
|
|
|
ItemPedido::where('pedido_id', $pedido->id)
|
|
->update([ 'estado' => 'finalizado' ]);
|
|
$pedido->save();
|
|
|
|
return $nfce;
|
|
});
|
|
|
|
__createLog($request->empresa_id, 'PDV', 'cadastrar', "#$nfce->numero_sequencial - R$ " . __moeda($nfce->total));
|
|
return response()->json($nfce, 200);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
|
|
public function storeNfe(Request $request)
|
|
{
|
|
try {
|
|
|
|
$retornoCredito = $this->validaCreditoCliente($request);
|
|
if($retornoCredito != 0){
|
|
return response()->json($retornoCredito, 401);
|
|
}
|
|
|
|
$nfe = 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;
|
|
|
|
$request->merge([
|
|
'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,
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'valor_frete' => $request->valor_frete ? __convert_value_bd($request->valor_frete) : 0,
|
|
'caixa_id' => $caixa->id,
|
|
'local_id' => $caixa->local_id,
|
|
'observacao' => $request->observacao ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento_row ? '99' : $request->tipo_pagamento,
|
|
'cnpj_cartao' => $request->cnpj_cartao ?? '',
|
|
'bandeira_cartao' => $request->bandeira_cartao ?? '',
|
|
'cAut_cartao' => $request->cAut_cartao ?? '',
|
|
'user_id' => $request->usuario_id,
|
|
'numero_sequencial' => $this->getLastNumeroNfe($request->empresa_id),
|
|
'tpNF' => 1
|
|
]);
|
|
$nfe = Nfe::create($request->all());
|
|
if($request->produto_id){
|
|
for ($i = 0; $i < sizeof($request->produto_id); $i++) {
|
|
$product = Produto::findOrFail($request->produto_id[$i]);
|
|
$product = __tributacaoProdutoLocalVenda($product, $caixa->local_id);
|
|
$variacao_id = isset($request->variacao_id[$i]) ? $request->variacao_id[$i] : null;
|
|
$cfop = $product->cfop_estadual;
|
|
$cliente = Cliente::findOrFail($request->cliente_id);
|
|
if($empresa->cidade->uf != $cliente->cidade->uf){
|
|
$cfop = $product->cfop_outro_estado;
|
|
}
|
|
ItemNfe::create([
|
|
'nfe_id' => $nfe->id,
|
|
'produto_id' => (int)$request->produto_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario[$i]),
|
|
// 'valor_custo' => $product->valor_compra,
|
|
'sub_total' => __convert_value_bd($request->subtotal_item[$i]),
|
|
'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,
|
|
'cEnq' => $product->cEnq,
|
|
]);
|
|
|
|
if ($product->gerenciar_estoque) {
|
|
$this->util->reduzEstoque($product->id, __convert_value_bd($request->quantidade[$i]), $variacao_id, $caixa->local_id);
|
|
}
|
|
|
|
$tipo = 'reducao';
|
|
$codigo_transacao = $nfe->id;
|
|
$tipo_transacao = 'venda_nfe';
|
|
|
|
$this->util->movimentacaoProduto($product->id, __convert_value_bd($request->quantidade[$i]), $tipo, $codigo_transacao, $tipo_transacao, $request->usuario_id, $variacao_id);
|
|
}
|
|
}
|
|
|
|
if ($request->tipo_pagamento == '06') {
|
|
ContaReceber::create([
|
|
'nfce_id' => null,
|
|
'nfe_id' => $nfe->id,
|
|
'data_vencimento' => $request->data_vencimento,
|
|
'data_recebimento' => $request->data_vencimento,
|
|
'valor_integral' => __convert_value_bd($request->valor_total),
|
|
'valor_recebido' => 0,
|
|
'descricao' => 'Venda ' . $nfe->numero_sequencial,
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'observacao' => $request->observacao,
|
|
'local_id' => $caixa->local_id,
|
|
'referencia' => "Pedido " . $nfe->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
if ($request->tipo_pagamento_row) {
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
|
|
$vencimento = $request->data_vencimento_row[$i];
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
ContaReceber::create([
|
|
'nfce_id' => null,
|
|
'nfe_id' => $nfe->id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'data_recebimento' => $request->data_vencimento_row[$i],
|
|
'valor_integral' => __convert_value_bd($request->valor_integral_row[$i]),
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'referencia' => "Pedido " . $nfe->numero_sequencial,
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => $request->obs_row[$i] ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'local_id' => $caixa->local_id
|
|
]);
|
|
}
|
|
}
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
if ($request->tipo_pagamento_row[$i]) {
|
|
FaturaNfe::create([
|
|
'nfe_id' => $nfe->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'valor' => __convert_value_bd($request->valor_integral_row[$i])
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
// FaturaNfe::create([
|
|
// 'nfe_id' => $nfe->id,
|
|
// 'tipo_pagamento' => $request->tipo_pagamento,
|
|
// 'data_vencimento' => date('Y-m-d'),
|
|
// 'valor' => __convert_value_bd($request->valor_total)
|
|
// ]);
|
|
}
|
|
|
|
if ($request->funcionario_id != null) {
|
|
$funcionario = Funcionario::findOrFail($request->funcionario_id);
|
|
$comissao = $funcionario->comissao;
|
|
$valorRetorno = $this->calcularComissaoVenda($nfe, $comissao, $request->empresa_id);
|
|
|
|
if($valorRetorno > 0){
|
|
ComissaoVenda::create([
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'nfce_id' => null,
|
|
'nfe_id' => $e->id,
|
|
'tabela' => 'nfe',
|
|
'valor' => $valorRetorno,
|
|
'valor_venda' => __convert_value_bd($request->valor_total),
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id
|
|
]);
|
|
}
|
|
}
|
|
|
|
if(isset($request->valor_cashback) && $request->valor_cashback == 0 && $request->permitir_credito){
|
|
$this->saveCashBack($nfe);
|
|
}else{
|
|
if(isset($request->valor_cashback) && $request->valor_cashback > 0){
|
|
$this->rateioCashBack($request->valor_cashback, $nfe);
|
|
}
|
|
}
|
|
|
|
if($request->valor_credito){
|
|
$cliente = $nfe->cliente;
|
|
$cliente->valor_credito -= __convert_value_bd($request->valor_credito);
|
|
$cliente->save();
|
|
}
|
|
|
|
if (isset($request->venda_suspensa_id)) {
|
|
$vendaSuspensa = VendaSuspensa::findOrfail($request->venda_suspensa_id);
|
|
$vendaSuspensa->itens()->delete();
|
|
$vendaSuspensa->delete();
|
|
}
|
|
|
|
if (isset($request->orcamento_id)) {
|
|
$orcamento = Nfe::findOrfail($request->orcamento_id);
|
|
$orcamento->itens()->delete();
|
|
$orcamento->fatura()->delete();
|
|
$orcamento->delete();
|
|
}
|
|
|
|
return $nfe;
|
|
|
|
});
|
|
__createLog($request->empresa_id, 'Venda', 'cadastrar', "#$nfe->numero_sequencial - R$ " . __moeda($nfe->total));
|
|
return response()->json($nfe, 200);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
public function update(Request $request, $id){
|
|
try{
|
|
|
|
$nfce = DB::transaction(function () use ($request, $id) {
|
|
$item = Nfce::findOrFail($id);
|
|
$config = Empresa::find($request->empresa_id);
|
|
|
|
$numero_nfce = $config->numero_ultima_nfce_producao;
|
|
if ($config->ambiente == 2) {
|
|
$numero_nfce = $config->numero_ultima_nfce_homologacao;
|
|
}
|
|
|
|
$caixa = Caixa::where('usuario_id', $request->usuario_id)
|
|
->where('status', 1)
|
|
->first();
|
|
|
|
$pagamentos = null;
|
|
if(isset($request->pagamentos)){
|
|
//novo modelo de pdv
|
|
$pagamentos = $request->pagamentos;
|
|
$tipoPagamentoPrincipal = $pagamentos[0]['tipo'];
|
|
}
|
|
|
|
$request->merge([
|
|
'natureza_id' => $config->natureza_id_pdv,
|
|
'emissor_nome' => $config->nome,
|
|
'emissor_cpf_cnpj' => $config->cpf_cnpj,
|
|
'ambiente' => $config->ambiente,
|
|
'cliente_id' => $request->cliente_id,
|
|
'numero_serie' => $config->numero_serie_nfce,
|
|
'lista_id' => $request->lista_id,
|
|
'numero' => $numero_nfce + 1,
|
|
'cliente_nome' => $request->cliente_nome ?? '',
|
|
'cliente_cpf_cnpj' => $request->cliente_cpf_cnpj ?? '',
|
|
'estado' => 'novo',
|
|
'total' => __convert_value_bd($request->valor_total),
|
|
'desconto' => $request->desconto ? __convert_value_bd($request->desconto) : 0,
|
|
'valor_cashback' => $request->valor_cashback ? __convert_value_bd($request->valor_cashback) : 0,
|
|
'acrescimo' => $request->acrescimo ? __convert_value_bd($request->acrescimo) : 0,
|
|
'valor_produtos' => __convert_value_bd($request->valor_total) ?? 0,
|
|
'valor_frete' => $request->valor_frete ? __convert_value_bd($request->valor_frete) : 0,
|
|
'observacao' => $request->observacao,
|
|
'dinheiro_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0,
|
|
'troco' => $request->troco ? __convert_value_bd($request->troco) : 0,
|
|
'tipo_pagamento' => $tipoPagamentoPrincipal,
|
|
'cnpj_cartao' => $request->cnpj_cartao ?? '',
|
|
'bandeira_cartao' => $request->bandeira_cartao ?? '',
|
|
'cAut_cartao' => $request->cAut_cartao ?? '',
|
|
]);
|
|
|
|
$item->fill($request->all())->save();
|
|
|
|
if($request->produto_id){
|
|
foreach($item->itens as $i){
|
|
if ($i->produto->gerenciar_estoque) {
|
|
$this->util->incrementaEstoque($i->produto->id, $i->quantidade, $i->variacao_id, $item->local_id);
|
|
}
|
|
}
|
|
|
|
foreach($item->itens as $it){
|
|
$it->adicionais()->delete();
|
|
}
|
|
$item->itens()->delete();
|
|
for ($i = 0; $i < sizeof($request->produto_id); $i++) {
|
|
$product = Produto::findOrFail($request->produto_id[$i]);
|
|
$variacao_id = isset($request->variacao_id[$i]) ? $request->variacao_id[$i] : null;
|
|
$itemNfce = ItemNfce::create([
|
|
'nfce_id' => $item->id,
|
|
'produto_id' => (int)$request->produto_id[$i],
|
|
'quantidade' => __convert_value_bd($request->quantidade[$i]),
|
|
'valor_unitario' => __convert_value_bd($request->valor_unitario[$i]),
|
|
|
|
'sub_total' => __convert_value_bd($request->subtotal_item[$i]),
|
|
'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' => $product->cfop_estadual,
|
|
'ncm' => $product->ncm,
|
|
'variacao_id' => $variacao_id,
|
|
]);
|
|
|
|
if(isset($request->adicionais[$i])){
|
|
$adicionais = explode(",", $request->adicionais[$i]);
|
|
foreach($adicionais as $add){
|
|
if($add){
|
|
ItemAdicionalNfce::create([
|
|
'item_nfce_id' => $itemNfce->id,
|
|
'adicional_id' => $add
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($product->gerenciar_estoque) {
|
|
$this->util->reduzEstoque($product->id, __convert_value_bd($request->quantidade[$i]), $variacao_id, $item->local_id);
|
|
}
|
|
|
|
$tipo = 'reducao';
|
|
$codigo_transacao = $item->id;
|
|
$tipo_transacao = 'venda_nfce';
|
|
|
|
$this->util->movimentacaoProduto($product->id, __convert_value_bd($request->quantidade[$i]), $tipo, $codigo_transacao, $tipo_transacao, $request->usuario_id);
|
|
}
|
|
}
|
|
|
|
if(isset($request->pagamentos)){
|
|
$item->fatura()->delete();
|
|
$item->contaReceber()->delete();
|
|
$pagamentos = $request->pagamentos;
|
|
if($pagamentos){
|
|
foreach($pagamentos as $p){
|
|
$vencimento = isset($p['dataVencimento']) ? $p['dataVencimento'] : date('Y-m-d');
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
ContaReceber::create([
|
|
'nfe_id' => null,
|
|
'nfce_id' => $item->id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'data_vencimento' => $vencimento,
|
|
'data_recebimento' => $vencimento,
|
|
'valor_integral' => $p['valor'],
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'descricao' => 'Venda PDV #' . $item->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($pagamentos),
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => '',
|
|
'tipo_pagamento' => $p['tipo'],
|
|
'local_id' => $caixa->local_id,
|
|
'caixa_id' => $caixa->id,
|
|
'referencia' => "Pedido PDV " . $item->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
FaturaNfce::create([
|
|
'nfce_id' => $item->id,
|
|
'tipo_pagamento' => $p['tipo'],
|
|
'data_vencimento' => $vencimento,
|
|
'valor' => $p['valor'],
|
|
'codigo_autorizacao' => isset($p['codAutorizacao']) ? $p['codAutorizacao'] : null,
|
|
'detalhes' => isset($p['detalhes']) ? $p['detalhes'] : null,
|
|
'bandeira' => isset($p['bandeira']) ? Nfce::getBandeira($p['bandeira']) : null
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
}else{
|
|
if ($request->tipo_pagamento_row) {
|
|
$item->fatura()->delete();
|
|
$item->contaReceber()->delete();
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
|
|
$vencimento = $request->data_vencimento_row[$i];
|
|
$dataAtual = date('Y-m-d');
|
|
if(strtotime($vencimento) > strtotime($dataAtual)){
|
|
ContaReceber::create([
|
|
'nfe_id' => null,
|
|
'nfce_id' => $item->id,
|
|
'cliente_id' => $request->cliente_id,
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'data_recebimento' => $request->data_vencimento_row[$i],
|
|
'valor_integral' => __convert_value_bd($request->valor_integral_row[$i]),
|
|
'valor_recebido' => 0,
|
|
'status' => 0,
|
|
'descricao' => 'Venda #' . $item->numero_sequencial . " Parcela " . $i+1 . " de " . sizeof($request->tipo_pagamento_row),
|
|
'empresa_id' => $request->empresa_id,
|
|
'juros' => 0,
|
|
'multa' => 0,
|
|
'observacao' => $request->obs_row[$i] ?? '',
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'local_id' => $item->local_id,
|
|
'referencia' => "Pedido PDV " . $item->numero_sequencial
|
|
]);
|
|
}
|
|
|
|
}
|
|
for ($i = 0; $i < sizeof($request->tipo_pagamento_row); $i++) {
|
|
if ($request->tipo_pagamento_row[$i]) {
|
|
FaturaNfce::create([
|
|
'nfce_id' => $item->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento_row[$i],
|
|
'data_vencimento' => $request->data_vencimento_row[$i],
|
|
'valor' => __convert_value_bd($request->valor_integral_row[$i])
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
$item->fatura()->delete();
|
|
FaturaNfce::create([
|
|
'nfce_id' => $item->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
'data_vencimento' => date('Y-m-d'),
|
|
'valor' => __convert_value_bd($request->valor_total)
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->funcionario_id != null) {
|
|
|
|
$comissao = ComissaoVenda::where('empresa_id', $item->empresa_id)
|
|
->where('nfce_id', $item->id)->first();
|
|
if($comissao){
|
|
$comissao->delete();
|
|
}
|
|
$funcionario = Funcionario::findOrFail($request->funcionario_id);
|
|
$comissao = $funcionario->comissao;
|
|
$valorRetorno = $this->calcularComissaoVenda($item, $comissao, $request->empresa_id);
|
|
|
|
if($valorRetorno > 0){
|
|
ComissaoVenda::create([
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'nfe_id' => null,
|
|
'nfce_id' => $item->id,
|
|
'tabela' => 'nfce',
|
|
'valor' => $valorRetorno,
|
|
'valor_venda' => __convert_value_bd($request->valor_total),
|
|
'status' => 0,
|
|
'empresa_id' => $request->empresa_id
|
|
]);
|
|
}
|
|
}
|
|
return $item;
|
|
});
|
|
|
|
$result = app(FiscalValidator::class)
|
|
->validate($nfce, $nfce->empresa);
|
|
|
|
$nfce->update([
|
|
'fiscal_status' => $result['status'],
|
|
'fiscal_risco' => $result['risco'],
|
|
'fiscal_mensagens' => $result['mensagens']
|
|
]);
|
|
__createLog($request->empresa_id, 'PDV', 'editar', "#$nfce->numero_sequencial - R$ " . __moeda($nfce->total));
|
|
|
|
return response()->json([
|
|
'id' => $nfce->id,
|
|
'numero_sequencial' => $nfce->numero_sequencial,
|
|
'total' => $nfce->total,
|
|
'fiscal_status' => $nfce->fiscal_status,
|
|
'fiscal_risco' => $nfce->fiscal_risco,
|
|
], 200);
|
|
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'PDV', 'erro', $e->getMessage());
|
|
return response()->json($e->getMessage() . ", line: " . $e->getLine() . ", file: " . $e->getFile(), 401);
|
|
}
|
|
}
|
|
|
|
private function sendMessageWhatsApp($pedido, $message, $local_id){
|
|
$telefone = "55".preg_replace('/[^0-9]/', '', $pedido->cliente->telefone);
|
|
// $retorno = $this->utilWhatsApp->sendMessage($telefone, $texto, $pedido->empresa_id);
|
|
$retorno = $this->utilWhatsApp->sendMessageWithLocal($telefone, $message, $local_id);
|
|
// dd($retorno);
|
|
}
|
|
|
|
private function calcularComissaoVenda($nfce, $comissao, $empresa_id)
|
|
{
|
|
$valorRetorno = 0;
|
|
$config = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
$tipoComissao = 'percentual_vendedor';
|
|
if($config != null && $config->tipo_comissao == 'percentual_margem'){
|
|
$tipoComissao = 'percentual_margem';
|
|
}
|
|
if($tipoComissao == 'percentual_vendedor'){
|
|
$valorRetorno = ($nfce->total * $comissao) / 100;
|
|
}else{
|
|
foreach ($nfce->itens as $i) {
|
|
|
|
$percentualLucro = ((($i->produto->valor_compra-$i->valor_unitario)/$i->produto->valor_compra)*100)*-1;
|
|
$margens = MargemComissao::where('empresa_id', request()->empresa_id)->get();
|
|
$margemComissao = null;
|
|
$dif = 0;
|
|
$difAnterior = 100;
|
|
foreach($margens as $m){
|
|
$margem = $m->margem;
|
|
if($percentualLucro >= $margem){
|
|
$dif = $percentualLucro - $margem;
|
|
if($dif < $difAnterior){
|
|
$margemComissao = $m;
|
|
$difAnterior = $dif;
|
|
}
|
|
}
|
|
}
|
|
if($margemComissao){
|
|
$valorRetorno += ($i->sub_total * $margemComissao->percentual) / 100;
|
|
}
|
|
}
|
|
}
|
|
return $valorRetorno;
|
|
}
|
|
|
|
public function buscaFuncionario($id)
|
|
{
|
|
$item = Funcionario::findOrFail($id);
|
|
return response()->json($item, 200);
|
|
}
|
|
|
|
public function categoriasPage(Request $request){
|
|
if($request->ajax()){
|
|
$categorias = CategoriaProduto::where('empresa_id', $request->empresa_id)
|
|
->where('categoria_id', null)
|
|
->orderBy('nome', 'asc')
|
|
->where('status', 1)
|
|
->paginate(4);
|
|
return view('front_box.partials_form2.categorias', compact('categorias'))->render();
|
|
}
|
|
}
|
|
|
|
public function marcasPage(Request $request){
|
|
if($request->ajax()){
|
|
$marcas = Marca::where('empresa_id', $request->empresa_id)
|
|
->orderBy('nome', 'asc')
|
|
->paginate(4);
|
|
return view('front_box.partials_form2.marcas', compact('marcas'))->render();
|
|
}
|
|
}
|
|
|
|
public function produtosPage(Request $request){
|
|
if($request->ajax()){
|
|
$categoria_id = $request->categoria_id;
|
|
$marca_id = $request->marca_id;
|
|
$lista_id = $request->lista_id;
|
|
$local_id = $request->local_id;
|
|
|
|
$produtos = Produto::select('produtos.*', \DB::raw('sum(quantidade) as quantidade'))
|
|
->where('empresa_id', $request->empresa_id)
|
|
->where('produtos.status', 1)
|
|
->leftJoin('item_nfces', 'item_nfces.produto_id', '=', 'produtos.id')
|
|
->groupBy('produtos.id')
|
|
->where('status', 1)
|
|
->orderBy('quantidade', 'desc')
|
|
->when($categoria_id, function ($query) use ($categoria_id) {
|
|
return $query->where('produtos.categoria_id', $categoria_id);
|
|
})
|
|
->when($marca_id, function ($query) use ($marca_id) {
|
|
return $query->where('produtos.marca_id', $marca_id);
|
|
})
|
|
->when($lista_id, function ($query) use ($lista_id) {
|
|
return $query->join('item_lista_precos', 'item_lista_precos.produto_id', '=', 'produtos.id');
|
|
})
|
|
->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
|
|
->where('produto_localizacaos.localizacao_id', $local_id)
|
|
->paginate(12);
|
|
|
|
return view('front_box.partials_form2.produtos', compact('produtos', 'lista_id', 'local_id'))->render();
|
|
}
|
|
}
|
|
|
|
public function produtosPage2(Request $request){
|
|
if($request->ajax()){
|
|
$categoria_id = $request->categoria_id;
|
|
$marca_id = $request->marca_id;
|
|
$lista_id = $request->lista_id;
|
|
$local_id = $request->local_id;
|
|
$pesquisa = $request->pesquisa;
|
|
|
|
$produtos = Produto::select('produtos.*', \DB::raw('sum(quantidade) as quantidade'))
|
|
->where('empresa_id', $request->empresa_id)
|
|
->where('produtos.status', 1)
|
|
->leftJoin('item_nfces', 'item_nfces.produto_id', '=', 'produtos.id')
|
|
->groupBy('produtos.id')
|
|
->where('status', 1)
|
|
->orderBy('quantidade', 'desc')
|
|
->when($categoria_id, function ($query) use ($categoria_id) {
|
|
return $query->where('produtos.categoria_id', $categoria_id);
|
|
})
|
|
->when($marca_id, function ($query) use ($marca_id) {
|
|
return $query->where('produtos.marca_id', $marca_id);
|
|
})
|
|
->when($pesquisa, function ($query) use ($pesquisa) {
|
|
return $query->where('produtos.nome', 'LIKE', "%$pesquisa%");
|
|
})
|
|
->when($lista_id, function ($query) use ($lista_id) {
|
|
return $query->join('item_lista_precos', 'item_lista_precos.produto_id', '=', 'produtos.id');
|
|
})
|
|
->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
|
|
->where('produto_localizacaos.localizacao_id', $local_id)
|
|
->paginate(12);
|
|
|
|
return view('front_box.partials_form2.produtos2', compact('produtos', 'lista_id', 'local_id'))->render();
|
|
}
|
|
}
|
|
|
|
public function addProduto(Request $request){
|
|
try{
|
|
|
|
$qtd = __convert_value_bd($request->qtd);
|
|
$local_id = $request->local_id;
|
|
$variacao = null;
|
|
try{
|
|
$qtd = (float)$qtd+1;
|
|
}catch(\Exception $e){
|
|
|
|
}
|
|
if(isset($request->variacao_id) && $request->variacao_id != null){
|
|
$variacao = ProdutoVariacao::findOrfail($request->variacao_id);
|
|
}
|
|
if($variacao == null){
|
|
$item = Produto::findOrFail($request->produto_id);
|
|
}else{
|
|
$item = $variacao->produto;
|
|
$item->valor_unitario = $variacao->valor;
|
|
$item->nome .= " " .$variacao->descricao;
|
|
}
|
|
|
|
if ($item->gerenciar_estoque == true) {
|
|
if($item->combo){
|
|
$estoqueMsg = $this->util->verificaEstoqueCombo($item, (float)$qtd);
|
|
if($estoqueMsg != ""){
|
|
return response()->json($estoqueMsg, 401);
|
|
}
|
|
}else{
|
|
|
|
$estoque = Estoque::where('produto_id', $item->id)
|
|
->where('local_id', $local_id)->first();
|
|
if ($estoque == null) {
|
|
return response()->json("Produto sem estoque", 401);
|
|
} else if ($estoque->quantidade < $qtd) {
|
|
return response()->json("Produto com estoque insuficiente", 401);
|
|
}
|
|
// if (!isset($item->estoque)) {
|
|
// return response()->json("Produto com estoque insuficiente", 401);
|
|
// } else if ($item->estoque->quantidade < $qtd) {
|
|
// return response()->json("Produto com estoque insuficiente", 401);
|
|
// }
|
|
}
|
|
}
|
|
$item = __tributacaoProdutoLocalVenda($item, $local_id);
|
|
|
|
$lista_id = $request->lista_id;
|
|
if($lista_id){
|
|
|
|
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
|
|
->where('produto_id', $request->produto_id)
|
|
->first();
|
|
if($itemLista != null){
|
|
$item->valor_unitario = $itemLista->valor;
|
|
}
|
|
}
|
|
|
|
if($item->precoComPromocao()){
|
|
$item->valor_unitario = $item->precoComPromocao()->valor;
|
|
}
|
|
$code = rand(0,9999999999);
|
|
return view('front_box.partials_form2.item_venda_row', compact('item', 'code'))->render();
|
|
}catch(\Exception $e){
|
|
return response()->json("Produto não econtrado!", 404);
|
|
}
|
|
}
|
|
|
|
public function addProduto2(Request $request){
|
|
try{
|
|
|
|
$qtd = __convert_value_bd($request->qtd);
|
|
$value_unit = $request->value_unit;
|
|
$local_id = $request->local_id;
|
|
$usuario_id = $request->usuario_id;
|
|
|
|
$isAdmin = 1;
|
|
if($usuario_id){
|
|
$user = User::find($usuario_id);
|
|
if($user){
|
|
$isAdmin = $user->admin;
|
|
}
|
|
}
|
|
$variacao = null;
|
|
// try{
|
|
// $qtd = (float)$qtd+1;
|
|
// }catch(\Exception $e){
|
|
|
|
// }
|
|
|
|
if(isset($request->variacao_id) && $request->variacao_id != null){
|
|
$variacao = ProdutoVariacao::findOrfail($request->variacao_id);
|
|
}
|
|
if($variacao == null){
|
|
$item = Produto::findOrFail($request->produto_id);
|
|
}else{
|
|
$item = $variacao->produto;
|
|
$item->valor_unitario = $variacao->valor;
|
|
$item->nome .= " " .$variacao->descricao;
|
|
}
|
|
|
|
|
|
|
|
if($value_unit){
|
|
$item->valor_unitario = $value_unit;
|
|
}else{
|
|
if($item->precoComPromocao()){
|
|
$item->valor_unitario = $item->precoComPromocao()->valor;
|
|
}
|
|
}
|
|
|
|
|
|
if ($item->gerenciar_estoque == true) {
|
|
if($item->combo){
|
|
$estoqueMsg = $this->util->verificaEstoqueCombo($item, (float)$qtd);
|
|
if($estoqueMsg != ""){
|
|
return response()->json($estoqueMsg, 401);
|
|
}
|
|
}else{
|
|
|
|
$estoque = Estoque::where('produto_id', $item->id)
|
|
->where('local_id', $local_id)->first();
|
|
if ($estoque == null) {
|
|
return response()->json("Produto sem estoque", 401);
|
|
} else if ($estoque->quantidade < $qtd) {
|
|
return response()->json("Produto com estoque insuficiente", 401);
|
|
}
|
|
// if (!isset($item->estoque)) {
|
|
// return response()->json("Produto com estoque insuficiente", 401);
|
|
// } else if ($item->estoque->quantidade < $qtd) {
|
|
// return response()->json("Produto com estoque insuficiente", 401);
|
|
// }
|
|
}
|
|
}
|
|
$item = __tributacaoProdutoLocalVenda($item, $local_id);
|
|
|
|
$lista_id = $request->lista_id;
|
|
if($lista_id){
|
|
|
|
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
|
|
->where('produto_id', $request->produto_id)
|
|
->first();
|
|
if($itemLista != null){
|
|
$item->valor_unitario = $itemLista->valor;
|
|
}
|
|
}
|
|
$code = rand(0,9999999999);
|
|
return view('front_box.partials_form2.item_venda_row2', compact('item', 'code', 'qtd', 'value_unit', 'isAdmin'))->render();
|
|
}catch(\Exception $e){
|
|
return response()->json($e->getMessage(), 404);
|
|
return response()->json("Produto não econtrado!", 404);
|
|
}
|
|
}
|
|
|
|
public function pesquisaProduto(Request $request){
|
|
try{
|
|
|
|
$refDigito = substr($request->pesquisa, 0, 1);
|
|
|
|
$data = Produto::
|
|
where('empresa_id', $request->empresa_id)
|
|
->when(!is_numeric($request->pesquisa) && $refDigito != '#', function ($q) use ($request) {
|
|
// return $q->where('nome', 'LIKE', "%$request->pesquisa%");
|
|
return $q->where(function($query) use ($request)
|
|
{
|
|
return $query->where('nome', 'LIKE', "%$request->pesquisa%")
|
|
->orWhere('referencia', 'LIKE', "%$request->pesquisa%");
|
|
});
|
|
})
|
|
->where('status', 1)
|
|
->when(is_numeric($request->pesquisa) && $refDigito != '#', function ($q) use ($request) {
|
|
return $q->where(function($query) use ($request)
|
|
{
|
|
return $query->where('codigo_barras', 'LIKE', "%$request->pesquisa%")
|
|
->orWhere('codigo_barras2', 'LIKE', "%$request->pesquisa%")
|
|
->orWhere('codigo_barras3', 'LIKE', "%$request->pesquisa%")
|
|
->orWhere('numero_sequencial', 'LIKE', "%$request->pesquisa%");
|
|
});
|
|
})
|
|
->when($refDigito == '#', function ($q) use ($request) {
|
|
$pesquisa = substr($request->pesquisa, 1, strlen($request->pesquisa));
|
|
return $q->where('referencia', 'LIKE', "%$pesquisa%");
|
|
})
|
|
->get();
|
|
|
|
$countLocais = Localizacao::where('empresa_id', $request->empresa_id)
|
|
->where('status', 1)->count();
|
|
|
|
if($countLocais > 1){
|
|
foreach($data as $p){
|
|
$p = __tributacaoProdutoLocalVenda($p, $request->local_id);
|
|
}
|
|
}
|
|
|
|
return view('front_box.partials_form2.pesquisa', compact('data'))->render();
|
|
}catch(\Exception $e){
|
|
return response()->json($e->getMessage(), 404);
|
|
}
|
|
}
|
|
|
|
public function editItem(Request $request){
|
|
try{
|
|
$item = Produto::findOrFail($request->produto_id);
|
|
$code = $request->code;
|
|
$quantidade = $request->quantidade;
|
|
$valor_unitario = $request->valor_unitario;
|
|
return view('front_box.partials_form2._modal_item',
|
|
compact('item', 'code', 'quantidade', 'valor_unitario'))->render();
|
|
}catch(\Exception $e){
|
|
return response()->json($e->getMessage(), 404);
|
|
}
|
|
}
|
|
|
|
public function qrCodePix(Request $request){
|
|
$config = ConfigGeral::where('empresa_id', $request->empresa_id)->first();
|
|
$empresa = Empresa::findOrFail($request->empresa_id);
|
|
|
|
$documento = preg_replace('/[^0-9]/', '', $empresa->cpf_cnpj);
|
|
$nome = explode(" ", $empresa->nome);
|
|
|
|
if($config == null || !$config->mercadopago_access_token_pix || !$config->mercadopago_public_key_pix){
|
|
return response()->json("Configuração de caixa não cadastrada credencias de PIX", 401);
|
|
}
|
|
try{
|
|
\MercadoPago\SDK::setAccessToken($config->mercadopago_access_token_pix);
|
|
|
|
$payment = new \MercadoPago\Payment();
|
|
|
|
$payment->transaction_amount = (float)__convert_value_bd($request->total_venda);
|
|
$payment->description = "Venda PDV";
|
|
$payment->payment_method_id = "pix";
|
|
|
|
$cep = str_replace("-", "", $config->cep);
|
|
$payment->payer = array(
|
|
"email" => $empresa->email,
|
|
"first_name" => $nome[0],
|
|
"last_name" => $nome[1],
|
|
"identification" => array(
|
|
"type" => strlen($documento) == 14 ? 'CNPJ' : 'CPF',
|
|
"number" => $documento
|
|
),
|
|
"address"=> array(
|
|
"zip_code" => str_replace("-", "", $empresa->cep),
|
|
"street_name" => $empresa->rua,
|
|
"street_number" => $empresa->numero,
|
|
"neighborhood" => $empresa->bairro,
|
|
"city" => $empresa->cidade->nome,
|
|
"federal_unit" => $empresa->cidade->uf
|
|
)
|
|
);
|
|
|
|
$payment->save();
|
|
|
|
if($payment->transaction_details){
|
|
$qrCode = $payment->point_of_interaction->transaction_data->qr_code_base64;
|
|
|
|
$data = [
|
|
"qrcode" => $qrCode,
|
|
"payment_id" => $payment->id
|
|
];
|
|
return response()->json($data, 200);
|
|
|
|
}else{
|
|
return response()->json($payment->error, 404);
|
|
}
|
|
}catch(\Exception $e){
|
|
return response()->json($e->getMessage(), 404);
|
|
}
|
|
}
|
|
|
|
public function consultaPix(Request $request){
|
|
|
|
$config = ConfigGeral::where('empresa_id', $request->empresa_id)->first();
|
|
|
|
\MercadoPago\SDK::setAccessToken($config->mercadopago_access_token_pix);
|
|
|
|
$payStatus = \MercadoPago\Payment::find_by_id($request->payment_id);
|
|
// return response()->json("approved", 200);
|
|
return response()->json($payStatus->status, 200);
|
|
}
|
|
|
|
public function atualizarComanda(Request $request){
|
|
$pedido = Pedido::where('comanda', (int)$request->numero_comanda)
|
|
->where('empresa_id', $request->empresa_id)->where('status', 1)->first();
|
|
|
|
if($pedido == null){
|
|
$data = [
|
|
'comanda' => (int)$request->numero_comanda,
|
|
'total' => 0,
|
|
'empresa_id' => $request->empresa_id,
|
|
'local_pedido' => 'PDV'
|
|
];
|
|
|
|
$pedido = Pedido::create($data);
|
|
}
|
|
|
|
$total = 0;
|
|
$itensAnterior = $pedido->itens;
|
|
foreach($pedido->itens as $it){
|
|
$it->adicionais()->delete();
|
|
$it->pizzas()->delete();
|
|
$it->delete();
|
|
}
|
|
if(isset($request->itens)){
|
|
foreach($request->itens as $item){
|
|
|
|
$impresso = $this->validaItemImpressao($item['produto_id'], $item['sub_total'], $item['quantidade'], $item['observacao'], $itensAnterior);
|
|
// return $impresso;
|
|
$dataItem = [
|
|
'pedido_id' => $pedido->id,
|
|
'produto_id' => $item['produto_id'],
|
|
'observacao' => $item['observacao'],
|
|
'quantidade' => ($item['quantidade']),
|
|
'valor_unitario' => ($item['valor_unitario']),
|
|
'sub_total' => ($item['sub_total']),
|
|
'estado' => 'novo',
|
|
// 'ponto_carne' => $request->ponto_carne,
|
|
'tamanho_id' => $item['tamanho_id'],
|
|
'impresso' => $impresso
|
|
];
|
|
|
|
$itemPedido = ItemPedido::create($dataItem);
|
|
$total += $itemPedido->sub_total;
|
|
$expAdicionais = explode(",", $item['adicionais']);
|
|
foreach($expAdicionais as $a){
|
|
if($a){
|
|
ItemAdicional::create([
|
|
'item_pedido_id' => $itemPedido->id,
|
|
'adicional_id' => $a
|
|
]);
|
|
}
|
|
}
|
|
|
|
if($item['sabores']){
|
|
$sabores = json_decode($item['sabores']);
|
|
|
|
foreach($sabores as $a){
|
|
if($a){
|
|
ItemPizzaPedido::create([
|
|
'item_pedido_id' => $itemPedido->id,
|
|
'produto_id' => $a
|
|
]);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
$config = ConfiguracaoCardapio::where('empresa_id', $request->empresa_id)
|
|
->first();
|
|
|
|
if($config && $config->percentual_taxa_servico){
|
|
$request->acrescimo = $total * ($config->percentual_taxa_servico/100);
|
|
}
|
|
|
|
$pedido->acrescimo = $request->acrescimo;
|
|
$pedido->total = $total;
|
|
$pedido->desconto = $request->desconto;
|
|
|
|
$pedido->save();
|
|
return response()->json($pedido, 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 detalhesItem(Request $request){
|
|
$produto = Produto::findOrFail($request->produto_id);
|
|
|
|
$categoriasAdicional = CategoriaAdicional::where('categoria_adicionals.empresa_id', $produto->empresa_id)
|
|
->where('categoria_adicionals.status', 1)
|
|
->select('categoria_adicionals.*')
|
|
->join('adicionals', 'adicionals.categoria_id', '=', 'categoria_adicionals.id')
|
|
->join('produto_adicionals', 'produto_adicionals.adicional_id', '=', 'adicionals.id')
|
|
->where('produto_adicionals.produto_id', $produto->id)
|
|
->groupBy('categoria_adicionals.id')
|
|
->get();
|
|
|
|
$itemPedido = ItemPedido::select('item_pedidos.*')
|
|
->join('pedidos', 'pedidos.id', '=', 'item_pedidos.pedido_id')
|
|
->where('pedidos.comanda', (int)$request->numero_comanda)
|
|
->where('pedidos.status', 1)
|
|
->skip($request->indice)->take(1)
|
|
->first();
|
|
|
|
$tamanhosDePizza = TamanhoPizza::where('empresa_id', $produto->empresa_id)->get();
|
|
|
|
return view('front_box.partials.detalhes_item', compact('produto', 'categoriasAdicional',
|
|
'itemPedido', 'tamanhosDePizza'))->render();
|
|
|
|
}
|
|
|
|
}
|