PageRenderTime 49ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/app/Model/Pessoa.php

https://github.com/brendo10x/Sistema-de-mercadinho
PHP | 324 lines | 146 code | 80 blank | 98 comment | 67 complexity | 2a7abe1bcf6ae1b5d4bdcf2887320b00 MD5 | raw file
Possible License(s): Apache-2.0, MIT, LGPL-2.1, MPL-2.0-no-copyleft-exception, GPL-2.0
  1. <?php
  2. /**
  3. * Modelo de Pessoa - Informações
  4. */
  5. App::uses('AppModel', 'Model');
  6. class Pessoa extends AppModel {
  7. /**
  8. * Relacionamentos
  9. */
  10. public $hasOne = array(
  11. 'Vendedor' => array('className' => 'Vendedor', 'dependent' => true),
  12. 'Proprietario' => array('className' => 'Proprietario', 'dependent' => true),
  13. 'Cliente' => array('className' => 'Cliente', 'dependent' => true),
  14. 'Fornecedor' => array('className' => 'Fornecedor', 'dependent' => true)
  15. );
  16. /*
  17. * métodos ou funções personalizadas
  18. */
  19. /**
  20. * Valida se existe cpf ou cnpj menos o registro que está solicitando
  21. * @param array $data cpf ou cnpj
  22. * @return boolean
  23. */
  24. public function validaSeExisteCPFouCNPJ_editar($dados) {
  25. //consulta
  26. $registros = $this -> find('all', array('conditions' => array('Pessoa.id <>' => $dados['id']), 'recursive' => -1, 'fields' => array('Pessoa.pes_cpf_ou_cnpj')));
  27. foreach ($registros as $key => $banco) {
  28. if ($banco['Pessoa']['pes_cpf_ou_cnpj'] == $dados['pes_cpf_ou_cnpj']) {
  29. //pr('É igual');
  30. return false;
  31. } else {
  32. //pr('Não é igual');
  33. return true;
  34. }//fim if
  35. }//fim foreach
  36. }//fim validaSeExisteCPFouCNPJ_editar()
  37. /**
  38. * auxilia na validação de cnpj
  39. * @param string $string
  40. * @return string
  41. */
  42. private function replace($string) {
  43. return $string = str_replace('/', '', str_replace('-', '', str_replace('.', '', $string)));
  44. }//fim replace()
  45. /**
  46. * auxilia na validação de cnpj
  47. * @param string $string palavra
  48. * @param string $length tamanho
  49. * @return boolean
  50. */
  51. private function check_fake($string, $length) {
  52. for ($i = 0; $i <= 9; $i++) {
  53. $fake = str_pad('', $length, $i);
  54. if ($string === $fake)
  55. return (1);
  56. }//fim for
  57. }//fim check_fake()
  58. /**
  59. * Processo de validação de cpf
  60. * @param string $cpf CPF
  61. * @return boolean se TRUE é válido se FALSE não é válido
  62. */
  63. function cpf($cpf) {
  64. // Verifica se um número foi informado
  65. if (empty($cpf)) {
  66. return false;
  67. }
  68. // Elimina possivel mascara
  69. $cpf = ereg_replace('[^0-9]', '', $cpf);
  70. $cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);
  71. // Verifica se o numero de digitos informados é igual a 11
  72. if (strlen($cpf) != 11) {
  73. return false;
  74. }
  75. // Verifica se nenhuma das sequências invalidas abaixo
  76. // foi digitada. Caso afirmativo, retorna falso
  77. else if ($cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999') {
  78. return false;
  79. // Calcula os digitos verificadores para verificar se o
  80. // CPF é válido
  81. } else {
  82. for ($t = 9; $t < 11; $t++) {
  83. for ($d = 0, $c = 0; $c < $t; $c++) {
  84. $d += $cpf{$c} * (($t + 1) - $c);
  85. }
  86. $d = ((10 * $d) % 11) % 10;
  87. if ($cpf{$c} != $d) {
  88. return false;
  89. }
  90. }
  91. return true;
  92. }
  93. }//fim cpf()
  94. //função que valida cnpj
  95. public function cnpj($cnpj) {
  96. $sum = 0;
  97. $cnpj = $this -> replace($cnpj);
  98. $cnpj = trim($cnpj);
  99. if (empty($cnpj) || strlen($cnpj) != 14)
  100. return FALSE;
  101. else {
  102. if ($this -> check_fake($cnpj, 14))
  103. return FALSE;
  104. else {
  105. $rev_cnpj = strrev(substr($cnpj, 0, 12));
  106. for ($i = 0; $i <= 11; $i++) {
  107. $i == 0 ? $multiplier = 2 : $multiplier;
  108. $i == 8 ? $multiplier = 2 : $multiplier;
  109. $multiply = ($rev_cnpj[$i] * $multiplier);
  110. $sum = $sum + $multiply;
  111. $multiplier++;
  112. }
  113. $rest = $sum % 11;
  114. if ($rest == 0 || $rest == 1)
  115. $dv1 = 0;
  116. else
  117. $dv1 = 11 - $rest;
  118. $sub_cnpj = substr($cnpj, 0, 12);
  119. $rev_cnpj = strrev($sub_cnpj . $dv1);
  120. unset($sum);
  121. $sum = 0;
  122. for ($i = 0; $i <= 12; $i++) {$i == 0 ? $multiplier = 2 : $multiplier;
  123. $i == 8 ? $multiplier = 2 : $multiplier;
  124. $multiply = ($rev_cnpj[$i] * $multiplier);
  125. $sum = $sum + $multiply;
  126. $multiplier++;
  127. }
  128. $rest = $sum % 11;
  129. if ($rest == 0 || $rest == 1)
  130. $dv2 = 0;
  131. else
  132. $dv2 = 11 - $rest;
  133. if ($dv1 == $cnpj[12] && $dv2 == $cnpj[13])
  134. return TRUE;
  135. else
  136. return FALSE;
  137. }//fim if
  138. }//fim if
  139. }//fim cnpj()
  140. /**
  141. * Processo de salvar pessoa
  142. * @param array de dados
  143. * @return integer o id criado
  144. */
  145. public function salvar($dados) {
  146. //foto canvas -> $dados['Pessoa']['foto'][1]
  147. //foto upload -> $dados['Pessoa']['foto'][0]
  148. // $dados['Pessoa']['foto'][0]['error'] == 4 é vazio
  149. // Criação: id não está definido ou é null
  150. $this -> create();
  151. //gera no nome da foto
  152. $nomeDaFoto = (uniqid(time()));
  153. // caminho de destino da foto
  154. $destinoDaFoto = 'uploads/';
  155. //processo de salvar foto upload
  156. // 4 = vazio - 0 = preenchido
  157. if ($dados['Pessoa']['foto'][0]['error'] == 0) {
  158. //recupera extensão
  159. $ext = '.' . substr(strtolower(strrchr($dados['Pessoa']['foto'][0]['type'], '/')), 1);
  160. //move o arquivo para a pasta destinada
  161. move_uploaded_file($dados['Pessoa']['foto'][0]['tmp_name'], IMAGES . $destinoDaFoto . $nomeDaFoto . $ext);
  162. } else {
  163. // extensão permitida para canvas
  164. $ext = '.png';
  165. //processo de salvar foto canvas
  166. $unencodedData = base64_decode($dados['Pessoa']['foto'][1]);
  167. //detino do arquivo de imagem
  168. $fp = fopen(IMAGES . $destinoDaFoto . $nomeDaFoto . $ext, 'wb');
  169. //escreve no arquivo de imagem
  170. fwrite($fp, $unencodedData);
  171. //fecha o arquivo de imagem
  172. fclose($fp);
  173. }//fim if
  174. //caminho da foto
  175. $caminhoDaFoto = $destinoDaFoto . $nomeDaFoto . $ext;
  176. // destroi importante
  177. unset($dados['Pessoa']['foto']);
  178. //atualiza caminho da foto da pessoa
  179. $dados['Pessoa']['pes_foto'] = $caminhoDaFoto;
  180. //salva
  181. $this -> save($dados);
  182. //recupera o id
  183. $idPessoa = $this -> id;
  184. return $idPessoa;
  185. }//fim salvar()
  186. /**
  187. * Processo de excluir
  188. * @param array info
  189. * @return void
  190. */
  191. public function excluir($pessoa) {
  192. //deleta
  193. $this -> delete($pessoa['Pessoa']['id']);
  194. //deleta foto de pessoa
  195. unlink(IMAGES . $pessoa['Pessoa']['pes_foto']);
  196. }//fim excluir()
  197. /**
  198. * Processo de atualizar
  199. * @param array info
  200. * @return void
  201. */
  202. public function atualiza($dados) {
  203. //foto canvas -> $dados['Pessoa']['foto'][1]
  204. //foto upload -> $dados['Pessoa']['foto'][0]
  205. // $dados['Pessoa']['foto'][0]['error'] == 4 é vazio
  206. // 0 = preenchido
  207. if ($dados['Pessoa']['foto'][0]['error'] == 0 && !empty($dados['Pessoa']['foto'][0]) || !empty($dados['Pessoa']['foto'][1])) {
  208. // deleta foto
  209. unlink(IMAGES . $dados['Pessoa']['pes_foto']);
  210. //gera no nome da foto
  211. $nomeDaFoto = (uniqid(time()));
  212. // caminho de destino da foto
  213. $destinoDaFoto = 'uploads/';
  214. //processo de salvar foto upload
  215. // 4 = vazio - 0 = preenchido
  216. if (!empty($dados['Pessoa']['foto'][1])) {
  217. // extensão permitida para canvas
  218. $ext = '.png';
  219. //processo de salvar foto canvas
  220. $unencodedData = base64_decode($dados['Pessoa']['foto'][1]);
  221. //detino do arquivo de imagem
  222. $fp = fopen(IMAGES . $destinoDaFoto . $nomeDaFoto . $ext, 'wb');
  223. //escreve no arquivo de imagem
  224. fwrite($fp, $unencodedData);
  225. //fecha o arquivo de imagem
  226. fclose($fp);
  227. } else {
  228. //recupera extensão
  229. $ext = '.' . substr(strtolower(strrchr($dados['Pessoa']['foto'][0]['type'], '/')), 1);
  230. //move o arquivo para a pasta destinada
  231. move_uploaded_file($dados['Pessoa']['foto'][0]['tmp_name'], IMAGES . $destinoDaFoto . $nomeDaFoto . $ext);
  232. }//fim if
  233. //caminho da foto
  234. $caminhoDaFoto = $destinoDaFoto . $nomeDaFoto . $ext;
  235. // destroi importante
  236. unset($dados['Pessoa']['foto']);
  237. //atualiza caminho da foto da pessoa
  238. $dados['Pessoa']['pes_foto'] = $caminhoDaFoto;
  239. }//fim if
  240. //atualiza
  241. $this -> save($dados);
  242. }//fim atualiza()
  243. }// fim classe Pessoa
  244. ?>