Advertisement
Guest User

Receita

a guest
Jul 4th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 19.03 KB | None | 0 0
  1. <?php
  2. //BUSCANDO AS CLASSES
  3. include_once __DIR__ . "/Conexao.class.php";
  4. //DEFININDO FUSO HORÁRIO
  5. date_default_timezone_set("America/Sao_Paulo");
  6.  
  7. class Receita {
  8.  
  9.     //ATRIBUTOS
  10.     private $con;
  11.     private $idSequencialReceita;
  12.     private $idReceita;
  13.     private $valorReceita;
  14.     private $dataVencimento;
  15.     private $recebido;
  16.     private $dataRecebimento;
  17.     private $tipoRepeticao;
  18.     private $parcelas;
  19.     private $numeroParcela;
  20.     private $recorrente;
  21.     private $observacoes;
  22.     private $idUsuario;
  23.     private $idTipoReceita;
  24.     private $idTipoRecebimento;
  25.  
  26.     //CONSTRUTOR
  27.     public function __construct() {
  28.         $this->con = new Conexao();
  29.     }
  30.  
  31.     //GETTERS E SETTERS
  32.     public function setIdSequencialReceita($idSequencialReceita) {
  33.         $this->idSequencialReceita = $idSequencialReceita;
  34.     }
  35.     public function getIdSequencialReceita() {
  36.         return $this->idSequencialReceita;
  37.     }
  38.     public function setIdReceita($idReceita) {
  39.         $this->idReceita = $idReceita;
  40.     }
  41.     public function getIdReceita() {
  42.         return $this->idReceita;
  43.     }
  44.     public function setValorReceita($valorReceita) {
  45.         $this->valorReceita = $valorReceita;
  46.     }
  47.     public function getValorReceita() {
  48.         return $this->valorReceita;
  49.     }
  50.     public function setDataVencimento($dataVencimento) {
  51.         $this->dataVencimento = $dataVencimento;
  52.     }
  53.     public function getDataVencimento() {
  54.         return $this->dataVencimento;
  55.     }
  56.     public function setRecebido($recebido) {
  57.         $this->recebido = $recebido;
  58.     }
  59.     public function getRecebido() {
  60.         return $this->recebido;
  61.     }
  62.     public function setDataRecebimento($dataRecebimento) {
  63.         $this->dataRecebimento = $dataRecebimento;
  64.     }
  65.     public function getDataRecebimento() {
  66.         return $this->dataRecebimento;
  67.     }
  68.     public function setTipoRepeticao($tipoRepeticao) {
  69.         $this->tipoRepeticao = $tipoRepeticao;
  70.     }
  71.     public function getTipoRepeticao() {
  72.         return $this->tipoRepeticao;
  73.     }
  74.     public function setParcelas($parcelas) {
  75.         $this->parcelas = $parcelas;
  76.     }
  77.     public function getParcelas() {
  78.         return $this->parcelas;
  79.     }
  80.     public function setNumeroParcela($numeroParcela) {
  81.         $this->numeroParcela = $numeroParcela;
  82.     }
  83.     public function getNumeroParcela() {
  84.         return $this->numeroParcela;
  85.     }
  86.     public function setRecorrente($recorrente) {
  87.         $this->recorrente = $recorrente;
  88.     }
  89.     public function getRecorrente() {
  90.         return $this->recorrente;
  91.     }
  92.     public function setObservacoes($observacoes) {
  93.         $this->observacoes = $observacoes;
  94.     }
  95.     public function getObversacoes() {
  96.         return $this->observacoes;
  97.     }
  98.     public function setIdUsuario($idUsuario) {
  99.         $this->idUsuario = $idUsuario;
  100.     }
  101.     public function getIdUsuario() {
  102.         return $this->idUsuario;
  103.     }
  104.     public function setIdTipoReceita($idTipoReceita) {
  105.         $this->idTipoReceita = $idTipoReceita;
  106.     }
  107.     public function getIdTipoReceita() {
  108.         return $this->idTipoReceita;
  109.     }
  110.     public function setIdTipoRecebimento($idTipoRecebimento) {
  111.         $this->idTipoRecebimento = $idTipoRecebimento;
  112.     }
  113.     public function getIdTipoRecebimento() {
  114.         return $this->idTipoRecebimento;
  115.     }
  116.  
  117.     //METODOS
  118.     public function InserirReceita()
  119.     {
  120.         $proximo_id_receita = $this->ProximoIdReceita();
  121.         $sql         = "INSERT INTO receitas (id_receita, valor_receita, data_vencimento, recebido, data_recebimento, tipo_repeticao, parcelas, numero_parcela, recorrente, observacoes, id_usuario, id_tipo_receita, id_tipo_recebimento) VALUES ";
  122.         $insertQuery = array();
  123.         $insertData  = array();
  124.         $n = 0;
  125.         while ($n < $this->parcelas) {
  126.             $this->numeroParcela = $this->numeroParcela + 1;
  127.             $insertQuery[]  = "(:id_receita".$n.", :valor_receita".$n.", :data_vencimento".$n.", :recebido".$n.", :data_recebimento".$n.", :tipo_repeticao".$n.", :parcelas".$n.", :numero_parcela".$n.", :recorrente".$n.", :observacoes".$n.", :id_usuario".$n.", :id_tipo_receita".$n.", :id_tipo_recebimento".$n.")";
  128.             $insertData[":id_receita".$n]          = $proximo_id_receita;
  129.             $insertData[":valor_receita".$n]       = $this->valorReceita;
  130.             $insertData[":data_vencimento".$n]     = $this->dataVencimento;
  131.             $insertData[":recebido".$n]            = $this->recebido;
  132.             $insertData[":data_recebimento".$n]    = $this->dataRecebimento;
  133.             $insertData[":tipo_repeticao".$n]      = $this->tipoRepeticao;
  134.             $insertData[":parcelas".$n]            = $this->parcelas;
  135.             $insertData[":numero_parcela".$n]      = $this->numeroParcela;
  136.             $insertData[":recorrente".$n]          = $this->recorrente;
  137.             $insertData[":observacoes".$n]         = $this->observacoes;
  138.             $insertData[":id_usuario".$n]          = $this->idUsuario;
  139.             $insertData[":id_tipo_receita".$n]     = $this->idTipoReceita;
  140.             $insertData[":id_tipo_recebimento".$n] = $this->idTipoRecebimento;
  141.             $this->dataVencimento = date("Y-m-d",(strtotime("next month",strtotime(date($this->dataVencimento)))));
  142.             $n++;
  143.         }
  144.         $sql .= implode(", ", $insertQuery);
  145.         if (!empty($insertQuery)) {
  146.             try {
  147.                 $query = $this->con->conectar()->prepare($sql);
  148.                 if($query->execute($insertData)) {
  149.                     return "Receita cadastrada com sucesso!";
  150.                 } else {
  151.                     return "Erro ao tentar cadastrar a receita!".json_encode($insertData);
  152.                 }
  153.             } catch(PDOException $e) {
  154.                 return "Error: ".$e->getMessage();
  155.             }
  156.         }
  157.     }
  158.  
  159.     public function EditarReceita()
  160.     {
  161.         try {
  162.             if(!empty($this->recorrente)) {
  163.                 $n = 0;
  164.                 while ($n <= $this->parcelas) {
  165.                     $query = $this->con->conectar()->prepare("UPDATE receitas SET valor_receita = :valor_receita".$n.", data_vencimento = :data_vencimento".$n.", recebido = :recebido".$n.", data_recebimento = :data_recebimento".$n.", observacoes = :observacoes".$n.", id_tipo_receita = :id_tipo_receita".$n.", id_tipo_recebimento = :id_tipo_recebimento".$n." WHERE id_receita = :id_receita".$n." AND numero_parcela = :numero_parcela".$n."");
  166.                     $query->bindParam(":id_receita".$n,          $this->idReceita,         PDO::PARAM_INT);
  167.                     $query->bindParam(":valor_receita".$n,       $this->valorReceita,      PDO::PARAM_STR);
  168.                     $query->bindParam(":data_vencimento".$n,     $this->dataVencimento,    PDO::PARAM_STR);
  169.                     $query->bindParam(":recebido".$n,            $this->recebido,          PDO::PARAM_INT);
  170.                     $query->bindParam(":data_recebimento".$n,    $this->dataRecebimento,   PDO::PARAM_STR);
  171.                     $query->bindParam(":observacoes".$n,         $this->observacoes,       PDO::PARAM_STR);
  172.                     $query->bindParam(":id_tipo_receita".$n,     $this->idTipoReceita,     PDO::PARAM_INT);
  173.                     $query->bindParam(":id_tipo_recebimento".$n, $this->idTipoRecebimento, PDO::PARAM_INT);
  174.                     $query->bindParam(":numero_parcela".$n,      $this->numeroParcela,     PDO::PARAM_INT);
  175.                     $query->execute();
  176.                     $this->numeroParcela = $this->numeroParcela + 1;
  177.                     $this->dataVencimento = date("Y-m-d",(strtotime("next month",strtotime(date($this->dataVencimento)))));
  178.                     $n++;
  179.                 }
  180.             }
  181.             else {
  182.                     $query = $this->con->conectar()->prepare("UPDATE receitas SET valor_receita = :valor_receita, data_vencimento = :data_vencimento, recebido = :recebido, data_recebimento = :data_recebimento, observacoes = :observacoes, id_tipo_receita = :id_tipo_receita, id_tipo_recebimento = :id_tipo_recebimento WHERE id_receita = :id_receita AND numero_parcela = :numero_parcela");
  183.                     $query->bindParam(":id_receita",          $this->idReceita,         PDO::PARAM_INT);
  184.                     $query->bindParam(":valor_receita",       $this->valorReceita,      PDO::PARAM_STR);
  185.                     $query->bindParam(":data_vencimento",     $this->dataVencimento,    PDO::PARAM_STR);
  186.                     $query->bindParam(":recebido",            $this->recebido,          PDO::PARAM_INT);
  187.                     $query->bindParam(":data_recebimento",    $this->dataRecebimento,   PDO::PARAM_STR);
  188.                     $query->bindParam(":observacoes",         $this->observacoes,       PDO::PARAM_STR);
  189.                     $query->bindParam(":id_tipo_receita",     $this->idTipoReceita,     PDO::PARAM_INT);
  190.                     $query->bindParam(":id_tipo_recebimento", $this->idTipoRecebimento, PDO::PARAM_INT);
  191.                     $query->bindParam(":numero_parcela",      $this->numeroParcela,     PDO::PARAM_INT);
  192.                     $query->execute();
  193.             }
  194.             if($query) {
  195.                 return "Receita alterada com sucesso!";
  196.             } else {
  197.                 return "Erro ao tentar alterar a receita!";
  198.             }
  199.         } catch(PDOException $e) {
  200.             return "Error: ".$e->getMessage();
  201.         }
  202.     }
  203.  
  204.     public function ExcluirReceita()
  205.     {
  206.         $sql = "DELETE FROM receitas WHERE id_receita = :id_receita ";
  207.         $sql .= (!empty($this->recorrente)) ? "AND numero_parcela >= :numero_parcela" : "AND numero_parcela = :numero_parcela";
  208.         try {
  209.             $query = $this->con->conectar()->prepare($sql);
  210.             $query->bindParam(":id_receita",     $this->idReceita,     PDO::PARAM_INT);
  211.             $query->bindParam(":numero_parcela", $this->numeroParcela, PDO::PARAM_INT);
  212.             if($query->execute()) {
  213.                 return "Receita deletada com sucesso!";
  214.             } else {
  215.                 return "Erro ao tentar deletar a receita!";
  216.             }
  217.         } catch(PDOException $e) {
  218.             return "Error: ".$e->getMessage();
  219.         }
  220.     }
  221.  
  222.     public function ProximoIdReceita()
  223.     {
  224.         try {
  225.             $query = $this->con->conectar()->query("SELECT IFNULL(MAX(id_receita+1),1) AS proximo_id_receita FROM receitas");
  226.             $query->execute();
  227.             $retorno = array();
  228.             while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
  229.                 $retorno[] = $linha;
  230.             }
  231.             return $retorno;
  232.         } catch(PDOException $e) {
  233.             return "Error: ".$e->getMessage();
  234.         }
  235.     }
  236.  
  237.     public function ReceberReceita()
  238.     {
  239.         try {
  240.             $query = $this->con->conectar()->prepare("UPDATE receitas SET data_recebimento = :data_recebimento, recebido = 1 WHERE id_sequencial_receita = :id_sequencial_receita");
  241.             $query->bindParam(":data_recebimento",      $this->dataRecebimento,     PDO::PARAM_STR);
  242.             $query->bindParam(":id_sequencial_receita", $this->idSequencialReceita, PDO::PARAM_INT);
  243.             if($query->execute()) {
  244.                 return "Receita recebida com sucesso!".$this->dataRecebimento;
  245.             } else {
  246.                 return "Erro ao tentar receber a receita!";
  247.             }
  248.         } catch(PDOException $e) {
  249.             return "Error: ".$e->getMessage();
  250.         }
  251.     }
  252.  
  253.     public function ListarValorRecebido()
  254.     {
  255.         $sql  = "SELECT IFNULL(FORMAT(SUM(receitas_r),2,'de_DE'),'0,00') AS receitas_r, IFNULL(ROUND(((SUM(receitas_r) / receitas_total)*100),2),0) AS pct_r ";
  256.         $sql .= "FROM (SELECT SUM(rr.valor_receita) AS receitas_r, (SELECT SUM(r.valor_receita) ";
  257.         $sql .= "FROM receitas AS r WHERE DATE_FORMAT(r.data_vencimento,'%Y-%m') = DATE_FORMAT(rr.data_vencimento,'%Y-%m') AND r.id_usuario = rr.id_usuario) AS receitas_total ";
  258.         $sql .= "FROM receitas AS rr WHERE rr.recebido = 1 AND DATE_FORMAT(rr.data_vencimento,'%Y-%m') = :periodo AND rr.id_usuario = :id_usuario ";
  259.         $sql .= "GROUP BY rr.data_vencimento) AS receitas_recebidas";
  260.         try {
  261.             $query = $this->con->conectar()->prepare($sql);
  262.             $query->bindParam(":id_usuario", $this->idUsuario,      PDO::PARAM_INT);
  263.             $query->bindParam(":periodo",    $this->dataVencimento, PDO::PARAM_STR);
  264.             $query->execute();
  265.             $data = array();
  266.             while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  267.                 $data[] = $row;
  268.             }
  269.             return $data;
  270.         } catch(PDOException $e) {
  271.             return "Error: ".$e->getMessage();
  272.         }
  273.     }
  274.  
  275.     public function ListarValorNaoRecebido()
  276.     {
  277.         $sql  = "SELECT IFNULL(FORMAT(SUM(receitas_nr),2,'de_DE'),'0,00') AS receitas_nr, IFNULL(ROUND(((SUM(receitas_nr) / receitas_total)*100),2),0) AS pct_nr ";
  278.         $sql .= "FROM (SELECT SUM(rnr.valor_receita) AS receitas_nr, (SELECT SUM(r.valor_receita) ";
  279.         $sql .= "FROM receitas AS r WHERE DATE_FORMAT(r.data_vencimento,'%Y-%m') = DATE_FORMAT(rnr.data_vencimento,'%Y-%m') AND r.id_usuario = rnr.id_usuario) AS receitas_total ";
  280.         $sql .= "FROM receitas AS rnr WHERE rnr.recebido = 0 AND DATE_FORMAT(rnr.data_vencimento,'%Y-%m') = :periodo AND rnr.id_usuario = :id_usuario ";
  281.         $sql .= "GROUP BY rnr.data_vencimento) AS receitas_nao_recebidas";
  282.         try {
  283.             $query = $this->con->conectar()->prepare($sql);
  284.             $query->bindParam(":id_usuario", $this->idUsuario,      PDO::PARAM_INT);
  285.             $query->bindParam(":periodo",    $this->dataVencimento, PDO::PARAM_STR);
  286.             $query->execute();
  287.             $data = array();
  288.             while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  289.                 $data[] = $row;
  290.             }
  291.             return $data;
  292.         } catch(PDOException $e) {
  293.             return "Error: ".$e->getMessage();
  294.         }
  295.     }
  296.  
  297.     public function ListarReceitasNaoRecebidas()
  298.     {
  299.         $sql  = "SELECT t.tipo_receita, r.id_sequencial_receita, FORMAT(r.valor_receita,2,'de_DE') AS valor_receita, DATE_FORMAT(data_vencimento, '%d/%m/%Y') AS data_vencimento ";
  300.         $sql .= "FROM tipo_receita AS t INNER JOIN receitas AS r ON t.id_tipo_receita = r.id_tipo_receita ";
  301.         $sql .= "WHERE r.recebido = 0 AND r.id_usuario = :id_usuario GROUP BY r.id_sequencial_receita";
  302.         try {
  303.             $query = $this->con->conectar()->prepare($sql);
  304.             $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
  305.             $query->execute();
  306.             $data = array();
  307.             while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  308.                 $data[] = $row;
  309.             }
  310.             return $data;
  311.         } catch(PDOException $e) {
  312.             return "Error: ".$e->getMessage();
  313.         }
  314.     }
  315.  
  316.     public function DetalhesReceita()
  317.     {
  318.         try {
  319.             $query = $this->con->conectar()->prepare("SELECT * FROM receitas WHERE id_sequencial_receita = :id_sequencial_receita");
  320.             $query->bindParam(":id_sequencial_receita", $this->idSequencialReceita, PDO::PARAM_INT);
  321.             $query->execute();
  322.             return json_encode($query->fetch(PDO::FETCH_ASSOC));
  323.         } catch(PDOException $e) {
  324.             return "Error: ".$e->getMessage();
  325.         }
  326.     }
  327.  
  328.     public function ListarTiposReceita()
  329.     {
  330.         $sql  = "SELECT t.tipo_receita, FORMAT(SUM(r.valor_receita),2,'de_DE') AS valor_receita ";
  331.         $sql .= "FROM tipo_receita AS t INNER JOIN receitas AS r ON t.id_tipo_receita = r.id_tipo_receita ";
  332.         $sql .= "WHERE DATE_FORMAT(r.data_vencimento,'%Y-%m') = :periodo AND r.id_usuario = :id_usuario GROUP BY t.tipo_receita";
  333.         try {
  334.             $query = $this->con->conectar()->prepare($sql);
  335.             $query->bindParam(":id_usuario", $this->idUsuario,      PDO::PARAM_INT);
  336.             $query->bindParam(":periodo",    $this->dataVencimento, PDO::PARAM_STR);
  337.             $query->execute();
  338.             $data = array();
  339.             while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  340.                 $data[] = $row;
  341.             }
  342.             return $data;
  343.         } catch(PDOException $e) {
  344.             return "Error: ".$e->getMessage();
  345.         }
  346.     }
  347.  
  348.     public function ListarReceitasFiltro()
  349.     {
  350.         $sql  = "SELECT r.id_sequencial_receita, r.id_receita, FORMAT(r.valor_receita,2,'de_DE') AS valor_receita, DATE_FORMAT(r.data_vencimento, '%d/%m/%Y') AS data_vencimento, r.recebido, r.data_recebimento, r.tipo_repeticao, r.parcelas, r.numero_parcela, r.recorrente, r.observacoes, r.id_usuario, r.id_tipo_receita, r.id_tipo_recebimento, ";
  351.         $sql .= "tr.tipo_receita, re.tipo_recebimento FROM receitas AS r INNER JOIN tipo_receita AS tr ";
  352.         $sql .= "ON r.id_tipo_receita = tr.id_tipo_receita INNER JOIN tipo_recebimento AS re ";
  353.         $sql .= "ON r.id_tipo_recebimento = re.id_tipo_recebimento WHERE YEAR(r.data_vencimento) = YEAR(CURRENT_DATE()) ";
  354.         switch($this->dataVencimento) {
  355.            case "D":
  356.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(CURRENT_DATE()) AND DAY(r.data_vencimento) = DAY(CURRENT_DATE()) ";
  357.              break;
  358.            case "S":
  359.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(CURRENT_DATE()) AND WEEK(r.data_vencimento) = WEEK(CURRENT_DATE()) ";
  360.              break;
  361.            case "M":
  362.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(CURRENT_DATE()) ";
  363.              break;
  364.            case "M1":
  365.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH)) ";
  366.              break;
  367.            case "M3":
  368.              $sql .= "AND r.data_vencimento >= CURRENT_DATE() AND r.data_vencimento < CURRENT_DATE() + INTERVAL 90 DAY ";
  369.              break;
  370.            case "M6":
  371.              $sql .= "AND r.data_vencimento >= CURRENT_DATE() AND r.data_vencimento < CURRENT_DATE() + INTERVAL 120 DAY ";
  372.              break;
  373.            case "1M":
  374.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH) ";
  375.              break;
  376.            case "3M":
  377.              $sql .= "AND r.data_vencimento BETWEEN (CURRENT_DATE() - INTERVAL 90 DAY) AND CURRENT_DATE() ";
  378.              break;
  379.            case "6M":
  380.              $sql .= "AND r.data_vencimento BETWEEN (CURRENT_DATE() - INTERVAL 120 DAY) AND CURRENT_DATE() ";
  381.              break;
  382.            case "A":
  383.              $sql .= "";
  384.              break;
  385.            default:
  386.              $sql .= "AND MONTH(r.data_vencimento) = MONTH(CURRENT_DATE()) ";
  387.         }
  388.         $sql .= "AND r.id_usuario = :id_usuario ORDER BY r.id_receita DESC";
  389.         try {
  390.             $query = $this->con->conectar()->prepare($sql);
  391.             $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
  392.             $query->execute();
  393.             $retorno = array();
  394.             while ($linha = $query->fetch(PDO::FETCH_ASSOC)) {
  395.                 $retorno[] = $linha;
  396.             }
  397.             return $retorno;
  398.         } catch(PDOException $e) {
  399.             return "Error: ".$e->getMessage();
  400.         }
  401.     }
  402.  
  403.     public function ListarUltimasReceitas()
  404.     {
  405.         $sql  = "SELECT FORMAT(r.valor_receita,2,'de_DE') AS valor_receita, DATE_FORMAT(r.data_vencimento, '%d/%m/%Y') AS data_vencimento, tr.tipo_receita ";
  406.         $sql .= "FROM receitas AS r INNER JOIN tipo_receita AS tr ";
  407.         $sql .= "ON r.id_tipo_receita = tr.id_tipo_receita WHERE id_usuario = :id_usuario GROUP BY r.id_receita DESC LIMIT 5";
  408.         try {
  409.             $query = $this->con->conectar()->prepare($sql);
  410.             $query->bindParam(":id_usuario", $this->idUsuario, PDO::PARAM_INT);
  411.             $query->execute();
  412.             $data = array();
  413.             while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  414.                 $data[] = $row;
  415.             }
  416.             return $data;
  417.         } catch(PDOException $e) {
  418.             return "Error: ".$e->getMessage();
  419.         }
  420.     }
  421. }
  422. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement