Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- use App\Services\Validators\Admin\MailingValidator;
- class MailingsController extends \BaseController
- {
- /**
- * Display a listing of the resource.
- * GET /mailings
- *
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)
- * @return Response
- */
- public function index()
- {
- $mailings = \Mailing::with('requisicao')->paginate(20);
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'mailings' => $mailings->toArray(),
- 'titulo' => 'Mailings',
- 200
- ]);
- }
- return \View::make('mailings.index')
- ->with('mailings', $mailings)
- ->with('titulo', 'Mailings');
- }
- /**
- * Show the form for creating a new resource.
- * GET /mailings/create
- *
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)
- * @return Response
- */
- public function create()
- {
- $requisicoes = Requisicao::ativo()->lists('nome', 'id');
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'form' => true,
- 'requisicoes' => $requisicoes,
- 'titulo' => 'Novo Mailing',
- 200
- ]);
- }
- return \View::make('mailings.create', compact('requisicoes'))
- ->with('titulo', 'Novo Mailing');
- }
- /**
- * Store a newly created resource in storage.
- * POST /mailings
- *
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)
- * @return Response
- */
- public function store()
- {
- $validator = new MailingValidator;
- if ($validator->passes()) {
- $mailing = new \Mailing();
- $mailing->requisicao_id = \Input::get('requisicao_id');
- $mailing->nome = \Input::get('nome');
- $mailing->descricao = \Input::get('descricao');
- $mailing->ativo = \Input::get('ativo');
- $mailing->login_sso = \Input::get('login_sso');
- $mailing->data_inicio = \Input::get('data_inicio');
- $mailing->data_fim = \Input::get('data_fim');
- $mailing->sincronizado = \Input::get('sincronizado');
- $mailing->concluido = \Input::get('concluido');
- $mailing->contatos = \Input::get('contatos');
- $mailing->sincronizados = \Input::get('sincronizados');
- $mailing->rejeitados = \Input::get('rejeitados');
- $mailing->contactados = \Input::get('contactados');
- if ($mailing->save()) {
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'flash' => ['success', 'Mailing salvo com sucesso'],
- 200
- ]);
- }
- \Session::flash('success', 'Mailing salvo com sucesso!');
- return \Redirect::route('mailings.index');
- }
- if (Request::isJson()) {
- return Response::json([
- 'error' => true,
- 'inputs' => Input::all(),
- 'flash' => ['error', 'Ocorreu um erro ao salvar este Mailing. Tente novamente.'],
- 200
- ]);
- }
- \Session::flash('error', 'Ocorreu um erro ao salvar este Mailing. Tente novamente.');
- return \Redirect::back()
- ->withInput();
- }
- if (Request::isJson()) {
- return Response::json([
- 'error' => true,
- 'inputs' => Input::all(),
- 'validation' => $validator->errors,
- 200
- ]);
- }
- return \Redirect::back()
- ->withInput()
- ->withErrors($validator->errors);
- }
- /**
- * Display the specified resource.
- * GET /mailings/{id}
- *
- * @param
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)int $id
- * @return Response
- */
- public function show($id)
- {
- $mailing = \Mailing::with('requisicao')
- ->findOrFail($id);
- $contatos = \Contato::getContatosByMailing($mailing->id);
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'mailing' => $mailing,
- 'contatos' => $contatos,
- 'titulo' => $mailing->nome,
- 200
- ]);
- }
- return \View::make('mailings.show', compact('mailing', 'contatos'));
- }
- /**
- * Show the form for editing the specified resource.
- * GET /mailings/{id}/edit
- *
- * @param
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)int $id
- * @return Response
- */
- public function edit($id)
- {
- $mailing = \Mailing::with('requisicao')
- ->findOrFail($id);
- $requisicoes = Requisicao::ativo()->lists('nome', 'id');
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'requisicoes' => $requisicoes,
- 'mailing' => $mailing,
- 'titulo' => 'Editar Mailing',
- 200
- ]);
- }
- return \View::make('mailings.edit', compact('mailing', 'requisicoes'))
- ->with('titulo', 'Editar Mailing');
- }
- /**
- * Update the specified resource in storage.
- * PUT /mailings/{id}
- *
- * @param
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)int $id
- * @return Response
- */
- public function update($id)
- {
- $validator = new MailingValidator();
- if ($validator->passes()) {
- $mailing = \Mailing::findOrFail($id);
- $mailing->requisicao_id = \Input::get('requisicao_id');
- $mailing->nome = \Input::get('nome');
- $mailing->descricao = \Input::get('descricao');
- $mailing->ativo = \Input::get('ativo');
- $mailing->login_sso = \Input::get('login_sso');
- $mailing->data_inicio = \Input::get('data_inicio');
- $mailing->data_fim = \Input::get('data_fim');
- $mailing->concluido = \Input::get('concluido');
- $mailing->contatos = \Input::get('contatos');
- $mailing->sincronizados = \Input::get('sincronizados');
- $mailing->rejeitados = \Input::get('rejeitados');
- // Sempre sincronizar o mailing
- $mailing->sincronizado = 0;
- $contatos = \Contato::getContatosByMailing($mailing->id);
- foreach($contatos as $contato) {
- $contato->sincronizador_status_id = 2;
- $contato->save();
- }
- if ($mailing->save()) {
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'flash' => ['success', 'Mailing atualizado com sucesso'],
- 200
- ]);
- }
- \Session::flash('success', 'Mailing atualizado com sucesso!');
- return \Redirect::route('mailings.index');
- }
- if (Request::isJson()) {
- return Response::json([
- 'error' => true,
- 'inputs' => Input::all(),
- 'flash' => ['error', 'Ocorreu um erro ao atualizar o Mailing. Tente novamente.'],
- 200
- ]);
- }
- \Session::flash('error', 'Ocorreu um erro ao atualizar o Mailing. Tente novamente.');
- return \Redirect::back()
- ->withInput();
- }
- if (Request::isJson()) {
- return Response::json([
- 'error' => true,
- 'inputs' => Input::all(),
- 'validation' => $validator->errors,
- 200
- ]);
- }
- return \Redirect::back()
- ->withInput()
- ->withErrors($validator->errors);
- }
- /**
- * Remove the specified resource from storage.
- * DELETE /mailings/{id}
- *
- * @param
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @versoin 1.0
- * @since 3.0 (CRS - Seleção)int $id
- * @return Response
- */
- public function destroy($id)
- {
- $mailing = \Mailing::findOrFail($id);
- if ($mailing->delete()) {
- if (Request::isJson()) {
- return Response::json([
- 'error' => false,
- 'flash' => ['success', 'Mailing excluído com sucesso'],
- 200
- ]);
- }
- \Session::flash('success', 'Mailing excluído com sucesso');
- return \Redirect::back();
- }
- if (Request::isJson()) {
- return Response::json([
- 'error' => true,
- 'flash' => ['error', 'Ocorreu um erro ao excluir o Mailing. Tente novamente.'],
- 200
- ]);
- }
- \Session::flash('error', 'Ocorreu um erro ao excluir o Mailing. Tente novamente.');
- return \Redirect::back();
- }
- /**
- * Action responsável filtrar os contatos para um mailing
- *
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @version 1.0
- * @since 3.0 (CRS - Seleção)
- * @return $this
- */
- public function generate()
- {
- $requisicoes = \Requisicao::ativo()->lists('nome', 'id');
- $resultadoStatus = \ResultadoStatus::ativo()->lists('nome', 'id');
- $fontesDeCaptacao = \Campanha::ativo()->lists('nome', 'id');
- $etapas = \Etapa::ativo()->lists('nome', 'id');
- $crivos = \Crivo::ativo()->lists('nome', 'id');
- $targets = \Target::ativo()->lists('nome', 'id');
- $sexos = ['m' => 'Masculino', 'f' => 'Feminino'];
- $tipoMailing = [
- 0 => 'Todos aptos',
- 1 => 'Apenas contatos não contactados (1a etapa somente)',
- 2 => 'Recontato (reprovados, desistentes, não compareceu)',
- 3 => 'Aprovados na etapa anterior'
- ];
- $contatos = [];
- if (Input::has('search')) {
- $inputs = Input::all();
- $inputs['quantidade'] = empty($inputs['quantidade']) ? 50 : $inputs['quantidade'];
- $contatos = \Busca::filtraContatosParaMailing(Input::all());
- if (empty($contatos) OR count($contatos) == 0) {
- Session::flash('error', 'Nenhum contato e/ou candidato está apto a participar da requisição selecionada');
- return Redirect::back()
- ->withInput();
- }
- }
- return View::make('mailings.generate', compact(
- 'contatos', 'requisicoes', 'resultadoStatus', 'fontesDeCaptacao', 'etapas',
- 'sexos', 'crivos', 'targets', 'tipoMailing'
- ))
- ->with('titulo', 'Gerar Mailing');
- }
- /**
- * Action responsável filtrar os contatos para um mailing
- *
- * @author Patrick Maciel <patrick.campos@callink.com.br>
- * @version 1.0
- * @since 3.0 (CRS - Seleção)
- * @return $this
- */
- public function storeFilteredMailing()
- {
- set_time_limit(300);
- $contatos = [];
- // Se contém o parâmetro get search, realiza a busca pelos contatos,
- // baseados nso filtros selecionados
- if (Input::has('search')) {
- $contatos = \Busca::filtraContatosParaMailing(Input::all(), false);
- if (empty($contatos) OR !count($contatos)) {
- Session::flash('warning',
- 'O Mailing deve ter ao menos 1 contato para ser gerado');
- return Redirect::back();
- }
- }
- $validator = new MailingValidator;
- if ($validator->passes()) {
- $mailing = new \Mailing();
- $mailing->requisicao_id = \Input::get('requisicao_id');
- $mailing->nome = \Input::get('nome');
- $mailing->descricao = \Input::get('descricao');
- $mailing->ativo = \Input::get('ativo');
- $mailing->login_sso = \Input::get('login_sso');
- $mailing->data_inicio = \Input::get('data_inicio');
- $mailing->data_fim = \Input::get('data_fim');
- $mailing->sincronizado = \Input::get('sincronizado');
- $mailing->concluido = \Input::get('concluido');
- $mailing->contatos = \Input::get('contatos');
- $mailing->sincronizados = \Input::get('sincronizados');
- $mailing->rejeitados = \Input::get('rejeitados');
- $mailing->contactados = \Input::get('contactados');
- if ($mailing->save()) {
- // Processo para sincronizar o mailing atual com os contatos filtrados
- $mailing->contatos()->sync(array_map(function($obj) { return $obj->id; }, $contatos));
- // $mailing->contatos()->update(['sincronizador_status_id' => 0]);
- Mailing::setMailingContatosUsed($mailing->id);
- // $mailing->contatos()->getRelatedIds())
- Session::flash('success', 'Mailing gerado com sucesso');
- return Redirect::route('mailings.index');
- }
- }
- Session::flash('warning', 'Ocorreram erros de validação');
- return Redirect::back()
- ->withInput()
- ->withErrors($validator->errors);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement