Advertisement
Guest User

Untitled

a guest
May 10th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.81 KB | None | 0 0
  1. <?php
  2.  
  3. use App\Services\Validators\Admin\MailingValidator;
  4.  
  5. class MailingsController extends \BaseController
  6. {
  7.  
  8. /**
  9. * Display a listing of the resource.
  10. * GET /mailings
  11. *
  12. * @author Patrick Maciel <patrick.campos@callink.com.br>
  13. * @versoin 1.0
  14. * @since 3.0 (CRS - Seleção)
  15. * @return Response
  16. */
  17. public function index()
  18. {
  19. $mailings = \Mailing::with('requisicao')->paginate(20);
  20.  
  21. if (Request::isJson()) {
  22. return Response::json([
  23. 'error' => false,
  24. 'mailings' => $mailings->toArray(),
  25. 'titulo' => 'Mailings',
  26. 200
  27. ]);
  28. }
  29.  
  30. return \View::make('mailings.index')
  31. ->with('mailings', $mailings)
  32. ->with('titulo', 'Mailings');
  33. }
  34.  
  35. /**
  36. * Show the form for creating a new resource.
  37. * GET /mailings/create
  38. *
  39. * @author Patrick Maciel <patrick.campos@callink.com.br>
  40. * @versoin 1.0
  41. * @since 3.0 (CRS - Seleção)
  42. * @return Response
  43. */
  44. public function create()
  45. {
  46. $requisicoes = Requisicao::ativo()->lists('nome', 'id');
  47.  
  48. if (Request::isJson()) {
  49. return Response::json([
  50. 'error' => false,
  51. 'form' => true,
  52. 'requisicoes' => $requisicoes,
  53. 'titulo' => 'Novo Mailing',
  54. 200
  55. ]);
  56. }
  57.  
  58. return \View::make('mailings.create', compact('requisicoes'))
  59. ->with('titulo', 'Novo Mailing');
  60. }
  61.  
  62. /**
  63. * Store a newly created resource in storage.
  64. * POST /mailings
  65. *
  66. * @author Patrick Maciel <patrick.campos@callink.com.br>
  67. * @versoin 1.0
  68. * @since 3.0 (CRS - Seleção)
  69. * @return Response
  70. */
  71. public function store()
  72. {
  73. $validator = new MailingValidator;
  74. if ($validator->passes()) {
  75.  
  76. $mailing = new \Mailing();
  77. $mailing->requisicao_id = \Input::get('requisicao_id');
  78. $mailing->nome = \Input::get('nome');
  79. $mailing->descricao = \Input::get('descricao');
  80. $mailing->ativo = \Input::get('ativo');
  81. $mailing->login_sso = \Input::get('login_sso');
  82. $mailing->data_inicio = \Input::get('data_inicio');
  83. $mailing->data_fim = \Input::get('data_fim');
  84. $mailing->sincronizado = \Input::get('sincronizado');
  85. $mailing->concluido = \Input::get('concluido');
  86. $mailing->contatos = \Input::get('contatos');
  87. $mailing->sincronizados = \Input::get('sincronizados');
  88. $mailing->rejeitados = \Input::get('rejeitados');
  89. $mailing->contactados = \Input::get('contactados');
  90.  
  91. if ($mailing->save()) {
  92.  
  93. if (Request::isJson()) {
  94. return Response::json([
  95. 'error' => false,
  96. 'flash' => ['success', 'Mailing salvo com sucesso'],
  97. 200
  98. ]);
  99. }
  100.  
  101. \Session::flash('success', 'Mailing salvo com sucesso!');
  102.  
  103. return \Redirect::route('mailings.index');
  104. }
  105.  
  106. if (Request::isJson()) {
  107. return Response::json([
  108. 'error' => true,
  109. 'inputs' => Input::all(),
  110. 'flash' => ['error', 'Ocorreu um erro ao salvar este Mailing. Tente novamente.'],
  111. 200
  112. ]);
  113. }
  114.  
  115. \Session::flash('error', 'Ocorreu um erro ao salvar este Mailing. Tente novamente.');
  116.  
  117. return \Redirect::back()
  118. ->withInput();
  119. }
  120.  
  121. if (Request::isJson()) {
  122. return Response::json([
  123. 'error' => true,
  124. 'inputs' => Input::all(),
  125. 'validation' => $validator->errors,
  126. 200
  127. ]);
  128. }
  129.  
  130. return \Redirect::back()
  131. ->withInput()
  132. ->withErrors($validator->errors);
  133. }
  134.  
  135. /**
  136. * Display the specified resource.
  137. * GET /mailings/{id}
  138. *
  139. * @param
  140. * @author Patrick Maciel <patrick.campos@callink.com.br>
  141. * @versoin 1.0
  142. * @since 3.0 (CRS - Seleção)int $id
  143. * @return Response
  144. */
  145. public function show($id)
  146. {
  147. $mailing = \Mailing::with('requisicao')
  148. ->findOrFail($id);
  149.  
  150. $contatos = \Contato::getContatosByMailing($mailing->id);
  151.  
  152. if (Request::isJson()) {
  153. return Response::json([
  154. 'error' => false,
  155. 'mailing' => $mailing,
  156. 'contatos' => $contatos,
  157. 'titulo' => $mailing->nome,
  158. 200
  159. ]);
  160. }
  161.  
  162. return \View::make('mailings.show', compact('mailing', 'contatos'));
  163. }
  164.  
  165. /**
  166. * Show the form for editing the specified resource.
  167. * GET /mailings/{id}/edit
  168. *
  169. * @param
  170. * @author Patrick Maciel <patrick.campos@callink.com.br>
  171. * @versoin 1.0
  172. * @since 3.0 (CRS - Seleção)int $id
  173. * @return Response
  174. */
  175. public function edit($id)
  176. {
  177. $mailing = \Mailing::with('requisicao')
  178. ->findOrFail($id);
  179. $requisicoes = Requisicao::ativo()->lists('nome', 'id');
  180.  
  181. if (Request::isJson()) {
  182. return Response::json([
  183. 'error' => false,
  184. 'requisicoes' => $requisicoes,
  185. 'mailing' => $mailing,
  186. 'titulo' => 'Editar Mailing',
  187. 200
  188. ]);
  189. }
  190.  
  191. return \View::make('mailings.edit', compact('mailing', 'requisicoes'))
  192. ->with('titulo', 'Editar Mailing');
  193. }
  194.  
  195. /**
  196. * Update the specified resource in storage.
  197. * PUT /mailings/{id}
  198. *
  199. * @param
  200. * @author Patrick Maciel <patrick.campos@callink.com.br>
  201. * @versoin 1.0
  202. * @since 3.0 (CRS - Seleção)int $id
  203. * @return Response
  204. */
  205. public function update($id)
  206. {
  207. $validator = new MailingValidator();
  208. if ($validator->passes()) {
  209.  
  210. $mailing = \Mailing::findOrFail($id);
  211. $mailing->requisicao_id = \Input::get('requisicao_id');
  212. $mailing->nome = \Input::get('nome');
  213. $mailing->descricao = \Input::get('descricao');
  214. $mailing->ativo = \Input::get('ativo');
  215. $mailing->login_sso = \Input::get('login_sso');
  216. $mailing->data_inicio = \Input::get('data_inicio');
  217. $mailing->data_fim = \Input::get('data_fim');
  218. $mailing->concluido = \Input::get('concluido');
  219. $mailing->contatos = \Input::get('contatos');
  220. $mailing->sincronizados = \Input::get('sincronizados');
  221. $mailing->rejeitados = \Input::get('rejeitados');
  222.  
  223. // Sempre sincronizar o mailing
  224. $mailing->sincronizado = 0;
  225. $contatos = \Contato::getContatosByMailing($mailing->id);
  226. foreach($contatos as $contato) {
  227. $contato->sincronizador_status_id = 2;
  228. $contato->save();
  229. }
  230.  
  231. if ($mailing->save()) {
  232.  
  233. if (Request::isJson()) {
  234. return Response::json([
  235. 'error' => false,
  236. 'flash' => ['success', 'Mailing atualizado com sucesso'],
  237. 200
  238. ]);
  239. }
  240.  
  241. \Session::flash('success', 'Mailing atualizado com sucesso!');
  242.  
  243. return \Redirect::route('mailings.index');
  244. }
  245.  
  246. if (Request::isJson()) {
  247. return Response::json([
  248. 'error' => true,
  249. 'inputs' => Input::all(),
  250. 'flash' => ['error', 'Ocorreu um erro ao atualizar o Mailing. Tente novamente.'],
  251. 200
  252. ]);
  253. }
  254.  
  255. \Session::flash('error', 'Ocorreu um erro ao atualizar o Mailing. Tente novamente.');
  256.  
  257. return \Redirect::back()
  258. ->withInput();
  259.  
  260. }
  261.  
  262. if (Request::isJson()) {
  263. return Response::json([
  264. 'error' => true,
  265. 'inputs' => Input::all(),
  266. 'validation' => $validator->errors,
  267. 200
  268. ]);
  269. }
  270.  
  271. return \Redirect::back()
  272. ->withInput()
  273. ->withErrors($validator->errors);
  274. }
  275.  
  276. /**
  277. * Remove the specified resource from storage.
  278. * DELETE /mailings/{id}
  279. *
  280. * @param
  281. * @author Patrick Maciel <patrick.campos@callink.com.br>
  282. * @versoin 1.0
  283. * @since 3.0 (CRS - Seleção)int $id
  284. * @return Response
  285. */
  286. public function destroy($id)
  287. {
  288. $mailing = \Mailing::findOrFail($id);
  289.  
  290. if ($mailing->delete()) {
  291.  
  292. if (Request::isJson()) {
  293. return Response::json([
  294. 'error' => false,
  295. 'flash' => ['success', 'Mailing excluído com sucesso'],
  296. 200
  297. ]);
  298. }
  299.  
  300. \Session::flash('success', 'Mailing excluído com sucesso');
  301.  
  302. return \Redirect::back();
  303. }
  304.  
  305. if (Request::isJson()) {
  306. return Response::json([
  307. 'error' => true,
  308. 'flash' => ['error', 'Ocorreu um erro ao excluir o Mailing. Tente novamente.'],
  309. 200
  310. ]);
  311. }
  312.  
  313. \Session::flash('error', 'Ocorreu um erro ao excluir o Mailing. Tente novamente.');
  314.  
  315. return \Redirect::back();
  316. }
  317.  
  318. /**
  319. * Action responsável filtrar os contatos para um mailing
  320. *
  321. * @author Patrick Maciel <patrick.campos@callink.com.br>
  322. * @version 1.0
  323. * @since 3.0 (CRS - Seleção)
  324. * @return $this
  325. */
  326. public function generate()
  327. {
  328. $requisicoes = \Requisicao::ativo()->lists('nome', 'id');
  329. $resultadoStatus = \ResultadoStatus::ativo()->lists('nome', 'id');
  330. $fontesDeCaptacao = \Campanha::ativo()->lists('nome', 'id');
  331. $etapas = \Etapa::ativo()->lists('nome', 'id');
  332. $crivos = \Crivo::ativo()->lists('nome', 'id');
  333. $targets = \Target::ativo()->lists('nome', 'id');
  334. $sexos = ['m' => 'Masculino', 'f' => 'Feminino'];
  335. $tipoMailing = [
  336. 0 => 'Todos aptos',
  337. 1 => 'Apenas contatos não contactados (1a etapa somente)',
  338. 2 => 'Recontato (reprovados, desistentes, não compareceu)',
  339. 3 => 'Aprovados na etapa anterior'
  340. ];
  341.  
  342. $contatos = [];
  343. if (Input::has('search')) {
  344. $inputs = Input::all();
  345. $inputs['quantidade'] = empty($inputs['quantidade']) ? 50 : $inputs['quantidade'];
  346. $contatos = \Busca::filtraContatosParaMailing(Input::all());
  347. if (empty($contatos) OR count($contatos) == 0) {
  348. Session::flash('error', 'Nenhum contato e/ou candidato está apto a participar da requisição selecionada');
  349. return Redirect::back()
  350. ->withInput();
  351. }
  352. }
  353.  
  354. return View::make('mailings.generate', compact(
  355. 'contatos', 'requisicoes', 'resultadoStatus', 'fontesDeCaptacao', 'etapas',
  356. 'sexos', 'crivos', 'targets', 'tipoMailing'
  357. ))
  358. ->with('titulo', 'Gerar Mailing');
  359. }
  360.  
  361. /**
  362. * Action responsável filtrar os contatos para um mailing
  363. *
  364. * @author Patrick Maciel <patrick.campos@callink.com.br>
  365. * @version 1.0
  366. * @since 3.0 (CRS - Seleção)
  367. * @return $this
  368. */
  369. public function storeFilteredMailing()
  370. {
  371. set_time_limit(300);
  372.  
  373. $contatos = [];
  374.  
  375. // Se contém o parâmetro get search, realiza a busca pelos contatos,
  376. // baseados nso filtros selecionados
  377. if (Input::has('search')) {
  378. $contatos = \Busca::filtraContatosParaMailing(Input::all(), false);
  379.  
  380. if (empty($contatos) OR !count($contatos)) {
  381. Session::flash('warning',
  382. 'O Mailing deve ter ao menos 1 contato para ser gerado');
  383.  
  384. return Redirect::back();
  385. }
  386.  
  387. }
  388.  
  389. $validator = new MailingValidator;
  390. if ($validator->passes()) {
  391.  
  392. $mailing = new \Mailing();
  393. $mailing->requisicao_id = \Input::get('requisicao_id');
  394. $mailing->nome = \Input::get('nome');
  395. $mailing->descricao = \Input::get('descricao');
  396. $mailing->ativo = \Input::get('ativo');
  397. $mailing->login_sso = \Input::get('login_sso');
  398. $mailing->data_inicio = \Input::get('data_inicio');
  399. $mailing->data_fim = \Input::get('data_fim');
  400. $mailing->sincronizado = \Input::get('sincronizado');
  401. $mailing->concluido = \Input::get('concluido');
  402. $mailing->contatos = \Input::get('contatos');
  403. $mailing->sincronizados = \Input::get('sincronizados');
  404. $mailing->rejeitados = \Input::get('rejeitados');
  405. $mailing->contactados = \Input::get('contactados');
  406.  
  407. if ($mailing->save()) {
  408. // Processo para sincronizar o mailing atual com os contatos filtrados
  409. $mailing->contatos()->sync(array_map(function($obj) { return $obj->id; }, $contatos));
  410. // $mailing->contatos()->update(['sincronizador_status_id' => 0]);
  411.  
  412. Mailing::setMailingContatosUsed($mailing->id);
  413.  
  414. // $mailing->contatos()->getRelatedIds())
  415.  
  416. Session::flash('success', 'Mailing gerado com sucesso');
  417. return Redirect::route('mailings.index');
  418. }
  419. }
  420.  
  421. Session::flash('warning', 'Ocorreram erros de validação');
  422.  
  423. return Redirect::back()
  424. ->withInput()
  425. ->withErrors($validator->errors);
  426. }
  427.  
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement