319 lines
13 KiB
PHP
319 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\VendiZapConfig;
|
|
use App\Models\PedidoVendiZap;
|
|
use App\Models\ItemPedidoVendiZap;
|
|
use App\Models\Produto;
|
|
use App\Models\Cliente;
|
|
use App\Models\Cidade;
|
|
use App\Models\Transportadora;
|
|
use App\Models\NaturezaOperacao;
|
|
use App\Models\Empresa;
|
|
use App\Models\Nfe;
|
|
use App\Models\Funcionario;
|
|
use App\Models\PadraoTributacaoProduto;
|
|
use App\Models\ProdutoLocalizacao;
|
|
use App\Models\Localizacao;
|
|
|
|
class VendiZapPedidoController extends Controller
|
|
{
|
|
protected $url = "https://app.vendizap.com/api";
|
|
|
|
public function index(Request $request){
|
|
|
|
$config = VendiZapConfig::where('empresa_id', $request->empresa_id)->first();
|
|
if($config == null){
|
|
session()->flash("flash_error", "Configure as credenciais!");
|
|
return redirect()->route('vendizap-config.index');
|
|
}
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"X-Auth-Id: " . $config->auth_id,
|
|
"X-Auth-Secret: " . $config->auth_secret,
|
|
];
|
|
|
|
$urlFilter = $this->url . "/pedidos";
|
|
curl_setopt($ch, CURLOPT_URL, $urlFilter);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$data = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
if(!is_array($data)){
|
|
session()->flash("flash_error", $data);
|
|
return redirect()->route('vendizap-config.index');
|
|
}
|
|
// dd($data);
|
|
foreach($data as $item){
|
|
|
|
$pedido = PedidoVendiZap::where('_id', $item->id)
|
|
->where('empresa_id', $request->empresa_id)
|
|
->first();
|
|
|
|
$cliente = null;
|
|
if($item->cliente->documento){
|
|
$doc = $item->cliente->documento;
|
|
$cliente = Cliente::where('empresa_id', $request->empresa_id)
|
|
->where('cpf_cnpj', $doc)->first();
|
|
}
|
|
|
|
if($cliente == null){
|
|
$cliente = Cliente::where('empresa_id', $request->empresa_id)
|
|
->where('telefone', $item->cliente->telefone)->first();
|
|
}
|
|
|
|
if($pedido == null){
|
|
$dataPedido = [
|
|
'empresa_id' => $request->empresa_id,
|
|
'cliente_id' => $cliente ? $cliente->id : null,
|
|
'data' => $item->data,
|
|
'numero_pedido' => $item->numero,
|
|
'nome' => $item->cliente->nome,
|
|
'documento' => $item->cliente->documento,
|
|
'telefone' => $item->cliente->telefone,
|
|
'email' => $item->email,
|
|
'cep' => $item->cliente->endereco ? $item->cliente->endereco->cep : '',
|
|
'rua' => $item->cliente->endereco ? $item->cliente->endereco->logradouro : '',
|
|
'numero' => $item->cliente->endereco ? $item->cliente->endereco->numero : '',
|
|
'bairro' => $item->cliente->endereco ? $item->cliente->endereco->bairro : '',
|
|
'cidade' => $item->cliente->endereco ? $item->cliente->endereco->cidade : '',
|
|
'uf' => $item->cliente->endereco ? $item->cliente->endereco->estado : '',
|
|
'complemento' => $item->cliente->endereco ? $item->cliente->endereco->complemento : '',
|
|
'total' => $item->valorPedido,
|
|
'observacao' => $item->observacao,
|
|
'entrega' => $item->entrega,
|
|
'taxa_entrega' => $item->taxaEntrega,
|
|
'taxa_retirada' => $item->taxaRetirada,
|
|
'_id' => $item->id,
|
|
'hash' => $item->hash,
|
|
'codigo_link_rastreio' => isset($item->codigoLinkRastreio) ? $item->codigoLinkRastreio : '',
|
|
'tipo_pagamento' => $item->pagamento ? $item->pagamento->descricao : ''
|
|
];
|
|
|
|
$pedido = PedidoVendiZap::create($dataPedido);
|
|
foreach($item->itens as $itemPedido){
|
|
$produto = Produto::where('vendizap_id', $itemPedido->id_produto)->first();
|
|
if($produto == null){
|
|
$produto = $this->cadastrarProduto($itemPedido);
|
|
}
|
|
$dataItemPedido = [
|
|
'pedido_id' => $pedido->id,
|
|
'produto_id' => $produto ? $produto->id : null,
|
|
'vendizap_produto_id' => $itemPedido->id_produto,
|
|
'descricao' => $itemPedido->descricao,
|
|
'detalhes' => $itemPedido->detalhes,
|
|
'unidade' => $itemPedido->unidadeVenda,
|
|
'observacao' => $itemPedido->observacaoProduto,
|
|
'codigo' => $itemPedido->codigo,
|
|
'valor' => $itemPedido->preco,
|
|
'valor_promociconal' => $itemPedido->precoPromocional,
|
|
'quantidade' => $itemPedido->quantidade,
|
|
'sub_total' => $itemPedido->valorLiquido,
|
|
'valor_adicionais' => $itemPedido->valorAdicionais
|
|
];
|
|
ItemPedidoVendiZap::create($dataItemPedido);
|
|
}
|
|
}
|
|
}
|
|
|
|
$nome = $request->nome;
|
|
$telefone = $request->telefone;
|
|
$start_date = $request->start_date;
|
|
$end_date = $request->end_date;
|
|
|
|
$data = PedidoVendiZap::where('empresa_id', $request->empresa_id)
|
|
->orderBy('id', 'desc')
|
|
->when(!empty($start_date), function ($query) use ($start_date) {
|
|
return $query->whereDate('data', '>=', $start_date);
|
|
})
|
|
->when(!empty($end_date), function ($query) use ($end_date) {
|
|
return $query->whereDate('data', '<=', $end_date);
|
|
})
|
|
->when(!empty($nome), function ($query) use ($nome) {
|
|
return $query->where('nome', 'like', "%$nome%");
|
|
})
|
|
->when(!empty($telefone), function ($query) use ($telefone) {
|
|
return $query->where('nomtelefonee', 'like', "%$telefone%");
|
|
})
|
|
->paginate(__itensPagina());
|
|
|
|
return view('vendizap_pedidos.index', compact('data'));
|
|
}
|
|
|
|
private function cadastrarProduto($p){
|
|
if (isset($p->id)) {
|
|
$produto = Produto::create([
|
|
'vendizap_id' => $p->id,
|
|
'empresa_id' => request()->empresa_id,
|
|
'nome' => $p->descricao,
|
|
'valor_unitario' => isset($p->preco) ? $p->preco : 0,
|
|
]);
|
|
$locais = Localizacao::where('empresa_id', request()->empresa_id)->get();
|
|
foreach($locais as $l){
|
|
ProdutoLocalizacao::updateOrCreate([
|
|
'produto_id' => $produto->id,
|
|
'localizacao_id' => $l->id
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function show($id){
|
|
$pedido = PedidoVendiZap::findOrFail($id);
|
|
|
|
$config = VendiZapConfig::where('empresa_id', request()->empresa_id)->first();
|
|
if($config == null){
|
|
session()->flash("flash_error", "Configure as credenciais!");
|
|
return redirect()->route('vendizap-config.index');
|
|
}
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"X-Auth-Id: " . $config->auth_id,
|
|
"X-Auth-Secret: " . $config->auth_secret,
|
|
];
|
|
|
|
$urlFilter = $this->url . "/pedidos/".$pedido->_id;
|
|
curl_setopt($ch, CURLOPT_URL, $urlFilter);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$data = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
if(!isset($data->cliente)){
|
|
session()->flash("flash_error", $data);
|
|
return redirect()->back();
|
|
}
|
|
$cidade = null;
|
|
if($data->cliente->endereco){
|
|
$cidade = Cidade::where('nome', $data->cliente->endereco->cidade)
|
|
->where('uf', $data->cliente->endereco->estado)->first();
|
|
}
|
|
|
|
foreach($data->itens as $it){
|
|
$it->variacaoNome = "";
|
|
if($it->relacaoVariacao){
|
|
foreach($it->relacaoVariacao as $r){
|
|
$it->variacaoNome .= " " . $r->variaveis[0]->nome;
|
|
}
|
|
}
|
|
}
|
|
// dd($data);
|
|
return view('vendizap_pedidos.show', compact('data', 'pedido', 'cidade'));
|
|
}
|
|
|
|
public function setCliente(Request $request, $id){
|
|
$item = PedidoVendiZap::findOrFail($id);
|
|
$cliente = Cliente::findOrFail($request->cliente_id);
|
|
|
|
if($cliente){
|
|
$item->documento = $cliente->cpf_cnpj;
|
|
$item->telefone = $cliente->telefone;
|
|
$item->cliente_id = $cliente->id;
|
|
$item->save();
|
|
session()->flash("flash_success", "Cliente alterado!");
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function storeCliente(Request $request, $id){
|
|
$item = PedidoVendiZap::findOrFail($id);
|
|
$cliente = Cliente::create($request->all());
|
|
|
|
$item->cliente_id = $cliente->id;
|
|
$item->save();
|
|
session()->flash("flash_success", "Cliente cadastrado!");
|
|
return redirect()->back();
|
|
|
|
}
|
|
|
|
public function gerarNfe($id)
|
|
{
|
|
$item = PedidoVendiZap::findOrFail($id);
|
|
|
|
if(!$item->cliente){
|
|
session()->flash("flash_error", "Cliente não cadastrado no sistema");
|
|
return redirect()->back();
|
|
}
|
|
$cliente = $item->cliente;
|
|
|
|
foreach($item->itens as $i){
|
|
if($i->produto == null){
|
|
session()->flash("flash_error", "Produto " . $i->descricao . " não está cadastrado!");
|
|
return redirect()->back();
|
|
}
|
|
if(!$i->produto->cfop_estadual || !$i->produto->cfop_outro_estado || !$i->produto->cst_csosn){
|
|
$padroes = PadraoTributacaoProduto::where('empresa_id', request()->empresa_id)->get();
|
|
return view('vendizap_pedidos.definir_tributacao', compact('item', 'padroes'));
|
|
}
|
|
}
|
|
|
|
$cidades = Cidade::all();
|
|
$transportadoras = Transportadora::where('empresa_id', request()->empresa_id)->get();
|
|
|
|
$naturezas = NaturezaOperacao::where('empresa_id', request()->empresa_id)->get();
|
|
if (sizeof($naturezas) == 0) {
|
|
session()->flash("flash_warning", "Primeiro cadastre um natureza de operação!");
|
|
return redirect()->route('natureza-operacao.create');
|
|
}
|
|
// $produtos = Produto::where('empresa_id', request()->empresa_id)->get();
|
|
$empresa = Empresa::findOrFail(request()->empresa_id);
|
|
$caixa = __isCaixaAberto();
|
|
$empresa = __objetoParaEmissao($empresa, $caixa->local_id);
|
|
$numeroNfe = Nfe::lastNumero($empresa);
|
|
$funcionarios = Funcionario::where('empresa_id', request()->empresa_id)->get();
|
|
|
|
$isPedidoVendiZap = 1;
|
|
|
|
$naturezaPadrao = NaturezaOperacao::where('empresa_id', request()->empresa_id)
|
|
->where('padrao', 1)->first();
|
|
return view('nfe.create', compact('item', 'cidades', 'transportadoras', 'naturezas', 'isPedidoVendiZap', 'numeroNfe',
|
|
'caixa', 'funcionarios', 'naturezaPadrao'));
|
|
}
|
|
|
|
public function updateTributacao(Request $request, $id){
|
|
try{
|
|
for($i=0; $i<sizeof($request->produto_id); $i++){
|
|
$item = Produto::findOrFail($request->produto_id[$i]);
|
|
|
|
|
|
$item->cst_csosn = $request->cst_csosn[$i];
|
|
$item->cst_pis = $request->cst_pis[$i];
|
|
$item->cst_cofins = $request->cst_cofins[$i];
|
|
$item->cst_ipi = $request->cst_ipi[$i];
|
|
|
|
$item->perc_icms = $request->perc_icms[$i];
|
|
$item->perc_pis = $request->perc_pis[$i];
|
|
$item->perc_cofins = $request->perc_cofins[$i];
|
|
$item->perc_ipi = $request->perc_ipi[$i];
|
|
$item->perc_red_bc = $request->perc_red_bc[$i] ?? '';
|
|
$item->cfop_estadual = $request->cfop_estadual[$i];
|
|
$item->cfop_outro_estado = $request->cfop_outro_estado[$i];
|
|
|
|
$item->cfop_entrada_estadual = $request->cfop_entrada_estadual[$i];
|
|
$item->cfop_entrada_outro_estado = $request->cfop_entrada_outro_estado[$i];
|
|
$item->ncm = $request->ncm[$i];
|
|
$item->cest = $request->cest[$i];
|
|
|
|
$item->save();
|
|
}
|
|
|
|
session()->flash("flash_success", "Tributação definida!");
|
|
return redirect()->route('vendizap-pedidos.gerar-nfe', [$id]);
|
|
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
}
|