empresaUtil = $empresaUtil; $this->uploadUtil = $uploadUtil; } public function setEmpresa($id){ $contador = Empresa::findOrFail(request()->empresa_id); $contador->empresa_selecionada = $id; $contador->save(); return redirect()->back(); } public function profile(Request $request){ $contador = Empresa::findOrFail(request()->empresa_id); if($contador->usuarios[0] == null){ die; } $item = $contador->usuarios[0]->usuario; return view('contador.profile', compact('contador', 'item')); } public function profileUpdate(Request $request, $id){ $usuario = User::findOrFail($id); try { $file_name = $usuario->imagem; if ($request->hasFile('image')) { $this->uploadUtil->unlinkImage($usuario, '/usuarios'); $file_name = $this->uploadUtil->uploadImage($request, '/usuarios'); } if ($request->password) { $request->merge([ 'password' => Hash::make($request->password), 'imagem' => $file_name ]); } else { $request->merge([ 'password' => $usuario->password, 'imagem' => $file_name ]); } $usuario->fill($request->all())->save(); session()->flash("flash_success", "Usuário alterado!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('home'); } public function show(){ $contador = Empresa::findOrFail(request()->empresa_id); $item = Empresa::findOrFail($contador->empresa_selecionada); $dadosCertificado = null; if ($item != null && $item->arquivo) { $dadosCertificado = $this->getInfoCertificado($item); } $naturezas = NaturezaOperacao::where('empresa_id', $item->id)->get(); // return view('config.index', compact('empresa', 'usuario', 'item', 'dadosCertificado', 'naturezas')); return view('contador.show', compact('item', 'naturezas', 'dadosCertificado')); } public function update(Request $request, $id) { $item = Empresa::findOrFail($id); try { $file_name = $item->logo; if ($request->hasFile('image')) { $this->util->unlinkImage($item, '/logos'); $file_name = $this->util->uploadImage($request, '/logos'); } $request->merge([ # 'cpf_cnpj' => preg_replace('/[^0-9]/', '', $request->cpf_cnpj), 'logo' => $file_name, ]); if ($request->hasFile('certificado')) { $file = $request->file('certificado'); $fileTemp = file_get_contents($file); $request->merge([ 'arquivo' => $fileTemp ]); } $item->fill($request->all())->save(); session()->flash("flash_success", "Empresa atualizada!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->back(); } private function getInfoCertificado($item) { try { $infoCertificado = Certificate::readPfx($item->arquivo, $item->senha); $publicKey = $infoCertificado->publicKey; $inicio = $publicKey->validFrom->format('Y-m-d H:i:s'); $expiracao = $publicKey->validTo->format('Y-m-d H:i:s'); return [ 'serial' => $publicKey->serialNumber, 'inicio' => \Carbon\Carbon::parse($inicio)->format('d-m-Y H:i'), 'expiracao' => \Carbon\Carbon::parse($expiracao)->format('d-m-Y H:i'), 'id' => $publicKey->commonName ]; } catch (\Exception $e) { return []; } } public function produtos(Request $request){ $contador = Empresa::findOrFail(request()->empresa_id); $empresaSelecionada = $contador->empresa_selecionada; $data = Produto::where('empresa_id', $empresaSelecionada) ->when(!empty($request->nome), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('nome', 'LIKE', "%$request->nome%"); }); }) ->when(!empty($request->codigo_barras), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('codigo_barras', 'LIKE', "%$request->codigo_barras%"); }); }) ->paginate(__itensPagina()); return view('contador.produtos', compact('data')); } public function produtoShow($id){ $item = Produto::findOrFail($id); $empresa = Empresa::findOrFail($item->empresa_id); $listaCTSCSOSN = Produto::listaCSOSN(); if ($empresa->tributacao == 'Regime Normal') { $listaCTSCSOSN = Produto::listaCST(); } $padroes = PadraoTributacaoProduto::where('empresa_id', $item->empresa_id)->get(); $categorias = CategoriaProduto::where('empresa_id', $item->empresa_id)->where('status', 1)->get(); $cardapio = 0; if (isset($request->cardapio)) { $cardapio = 1; } $marcas = Marca::where('empresa_id', $item->empresa_id)->get(); $variacoes = VariacaoModelo::where('empresa_id', $item->empresa_id) ->where('status', 1)->get(); $configMercadoLivre = MercadoLivreConfig::where('empresa_id', $item->empresa_id) ->first(); $unidades = UnidadeMedida::where('empresa_id', $item->empresa_id) ->where('status', 1)->get(); $configGeral = ConfigGeral::where('empresa_id', $item->empresa_id) ->first(); return view('contador.produtos_show', compact('item', 'listaCTSCSOSN', 'padroes', 'categorias', 'cardapio', 'marcas', 'variacoes', 'configMercadoLivre', 'unidades', 'configGeral')); } public function produtoEdit($id){ $item = Produto::findOrFail($id); __validaObjetoEmpresaContador(request()->empresa_id, $item->empresa_id); $empresa = Empresa::findOrFail($item->empresa_id); $listaCTSCSOSN = Produto::listaCSOSN(); if ($empresa->tributacao == 'Regime Normal') { $listaCTSCSOSN = Produto::listaCST(); } $padroes = PadraoTributacaoProduto::where('empresa_id', $item->empresa_id)->get(); $categorias = CategoriaProduto::where('empresa_id', $item->empresa_id)->where('status', 1) ->where('categoria_id', null) ->get(); $cardapio = 0; if (isset($request->cardapio)) { $cardapio = 1; } $marcas = Marca::where('empresa_id', $item->empresa_id)->get(); $variacoes = VariacaoModelo::where('empresa_id', $item->empresa_id) ->where('status', 1)->get(); $configMercadoLivre = MercadoLivreConfig::where('empresa_id', $item->empresa_id) ->first(); $unidades = UnidadeMedida::where('empresa_id', $item->empresa_id) ->where('status', 1)->get(); $configGeral = ConfigGeral::where('empresa_id', $item->empresa_id) ->first(); return view('contador.produtos_edit', compact('item', 'listaCTSCSOSN', 'padroes', 'categorias', 'cardapio', 'marcas', 'variacoes', 'configMercadoLivre', 'unidades', 'configGeral')); } public function clientes(Request $request){ $contador = Empresa::findOrFail(request()->empresa_id); $empresaSelecionada = $contador->empresa_selecionada; $data = Cliente::where('empresa_id', $empresaSelecionada) ->when(!empty($request->razao_social), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('razao_social', 'LIKE', "%$request->razao_social%"); }); }) ->when(!empty($request->cpf_cnpj), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('cpf_cnpj', 'LIKE', "%$request->cpf_cnpj%"); }); }) ->paginate(__itensPagina()); return view('contador.clientes', compact('data')); } public function fornecedores(Request $request){ $contador = Empresa::findOrFail(request()->empresa_id); $empresaSelecionada = $contador->empresa_selecionada; $data = Fornecedor::where('empresa_id', $empresaSelecionada) ->when(!empty($request->razao_social), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('razao_social', 'LIKE', "%$request->razao_social%"); }); }) ->when(!empty($request->cpf_cnpj), function ($q) use ($request) { return $q->where(function ($quer) use ($request) { return $quer->where('cpf_cnpj', 'LIKE', "%". preg_replace('/[^0-9]/', '', ($request->cpf_cnpj)) ."%"); }); }) ->paginate(__itensPagina()); return view('contador.fornecedores', compact('data')); } public function empresaCreate(){ $contador = Empresa::findOrFail(request()->empresa_id); if(sizeof(__empresasDoContador()) >= $contador->limite_cadastro_empresas){ session()->flash("flash_error", "Você atingiu o limite de cadastro de empresas"); return redirect()->back(); } return view('contador.create_empresa', compact('contador')); } public function empresaStore(Request $request){ $this->__validate($request); try{ DB::transaction(function () use ($request) { $contador = Empresa::findOrFail(request()->empresa_id); if ($request->hasFile('certificado')) { $file = $request->file('certificado'); $fileTemp = file_get_contents($file); $request->merge([ 'arquivo' => $fileTemp ?? '', // 'cpf_cnpj' => preg_replace('/[^0-9]/', '', $request->cpf_cnpj), 'senha' => $request->senha_certificado, 'token' => $request->token ?? '', ]); } $email = $request->email; $request->merge([ 'email' => $request->email_empresa ]); $empresa = Empresa::create($request->all()); $this->empresaUtil->initLocation($empresa); $this->empresaUtil->initNaturezaTributacao($empresa); if ($request->usuario) { $usuario = User::create([ 'name' => $request->usuario ?? null, 'email' => $email ?? null, 'password' => Hash::make($request['password']) ?? '', 'remember_token' => Hash::make($request['remember_token']) ?? '' ]); UsuarioEmpresa::create([ 'empresa_id' => $empresa->id, 'usuario_id' => $usuario->id ?? null ]); } ContadorEmpresa::create([ 'empresa_id' => $empresa->id, 'contador_id' => $contador->id ]); return true; }); session()->flash("flash_success", "Empresa cadastrada!"); } catch (\Exception $e) { // echo $e->getMessage(); // die; session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('home'); } private function __validate(Request $request) { $rules = [ 'nome' => 'required', 'cpf_cnpj' => 'required', 'ie' => 'required', 'celular' => 'required', 'csc' => 'required', 'csc_id' => 'required', 'cep' => 'required', 'rua' => 'required', 'numero' => 'required', 'bairro' => 'required', 'cidade_id' => 'required', 'numero_ultima_nfe_producao' => 'required', 'numero_ultima_nfe_homologacao' => 'required', 'numero_serie_nfe' => 'required', 'numero_ultima_nfce_producao' => 'required', 'numero_ultima_nfce_homologacao' => 'required', 'numero_serie_nfce' => 'required', 'numero_ultima_cte_producao' => 'required', 'numero_ultima_cte_homologacao' => 'required', 'numero_serie_cte' => 'required', 'email' => 'unique:users', ]; $messages = [ 'nome.required' => 'Campo Obrigatório', 'cpf_cnpj.required' => 'Campo Obrigatório', 'ie.required' => 'Campo Obrigatório', 'email.required' => 'Campo Obrigatório', 'celular.required' => 'Campo Obrigatório', 'csc.required' => 'Campo Obrigatório', 'csc_id.required' => 'Campo Obrigatório', 'cep.required' => 'Campo Obrigatório', 'rua.required' => 'Campo Obrigatório', 'numero.required' => 'Campo Obrigatório', 'bairro.required' => 'Campo Obrigatório', 'cidade_id.required' => 'Campo Obrigatório', 'numero_ultima_nfe_producao.required' => 'Campo Obrigatório', 'numero_ultima_nfe_homologacao.required' => 'Campo Obrigatório', 'numero_serie_nfe.required' => 'Campo Obrigatório', 'numero_ultima_nfce_producao.required' => 'Campo Obrigatório', 'numero_ultima_nfce_homologacao.required' => 'Campo Obrigatório', 'numero_serie_nfce.required' => 'Campo Obrigatório', 'email.unique' => 'Já existe um usuário com este email', ]; $this->validate($request, $rules, $messages); } public function plano($id){ $item = Empresa::findOrFail($id); $planos = Plano::where('visivel_contadores', 1)->get(); return view('contador.plano', compact('item', 'planos')); } public function setPlano(Request $request, $id){ try{ PlanoPendente::create([ 'plano_id' => $request->plano_id, 'valor' => __convert_value_bd($request->valor), 'empresa_id' => $id, 'contador_id' => request()->empresa_id ]); session()->flash("flash_success", "Plano solicitado, aguarde a liberação do administrador!"); } catch (\Exception $e) { // echo $e->getMessage(); // die; session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('home'); } public function produtoUpdate(Request $request, $id){ $item = Produto::findOrFail($id); try { $file_name = $item->imagem; if ($request->hasFile('image')) { $this->util->unlinkImage($item, '/produtos'); $file_name = $this->uploadUtil->uploadImage($request, '/produtos'); } $request->merge([ 'valor_unitario' => __convert_value_bd($request->valor_unitario), 'valor_prazo' => __convert_value_bd($request->valor_prazo), 'valor_compra' => $request->valor_compra ? __convert_value_bd($request->valor_compra) : 0, 'valor_minimo_venda' => $request->valor_minimo_venda ? __convert_value_bd($request->valor_minimo_venda) : 0, 'imagem' => $file_name, 'codigo_anp' => $request->codigo_anp ?? '', 'perc_glp' => $request->perc_glp ? __convert_value_bd($request->perc_glp) : 0, 'perc_gnn' => $request->perc_gnn ? __convert_value_bd($request->perc_gnn) : 0, 'perc_gni' => $request->perc_gni ? __convert_value_bd($request->perc_gni) : 0, 'valor_partida' => $request->valor_partida ? __convert_value_bd($request->valor_partida) : 0, 'unidade_tributavel' => $request->unidade_tributavel ?? '', 'quantidade_tributavel' => $request->quantidade_tributavel ? __convert_value_bd($request->quantidade_tributavel) : 0, 'adRemICMSRet' => $request->adRemICMSRet ? __convert_value_bd($request->adRemICMSRet) : 0, 'pBio' => $request->pBio ? __convert_value_bd($request->pBio) : 0, 'pOrig' => $request->pOrig ? __convert_value_bd($request->pOrig) : 0, 'indImport' => $request->indImport ?? '', 'cUFOrig' => $request->cUFOrig ?? '', 'perc_icms' => $request->perc_icms ?? 0, 'perc_pis' => $request->perc_pis ?? 0, 'perc_cofins' => $request->perc_cofins ?? 0, 'perc_ipi' => $request->perc_ipi ?? 0, 'cfop_estadual' => $request->cfop_estadual ?? '', 'cfop_outro_estado' => $request->cfop_outro_estado ?? '', 'valor_combo' => $request->valor_combo ? __convert_value_bd($request->valor_combo) : 0, 'margem_combo' => $request->margem_combo ? __convert_value_bd($request->margem_combo) : 0, 'valor_atacado' => $request->valor_atacado ? __convert_value_bd($request->valor_atacado) : 0, 'empresa_id' => $item->empresa_id ]); $item->fill($request->all())->save(); if($request->variavel){ // $item->variacoes()->delete(); $variacaoDelete = []; for($i=0; $ivalor_venda_variacao); $i++){ $dataVariacao = [ 'produto_id' => $item->id, 'descricao' => $request->descricao_variacao[$i], 'valor' => __convert_value_bd($request->valor_venda_variacao[$i]), 'codigo_barras' => $request->codigo_barras_variacao[$i], 'referencia' => $request->referencia_variacao[$i], ]; if(isset($request->variacao_id[$i])){ $variacao = ProdutoVariacao::findOrfail($request->variacao_id[$i]); $file_name = $variacao->imagem; if(isset($request->imagem_variacao[$i])){ if($file_name != null){ $this->util->unlinkImage($variacao, '/produtos'); } $imagem = $request->imagem_variacao[$i]; $file_name = $this->util->uploadImageArray($imagem, '/produtos'); } $dataVariacao['imagem'] = $file_name; $variacao->fill($dataVariacao)->save(); $variacaoDelete[] = $request->variacao_id[$i]; }else{ $file_name = ''; if(isset($request->imagem_variacao[$i])){ $imagem = $request->imagem_variacao[$i]; $file_name = $this->util->uploadImageArray($imagem, '/produtos'); } $dataVariacao['imagem'] = $file_name; $v = ProdutoVariacao::create($dataVariacao); $variacaoDelete[] = $v->id; } } foreach($item->variacoes as $v){ if(!in_array($v->id, $variacaoDelete)){ $itemNfce = \App\Models\ItemNfce::where('variacao_id', $v->id) ->first(); $itemNfe = \App\Models\ItemNfe::where('variacao_id', $v->id) ->first(); if($itemNfce == null && $itemNfe == null){ if($v->estoque){ $v->estoque->delete(); } if($v->movimentacaoProduto){ $v->movimentacaoProduto->delete(); } $v->delete(); }else{ session()->flash("flash_error", "Esta variação $v->descricao já possui vendas ou compras não é possivel remover"); return redirect()->back(); } } } }else{ ProdutoVariacao::where('produto_id', $item->id)->delete(); } session()->flash("flash_success", "Produto atualizado!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); return redirect()->back(); } return redirect()->route('contador-empresa.produtos'); } public function clienteEdit($id){ $item = Cliente::findOrFail($id); __validaObjetoEmpresaContador(request()->empresa_id, $item->empresa_id); $listasPreco = ListaPrecoUsuario::select('lista_precos.*') ->join('lista_precos', 'lista_precos.id', '=', 'lista_preco_usuarios.lista_preco_id') ->where('lista_preco_usuarios.usuario_id', get_id_user()) ->get(); $config = ConfigGeral::where('empresa_id', request()->empresa_id)->first(); $tiposPagamento = Nfce::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('contador.clientes_edit', compact('item', 'listasPreco', 'tiposPagamento')); } public function fornecedorEdit($id){ $item = Fornecedor::findOrFail($id); __validaObjetoEmpresaContador(request()->empresa_id, $item->empresa_id); return view('contador.fornecedores_edit', compact('item')); } public function clienteUpdate(Request $request, $id){ $item = Cliente::findOrFail($id); try { $request->merge([ 'ie' => $request->ie ?? '', 'valor_cashback' => $request->valor_cashback ? __convert_value_bd($request->valor_cashback) : 0, 'valor_credito' => $request->valor_credito ? __convert_value_bd($request->valor_credito) : 0, 'empresa_id' => $item->empresa_id ]); $item->fill($request->all())->save(); $this->cadastraTributacao($item, $request); if($request->dias_vencimento[0] != ''){ $item->fatura()->delete(); for($i=0; $idias_vencimento); $i++){ FaturaCliente::create([ 'cliente_id' => $item->id, 'tipo_pagamento' => $request->tipo_pagamento[$i] ?? null, 'dias_vencimento' => $request->dias_vencimento[$i] ]); } } session()->flash("flash_success", "Cliente atualizado!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); return redirect()->back(); } return redirect()->route('contador-empresa.clientes'); } private function cadastraTributacao($cliente, Request $request){ if($cliente->tributacao){ $cliente->tributacao()->delete(); } $request->merge([ 'cliente_id' => $cliente->id ]); TributacaoCliente::create($request->all()); } public function fornecedorUpdate(Request $request, $id) { $item = Fornecedor::findOrFail($id); try { $request->merge([ 'ie' => $request->ie ?? '', 'empresa_id' => $item->empresa_id ]); $item->fill($request->all())->save(); session()->flash("flash_success", "Fornecedor atualizado!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('contador-empresa.fornecedores'); } }