253 lines
8.5 KiB
PHP
253 lines
8.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Localizacao;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Models\UsuarioLocalizacao;
|
|
use App\Models\Empresa;
|
|
use NFePHP\Common\Certificate;
|
|
use App\Utils\UploadUtil;
|
|
|
|
class LocalizacaoController extends Controller
|
|
{
|
|
protected $util;
|
|
public function __construct(UploadUtil $util)
|
|
{
|
|
$this->util = $util;
|
|
}
|
|
|
|
public function index(Request $request){
|
|
$data = Localizacao::where('empresa_id', $request->empresa_id)
|
|
->get();
|
|
|
|
return view('localizacao.index', compact('data'));
|
|
}
|
|
|
|
public function create(){
|
|
$dadosCertificado = null;
|
|
$count = Localizacao::where('empresa_id', request()->empresa_id)->count();
|
|
|
|
$empresa = Empresa::findOrFail(request()->empresa_id);
|
|
$plano = $empresa->plano;
|
|
|
|
if($count >= $plano->plano->maximo_locais){
|
|
session()->flash("flash_warning", "Limite de localizações atingido!");
|
|
return redirect()->back();
|
|
}
|
|
$count++;
|
|
$naoDesativar = 0;
|
|
return view('localizacao.create', compact('dadosCertificado', 'count', 'naoDesativar'));
|
|
}
|
|
|
|
public function edit($id){
|
|
$item = Localizacao::findOrFail($id);
|
|
$temp = Localizacao::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
$naoDesativar = $firstLocation = $item == $temp;
|
|
__validaObjetoEmpresa($item);
|
|
|
|
$dadosCertificado = null;
|
|
|
|
if ($item != null && $item->arquivo) {
|
|
$dadosCertificado = $this->getInfoCertificado($item);
|
|
}
|
|
|
|
if(__isAdmin()){
|
|
$firstLocation = 0;
|
|
}
|
|
return view('localizacao.edit', compact('item', 'firstLocation', 'dadosCertificado', 'naoDesativar'));
|
|
}
|
|
|
|
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 store(Request $request)
|
|
{
|
|
$this->__validate($request);
|
|
try {
|
|
|
|
DB::transaction(function () use ($request) {
|
|
|
|
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 ?? '',
|
|
'csc' => $request->csc ? $request->csc : 'AAAAAA',
|
|
'csc_id' => $request->csc_id ? $request->csc_id : '000001',
|
|
]);
|
|
}
|
|
|
|
$file_name = '';
|
|
if ($request->hasFile('image')) {
|
|
$file_name = $this->util->uploadImage($request, '/logos');
|
|
}
|
|
|
|
$request->merge([
|
|
'logo' => $file_name,
|
|
'perc_ap_cred' => $request->perc_ap_cred ?? 0
|
|
]);
|
|
|
|
$localizacao = Localizacao::create($request->all());
|
|
|
|
$empresa = Empresa::findOrFail($request->empresa_id);
|
|
foreach($empresa->usuarios as $u){
|
|
UsuarioLocalizacao::updateOrCreate([
|
|
'usuario_id' => $u->usuario_id,
|
|
'localizacao_id' => $localizacao->id
|
|
]);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
session()->flash("flash_success", "Localização cadastrada!");
|
|
} catch (\Exception $e) {
|
|
// echo $e->getMessage();
|
|
// die;
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->route('localizacao.index');
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$item = Localizacao::findOrFail($id);
|
|
|
|
try {
|
|
|
|
$file_name = $item->logo;
|
|
|
|
if ($request->hasFile('image')) {
|
|
$file_name = $this->util->uploadImage($request, '/logos');
|
|
}
|
|
|
|
$request->merge([
|
|
'logo' => $file_name,
|
|
'perc_ap_cred' => $request->perc_ap_cred ?? 0
|
|
]);
|
|
|
|
if ($request->hasFile('certificado')) {
|
|
|
|
$file = $request->file('certificado');
|
|
$fileTemp = file_get_contents($file);
|
|
$request->merge([
|
|
'arquivo' => $fileTemp,
|
|
'senha' => $request->senha_certificado
|
|
]);
|
|
}
|
|
|
|
$item->fill($request->all())->save();
|
|
session()->flash("flash_success", "Localização atualizada!");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->route('localizacao.index');
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$item = Localizacao::findOrFail($id);
|
|
|
|
try {
|
|
|
|
$item->usuarioLocalizacao()->delete();
|
|
$item->delete();
|
|
session()->flash("flash_success", "Localização removida!");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function updateStatus($id)
|
|
{
|
|
$item = Localizacao::findOrFail($id);
|
|
|
|
try {
|
|
|
|
$item->status = !$item->status;
|
|
$item->save();
|
|
if($item->status){
|
|
session()->flash("flash_success", "Localização ativa!");
|
|
}else{
|
|
session()->flash("flash_success", "Localização desativada!");
|
|
}
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
private function __validate(Request $request)
|
|
{
|
|
$rules = [
|
|
'nome' => 'required',
|
|
'cpf_cnpj' => 'required',
|
|
'ie' => 'required',
|
|
'celular' => 'required',
|
|
'cep' => 'required',
|
|
'rua' => 'required',
|
|
'numero' => 'required',
|
|
'bairro' => 'required',
|
|
'cidade_id' => '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 removerLogo($id){
|
|
try{
|
|
$item = Localizacao::findOrFail($id);
|
|
$this->util->unlinkImage($item, '/logos');
|
|
$item->logo = '';
|
|
$item->save();
|
|
session()->flash("flash_success", "Logo removida!");
|
|
}catch(\Exception $e){
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
}
|