| Server IP : 54.94.228.101 / Your IP : 172.28.1.13 Web Server : Apache System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/vinumday2_0/app/Modules/PedidoVenda/Controllers/Admin/ |
Upload File : |
<?php
namespace App\Modules\PedidoVenda\Controllers\Admin;
ini_set('memory_limit', '256M');
use Illuminate\Http\Request;
use Mail;
use Exception;
use App\Http\Requests;
use App\Http\Controllers\BaseController;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\Produto\Models\Produto;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\OfertaReserva\Models\OfertaReserva;
/*use App\Modules\Servico\Models\Servico;*/
use App\Modules\PedidoVendaStatus\Models\PedidoVendaStatus;
use App\Modules\PedidoVendaCategoria\Models\PedidoVendaCategoria;
use App\Modules\PedidoVendaHasProduto\Models\PedidoVendaHasProduto;
/*use App\Modules\PedidoVendaHasServico\Models\PedidoVendaHasServico;*/
use App\Modules\PedidoVendaTaxa\Models\PedidoVendaTaxa;
use App\Modules\PedidoVendaComissao\Models\PedidoVendaComissao;
use App\Modules\CondicaoComercial\Models\CondicaoComercial;
use App\Modules\Relatorio\Models\Relatorio;
use App\Modules\UnidadeNegocio\Models\UnidadeNegocio;
use App\Modules\PedidoVendaHistorico\Models\PedidoVendaHistorico;
use App\Modules\Adega\Models\Adega;
use App\Modules\Cupom\Models\Cupom;
use App\Modules\CupomPedidoVenda\Models\CupomPedidoVenda;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Services\CartService;
use App\Services\GeralService;
use App\Services\OfertaService;
use App\Services\PaginationService;
use App\Modules\PedidoVenda\Services\PedidoVendaService;
use App\User;
use Illuminate\Support\Facades\Log;
use DB;
use Excel;
class AdminPedidoVendaController extends BaseController
{
private $modulo;
private $fields;
private $fks;
private $lastInsertId;
public function __construct(){
parent::__construct();
$this->middleware('auth');
$this->modulo = \App\Gerador::where('nome', 'PedidoVenda')->with('campos', 'fks')->first();
$this->fields = $this->modulo->campos;
$this->fks = $this->modulo->fks;
$this->pedido_venda_m = new PedidoVenda();
}
public function index(Request $request){
$post = $request->input();
$query = $this->pedido_venda_m->select('pedido_venda.*');
$data['fields_listagem'] = array();
foreach ($this->fields as $field) {
if($field->listagem){
$data['fields_listagem'][] = $field;
}
}
foreach ($this->fks as $fk) {
if($fk->listagem){
if($fk->campoRelacionado->translatable){
$table = $fk->moduloRelacionado->nome_tabela.'_descricao';
$on = $fk->moduloRelacionado->nome_tabela.'_descricao.'.$fk->moduloRelacionado->nome_tabela.'_id';
}else{
$table = $fk->moduloRelacionado->nome_tabela;
$on = $fk->moduloRelacionado->nome_tabela.'.id';
}
$query->leftJoin($table, 'pedido_venda.'.$fk->nome, '=', $on);
$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
$data['fields_listagem'][] = $fk;
}
}
if(isset($post['filtro']) && $post['filtro']){
$filtro = Relatorio::with('grupos.criterios')->find($post['filtro']);
foreach ($filtro->grupos as $grupo) {
if($grupo->condicao == 'AND'){
$method = 'where';
}else{
$method = 'orWhere';
}
$query->$method(function ($query) use($grupo) {
foreach ($grupo->criterios as $criterio) {
if($criterio->condicao == 'AND'){
$query->where($criterio->coluna, $criterio->operador, $criterio->valor);
}else{
$query->orWhere($criterio->coluna, $criterio->operador, $criterio->valor);
}
}
});
}
}
$query->join('cadastro', 'pedido_venda.id_cliente', '=', 'cadastro.id');
$query->join('sis_users', 'cadastro.user_id', '=', 'sis_users.id');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->where('pedido_venda.id', '=', $request->input('term'));
$qr->orWhere('pedido_venda.nm_referencia', 'like', '%'.$request->input('term').'%');
$qr->orWhere('sis_users.email', 'like', '%'.$request->input('term').'%');
});
}
if ($request->input('term_data_inicio') && $request->input('term_data_fim'))
{
$query->whereBetween('pedido_venda.data_fechamento', [$request->input('term_data_inicio') . " 00:00:00", $request->input('term_data_fim') . " 23:59:59"]);
}
elseif($request->input('term_data_inicio'))
{
$query->whereBetween('pedido_venda.data_fechamento', [$request->input('term_data_inicio') . " 00:00:00", $request->input('term_data_inicio') . " 23:59:59"]);
}
if($request->input('term_empresa_id')){
$query->where('pedido_venda.empresa_id', '=', $request->input('term_empresa_id'));
}
$query->groupBy('pedido_venda.id')->orderBy('pedido_venda.id', 'DESC');
$pagination = new PaginationService([
'query' => $query,
'path' => url('/admin/pedido-venda'),
'request' => $request
]);
$data['pagination'] = $pagination;
$query->offset($pagination->pagesize * ($pagination->current_page - 1))->limit($pagination->pagesize);
$data['pedido_vendas'] = $query->get();
$data['filtros'] = Relatorio::where('tipo', 'F')->where('modulo', 'PedidoVenda')->get();
$data['empresas'] = Empresa::all();
$data['filtro_atual'] = $post['filtro'] ?? null;
$data['termos'] = $request->all();
usort($data['fields_listagem'], function($a, $b) {
return $a->ordem - $b->ordem;
});
return view('PedidoVenda::admin/pedido-venda',$data);
}
public function gerador(Request $request){
$data = [];
$data['categorias'] = PedidoVendaCategoria::orderBy('nome', 'ASC')->get();
$data['clientes'] = Cadastro::where('id', 15610)->orderBy('nome', 'ASC')->get();
return view('PedidoVenda::admin/gerador',$data);
}
public function geradorAdicionarProduto(Request $request){
$data = [];
$produto = PedidoVendaService::geradorItemProduto($request);
$data['produto'] = $produto;
$data['quantidade'] = $request->input('quantidade');
$html = view('PedidoVenda::admin/_gerador-produto-item', $data)->render();
$json = [
'status' => true,
'html' => $html
];
return response()->json($json);
}
public function gerarPedidoInterno(Request $request){
$resultado = PedidoVendaService::gerarPedidoInterno($request);
return response()->json($resultado);
}
public function verificarCupom(Request $request){
$post = $request->input();
$cliente = Cadastro::find($post['id_cliente']);
$cupom = CartService::buscarCupomAtivo('', $cliente);
return response()->json(array(
'status' => ($cupom ? true : false)
));
}
public function calcularCupom(Request $request){
$response = $this->calculaCupom($request);
return response()->json($response);
}
private function calculaCupom($request){
$post = $request->input();
if(empty($post['codigo'])){
return [
'status' => false,
'message' => 'Cupom Inválido'
];
}
$cliente = Cadastro::find($post['id_cliente']);
$cupom = CartService::buscarCupomAtivo($post['codigo'], $cliente);
if ($cupom) {
if($cliente){ // Se existe o cupom e o cliente existe
$countCupomCliente = Cadastro::select('cadastro.id')
->join('pedido_venda', 'cadastro.id', '=', 'pedido_venda.id_cliente')
->join('cupom_pedido_venda', 'pedido_venda.id', 'cupom_pedido_venda.id_pedido_venda')
->where('cadastro.id', $cliente->id)
->where('cupom_pedido_venda.id_cupom', $cupom->id)->count(); // Confere se o cliente já utilizou o cupom
if($countCupomCliente > 0 && $cupom->codigo != env('CUPOM_SOCIOS', 'VINUMOFF')){ // Cliente já usou o cupom se não for cupom especial
return [
'status' => false,
'message' => 'Esse cupom já foi utilizado.'
];
}
}
$ofertas = $post['ofertas'];
$soma = 0;
$custo_efetivo = 0;
$valor_desconto = 0;
foreach ($ofertas as $oferta) {
$item = Oferta::find($oferta['id']);
$soma += $item->preco_oferta * $oferta['quantidade'];
$custo_efetivo += OfertaService::getCustoEfetivo($item->id) * $oferta['quantidade'];
}
if($cupom->codigo == env('CUPOM_SOCIOS', 'VINUMOFF')){
$novo_total = $custo_efetivo;
$desconto = $soma - $custo_efetivo;
$valor_desconto = $desconto;
$desconto = "R$ " . number_format($desconto, 2, ',', '.');
}elseif($cupom){
$novo_total = $soma * (1 - (($cupom->percentual_desconto ? $cupom->percentual_desconto : 100) / 100)) - $cupom->valor_desconto;
$novo_total = $novo_total > 0 ? $novo_total : 0;
$desconto = ($cupom->percentual_desconto > 0 ? number_format($cupom->percentual_desconto, 2, ',', '.')."%" : "R$ " . number_format($cupom->valor_desconto, 2, ',', '.'));
$valor_desconto = ($cupom->percentual_desconto > 0 ? ($cupom->percentual_desconto * $soma) / 100 : $cupom->valor_desconto);
}else{
$novo_total = $soma;
$desconto = '-';
}
if($valor_desconto > 0){
$valor_desconto = -abs($valor_desconto);
}
$html = view('PedidoVenda::admin/_cupom-desconto', ['cupom' => $cupom, 'desconto' => $desconto, 'valor_desconto' => $valor_desconto])->render();
return [
'status' => true,
'message' => 'Cupom adicionado com sucesso!',
'cupom' => $cupom,
'html' => $html
];
}else{
$cupomExclusivoClientes = Cupom::where('codigo', $post['codigo'])->where('status', 'A')->first();
if(!$cliente && $cupomExclusivoClientes){
$message = 'Cupom exclusivo. Talvez este cliente não tenha este cupom disponível.';
}else{
$message = 'Cupom inválido.';
}
return [
'status' => false,
'message' => $message
];
}
}
public function add(Request $request){
$data = array();
$data['modulo'] = $this->modulo;
$data['fields'] = [];
foreach ($this->fields as $field) {
$data['fields'][] = $field;
}
foreach ($this->fks as $fk) {
$data['fields'][] = $fk;
}
usort($data['fields'], function($a, $b) {
return $a->ordem - $b->ordem;
});
foreach ($this->fks as $fk) {
$classPath = '\App\Modules\\'.$fk->moduloRelacionado->nome.'\Models\\'.$fk->moduloRelacionado->nome;
$data['array_'.$fk->nome] = $classPath::get();
}
$data['listaOfertas'] = GeralService::listaOfertasPedidoVenda();
// $data['listaUsuarios'] = User::orderBy('first_name', 'ASC')->orderBy('last_name', 'ASC')->get();
$data['listaStatusPDV'] = PedidoVendaStatus::orderBy('id', 'ASC')->get();
$data['unidades'] = UnidadeNegocio::orderBy('id','ASC')->get();
// $data['listaCondicaoComercial'] = CondicaoComercial::orderBy('nome', 'ASC')->get();
$data['nextId'] = $this->pedido_venda_m->getNextAutoIncrement();
$id_cliente = $request->input('id_cliente');
if(!empty($id_cliente) && is_numeric($id_cliente)){
$data['cadastros'] = Cadastro::where('id', $id_cliente)->get();
}else{
$data['cadastros'] = Cadastro::orderBy('nome', 'ASC')->orderBy('sobrenome', 'ASC')->get();
}
$data['id_cliente'] = $id_cliente;
$data['categorias'] = PedidoVendaCategoria::orderBy('nome', 'ASC')->get();
if($request->input('confraria_id')){
$data['confrarias'] = Confraria::where('id', $request->input('confraria_id'))->orderBy('nome', 'ASC')->get();
$data['confraria_id'] = $request->input('confraria_id');
}
return view('PedidoVenda::admin/form-pedido-venda', $data);
}
public function edit($id){
$id = PedidoVenda::where('id', $id)->value('id');
$data['modulo'] = $this->modulo;
$data['fields'] = [];
foreach ($this->fields as $field) {
$data['fields'][] = $field;
}
foreach ($this->fks as $fk) {
$data['fields'][] = $fk;
}
usort($data['fields'], function($a, $b) {
return $a->ordem - $b->ordem;
});
foreach ($this->fks as $fk) {
$classPath = '\App\Modules\\'.$fk->moduloRelacionado->nome.'\Models\\'.$fk->moduloRelacionado->nome;
$data['array_'.$fk->nome] = $classPath::get();
}
$data['pedido_venda'] = $this->pedido_venda_m->find($id);
$data['ofertasPdv'] = GeralService::buscarOfertasPagamento(['id_pedido_venda' => $id]);
if($this->modulo->galeria){
$data['pedido_venda']->imagens = $this->pedido_venda_m->getImagens($id);
}
//$data['listaProdutos'] = Produto::orderBy('nome', 'ASC')->get();
$data['listaOfertas'] = GeralService::listaOfertasPedidoVenda();
$data['unidades'] = UnidadeNegocio::orderBy('id','ASC')->get();
/*$data['listaServicos'] = Servico::orderBy('nome', 'ASC')->get();*/
// $data['listaUsuarios'] = User::orderBy('first_name', 'ASC')->orderBy('last_name', 'ASC')->get();
$data['listaStatusPDV'] = PedidoVendaStatus::orderBy('nome', 'ASC')->get();
// $data['listaCondicaoComercial'] = CondicaoComercial::orderBy('nome', 'ASC')->get();
$data['listaHistorico'] = PedidoVendaHistorico::where('id_pedido_venda', $id)->orderBy('data', 'DESC')->with(/*'colaborador',*/ 'status')->get();
// $data['cadastros'] = Cadastro::orderBy('nome', 'ASC')->orderBy('sobrenome', 'ASC')->get();
$data['cadastros'] = Cadastro::where('id', $data['pedido_venda']->id_cliente)->get();
//Confrarias
if($data['pedido_venda']->confraria_id){
$data['confrarias'] = Confraria::where('id', $data['pedido_venda']->confraria_id)->orderBy('nome', 'ASC')->get();
$data['confraria_id'] = $data['pedido_venda']->confraria_id;
}
$empresas = Empresa::all();
$pagarMe = [];
foreach ($empresas as $empresa) {
$apiKey = $empresa->api_key_pagar_me;
$pagarMe[$empresa->id] = new \PagarMe\Sdk\PagarMe($apiKey);
}
if($data['pedido_venda']->transacao_id){
try {
$data['pedido_venda']->transaction = $pagarMe[$data['pedido_venda']->empresa_id]->transaction()->get($data['pedido_venda']->transacao_id);
} catch (\Exception $e) {
$data['pedido_venda']->transaction = null;
}
}
$data['categorias'] = PedidoVendaCategoria::orderBy('nome', 'ASC')->get();
return view('PedidoVenda::admin/form-pedido-venda',$data);
}
public function detalhe($slug){
$data['pedido_venda'] = PedidoVenda::where('slug', $slug)->with('produtos')->first();
return view('PedidoVenda::admin/detalhe-pedido-venda',$data);
}
public function save(Request $request){
$post = $request->input();
if($request->input('id')){
$pedidoVenda = PedidoVenda::find($request->input('id'));
$pedidoVenda->unidade_negocio_id = $post['unidade_negocio_id'];
PedidoVendaHasProduto::where('id_pedido_venda', $pedidoVenda->id)->delete();
}else{
$pedidoVenda = new PedidoVenda();
if(isset($post['confraria_id'])){
$pedidoVenda->confraria_id = $post['confraria_id'];
}
$pedidoVenda->unidade_negocio_id = $post['unidade_negocio_id'];
$textParcela = (isset($post['tipo_deposito']) && $post['tipo_deposito']) ? '1':$post['parcelas'];
$condicaoComercial = CondicaoComercial::where('nome', $textParcela.'x')->first();
$post['id_condicao_comercial'] = $condicaoComercial->id;
if($post['total'] <= 0){
\Session::flash('type', 'danger');
\Session::flash('message', "O seu pedido deve ter valor maior que 0.");
return redirect()->back()->withInput();
}
if(isset($post['tipo_deposito']) && $post['tipo_deposito']){
if(!isset($post['nome_depositante']) || !$post['nome_depositante']){
return response()->json(array(
'status' => false,
'message' => 'Você deve preencher o nome do depositante.'
));
}
if($request->hasFile('fileUpload')) {
$file = $request->file('fileUpload');
$size = $file->getClientSize();
if($size > 5000000){
return response()->json(array(
'status' => false,
'message' => 'Tamanho excedido. O tamanho máximo do arquivo deve ser de 5 MB.'
));
}
$comprovante = GeralService::uploadFile($file, 'pedido-venda/comprovante');
$pedidoVenda->comprovante = $comprovante->filename;
}
$pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
$pedidoVenda->tipo_deposito = $post['tipo_deposito'];
$pedidoVenda->nome_depositante = $post['nome_depositante'];
$pedidoVenda->frete = 0; // Pendente
//CONFIRMAR
if(!empty($post['id_pedido_venda_categoria'])){
$pedidoVenda->tipo_deposito = 'INT'; //INTERNO
}
}else{
$cadastro = Cadastro::find($post['id_cliente']);
$user = User::find($cadastro->user_id);
$apiKey = GeralService::getApiKeyPagarMe($cadastro);
$pagarMe = new \PagarMe\Sdk\PagarMe($apiKey);
if($cadastro->customer_id){ // Se o usuário já possui customer cadastrado no PagarMe
$customer = $pagarMe->customer()->get($cadastro->customer_id);
}else{
$address = new \PagarMe\Sdk\Customer\Address([
'street' => 'R. Olavo Bilac',
'streetNumber' => '93',
'neighborhood' => 'Rio Branco',
'zipcode' => '95010080',
'complementary' => '',
'city' => 'Caxias do Sul',
'state' => 'RS',
'country' => 'Brasil',
]);
$telefone = (int) $res = preg_replace("/[^0-9]/", "", $cadastro->telefone);
$phone = new \PagarMe\Sdk\Customer\Phone(['ddd' => substr($telefone,0,2), 'number' => str_replace('-', '',substr($telefone,2)), 'ddi' => '55']);
$errors = [
'address[street_number]' => 'Número <strong>inválido</strong>.',
'address[street]' => 'Logradouro <strong>inválido</strong>.',
'address[neighborhood]' => 'Bairro <strong>inválido</strong>.',
'address[zipcode]' => 'CEP <strong>inválido</strong>.',
'phone[number]' => 'Telefone <strong>inválido</strong>.',
];
try {
$customer = $pagarMe->customer()->create(
$cadastro->nome,
$user->email,
$cadastro->cpf,
/** @var $address \PagarMe\Sdk\Customer\Address */
$address,
/** @var $phone \PagarMe\Sdk\Customer\Phone */
$phone
);
} catch (\Exception $e) {
$exceptionErrors = json_decode(json_decode($e->getMessage()));
if ($exceptionErrors != null){
$message = (isset($errors[$exceptionErrors->errors[0]->parameter_name])) ? $errors[$exceptionErrors->errors[0]->parameter_name] : $exceptionErrors->errors[0]->message;
} else {
$message = $e->getMessage();
}
\Session::flash('type', 'danger');
\Session::flash('message', $message);
return redirect()->back()->withInput();
}
$cadastro->customer_id = $customer->getId();
$cadastro->save();
}
if(isset($post['cartao_id']) && $post['cartao_id']){ // Se está usando um cartão já cadastrado
$cartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('id', $post['cartao_id'])->where('ativo', 1)->first();
if(!$cartao){
\Session::flash('type', 'danger');
\Session::flash('message', 'Cartão selecionado é inválido.');
return redirect()->back()->withInput();
}
try {
$card = $pagarMe->card()->get($cartao->cartao_id);
} catch (\Exception $e) {
\Session::flash('type', 'danger');
\Session::flash('message', 'Não foi possível encontrar o seu cartão na plataforma de pagamento. Por favor, tente outro método de pagamento.');
return redirect()->back()->withInput();
}
}else{
try {
$card = $pagarMe->card()->create(
$post['number'],
$post['name'],
substr($post['expiry'],0,2).substr($post['expiry'],5,2)
);
} catch (\Exception $e) {
$errors = json_decode(json_decode($e->getMessage()));
\Session::flash('type', 'danger');
\Session::flash('message', $errors->errors[0]->message);
return redirect()->back()->withInput();
}
if($card->getValid()){
if(isset($post['salvar_cartao']) && $post['salvar_cartao']){
$cadastroCartao = new CadastroCartao();
$cadastroCartao->cartao_id = $card->getId();
$cadastroCartao->cadastro_id = $cadastro->id;
$cadastroCartao->principal = 1;
$cadastroCartao->save();
}
}else{
\Session::flash('type', 'danger');
\Session::flash('message', 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.');
return redirect()->back()->withInput();
}
}
try {
$condicaoComercial = CondicaoComercial::find($post['id_condicao_comercial']);
$parcelas = intval($condicaoComercial->numero_dias / $condicaoComercial->frequencia);
$totalTransaction = $post['total'] * 100;
$totalTransaction = number_format($totalTransaction, 0, '','');
$creditCardTransaction = [
'total' => $totalTransaction,
'card' => $card,
'customer' => $customer,
'parcelas' => $post['parcelas']
];
$transaction = $pagarMe->transaction()->creditCardTransaction(
$totalTransaction,
$card,
$customer,
$parcelas, // parcelas
true // captura
//'http://requestb.in/pkt7pgpk', // postbackURL
//['idProduto' => 13933139] //metadata
);
if($transaction->getStatus() != 'paid'){
Log::info('confirmarCompra Pedido Status : ' . $transaction->getStatus() . '(' . json_encode($creditCardTransaction) . ')');
\Session::flash('type', 'danger');
\Session::flash('message', 'Não foi possível realizar a transação na plataforma de pagamento. Por favor, tente novamente mais tarde.');
return redirect()->back()->withInput();
}else{
Log::info('confirmarCompra OK : ' . json_encode($creditCardTransaction));
}
} catch (\Exception $e) {
Log::info('confirmarCompra Exception : ' . json_encode($creditCardTransaction));
Log::info('confirmarCompra Exception : ' . json_encode($e->getMessage()));
\Session::flash('type', 'danger');
\Session::flash('message', 'Não foi possível realizar a transação na plataforma de pagamento. Por favor, tente novamente mais tarde.');
return redirect()->back()->withInput();
}
$pedidoVenda->transacao_id = $transaction->getId();
}
}
$pedidoVenda->fill($post);
$pedidoVenda->save();
$id_pedido_venda = $pedidoVenda->id;
if(!empty($post['id_pedido_venda_categoria'])){
$id_pedido_venda_categoria = $post['id_pedido_venda_categoria'];
$sql = "UPDATE pedido_venda SET id_pedido_venda_categoria = {$id_pedido_venda_categoria} WHERE id = {$id_pedido_venda}";
DB::statement($sql);
}else{
$sql = "UPDATE pedido_venda SET id_pedido_venda_categoria = NULL WHERE id = {$id_pedido_venda}";
DB::statement($sql);
}
//Cupom x Pedido Venda
if(isset($post['cupom_id'])){
$cupomPedidoVenda = new CupomPedidoVenda();
$cupomPedidoVenda->id_cupom = $post['cupom_id'];
$cupomPedidoVenda->id_pedido_venda = $pedidoVenda->id;
$cupomPedidoVenda->save();
}
$nr_ofertas = 0;
if(isset($post['oferta-id']) && count($post['oferta-id'])){
foreach ($post['oferta-id'] as $key => $id_oferta) {
$nr_ofertas += $post['oferta-quantidade'][$key];
$oferta = Oferta::with('produtos.produto')->find($id_oferta);
foreach ($oferta->produtos as $ofertaHasProduto) {
$pedidoVendaProduto = new PedidoVendaHasProduto();
$pedidoVendaProduto->id_oferta = $oferta->id;
$pedidoVendaProduto->id_produto = $ofertaHasProduto->id_produto;
$pedidoVendaProduto->id_pedido_venda = $pedidoVenda->id;
$pedidoVendaProduto->quantidade = $ofertaHasProduto->quantidade * $post['oferta-quantidade'][$key];
$pedidoVendaProduto->valor_total = $ofertaHasProduto->valor_total * $post['oferta-quantidade'][$key];
$pedidoVendaProduto->save();
}
DB::table('pedido_venda_has_oferta')->insert([
[
'pedido_venda_id' => $pedidoVenda->id,
'oferta_id' => $oferta->id,
'quantidade' => $post['oferta-quantidade'][$key],
'valor_unitario' => $oferta->preco_oferta,
'valor_total' => $oferta->preco_oferta * $post['oferta-quantidade'][$key],
'desconto_ocultado' => $oferta->ocultar_desconto,
'created_at' => date('Y-m-d H:i:s')
]
]);
OfertaReserva::atualizaEstoque($oferta, $pedidoVenda, $post['oferta-quantidade'][$key]);
}
}
$pedidoVenda->nr_ofertas = $nr_ofertas;
$pedidoVenda->save();
OfertaReserva::limpaSession();
GeralService::recalcularAdega($pedidoVenda->id_cliente, $pedidoVenda->id, FALSE, $pedidoVenda->confraria_id);
if(isset($post['usuario-id']) && count($post['usuario-id'])){
foreach ($post['usuario-id'] as $key => $id_usuario) {
$pedidoVendaComissao = new PedidoVendaComissao();
$pedidoVendaComissao->id_pedido_venda = $id_pedido_venda;
$pedidoVendaComissao->id_usuario = $id_usuario;
$pedidoVendaComissao->valor = $post['comissao-valor'][$key];
$pedidoVendaComissao->tipo = $post['comissao-tipo'][$key];
$pedidoVendaComissao->valor_total = $post['comissao-total'][$key];
$pedidoVendaComissao->save();
}
}
if(isset($post['comissao-edit-id']) && count($post['comissao-edit-id'])){
foreach ($post['comissao-edit-id'] as $key => $id_comissao) {
$pedidoVendaComissao = PedidoVendaComissao::find($id_comissao);
$pedidoVendaComissao->valor = $post['comissao-edit-valor'][$key];
$pedidoVendaComissao->tipo = $post['comissao-edit-tipo'][$key];
$pedidoVendaComissao->valor_total = $post['comissao-edit-total'][$key];
$pedidoVendaComissao->save();
}
}
if(isset($post['taxa-nome']) && count($post['taxa-nome'])){
foreach ($post['taxa-nome'] as $key => $nome) {
$pedidoVendaTaxa = new PedidoVendaTaxa();
$pedidoVendaTaxa->id_pedido_venda = $id_pedido_venda;
$pedidoVendaTaxa->nome = $nome;
$pedidoVendaTaxa->valor = $post['taxa-valor'][$key];
$pedidoVendaTaxa->save();
}
}
if(isset($post['edit-taxa-id']) && count($post['edit-taxa-id'])){
foreach ($post['edit-taxa-id'] as $key => $id_taxa) {
$pedidoVendaTaxa = PedidoVendaTaxa::find($id_taxa);
$pedidoVendaTaxa->nome = $post['edit-taxa-nome'][$key];
$pedidoVendaTaxa->valor = $post['edit-taxa-valor'][$key];
$pedidoVendaTaxa->save();
}
}
\Session::flash('type', 'success');
\Session::flash('message', "Alteracoes salvas com sucesso!");
return redirect('admin/pedido-venda');
}
/**
* Links que usei como referência para fazer o clone de relationship com hasMany
* @url http://anytch.com/duplicate-row-relationship-laravel-5/
* @url https://www.reddit.com/r/laravel/comments/2avgbd/what_is_the_best_way_to_replicate_an_objectrow/?st=jk1hju58&sh=512b45bd
*/
public function clone($id) {
$pedidoVenda = PedidoVenda::where('id', $id)->first();
$pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
$pedidoVenda->load('produtos');
$pedidoVendaClone = $pedidoVenda->replicate();
$pedidoVendaClone->save();
if(isset($pedidoVenda->produtos)){
foreach($pedidoVenda->produtos as $produto){
$produtoClone = $produto->replicate();
$produtoClone->id_pedido_venda = $pedidoVendaClone->id;
$produtoClone->save();
}
}
\Session::flash('type', 'success');
\Session::flash('message', "Pedido {$id} duplicado com sucesso!");
return redirect('admin/pedido-venda');
}
public function saveHistorico(Request $request) {
$post = $request->input();
$pedidoVenda = PedidoVenda::find($post['id_pedido_venda']);
if($post['id_status'] == 2){
$pre_venda = FALSE;
foreach ($pedidoVenda->produtos as $item) {
$oferta = $item->oferta;
if($oferta->pre_venda){
$pre_venda = TRUE;
break;
}
}
$id_pedido_venda_status = $pre_venda ? 9 : 2;
}else{
$id_pedido_venda_status = $post['id_status'];
}
$pedidoVenda->id_status_pedido_venda = $id_pedido_venda_status;
$pedidoVenda->save();
$pedidoVendaHistorico = new PedidoVendaHistorico();
$pedidoVendaHistorico->id_pedido_venda = $post['id_pedido_venda'];
$pedidoVendaHistorico->data = date('Y-m-d H:i');
$pedidoVendaHistorico->comentario = $post['comentario'];
$pedidoVendaHistorico->notificar_cliente = ($post['notificar_cliente']=='true' ? 1 : 0);
$pedidoVendaHistorico->id_pedido_venda_status = $id_pedido_venda_status;
$pedidoVendaHistorico->id_colaborador = 1;
$pedidoVendaHistorico->save();
$pedidoVendaHistorico = $pedidoVendaHistorico->with('status'/*,'colaborador'*/)->find($pedidoVendaHistorico->id);
$pedidoVendaHistorico->data = date('d/m/Y H:i', strtotime($pedidoVendaHistorico->data));
return response()->json(array(
'status' => true,
'message' => 'Histórico adicionado com sucesso!',
'historico' => $pedidoVendaHistorico
));
}
public function upload_image(Request $request) {
if($request->hasFile('file')) {
//upload an image to the /img/tmp directory and return the filepath.
$file = $request->file('file');
$tmpFilePath = '/uploads/pedido-venda/';
$tmpFileName = time() . '-' . $file->getClientOriginalName();
$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
$path = $tmpFilePath . $tmpFileName;
return response()->json(array('path'=> $path, 'file_name'=>$tmpFileName), 200);
} else {
return response()->json(false, 200);
}
}
public function upload_galeria($id, Request $request) {
if($request->hasFile('file')) {
//upload an image to the /img/tmp directory and return the filepath.
$file = $request->file('file');
$tmpFilePath = '/uploads/pedido-venda/';
$tmpFileName = time() . '-' . $file->getClientOriginalName();
$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
$path = $tmpFilePath . $tmpFileName;
$this->pedido_venda_m->criar_imagem(array('id_pedido_venda' => $id, 'thumbnail_principal' => $tmpFileName));
return response()->json(array('path'=> $path, 'file_name'=>$tmpFileName), 200);
} else {
return response()->json(false, 200);
}
}
public function crop_image(Request $request) {
$img = \Image::make('uploads/pedido-venda/'.$request->input('file_name'));
$dataCrop = json_decode($request->input('data_crop'));
if($img->crop(intval($dataCrop->width), intval($dataCrop->height), intval($dataCrop->x), intval($dataCrop->y))->save('uploads/pedido-venda/thumb_'.$request->input('file_name'))){
@unlink('uploads/pedido-venda/'.$request->input('file_name'));
echo json_encode(array(
'status' => true,
'path' => '/uploads/pedido-venda/thumb_'.$request->input('file_name'),
'file_name' => 'thumb_'.$request->input('file_name'),
));
}else{
echo json_encode(array(
'status' => false,
'message' => 'Não foi possível alterar a imagem.'
));
}
}
public function delete($id){
$id = PedidoVenda::where('id', $id)->value('id');
$this->pedido_venda_m->deletar($id);
\Session::flash('type', 'success');
\Session::flash('message', "Registro removido com sucesso!");
return redirect('admin/pedido-venda');
}
public function delete_imagem($id){
try{
$imagem = $this->pedido_venda_m->getImagem($id);
$this->pedido_venda_m->deletar_imagem($id);
unlink('uploads/pedido-venda/'.$imagem->thumbnail_principal);
return response()->json(array('status' => true, 'message' => 'Registro removido com sucesso!'));
}catch(Exception $e){
return response()->json(array('status' => false, 'message' => $e->getMessage()));
}
}
public function deleteComprovante($id_pedido_venda){
try {
$PedidoVenda = PedidoVenda::where('id', $id_pedido_venda)->first();
GeralService::deleteFileImages($PedidoVenda->comprovante, 'pedido-venda/comprovante');
$PedidoVenda->comprovante = '';
$PedidoVenda->save();
return response()->json(array('status' => true, 'message' => 'Comprovante removido com sucesso!'));
} catch (Exception $e) {
return response()->json(array('status' => false, 'message' => $e->getMessage()));
}
}
public function deleteProduto(Request $request){
PedidoVendaHasProduto::where('id_pedido_venda', $request->input('id_pedido_venda'))->where('id_produto', $request->input('id_produto'))->delete();
return response()->json(array(
'status' => true,
'message' => 'Produto removido com sucesso!'
));
}
/*
public function deleteServico(Request $request){
PedidoVendaHasServico::where('id_pedido_venda', $request->input('id_pedido_venda'))->where('id_servico', $request->input('id_servico'))->delete();
return response()->json(array(
'status' => true,
'message' => 'Serviço removido com sucesso!'
));
}
*/
public function deleteTaxa(Request $request){
PedidoVendaTaxa::where('id', $request->input('id_taxa'))->delete();
return response()->json(array(
'status' => true,
'message' => 'Taxa removida com sucesso!'
));
}
public function deleteComissao(Request $request){
PedidoVendaComissao::where('id', $request->input('id_comissao'))->delete();
return response()->json(array(
'status' => true,
'message' => 'Comissão removida com sucesso!'
));
}
public function buscarCartoesCliente(Request $request){
$post = $request->input();
$data['user'] = $this->current_user;
$data['cadastro'] = Cadastro::find($post['id_cliente']);
$pagarMe = new \PagarMe\Sdk\PagarMe(GeralService::getApiKeyPagarMe($data['cadastro']));
foreach ($data['cadastro']->cartoes as $key => $cartao) {
try {
$cartao->info = $pagarMe->card()->get($cartao->cartao_id);
} catch (\Exception $e) {
unset($data['cadastro']->cartoes[$key]);
}
}
$data['parcelasOptions'] = CartService::buscarParcelas($post['valor_total']);
$view = view('PedidoVenda::admin/meios-pagamento', $data);
return response()->json(array(
'status' => true,
'message' => 'HTML renderizado com sucesso!',
'html' => $view->render(),
'empresa' => $data['cadastro']->empresa_id
));
}
public function exportarExcel(Request $request){
$post = $request->input();
$query = PedidoVenda::orderBy('data_fechamento', 'DESC');
if (isset($post['data_inicial']) && $post['data_inicial']) {
$query->where('data_fechamento', '>=', $post['data_inicial']);
}
if (isset($post['data_final']) && $post['data_final']) {
$query->where('data_fechamento', '<=', $post['data_final']);
}
$data['pedidos'] = $query->get();
Excel::create('Pedidos de venda '.date('d-m-Y'), function($excel) use ($data) {
$excel->sheet('PEDIDOS', function($sheet) use ($data){
$sheet->loadView('PedidoVenda::admin/excel', $data);
});
})->download('xls');
}
public function estornar(Request $request){
$post = $request->input();
$pedidoVenda = PedidoVenda::find($post['id']);
if($pedidoVenda && $pedidoVenda->transacao_id){
$empresas = Empresa::all();
$pagarMe = [];
foreach ($empresas as $empresa) {
$apiKey = $empresa->api_key_pagar_me;
$pagarMe[$empresa->id] = new \PagarMe\Sdk\PagarMe($apiKey);
}
$transaction = $pagarMe[$pedidoVenda->empresa_id]->transaction()->get($pedidoVenda->transacao_id);
/** @var $transaction \PagarMe\Sdk\Transaction\CreditCardTransaction */
$refund = $pagarMe[$pedidoVenda->empresa_id]->transaction()->creditCardRefund(
/** @var $otherTransaction \PagarMe\Sdk\Transaction\CreditCardTransaction */
$transaction,
number_format($pedidoVenda->total,2,'','')
);
$pedidoVenda->transacao_id = $refund->getId();
$pedidoVenda->id_status_pedido_venda = 4;
$pedidoVenda->save();
$pedidoVendaHistorico = new PedidoVendaHistorico();
$pedidoVendaHistorico->id_pedido_venda = $post['id'];
$pedidoVendaHistorico->data = date('Y-m-d H:i');
$pedidoVendaHistorico->notificar_cliente = 0;
$pedidoVendaHistorico->id_pedido_venda_status = 4;
$pedidoVendaHistorico->id_colaborador = 1;
$pedidoVendaHistorico->save();
}else{
return response()->json(array(
'status' => false,
'message' => 'Não é possível estornar esse pedido'
));
}
return response()->json(array(
'status' => true,
'message' => 'Pedido estornado com sucesso!'
));
}
public function alterarStatus(Request $request){
$post = $request->input();
$pedidoVenda = PedidoVenda::find($post['id_pedido_venda']);
if($pedidoVenda){
$pedidoVenda->id_status_pedido_venda = $post['id_status_pedido_venda'];
$pedidoVenda->save();
$pedidoVendaHistorico = new PedidoVendaHistorico();
$pedidoVendaHistorico->id_pedido_venda = $post['id_pedido_venda'];
$pedidoVendaHistorico->data = date('Y-m-d H:i');
$pedidoVendaHistorico->notificar_cliente = 0;
$pedidoVendaHistorico->id_pedido_venda_status = $post['id_status_pedido_venda'];
$pedidoVendaHistorico->id_colaborador = 1;
$pedidoVendaHistorico->save();
}else{
return response()->json(array(
'status' => false,
'message' => 'Não foi encontrado esse pedido de venda'
));
}
return response()->json(array(
'status' => true,
'message' => 'Pedido alterado com sucesso!',
'pedido' => $pedidoVenda
));
}
public function registrarPagamento(Request $request){
$post = $request->input();
$pedidoVenda = PedidoVenda::find($post['id_pedido_venda']);
$pre_venda = FALSE;
foreach ($pedidoVenda->produtos as $item) {
$oferta = $item->oferta;
if($oferta->pre_venda){
$pre_venda = TRUE;
break;
}
}
$id_pedido_venda_status = $pre_venda ? 9 : 2;
if($request->hasFile('comprovante')) {
//upload an image to the /img/tmp directory and return the filepath.
$file = $request->file('comprovante');
$size = $file->getClientSize();
if($size > 5000000){
return response()->json(array(
'status' => false,
'message' => 'Tamanho excedido. O tamanho máximo do arquivo deve ser de 5 MB.'
));
}
$comprovante = GeralService::uploadFile($file, 'pedido-venda/comprovante');
$pedidoVenda->comprovante = $comprovante->filename;
}
$pedidoVenda->id_status_pedido_venda = $id_pedido_venda_status;
$pedidoVenda->assunto = $post['observacoes'];
$pedidoVenda->save();
$pedidoVendaHistorico = new PedidoVendaHistorico();
$pedidoVendaHistorico->id_pedido_venda = $post['id_pedido_venda'];
$pedidoVendaHistorico->data = date('Y-m-d H:i');
$pedidoVendaHistorico->comentario = $post['observacoes'];
$pedidoVendaHistorico->notificar_cliente = 0;
$pedidoVendaHistorico->id_pedido_venda_status = $id_pedido_venda_status;
$pedidoVendaHistorico->id_colaborador = 1;
$pedidoVendaHistorico->save();
if($pedidoVenda->frete){
$token = GeralService::getApiKeyTinyErp($pedidoVenda->cliente);
$url = 'https://api.tiny.com.br/api2/pedidos.pesquisa.php';
$content = "token=$token&numeroEcommerce=".$pedidoVenda->pedidoEntrega->id."&formato=json";
$resultBusca = json_decode(GeralService::enviarREST($url, $content));
$id_tiny = $resultBusca->retorno->pedidos[0]->pedido->id;
$url = 'https://api.tiny.com.br/api2/pedido.alterar.situacao';
$content = "token=$token&situacao=aprovado&id=".$id_tiny."&formato=json";
$resultAlteracao = json_decode(GeralService::enviarREST($url, $content));
$url = 'https://api.tiny.com.br/api2/gerar.nota.fiscal.pedido.php';
$content = "token=$token&id=$id_tiny&formato=json&modelo=NFe";
$resultNota = json_decode(GeralService::enviarREST($url, $content));
}
return response()->json(array(
'status' => true,
'message' => 'Pedido alterado com sucesso!',
'pedido' => $pedidoVenda
));
}
private function slugify($string)
{
return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}
public function buscarCliente(Request $request)
{
$search = $request->input('term');
$q = $search['term'];
$users = Cadastro::query()
->join('sis_users', 'sis_users.id', '=', 'cadastro.user_id')
->where(function ($query) use ($q) {
$query->whereRaw("CONCAT(cadastro.nome, ' ', cadastro.sobrenome) LIKE ?", ["%{$q}%"])
->orWhere('sis_users.email', 'LIKE', "%{$q}%");
})
->select(
'cadastro.id',
DB::raw("CONCAT(cadastro.nome, ' ', cadastro.sobrenome) AS nome_completo"),
'sis_users.email'
)
->limit(10)
->get();
return response()->json($users);
}
}