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

1025 lines
36 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Models\CategoriaProduto;
use App\Models\Produto;
use App\Models\ProdutoUnico;
use App\Models\Estoque;
use App\Models\Fornecedor;
use App\Models\Cliente;
use App\Models\ConfiguracaoCardapio;
use App\Models\ProdutoPizzaValor;
use App\Models\Empresa;
use App\Models\Marca;
use App\Models\Caixa;
use App\Models\ConfigGeral;
use App\Models\ItemNfe;
use App\Models\ItemListaPreco;
use App\Models\PadraoTributacaoProduto;
use App\Models\ProdutoVariacao;
use App\Models\Localizacao;
use App\Models\CategoriaAdicional;
use Illuminate\Http\Request;
use App\Utils\EstoqueUtil;
class ProdutoController extends Controller
{
protected $util;
public function __construct(EstoqueUtil $util)
{
$this->util = $util;
}
public function getAdicionaisModal(Request $request){
$item = Produto::findOrFail($request->produto_id);
if(sizeof($item->adicionais) == 0){
return response()->json("", 200);
}
$categoriasAdicional = CategoriaAdicional::where('categoria_adicionals.empresa_id', $item->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', $item->id)
->groupBy('categoria_adicionals.id')
->get();
return view('produtos.partials.adicional_pdv', compact('item', 'categoriasAdicional'));
}
public function pesquisa(Request $request)
{
$lista_id = $request->lista_id;
$local_id = null;
if(isset($request->local_id) && $request->local_id != null){
$local_id = $request->local_id;
}else if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$refDigito = substr($request->pesquisa, 0, 1);
$data = Produto::orderBy('nome', 'desc')
->select('produtos.*')
->where('empresa_id', $request->empresa_id)
->where('status', 1)
->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%");
});
})
->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%");
})
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->distinct('produtos.id')
->get();
if(is_numeric($request->pesquisa)){
$dataAppend = ProdutoVariacao::where('produtos.empresa_id', $request->empresa_id)
->where('produto_variacaos.codigo_barras', $request->pesquisa)
// ->where('produto_variacaos.codigo_barras', 'LIKE', "%$request->pesquisa%")
->join('produtos', 'produtos.id', '=', 'produto_variacaos.produto_id')
->select('produto_variacaos.*')
->get();
foreach($dataAppend as $v){
$v->valor_unitario = $v->valor;
$v->valor_compra = $v->produto->valor_compra;
$v->nome = $v->produto->nome . " - " . $v->descricao;
$v->codigo_variacao = $v->id;
$v->id = $v->produto_id;
$data->push($v);
}
// $data->push($dataAppend);
}
if($lista_id){
foreach($data as $i){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $i->id)
->first();
if($itemLista != null){
$i->valor_unitario = $itemLista->valor;
}
}
}
$countLocais = Localizacao::where('empresa_id', $request->empresa_id)
->where('status', 1)->count();
foreach($data as $p){
if($p->gerenciar_estoque){
$estoque = Estoque::where('produto_id', $p->id)
->when($local_id != null, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->first();
if($estoque){
$p->estoque_atual = number_format($estoque->quantidade, 3);
if($p->unidade == 'UN' || $p->unidade == 'UNID'){
$p->estoque_atual = number_format($estoque->quantidade, 0);
}
}else{
$p->estoque_atual = 0;
}
}else{
$p->estoque_atual = 0;
}
if($countLocais > 1){
$p = __tributacaoProdutoLocalVenda($p, $local_id);
}
if($p instanceof Produto &&$p->precoComPromocao()){
$p->valor_unitario = $p->precoComPromocao()->valor;
}
}
return response()->json($data, 200);
}
public function modal($id){
$item = Produto::findOrFail($id);
return view('produtos.partials.modal_body', compact('item'));
}
public function codigoUnico(Request $request){
$data = ProdutoUnico::
where('produtos.empresa_id', $request->empresa_id)
->where('produto_unicos.em_estoque', 1)
->where('produtos.status', 1)
->select('produto_unicos.*')
->join('produtos', 'produtos.id', '=', 'produto_unicos.produto_id')
->when($request->pesquisa, function ($q) use ($request) {
return $q->where('produto_unicos.codigo', 'LIKE', "%$request->pesquisa%");
})
->get();
return response()->json($data, 200);
}
public function descricao(Request $request){
$item = Produto::findOrFail($request->produto_id);
return response()->json($item->nome, 200);
}
public function tipoProducao(Request $request){
$data = Produto::
where('produtos.empresa_id', $request->empresa_id)
->where('tipo_producao', 1)
->where('status', 1)
->when(!is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('nome', 'LIKE', "%$request->pesquisa%");
})
->when(is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('codigo_barras', 'LIKE', "%$request->pesquisa%");
})
->get();
return response()->json($data, 200);
}
// public function pesquisaComEstoque(Request $request){
// $data = Produto::orderBy('nome', 'desc')
// ->select('produtos.*')
// ->with('estoque')
// ->where('empresa_id', $request->empresa_id)
// ->when(!is_numeric($request->pesquisa), function ($q) use ($request) {
// return $q->where('nome', 'LIKE', "%$request->pesquisa%");
// })
// ->when(is_numeric($request->pesquisa), function ($q) use ($request) {
// return $q->where('codigo_barras', 'LIKE', "%$request->pesquisa%");
// })
// ->join('estoques', 'estoques.produto_id', '=', 'produtos.id')
// ->where('estoques.local_id', $request->local_saida_id)
// ->distinct('produtos.id')
// ->get();
// return response()->json($data, 200);
// }
public function pesquisaComEstoque(Request $request){
$empresa_id = $request->empresa_id;
$pesquisa = $request->pesquisa;
$local_saida_id = $request->local_saida_id;
$data = Produto::query()
->select('produtos.*')
->distinct()
->with('estoque')
->join('estoques', 'estoques.produto_id', '=', 'produtos.id')
->where('produtos.empresa_id', $empresa_id)
->where('estoques.local_id', $local_saida_id)
->when($pesquisa, function ($q) use ($pesquisa) {
if (is_numeric($pesquisa)) {
return $q->where('produtos.codigo_barras', 'LIKE', "%{$pesquisa}%");
}
return $q->where('produtos.nome', 'LIKE', "%{$pesquisa}%");
})
->orderBy('produtos.nome', 'desc')
->get();
return response()->json($data, 200);
}
public function pesquisaFiltro(Request $request)
{
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('nome', 'like', "%$request->pesquisa%")
->get();
return response()->json($data, 200);
}
public function pesquisaCodigoBarras(Request $request)
{
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('nome', 'like', "%$request->pesquisa%")
->whereNotNull('codigo_barras')
->where('codigo_barras', '!=', '')
->whereRaw('codigo_barras REGEXP "^[0-9]+$"')
->where('status', 1)
->get();
return response()->json($data, 200);
}
public function pesquisaCardapio(Request $request)
{
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('cardapio', 1)
->where('nome', 'like', "%$request->pesquisa%")
->get();
return response()->json($data, 200);
}
public function pesquisaDelivery(Request $request)
{
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('delivery', 1)
->where('nome', 'like', "%$request->pesquisa%")
->get();
return response()->json($data, 200);
}
public function pesquisaReserva(Request $request)
{
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('reserva', 1)
->where('nome', 'like', "%$request->pesquisa%")
->get();
return response()->json($data, 200);
}
public function find(Request $request)
{
$cliente = null;
$fornecedor = null;
$entrada = $request->entrada;
$tributacao_cliente = $request->tributacao_cliente;
$lista_id = $request->lista_id;
$tributacao = null;
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if (isset($request->cliente_id)) {
$cliente = Cliente::find($request->cliente_id);
$tributacao = $cliente->tributacao;
}
if (isset($request->fornecedor_id)) {
$fornecedor = Fornecedor::find($request->fornecedor_id);
}
$item = Produto::where('id', $request->produto_id)
->first();
if($lista_id){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $item->id)
->first();
if($itemLista){
$item->valor_unitario = $itemLista->valor;
}
}
$item = __tributacaoProdutoLocalVenda($item, $caixa->local_id);
if($entrada == 1){
$item->cfop_atual = $item->cfop_entrada_estadual;
}
$empresa = Empresa::find($item->empresa_id);
if($caixa){
$empresa = __objetoParaEmissao($empresa, $caixa->local_id);
}
if($tributacao != null){
if($tributacao->perc_icms){
$item->perc_icms = $tributacao->perc_icms;
}
if($tributacao->perc_pis){
$item->perc_pis = $tributacao->perc_pis;
}
if($tributacao->perc_cofins){
$item->perc_cofins = $tributacao->perc_cofins;
}
if($tributacao->perc_ipi){
$item->perc_ipi = $tributacao->perc_ipi;
}
if($tributacao->perc_red_bc){
$item->perc_red_bc = $tributacao->perc_red_bc;
}
if($tributacao->cst_csosn){
$item->cst_csosn = $tributacao->cst_csosn;
}
if($tributacao->cst_pis){
$item->cst_pis = $tributacao->cst_pis;
}
if($tributacao->cst_cofins){
$item->cst_cofins = $tributacao->cst_cofins;
}
if($tributacao->cst_ipi){
$item->cst_ipi = $tributacao->cst_ipi;
}
if($tributacao->cfop_estadual){
$item->cfop_estadual = $tributacao->cfop_estadual;
}
if($tributacao->cfop_outro_estado){
$item->cfop_outro_estado = $tributacao->cfop_outro_estado;
}
if($tributacao->cest){
$item->cest = $tributacao->cest;
}
if($tributacao->ncm){
$item->ncm = $tributacao->ncm;
}
if($tributacao->codigo_beneficio_fiscal){
$item->codigo_beneficio_fiscal = $tributacao->codigo_beneficio_fiscal;
}
}
if($item->precoComPromocao()){
$item->valor_unitario = $item->precoComPromocao()->valor;
}
$item->cfop_atual = $item->cfop_estadual;
if ($empresa != null) {
if ($cliente != null) {
if ($cliente->cidade && $empresa->cidade->uf != $cliente->cidade->uf) {
$item->cfop_atual = $item->cfop_outro_estado;
}
}
if ($fornecedor != null) {
if ($fornecedor->cidade && $empresa->cidade->uf != $fornecedor->cidade->uf) {
$item->cfop_atual = $item->cfop_entrada_outro_estado;
}
}
}
return response()->json($item, 200);
}
public function findId($id)
{
$item = Produto::where('id', $id)
->with(['categoria', 'adicionais', 'subcategoria', 'locais'])
->first();
$item->disponibilidade = $item->locais->pluck('localizacao_id');
return response()->json($item, 200);
}
public function findWithLista(Request $request)
{
$lista_id = $request->lista_id;
$item = Produto::where('id', $request->produto_id)
->with(['categoria', 'adicionais'])
->first();
$item = __tributacaoProdutoLocalVenda($item, $request->local_id);
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $item->id)
->first();
if($itemLista){
$item->valor_unitario = $itemLista->valor;
}
if($item->precoComPromocao()){
$item->valor_unitario = $item->precoComPromocao()->valor;
}
return response()->json($item, 200);
}
public function padrao(Request $request)
{
$item = PadraoTributacaoProduto::
with('_ncm')
->findOrFail($request->padrao);
return response()->json($item, 200);
}
public function findByCategory(Request $request)
{
$id = $request->id;
$lista_id = $request->lista_id;
$local_id = null;
if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$item = CategoriaProduto::findOrFail($id);
// $produtos = $item->produtos;
$produtos = Produto::where('empresa_id', $item->empresa_id)
->select('produtos.*')
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
// ->where('categoria_id', $id)
->where(function($query) use ($id)
{
return $query->where('categoria_id', $id)
->orWhere('sub_categoria_id', $id);
})
->where('status', 1)
->get();
$countLocais = Localizacao::where('empresa_id', $request->empresa_id)
->where('status', 1)->count();
if($countLocais > 1){
foreach($produtos as $p){
$p = __tributacaoProdutoLocalVenda($p, $local_id);
}
}
if($lista_id){
foreach($produtos as $p){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $p->id)
->first();
if($itemLista != null){
$p->valor_unitario = $itemLista->valor;
}
}
}
return view('produtos.cards', compact('produtos'));
}
public function all(Request $request)
{
$lista_id = $request->lista_id;
$local_id = null;
if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$produtos = Produto::where('empresa_id', $request->empresa_id)
->select('produtos.*')
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->where('status', 1)
->limit(30)->get();
$countLocais = Localizacao::where('empresa_id', $request->empresa_id)
->where('status', 1)->count();
if($countLocais > 1){
foreach($produtos as $p){
$p = __tributacaoProdutoLocalVenda($p, $local_id);
}
}
if($lista_id){
foreach($produtos as $p){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $p->id)
->first();
if($itemLista != null){
$p->valor_unitario = $itemLista->valor;
}
}
}
return view('produtos.cards', compact('produtos'));
}
public function getPizzas(Request $request){
$produto_id = $request->produto_id;
$tamanho_id = $request->tamanho_id;
$data = Produto::where('produtos.empresa_id', $request->empresa_id)
->select('produtos.*')
->join('categoria_produtos', 'categoria_produtos.id', '=', 'produtos.categoria_id')
->where('categoria_produtos.tipo_pizza', 1)
->get();
return view('produtos.pizzas', compact('data', 'produto_id', 'tamanho_id'));
}
public function calculoPizza(Request $request){
$sabores = $request->sabores;
$tamanho_id = $request->tamanho_id;
$somaValor = 0;
$maiorValor = 0;
if($sabores == null){
return response()->json(0, 200);
}
$qtdSabores = sizeof($sabores);
foreach($sabores as $s){
$item = ProdutoPizzaValor::where('produto_id', (int)$s)
->where('tamanho_id', $tamanho_id)
->first();
if($item->valor > $maiorValor){
$maiorValor = $item->valor;
}
$somaValor += $item->valor;
}
$config = ConfiguracaoCardapio::where('empresa_id', $request->empresa_id)
->first();
if($config->valor_pizza == 'divide'){
return response()->json((float)number_format($somaValor/$qtdSabores, 2), 200);
}else{
return response()->json((float)number_format($maiorValor, 2), 200);
}
}
public function findByBarcode(Request $request)
{
$lista_id = $request->lista_id;
$local_id = null;
if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$item = Produto::with('estoque')
->select('produtos.*')
->where(function($query) use ($request)
{
return $query->where('codigo_barras', $request->barcode)
->orWhere('codigo_barras2', $request->barcode)
->orWhere('codigo_barras3', $request->barcode);
})
->where('empresa_id', $request->empresa_id)
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->first();
if($lista_id){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $item->id)
->first();
if($itemLista != null){
$item->valor_unitario = $itemLista->valor;
}
}
if($item == null){
$variacao = ProdutoVariacao::where('produto_variacaos.codigo_barras', $request->barcode)
->where('produtos.empresa_id', $request->empresa_id)
->join('produtos', 'produtos.id', '=', 'produto_variacaos.produto_id')
->select('produto_variacaos.*')
->first();
$item = $variacao->produto;
if($variacao){
$item->codigo_variacao = $variacao->id;
$item->valor_unitario = $variacao->valor;
$item->nome = $variacao->produto->nome . " - " . $variacao->descricao;
$item->id = $variacao->produto_id;
}
}
if($item->precoComPromocao()){
$item->valor_unitario = $item->precoComPromocao()->valor;
}
return response()->json($item, 200);
}
public function findByBarcodeReference(Request $request)
{
$config = ConfigGeral::where('empresa_id', request()->empresa_id)
->first();
$balanca_valor_peso = $config != null ? $config->balanca_valor_peso : 'valor';
$balanca_digito_verificador = $config != null ? $config->balanca_digito_verificador : 6;
$barcode = $request->barcode;
$ref = (int)substr($barcode, 1, $balanca_digito_verificador-1);
// return response()->json($ref, 401);
$valor = substr($barcode, 7, 7);
$valor = (float)substr($valor, 0, strlen($valor)-1);
$valor = $valor/100;
$quantidade = 1;
$local_id = null;
if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$item = Produto::with('estoque')
->select('produtos.*')
->where('referencia_balanca', $ref)
->where('empresa_id', $request->empresa_id)
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->first();
if($item == null){
return response()->json("erro", 404);
}
if ($item->unidade == 'KG') {
if ($balanca_valor_peso == 'valor') {
$quantidade = $valor / $item->valor_unitario;
$subtotal = $valor;
} else {
// $quantidade = $valor / $item->valor_unitario;
$quantidade = $valor/10;
$valor = $item->valor_unitario * number_format($quantidade, 3);
$subtotal = $item->valor_unitario * number_format($quantidade, 3);
}
}else{
$subtotal = $valor;
}
if ($item) {
$item->valor = $valor;
$item->quantidade = $quantidade;
}
return view('front_box.partials.row_produtos_referencia', compact('item', 'quantidade', 'valor', 'subtotal'));
}
public function findByBarcodeReference2(Request $request)
{
$config = ConfigGeral::where('empresa_id', request()->empresa_id)
->first();
$balanca_valor_peso = $config != null ? $config->balanca_valor_peso : 'valor';
$balanca_digito_verificador = $config != null ? $config->balanca_digito_verificador : 6;
$barcode = $request->barcode;
$ref = (int)substr($barcode, 1, $balanca_digito_verificador-1);
// return response()->json($ref, 401);
$valor = substr($barcode, 7, 7);
$valor = (float)substr($valor, 0, strlen($valor)-1);
$valor = $valor/100;
$quantidade = 1;
$local_id = null;
if(isset($request->usuario_id)){
$caixa = Caixa::where('usuario_id', $request->usuario_id)->where('status', 1)->first();
if($caixa != null){
$locais = Localizacao::where('usuario_localizacaos.usuario_id', $request->usuario_id)
->select('localizacaos.*')
->join('usuario_localizacaos', 'usuario_localizacaos.localizacao_id', '=', 'localizacaos.id')
->where('localizacaos.status', 1)->get();
$local_id = $caixa->local_id;
}
}
$item = Produto::with('estoque')
->select('produtos.*')
->where('referencia_balanca', $ref)
->where('empresa_id', $request->empresa_id)
->when($local_id != null, function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->first();
if($item == null){
return response()->json("erro", 404);
}
if ($item->unidade == 'KG') {
if ($balanca_valor_peso == 'valor') {
$quantidade = $valor / $item->valor_unitario;
$subtotal = $valor;
} else {
$quantidade = $valor / 10;
$valor = $item->valor_unitario * number_format($quantidade, 3);
$subtotal = $item->valor_unitario * number_format($quantidade, 3);
}
}else{
$subtotal = $valor;
}
if ($item) {
$item->valor = $valor;
$item->quantidade = $quantidade;
}
$code = rand(0,9999999999);
return view('front_box.partials_form2.row_produtos_referencia', compact('item', 'quantidade', 'valor', 'subtotal', 'code'));
}
public function infoVencimento($id)
{
$item = Produto::findOrFail($id);
$itens = ItemNfe::where('produto_id', $item->id)->get();
return view('produtos.partials.info_vencimento', compact('itens'));
}
public function validaEstoque(Request $request)
{
$produto = Produto::findOrFail($request->product_id);
$qtd = $request->qtd;
$local_id = $request->local_id;
if($produto->gerenciar_estoque){
if($produto->combo){
$estoqueMsg = $this->util->verificaEstoqueCombo($produto, (float)$qtd);
if($estoqueMsg != ""){
return response()->json($estoqueMsg, 401);
}
}else{
$estoque = Estoque::where('produto_id', $request->product_id)
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->first();
if(!$estoque){
return response()->json("Produto sem estoque definido!", 401);
}
if($estoque->quantidade < $qtd){
return response()->json("Estoque insuficiente!", 401);
}
}
}
return response()->json($produto, 200);
}
public function pesquisaCompostos(Request $request)
{
$lista_id = $request->lista_id;
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('composto', 1)
->when(!is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('nome', 'LIKE', "%$request->pesquisa%");
})
->when(is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('codigo_barras', 'LIKE', "%$request->pesquisa%");
})
->get();
if(is_numeric($request->pesquisa)){
$dataAppend = ProdutoVariacao::where('produtos.empresa_id', $request->empresa_id)
->where('produto_variacaos.codigo_barras', 'LIKE', "%$request->pesquisa%")
->join('produtos', 'produtos.id', '=', 'produto_variacaos.produto_id')
->select('produto_variacaos.*')
->get();
foreach($dataAppend as $v){
$v->valor_unitario = $v->valor;
$v->valor_compra = $v->produto->valor_compra;
$v->nome = $v->produto->nome . " - " . $v->descricao;
$v->codigo_variacao = $v->id;
$v->id = $v->produto_id;
$data->push($v);
}
// $data->push($dataAppend);
}
if($lista_id){
foreach($data as $i){
$itemLista = ItemListaPreco::where('lista_id', $lista_id)
->where('produto_id', $i->id)
->first();
if($itemLista != null){
$i->valor_unitario = $itemLista->valor;
}
}
}
return response()->json($data, 200);
}
public function pesquisaCombo(Request $request)
{
$lista_id = $request->lista_id;
$data = Produto::orderBy('nome', 'desc')
->where('empresa_id', $request->empresa_id)
->where('combo', 0)
->when(!is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('nome', 'LIKE', "%$request->pesquisa%");
})
->when(is_numeric($request->pesquisa), function ($q) use ($request) {
return $q->where('codigo_barras', 'LIKE', "%$request->pesquisa%");
})
->get();
return response()->json($data, 200);
}
public function marcaStore(Request $request){
try{
$item = Marca::create([
'empresa_id' => $request->empresa_id,
'nome' => $request->nome
]);
return response()->json($item, 200);
}catch(\Exception $e){
return response()->json($e->getMessage(), 200);
}
}
public function categoriaStore(Request $request){
try{
$item = CategoriaProduto::create([
'empresa_id' => $request->empresa_id,
'nome' => $request->nome
]);
return response()->json($item, 200);
}catch(\Exception $e){
return response()->json($e->getMessage(), 200);
}
}
public function validaAtacado(Request $request){
$item = Produto::findOrFail($request->produto_id);
$item = __tributacaoProdutoLocalVenda($item, $request->local_id);
//valida estoque
if($item->gerenciar_estoque){
if(!$item->estoque){
return response()->json("Estoque vazio!", 401);
}
if($item->estoque->quantidade < $request->quantidade){
$qtd = $item->estoque->quantidade;
if(!$item->unidadeDecimal()){
$qtd = number_format($item->estoque->quantidade, 0, '.', '');
}
return response()->json("Estoque insuficiente, o estoque atual é: " . $qtd, 401);
}
}
if($item->quantidade_atacado > 0 && $request->quantidade >= $item->quantidade_atacado){
if($item->valor_atacado > 0){
return response()->json($item->valor_atacado, 200);
}
}
return response()->json($item->valor_unitario, 200);
}
// public function validaEstoque(Request $request){
// $quantidade = __convert_value_bd($request->$quantidade);
// $item = Produto::findOrFail($request->produto_id);
// if($item->gerenciar_estoque){
// if(!$item->estoque || $item->estoque->quantidade < $quantidade){
// return response()->json("Estoque insuficiente!", 401);
// }
// }
// return response()->json("estoque ok", 200);
// }
public function dadosProdutoUnico($id){
$item = ProdutoUnico::findOrFail($id);
$nfeSaida = ProdutoUnico::where('codigo', $item->codigo)
->where('tipo', 'saida')->first();
$nfeEntrada = ProdutoUnico::where('codigo', $item->codigo)
->where('tipo', 'entrada')->first();
return view('produtos.partials.dados_produto_unico', compact('item', 'nfeSaida', 'nfeEntrada'));
}
public function info(Request $request){
$item = Produto::findOrFail($request->produto_id);
return view('produtos.partials.info', compact('item'));
}
public function linhaDimensao(Request $request){
return view('produtos.partials.linha_dimensao', compact('request'));
}
public function getDimensaoEdit(Request $request){
$item = ItemNfe::findOrFail($request->id);
$view = view('produtos.partials.edit_dimensao', compact('item'))->render();
return response()->json([
'view' => $view,
'produto' => $item->produto,
'data' => $item->itensDimensao
], 200);
}
public function alterarGerenciamentoEstoque(Request $request){
try{
Produto::where('empresa_id', $request->empresa_id)
->update([
'gerenciar_estoque' => $request->gerenciar_estoque
]);
return response()->json("ok", 200);
}catch(\Exception $e){
return response()->json($e->getMessage(), 404);
}
}
}